Rutas
/
Julia
Julia
/
Ejercicios
/
Tablero de ajedrez
Tablero de ajedrez

Tablero de ajedrez

Ejercicio de aprendizaje

Introducción

Supón que quieres todos los números enteros no negativos hasta 1000. Sería ridículo tener que escribirlos en un array.

Para esto tenemos el tipo range:

julia> 0:1000
0:1000

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

Los rangos son muy comunes: no solo para ahorrarte escritura, sino también como tipos devueltos por las funciones.

Ten en cuenta que los rangos no son vectores. No son más que un conjunto de instrucciones para generar una secuencia (evaluación «perezosa», o un «iterador»).

Si necesitas un rango como vector, usa la función collect() para convertirlo:

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

Se puede especificar el tamaño del paso, en este caso 0,3:

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

Así que la sintaxis es start:stepsize:stop. Ambos límites son inclusivos, como se ve en el ejemplo con enteros. Si el tamaño del paso no divide exactamente stop - start, el último elemento evitará superar stop.

Rangos de letras

En los rangos también se pueden usar secuencias no numéricas. El ejemplo más sencillo son las 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)

El tipo Char se tratará con más detalle en otro concepto. Por ahora, considéralos simplemente como caracteres individuales entre comillas simples.

Funciones y operadores para rangos

Comprueba los límites de un rango con first() y last().

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

Más sobre la indexación de vectores

Los rangos de enteros y los vectores se pueden usar en la indexación de vectores:

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]

Instrucciones

Como aficionado al ajedrez, te gustaría escribir tu propia versión del juego. Sí, puede que ya haya un montón de implementaciones de ajedrez disponibles en internet, pero la tuya será única?

Pero antes de que puedas dejar volar tu imaginación, tienes que ocuparte de lo básico. Empecemos por generar el tablero.

Cada casilla del tablero de ajedrez se identifica por un par de letra y número. Las columnas verticales de casillas, llamadas columnas, se etiquetan de la A a la H. Las filas horizontales de casillas, llamadas filas, se numeran del 1 al 8.

1. Define el rango de filas

Implementa la función rank_range(). Debe devolver un rango de números enteros, del 1 al 8.

julia> rank_range()
# output omitted

2. Define el rango de columnas

Implementa la función file_range(). Debe devolver un rango de caracteres, desde la letra A mayúscula hasta la letra H mayúscula.

julia> file_range()
# output omitted

3. Transforma el rango de filas en un vector de filas

Implementa la función ranks(). Debe devolver un vector de números enteros, del 1 al 8. No escribas el vector a mano: genéralo a partir del rango que devuelve la función rank_range().

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

4. Transforma el rango de columnas en un vector de columnas

Implementa la función files. Debe devolver un vector de caracteres, de 'A' a 'H'. No escribas el vector a mano: genéralo a partir del rango que devuelve la función file_range().

julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Julia Exercism

¿Listo para empezar Tablero de ajedrez?

Regístrate en Exercism para aprender y dominar Julia con 35 conceptos128 ejercicios y mentoría humana real, todo gratis.