Trilhas
/
Julia
Julia
/
Exercícios
/
Tabuleiro de xadrez
Tabuleiro de xadrez

Tabuleiro de xadrez

Exercício de aprendizagem

Introdução

Suponha que você queira todos os inteiros não negativos até 1000. Seria um absurdo se você tivesse que digitar tudo isso em um array.

Para isso temos o tipo range:

julia> 0:1000
0:1000

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

Ranges são muito comuns: não só para você não precisar digitar tudo, mas também como tipos de retorno de funções.

Repare que ranges não são vetores. Eles são apenas um conjunto de instruções para gerar uma sequência (avaliação "preguiçosa", ou um "iterador").

Se você precisar de um range como vetor, use a função collect() para converter:

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

O tamanho do passo pode ser especificado, neste caso 0.3:

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

Então a sintaxe é start:stepsize:stop. Os dois limites são inclusivos, como no exemplo com inteiros. Se o tamanho do passo não dividir stop - start de forma exata, o último elemento não vai ultrapassar stop.

Ranges de letras

Sequências não numéricas também podem ser usadas em ranges. O exemplo mais simples envolve letras 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)

O tipo Char será abordado com mais detalhes em outro conceito. Por enquanto, basta tratá-los como caracteres únicos entre aspas simples.

Funções e operadores para ranges

Verifique os limites de um range com first() e last().

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

Mais sobre indexação de vetores

Ranges de inteiros e vetores podem ser usados na indexação de vetores:

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]

Instruções

Como entusiasta de xadrez, você gostaria de escrever sua própria versão do jogo. Sim, talvez já existam muitas implementações de xadrez disponíveis online, mas a sua será única!

Mas antes de soltar a imaginação, você precisa cuidar do básico. Vamos começar gerando o tabuleiro.

Cada casa do tabuleiro de xadrez é identificada por um par de letra e número. As colunas verticais de casas recebem as letras de A a H, e as fileiras horizontais de casas são numeradas de 1 a 8.

1. Defina o intervalo de fileiras

Implemente a função rank_range(). Ela deve retornar um intervalo de números inteiros, de 1 a 8.

julia> rank_range()
# output omitted

2. Defina o intervalo de colunas

Implemente a função file_range(). Ela deve retornar um intervalo de caracteres, da letra maiúscula A até a letra maiúscula H.

julia> file_range()
# output omitted

3. Transforme o intervalo de fileiras em um vetor de fileiras

Implemente a função ranks(). Ela deve retornar um vetor de números inteiros, de 1 a 8. Não escreva o vetor à mão, gere-o a partir do intervalo retornado pela função rank_range().

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

4. Transforme o intervalo de colunas em um vetor de colunas

Implemente a função files. Ela deve retornar um vetor de caracteres, de 'A' a 'H'. Não escreva o vetor à mão, gere-o a partir do intervalo retornado pela função file_range().

julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Editar via GitHub O link abre em uma nova janela ou aba
Julia Exercism

Tudo pronto para começar Tabuleiro de xadrez?

Crie sua conta no Exercism para aprender e dominar Julia com 35 conceitos128 exercícios e mentoria humana de verdade, tudo de graça.