Track
/
Julia
Julia
/
Esercizi
/
Scacchiera
Scacchiera

Scacchiera

Esercizio di apprendimento

Introduzione

Supponi di volere tutti i numeri interi non negativi fino a 1000. Sarebbe assurdo doverli digitare uno per uno in un array.

Per questo abbiamo il tipo range:

julia> 0:1000
0:1000

julia> typeof(0:1000)
UnitRange{Int64}

Gli intervalli sono molto comuni: non solo per risparmiarti di digitare, ma anche come tipi restituiti dalle funzioni.

Nota che gli intervalli non sono vettori. Sono solo un insieme di istruzioni per generare una sequenza (una valutazione «lazy», o un «iteratore»).

Se ti serve un intervallo sotto forma di vettore, usa la funzione collect() per convertirlo:

julia> collect(0:5)
6-element Vector{Int64}:
 0
 1
 2
 3
 4
 5

Si può specificare il passo, in questo caso 0.3:

julia>  collect(1.0:0.3:2.0)
4-element Vector{Float64}:
 1.0
 1.3
 1.6
 1.9

Quindi la sintassi è start:stepsize:stop. Entrambi i limiti sono inclusi, come si vede nell'esempio con i numeri interi. Se il passo non divide esattamente stop - start, l'ultimo elemento eviterà di superare stop.

Intervalli di lettere

Negli intervalli si possono usare anche sequenze non numeriche. L'esempio più semplice sono le lettere ASCII:

julia> 'a':'d'
'a':1:'d'

julia> typeof('a':'d')
StepRange{Char, Int64}

julia> collect('a':'d')
4-element Vector{Char}:
 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
 'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
 'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
 'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)

Il tipo Char sarà trattato più in dettaglio in un altro concetto. Per ora, trattali semplicemente come singoli caratteri tra virgolette singole.

Funzioni e operatori per gli intervalli

Controlla i limiti di un intervallo con first() e last().

 r = 1:10  # => 1:10
 first(r)  # => 1
 last(r)   # => 10

Ancora sull'indicizzazione dei vettori

Gli intervalli di numeri interi e i vettori si possono usare nell'indicizzazione dei vettori:

nums = collect(10.0:50.0)
nums[3:2:7]  # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]

Istruzioni

Da appassionato di scacchi, ti piacerebbe scrivere la tua versione del gioco. Sì, online ci sono già tante implementazioni di scacchi, ma la tua sarà unica!

Ma prima di dare libero sfogo alla fantasia, devi occuparti delle basi. Iniziamo generando la scacchiera.

Ogni casella della scacchiera è identificata da una coppia lettera-numero. Le colonne verticali di caselle, chiamate file, sono contrassegnate dalla A alla H. Le righe orizzontali di caselle, chiamate rank, sono numerate da 1 a 8.

1. Definisci l'intervallo dei rank

Implementa la funzione rank_range(). Deve restituire un intervallo di numeri interi, da 1 a 8.

julia> rank_range()
# output omitted

2. Definisci l'intervallo dei file

Implementa la funzione file_range(). Deve restituire un intervallo di caratteri, dalla lettera maiuscola A alla lettera maiuscola H.

julia> file_range()
# output omitted

3. Trasforma l'intervallo dei rank in un array di rank

Implementa la funzione ranks(). Deve restituire un array di numeri interi, da 1 a 8. Non scrivere l'array a mano: generalo dall'intervallo restituito dalla funzione rank_range().

julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]

4. Trasforma l'intervallo dei file in un array di file

Implementa la funzione files. Deve restituire un array di caratteri, da 'A' a 'H'. Non scrivere l'array a mano: generalo dall'intervallo restituito dalla funzione file_range().

julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Julia Exercism

Vuoi iniziare Scacchiera?

Iscriviti a Exercism per imparare e padroneggiare Julia con 35 concetti128 esercizi e il mentoring di persone reali, tutto gratis.