Introducción
Así es como se ve un tablero de ajedrez.
Puedes ver que a1es un cuadrado oscuro . Sin embargo, b1es un cuadrado ligero .
La tarea
El reto es, dado dark, lighto 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,darkybothtienen que introducirse comoStrings 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,darkhashes a 1,lighta 0 ybotha 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*<G8S8Bash + 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
printfcada simplemente formatos de coordenadas, uno por línea.La expresión sed construida elimina todas las
x9coordenadas 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:Ysi la entrada fuebothJsi la entrada fuelightY-Jsi la entrada fuedarkDeterminar si un cuadrado es ligero funciona de la siguiente manera:
18paraa8, 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,*_=sy 4cmpord(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==2con$s-1. Si $ s = 2 y -1, es 1, lo cual es verdadero y continuará$c=0puede ser$c, dará un montón de avisos, pero al menos para la oscuridad funciona bien$s-1no funciona, pero debería. Gracias por esta gran idea! Lo depuraré más tarde.$cvariable 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
$ay establece dos variables para si vamos a generar$darcos o$light cuadrados basados en la primera letra de la entrada.Luego, hacemos un bucle
a-hy utilizamos1-8el 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$qen 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
-inoperador.Editar: ahorró 13 bytes al eliminar
switchy 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,mapnuevamente -1C ++, 132 bytes
Toma entrada por línea de comando. Utiliza puntero / módulo vudú para la condición de impresión.
fuente
nbucle sea necesario. Creo que anidaba para buclesiyjrecortaría unos pocos bytes. El(i+j)%2enfoque es realmente inteligente. No había pensado en eso.(i//8+i%8)%2es lo mismo, por(i//8+i)%2lo que puede ganar algunos bytes si elimina la definición dej=n%8Java, 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í (
-dagregado solo por estética):Funciona así: la variable
$xse incrementa de 1 a 71, los números corresponden a las celdas como se muestra a continuación.Por lo tanto,
$x modulo 9produce el número de columna y$x / 9el número de fila, que convierto a una letra usandochr. El código$z<c|$z>k^$x&1rindetruepara inputboth($z<c) y en el caso delightodarksolo 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 9resulta0, 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.125en la expresión$x/9+69.9para 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>0porc==1yc<1parac==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']ino 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<8resultados 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)%2para 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