Introducción
Así es como se ve un tablero de ajedrez.
Puedes ver que a1
es un cuadrado oscuro . Sin embargo, b1
es un cuadrado ligero .
La tarea
El reto es, dado dark
, light
o both
, de salida de toda la oscuridad , la luz o todos los cuadrados con un separador (como un espacio en blanco o un salto de línea). El orden de todos los cuadrados no importa .
Casos de prueba
Input: dark
Output: a1 a3 a5 a7 b2 b4 b6 b8
c1 c3 c5 c7 d2 d4 d6 d8
e1 e3 e5 e7 f2 f4 f6 f8
g1 g3 g5 g7 h2 h4 h6 h8
Input: light
Output: a2 a4 a6 a8 b1 b3 b5 b7
c2 c4 c6 c8 d1 d3 d5 d7
e2 e4 e6 e8 f1 f3 f5 f7
g2 g4 g6 g8 h1 h3 h5 h7
Input: both
Output: a1 a2 a3 a4 a5 a6 a7 a8
b1 b2 b3 b4 b5 b6 b7 b8
c1 c2 c3 c4 c5 c6 c7 c8
d1 d2 d3 d4 d5 d6 d7 d8
e1 e2 e3 e4 e5 e6 e7 e8
f1 f2 f3 f4 f5 f6 f7 f8
g1 g2 g3 g4 g5 g6 g7 g8
h1 h2 h3 h4 h5 h6 h7 h8
Nota: He embellecido la salida pero esto no es necesario .
Este es el código golf , por lo que gana el envío con la menor cantidad de bytes
a2a4a6...
estaría bien?[[a2,a4,a6,a8],[...]...]
light
,dark
yboth
tienen que introducirse comoString
s o pueden ser representados a través de cualquier tipo de datos?Respuestas:
Pyth,
2221 bytes-1 byte por @ Sp3000
Debajo de la función
%Chz3
,dark
hashes a 1,light
a 0 yboth
a 2. Si tomamos la paridad de la suma de los ords de un cuadrado de ajedrez (es decir,a1
->[97, 33]
->(97 + 33)%2
=0
, los cuadrados oscuros van a 0 y los claros a 1 Esto nos permite filtrar por desigualdad.Pruébalo aquí .
fuente
fn%Chz3%sCMT2sM*<G8S8
Bash + GNU Utilities, 74
{a..h}{1..9}
es una expansión bash brace que produce todas las coordenadas para un tablero de 8x8, más una columna adicional9
. Esto es importante porque hace que la longitud de la fila sea impar, lo que permite el efecto tablero de damas.La
printf
cada simplemente formatos de coordenadas, uno por línea.La expresión sed construida elimina todas las
x9
coordenadas y luego imprime pares o impares o ambas líneas de entrada, de acuerdo con la entrada del script.fuente
JavaScript (SpiderMonkey 30+),
90858382 bytesDevuelve una cadena de cuadrados separados por comas. Versión compatible para 99 bytes:
Funciona enumerando los 64 nombres cuadrados, luego analizándolos en la base 19 para ver si son claros u oscuros módulo 2.
fuente
JavaScript (ES6), 82
87 98Función anónima que devuelve una cadena de cuadrados separados por espacios.
PRUEBA
fuente
Lote, 192 bytes
fuente
Pyth,
4839 bytesPruébalo aquí!
Todavía más largo que la otra solución Pyth, pero no creo que pueda vencer esto con mi algoritmo.
Explicación
Primero generamos una lista de todos los cuadrados en el tablero y se los asignamos
Y
. Luego filtramos esta lista para que solo queden cuadrados claros y asignamos esta listaJ
. Después de eso evaluamos la entrada e imprimimos:Y
si la entrada fueboth
J
si la entrada fuelight
Y-J
si la entrada fuedark
Determinar si un cuadrado es ligero funciona de la siguiente manera:
18
paraa8
, etc.x%2 == y%2
)fuente
Python 2,
737170 bytesTodavía estoy un poco confundido si las funciones están bien para la pregunta, ya que el desafío menciona un "separador", pero dado que hay muchas otras presentaciones de funciones, he hecho lo mismo.
Similar a la respuesta de Erwan, pero con
muchomás Python 2-ness.(-2 bytes gracias a @xnor)
fuente
s=="dark"
y,s[0]=="d"
pero para mi defensa en mi primer intento, usés,*_=s
y 4cmp
ord(s[_])&_
oord(s[_])/_
.%
:) ¡Gracias!PHP,
132126120108106 bytesRecorre los cols (0-7) y las filas (1-8) y comprueba si la suma de ambos es impar / par.
Probado con PHP 5.6.4, ejecútelo:
php -d error_reporting=30709 -r '<CODE>' {dark|light|both}
fuente
$s==2
con$s-1
. Si $ s = 2 y -1, es 1, lo cual es verdadero y continuará$c=0
puede ser$c
, dará un montón de avisos, pero al menos para la oscuridad funciona bien$s-1
no funciona, pero debería. Gracias por esta gran idea! Lo depuraré más tarde.$c
variable indefinida ? Eso suena un poco extraño e inválido. ¿O no?Vitsy ,
9082 bytesExplicación de la primera línea:
Explicación de la segunda línea:
Habrá nuevas líneas finales adicionales para 'dark' y 'both'. Requiere que solo se ingresen 'oscuro', 'ambos' o 'claro'.
Pruébalo en línea!
fuente
PowerShell v3 +,
142129 bytesToma entrada
$a
y establece dos variables para si vamos a generar$d
arcos o$l
ight cuadrados basados en la primera letra de la entrada.Luego, hacemos un bucle
a-h
y utilizamos1-8
el mismo truco que en Determinar el color de un cuadrado de ajedrez para analizar si es un cuadrado claro u oscuro (estableciendo la variable auxiliar$q
en la primera prueba) y agregar ese cuadrado a la tubería si corresponde. Después de la ejecución, los elementos en la tubería salen uno por línea.Requiere v3 o más reciente para el
-in
operador.Editar: ahorró 13 bytes al eliminar
switch
y cambiar el orden de prueba de igualdadfuente
Jolf, 48 bytes
Todo es griego para mí ¯ \ _ (ツ) _ / ¯ Esta es una recopilación de la excelente respuesta de edc65.
fuente
Perl, 69 + 3 = 72 bytes
Para ser ejecutado
perl -p
, para lo cual he agregado 3 bytes.Versión con menos golf (ligeramente diferente, ya que el operador de babycart dificulta mucho el formateo):
La versión de golf utiliza
"@{[]}"
; la versión comentada se usa@a=...; "@"
para que el código comentado siga siendo ejecutable.fuente
map$l.$_,1..8
-1grep$i=!$i||$b,map
nuevamente -1C ++, 132 bytes
Toma entrada por línea de comando. Utiliza puntero / módulo vudú para la condición de impresión.
fuente
n
bucle sea necesario. Creo que anidaba para buclesi
yj
recortaría unos pocos bytes. El(i+j)%2
enfoque es realmente inteligente. No había pensado en eso.(i//8+i%8)%2
es lo mismo, por(i//8+i)%2
lo que puede ganar algunos bytes si elimina la definición dej=n%8
Java, 143
Oye, no es la respuesta más larga :)
La entrada se toma como un argumento de línea de comandos.
fuente
PHP,
998279767473 bytesUtiliza la codificación ISO 8859-1.
Ejecutar así (
-d
agregado solo por estética):Funciona así: la variable
$x
se incrementa de 1 a 71, los números corresponden a las celdas como se muestra a continuación.Por lo tanto,
$x modulo 9
produce el número de columna y$x / 9
el número de fila, que convierto a una letra usandochr
. El código$z<c|$z>k^$x&1
rindetrue
para inputboth
($z<c
) y en el caso delight
odark
solo para las celdas pares o impares respectivamente ($z>k ^ $x&1
). El resultado de esta expresión determina si las coordenadas de la celda se imprimirán o no. Finalmente, si$x modulo 9
resulta0
, omito esa celda no existente.1817 bytes (solucionó un error) al tener solo 1 bucle, convirtiendo el número a un carácter en lugar de al revésxor
.125
en la expresión$x/9+69.9
para obtener el número de fila correcto antes de convertir a un carácter~ß
para producir un espaciofuente
JavaScript ES6,
187160159 bytesProbablemente me estoy perdiendo algo dolorosamente obvio.Oh bien. No tener que aplanar la matriz ayuda.Devuelve una matriz 2D.
Pruébalo aquí:
Mostrar fragmento de código
fuente
Ruby, 85
Creo que hay formas más cortas de esto, pero este es un lindo uso de
.upto
.fuente
R,
12994 bytesSabía que podía generar mejor el tablero :). Esencialmente, esto crea una placa invertida, filtrando referencias de cuadrícula donde la sombra no coincide con la entrada. La salida está separada por espacios.
Sin golf
Prueba
fuente
Oracle SQL 11.2,
192180 bytesSin golf
La vista v genera las coordenadas de cada cuadrado. Si la suma de las coordenadas es par, entonces el cuadrado es negro, de lo contrario es blanco.
fuente
Rust,
263259244 BytesForma expandida:
fuente
MATL , 31 bytes
Pruébalo en línea!
fuente
CJam, 29
Solo una solución rápida y sucia: p
Pruébelo en línea
Explicación:
fuente
Haskell,
1331161051009891 bytesEste es mi primer intento de jugar al golf Haskell.
¡Con la ayuda de Michael Klein, logramos obtener menos de 100 caracteres!
fuente
c>0
porc==1
yc<1
parac==0
? Guarda dos bytes.f r=[[[a,b]|a<-['a'..'h'],b<-['1'..'8']]!!i|i<-[0..63],even i||r<"l",odd i||r!!0/='d']
i
no nos dan rayas diagonales. Algunos resuelven esto coni+i`div`8
(me gustax+y
). Otros comienzan con['1'..'9']
y[0..71]
y luego retienen solo losi`mod`9<8
resultados más tarde, para 96 bytes. Sin embargo, este híbrido de nuestros dos enfoques funciona bien en 91 bytes:l=[0..7];f r=[["abcdefgh"!!x,"12345678"!!y]|x<-l,y<-l,odd(x+y)||r<"l",even(x+y)||r!!0/='d']
Mathematica 133 bytes
Método 1 : 108 bytes. Esto construye el tablero como una tabla, con etiquetas en cada celda, y devuelve diagonales o bandas claras u oscuras según sea necesario.
Método 2 : 133 bytes. Crea una matriz y selecciona de acuerdo con la naturaleza par-impar de la suma del número de fila + número de columna de cada celda.
fuente
JS, 197 bytes
fuente
Python (3,5),
1061009692 bytesusa el truco de MegaTom
(i+j)%2
para ganar 6 bytesPruébalo en repl.it
Resultados
Versión previa
fuente
C ++, 119 bytes
Basado en el truco de MegaTom.
fuente
C (gcc) , 112 bytes
Pruébalo en línea!
Si a == 1, entonces un cuadrado siempre será negro si la "rareza" de la fila y la columna es la misma, es decir, ambas son impares o ambas son pares. Lo contrario es cierto para los cuadrados blancos, donde la fila y la columna siempre diferirán en rareza.
Después de eso, es solo una cuestión de combinar bucles de fila y columna, así como consultar una tabla de precedencia de operadores hasta que se haya alcanzado un nivel suficiente de incomprensibilidad.
fuente