Salida de todos los cuadrados blancos o negros de un tablero de ajedrez

29

Introducción

Así es como se ve un tablero de ajedrez.

ingrese la descripción de la imagen aquí

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 , por lo que gana el envío con la menor cantidad de bytes

Adnan
fuente
Entonces, ¿algo así a2a4a6...estaría bien?
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Tiene que contener un separador, como un espacio en blanco o una nueva línea, por lo que no es válido.
Adnan
¿Podemos generar una matriz 2D sin procesar? Es decir[[a2,a4,a6,a8],[...]...]
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Sí, eso está permitido
Adnan
Do light, darky bothtienen que introducirse como Strings o pueden ser representados a través de cualquier tipo de datos?
WKS

Respuestas:

15

Pyth, 22 21 bytes

-1 byte por @ Sp3000

fn%Chz3%sCMT2sM*<G8S8

Debajo de la función %Chz3, darkhashes a 1, lighta 0 y botha 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.

fn%Chz3%sCMT2sM*<G8S8      implicit: z=input
               *           Cartesian product of
                <G8          first 8 letters in G (alphabet)
                   S8        with [1,...,8] implicitly stringified
             sM*<G8S8      ['a1','a2,...,'a8','b1'...'h8']
f          T               Filter that by gives truthy result to lambda T:
        sCMT                   The sum of the ords of the chars in T,
       %    2                  modulo 2
 n                            does not equal
   Chz                          ord of the first char in z,
  %   3                         modulo 3
                            Implicitly print the list.

Pruébalo aquí .

lirtosiast
fuente
21:fn%Chz3%sCMT2sM*<G8S8
Sp3000
@ Sp3000 Gracias! Sabiendo que estaba usando 6 bytes para que se ajustara, debería haber probado diferentes hashes.
lirtosiast
13

Bash + GNU Utilities, 74

printf %s\\n {a..h}{1..9}|sed -n "`sed '/[db]/a1~2p
/t/a2~2p
c/9/d'<<<$1`"

{a..h}{1..9}es una expansión bash brace que produce todas las coordenadas para un tablero de 8x8, más una columna adicional 9. 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.

Trauma digital
fuente
11

JavaScript (SpiderMonkey 30+), 90 85 83 82 bytes

x=>[for(d of"12345678")for(c of"abcdefgh")if(x>'l'^parseInt(c+=d,19)%2|x<'d')c]+''

Devuelve una cadena de cuadrados separados por comas. Versión compatible para 99 bytes:

x=>([..."12345678"].map(d=>[..."abcdefgh"].map(c=>c+d).filter(s=>x>'l'^parseInt(s,19)%2|x<'d')))+''

Funciona enumerando los 64 nombres cuadrados, luego analizándolos en la base 19 para ver si son claros u oscuros módulo 2.

Neil
fuente
Bueno. Esto es ES7
edc65
@ edc65 Ah, no podía recordar. Supongo que mi segunda versión es "solo" ES6.
Neil
Ahora ES6 vence a ES7
edc65
@ edc65 que estabas diciendo?
Neil
44
@ edc65 ¿No creo que podamos aceptar un sorteo?
Neil
10

JavaScript (ES6), 82 87 98

Función anónima que devuelve una cadena de cuadrados separados por espacios.

i=>eval("for(o='',v=190;v<322;)v++%19<8&&i<'d'|v&1^i>'l'?o+=v.toString(19)+' ':o")

PRUEBA

f=i=>eval("for(o='',v=190;v<322;)v++%19<8&&i<'d'|v&1^i>'l'?o+=v.toString(19)+' ':o")

// less golfed

q=i=>{
  // loop over the range of number a0 (base 19) to h8 (base 19)
  for(o='',v=190;v<322;) 
  {
    if (v++ %19 < 8) // increment and execute the line below only if second digit in 1..8
      if (i<'d'|v&1^i>'l') // even == light, odd == dark, take both if input is 'both'
        o+=v.toString(19)+' '
  }
  return o
}

document.write('<hr>Both<br>'+f('both'))
document.write('<hr>Light<br>'+f('light'))
document.write('<hr>Dark<br>'+f('dark'))

edc65
fuente
1
Wow ... eso es una locura! Me pregunto si es posible acortar más con ES6 ...
ETHproductions
@ETHproductions sí lo es! Tengo un 86 listo, pero todavía estoy tratando de hacer algo mejor (mi objetivo en movimiento es Neil con 85 ... no 83)
edc65
7

Lote, 192 bytes

@set s=a1 a3 a5 a7
@set t=b2 b4 b6 b8
@if not %1==light call:b
@set s=a2 a4 a6 a8
@set t=b1 b3 b5 b7
@if %1==dark exit/b
:b
@echo %s% %s:a=c% %s:a=e% %s:a=g% %t% %t:b=d% %t:b=f% %t:b=h%
Neil
fuente
4

Pyth, 48 39 bytes

K*<G8S8Jfq%xGhT2%seT2K?qhz\bK?qhz\lJ-KJ

Prué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 lista J. Después de eso evaluamos la entrada e imprimimos:

  • Y si la entrada fue both
  • J si la entrada fue light
  • Y-J si la entrada fue dark

Determinar si un cuadrado es ligero funciona de la siguiente manera:

  • Asigne el carácter a un número del 1-8 (a-> 1, b-> 2), resultados 18para a8, etc.
  • compruebe si ambos números son pares o impares ( x%2 == y%2)
  • Si lo son, el cuadrado es claro, de lo contrario es oscuro

K*<G8S8Jfq%xGhT2%seT2K?qhz\bK?qhz\lJ-KJ  # z=input

 *                                         # Cartesian product of
  <G8                                      # first 8 letters of the alphabet (a-h)
     S8                                    # 1-indexed range (1-8)
K                                          # K holds now all squares
       f             K                     # Filter K 
        q                                  # is equal
         %xGhT2                            # map [a-h] to a number [1-8] and take it modulo 2
               %seT2                       # Take modulo 2 from the row number
                      ?qhz\bK              # If input starts with 'b' print K
                             ?qhz\lJ       # If it starts with 'l' print J
                                    -KJ    # Otherwise print the difference of those 2
Denker
fuente
Oh cielos que es más corto que el mío por asomo.
Addison Crump
4

Python 2, 73 71 70 bytes

lambda s:[chr(x/8+97)+`x%8+1`for x in range(64)if x+x/8&1^ord(s[0])%3]

Todaví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 mucho más Python 2-ness.

(-2 bytes gracias a @xnor)

Sp3000
fuente
jaja, ni siquiera pruebo entre s=="dark"y, s[0]=="d"pero para mi defensa en mi primer intento, usé s,*_=sy 4cmp
Erwan
1
Siento que debería haber algo más corto como ord(s[_])&_o ord(s[_])/_.
xnor
@xnor De hecho, lo hay con %:) ¡Gracias!
Sp3000
4

PHP, 132 126 120 108 106 bytes

for($s=strtr($argv[1],bdl,210);$c<8;$c++)for($r=0;$r<8;)if((++$r+$c)%2==$s||$s>1)echo"abcdefgh"[$c]."$r ";

Recorre 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}

abejas asesinas19
fuente
1
Bienvenido a PPCG! Esta es una buena respuesta, pero obtendrá más votos si agrega una explicación.
lirtosiast
Creo que puedes reemplazarlo $s==2con $s-1. Si $ s = 2 y -1, es 1, lo cual es verdadero y continuará
Martijn
Y creo que $c=0puede ser $c, dará un montón de avisos, pero al menos para la oscuridad funciona bien
Martijn
Gracias Martijn! También olvidé quitar las llaves, -6 bytes por ahora. Y no sé por qué, pero $s-1no funciona, pero debería. Gracias por esta gran idea! Lo depuraré más tarde.
killerbees19
Soy nuevo en este sitio, pero ¿hay mensajes de error debido a una $cvariable indefinida ? Eso suena un poco extraño e inválido. ¿O no?
killerbees19
3

Vitsy , 90 82 bytes

'`'8\[1+8\:]Yy1-\?8\['1'v8\[vD1+vr?]vX]i'h'-)[88*\[Z?aO]]i'r'-)[?1m]1m
84*\[Z??aO]

Explicación de la primera línea:

'`'8\[1+8\:]Yy1-\?8\['1'v8\[vD1+vr?]vX]i'h'-)[88*\[Z?aO]]i'r'-)[?1m]i'g'-)[1m]
'`'                     Push ` to the stack. (this is 1 less than a in ASCII)
   8\[     ]            Do the stuff in brackets 8 times.
      1+                Add one on every recursion (this gets a, b, c, d...)
        8\:             Clone the stack 8 times. (This gets 8 of each a, b, c...)
Y                       Remove the current stack.
 y1-\?                  Go one stack to the left (I really need to builtin this)
8\[                 ]   Do the stuff in brackets 8 times.
   '1'                  Push character literal 1 to the stack.
      v                 Save it as a temporary variable.
       8\[       ]      Do the stuff in brackets 8 times.
          v             Push the temporary variable to the stack.
           D            Duplicate the top item of the stack.
            1+          Add one to it (this gives us 1, 2, 3, 4...)
              v         Capture the top item of the stack as a temporary variable.
               r        Reverse the stack.
                ?       Go a stack to the right.
                  vX    Clear the temporary variable slot.
i'h')[          ]       If the last character of the input is 'h', do the stuff in brackets
      88*\[    ]        Do the stuff in brackets 64 times.
           Z            Output everything in the stack as a character.
            ?           Rotate right a stack.
             aO         Output a newline.
i'r')[?1m]              If the penultimate character of the input is 'r', rotate over a 
                        stack, then execute the first index of lines of code.
1m                      Execute the first index of lines of code.

Explicación de la segunda línea:

84*\[Z??aO]
84*\[     ]   Do the stuff in brackets 32 times.
     Z        Output everything in the stack as a char.
      ??      Rotate two stacks over.
        aO    Output a newline.

Habrá nuevas líneas finales adicionales para 'dark' y 'both'. Requiere que solo se ingresen 'oscuro', 'ambos' o 'claro'.

Pruébalo en línea!

Addison Crump
fuente
3

PowerShell v3 +, 142 129 bytes

param($a)$d=$a[0]-in('d','b');$l=$a[0]-in('l','b')
97..104|%{$i=[char]$_;1..8|%{if((($q=($_+$i)%2)-eq$l)-or($q+1-eq$d)){"$i$_"}}}

Toma 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 utilizamos 1-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 igualdad

AdmBorkBork
fuente
3

Jolf, 48 bytes

Ζ-ώ~1tΜ fΜZAQ8ΨΖ+ζ|<%ζγwώt8ώ6d|<i'd!x%H2>i'ldbHγ

Todo es griego para mí ¯ \ _ (ツ) _ / ¯ Esta es una recopilación de la excelente respuesta de edc65.

Ζ-ώ~1t
Ζ        set ζ to 
  ώ~1     100 * 2
 -   t    minus 10 (=190)

ΜZAQ8ΨΖ+ζ|<%ζγwώt8+2t
 ZAQ8                 A zero array of length Q8 (8*8 = 64)
Μ    Ψ                map that
      Ζ+ζ             ζ += 
           %ζγwώt       ζ % (γ = 19)
          <      8      < 8
         |        ώ6  || 12

Μ f■above thing■d|<i'd!x%H2>i'ldbHγ
 _f■above thing■d                    filter the above thing
                 |<i'd!x%H2>i'l      removing all the bad stuff (i<'d'|v%2^i>'l')
Μ                              dbHγ  map each character to base 19
Conor O'Brien
fuente
3

Perl, 69 + 3 = 72 bytes

$b=/b/;$i=/l/;$_="@{[grep{$i=!$i||$b}map{$l=$_;map{$l.$_}1..8}a..h]}"

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):

$b=/b/;                       # flag for input containing b
$i=/l/;                       # start $i as true if input contains 'l'

@a = grep {
    $i = !$i||$b                # alternate unless $b is true
} map {
    $l = $_;                    # save letter
    map {
        $l.$_                   # join letter and number
    } 1..8                      # generate number sequence
} a..h;                         # generate letter sequence

# golfed version uses babycart operator around array expr to save one byte
$_ = "@a"                       # write array, separated

La versión de golf utiliza "@{[]}"; la versión comentada se usa @a=...; "@"para que el código comentado siga siendo ejecutable.

David Morris
fuente
map$l.$_,1..8-1
choroba
y el mismo truco para grep: grep$i=!$i||$b,mapnuevamente -1
choroba
3

C ++, 132 bytes

Toma entrada por línea de comando. Utiliza puntero / módulo vudú para la condición de impresión.

#include<stdio.h>
int main(int i,char**v){for(int n=0;n<64;n++)if((n+(i=n/8))%2-*v[1]%3){putchar(i+97);putchar(n%8+49);putchar(32);}}
MegaTom
fuente
No creo que el nbucle sea necesario. Creo que anidaba para bucles iy jrecortaría unos pocos bytes. El (i+j)%2enfoque es realmente inteligente. No había pensado en eso.
WKS
Acabo de notar que (i//8+i%8)%2es lo mismo, por (i//8+i)%2lo que puede ganar algunos bytes si elimina la definición dej=n%8
Erwan
3

Java, 143

class H{public static void main(String[]a){for(char
c=96;++c<'i';)for(int
i=0;++i<9;)if((i+c)%2!=a[0].charAt(0)%3)System.out.println(c+""+i);}}

Oye, no es la respuesta más larga :)

La entrada se toma como un argumento de línea de comandos.

aditsu
fuente
3

PHP, 99 82 79 76 74 73 bytes

Utiliza la codificación ISO 8859-1.

for($z=$argv[1];++$x<72;)$x%9&&$z<c|$z>k^$x&1&&print~ß.chr($x/9+97).$x%9;

Ejecutar así ( -dagregado solo por estética):

php -d error_reporting=30709 -r 'for($z=$argv[1];++$x<72;)$x%9&&$z<c|$z>k^$x&1&&print~ß.chr($x/9+97).$x%9; echo"\n";' dark

Funciona así: la variable $xse incrementa de 1 a 71, los números corresponden a las celdas como se muestra a continuación.

r\c 1  2  3  4  5  6  7  8  [invalid column]
A   1  2  3  4  5  6  7  8  9
B  10 11 12 13 14 15 16 17 18
C  19 20 21 22 23 24 25 26 27
D  28 29 30 31 32 33 34 35 36
E  37 38 39 40 41 42 43 44 45
F  46 47 48 49 50 51 52 53 54
G  55 56 57 58 59 60 61 62 63
H  64 65 66 67 68 69 70 71 72

Por lo tanto, $x modulo 9produce el número de columna y $x / 9el número de fila, que convierto a una letra usando chr. El código $z<c|$z>k^$x&1rinde truepara input both( $z<c) y en el caso de lighto darksolo 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 9resulta 0, omito esa celda no existente.

  • Ahorró 18 17 bytes (solucionó un error) al tener solo 1 bucle, convirtiendo el número a un carácter en lugar de al revés
  • Ahorró 3 bytes combinando la condición de oscuridad y luz con un xor
  • Se guardaron 3 bytes al compararlos con la entrada completa en lugar del primer carácter
  • Se guardaron 2 bytes porque ya no es necesario restar .125en la expresión $x/9+69.9para obtener el número de fila correcto antes de convertir a un carácter
  • Se guardó un byte al usar para producir un espacio
aross
fuente
2

JavaScript ES6, 187 160 159 bytes

Probablemente me estoy perdiendo algo dolorosamente obvio. Oh bien. No tener que aplanar la matriz ayuda.

l=s=>(E=[2,4,6,8],O=[1,3,5,7],h=(z=s[0]=="d")?O:E,d=z?E:O,[...h.map(t=>[..."aceg"].map(e=>e+t)),...(d.map(t=>[..."bdfh"].map(e=>e+t))),...(s[0]=="b"?l`d`:[])])

Devuelve una matriz 2D.


Pruébalo aquí:

Conor O'Brien
fuente
2

Ruby, 85

Creo que hay formas más cortas de esto, pero este es un lindo uso de .upto.

gets;'a1'.upto('h8'){|e|puts e if e[/[1-8]/]&&(~/b/||((e.ord%2!=e[1].ord%2)^! ~/l/))}
No es que Charles
fuente
2

R, 129 94 bytes

Sabí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.

a=which(array(c('light','dark'),c(9,9))[-9,-9]!=scan(,''),T);cat(paste0(letters[a[,1]],a[,2]))

Sin golf

a=which(                           # Get the indexes of
  array(c('light','dark'),c(9,9))  # an array of light dark
    [-9,-9]                        # except for the ninth row and column
      !=scan(,'')                  # where the value doesn't equal the input
    ,T                             # return array index not vector
  );
cat(paste0(letters[a[,1]],a[,2]))  # using letters for col

Prueba

> a=which(array(c('light','dark'),c(9,9))[-9,-9]!=scan(,''),T);cat(paste0(letters[a[,1]],a[,2]))
1: dark
2: 
Read 1 item
a1 c1 e1 g1 b2 d2 f2 h2 a3 c3 e3 g3 b4 d4 f4 h4 a5 c5 e5 g5 b6 d6 f6 h6 a7 c7 e7 g7 b8 d8 f8 h8
> a=which(array(c('light','dark'),c(9,9))[-9,-9]!=scan(,''),T);cat(paste0(letters[a[,1]],a[,2]))
1: light
2: 
Read 1 item
b1 d1 f1 h1 a2 c2 e2 g2 b3 d3 f3 h3 a4 c4 e4 g4 b5 d5 f5 h5 a6 c6 e6 g6 b7 d7 f7 h7 a8 c8 e8 g8
> a=which(array(c('light','dark'),c(9,9))[-9,-9]!=scan(,''),T);cat(paste0(letters[a[,1]],a[,2]))
1: both
2: 
Read 1 item
a1 b1 c1 d1 e1 f1 g1 h1 a2 b2 c2 d2 e2 f2 g2 h2 a3 b3 c3 d3 e3 f3 g3 h3 a4 b4 c4 d4 e4 f4 g4 h4 a5 b5 c5 d5 e5 f5 g5 h5 a6 b6 c6 d6 e6 f6 g6 h6 a7 b7 c7 d7 e7 f7 g7 h7 a8 b8 c8 d8 e8 f8 g8 h8
>
MickyT
fuente
2

Oracle SQL 11.2, 192 180 bytes

SELECT CHR(64+x),DECODE(y,0,8,y)FROM(SELECT CEIL(LEVEL/8)x,MOD(LEVEL,8)y FROM DUAL CONNECT BY LEVEL<=64)WHERE(:1='dark'AND MOD(x+y,2)=0)OR(:1='light'AND MOD(x+y,2)=1)OR(:1='both');

Sin golf

WITH v AS
(
  SELECT CEIL(LEVEL/8)x, DECODE(MOD(LEVEL,8),0,8,MOD(LEVEL,8))y  
  FROM DUAL CONNECT BY LEVEL<=64
)
SELECT CHR(64+x),y
FROM   v
WHERE  (:1='dark' AND MOD(x+y,2)=0)OR(:1='light' AND MOD(x+y,2)=1)OR(:1='both');

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.

Jeto
fuente
2

Rust, 263 259 244 Bytes

use std::char;use std::env;fn main(){let n=env::args().nth(1).unwrap();for i in 0..8{for j in 0..8{if n=="both"||(n=="dark"&&(i+j)%2==0)||(n== "light"&&(i+j)%2!=0){println!("{}{}",char::from_u32(i+97).unwrap(),char::from_u32(j+49).unwrap())}}}}

Forma expandida:

fn main() {
    let input = env::args().nth(1).unwrap();
    for i in 0..8{
            for j in 0..8{
                if input == "both"
                || (input == "dark" && (i+j)%2==0)
                || (input == "light" && (i+j)%2!=0){
                    println!("{}{}",char::from_u32(i+97).unwrap(),char::from_u32(j+49).unwrap());
            }
        }
    }
}
WKS
fuente
1
En lugar de codificar su entrada, ¿no es posible leerla desde el terminal o la línea de comando o como un parámetro de función?
Neil
2

MATL , 31 bytes

1)t3\8:t!++w4\~?H\]2#f2Y2!w)wVh

Pruébalo en línea!

Luis Mendo
fuente
Este no parece dar los cuadrados correctos. "oscuro" es dar x1, x3, x5, x7 por cada letra x, pero eso corresponde a 4 columnas, no a los cuadrados negros.
Estimador
@Esteemator Lo siento, mi error. Corregido
Luis Mendo
2

CJam, 29

qci3%:X;8Ym*{~+2%X-},"a1 "f.+

Solo una solución rápida y sucia: p
Pruébelo en línea

Explicación:

q           read the input
ci          convert to (first) character then to integer
3%          modulo 3; results for d(ark), l(ight) and b(oth) are 1, 0, 2
:X;         store in X and pop
8Ym*        generate all pairs (Y=2) of numbers from 0 to 7
{…},        filter using the condition block
  ~         dump the current pair on the stack
  +2%       calculate the sum modulo 2
  X-        subtract X; if the result is not 0, the pair is kept
"a1 "f.+    vectorized-add "a1 " to each remaining pair
             this means the character 'a' is added to the first number,
             the character '1' is added to the second number,
             and then the space character is appended
            the contents of the stack are automatically printed at the end
aditsu
fuente
2

Haskell, 133 116 105 100 98 91 bytes

f r=[["abcdefgh"!!x,"12345678"!!y]|x<-l,y<-l,odd(x+y)||r<"l",even(x+y)||r!!0/='d']
l=[0..7]

Este es mi primer intento de jugar al golf Haskell.

¡Con la ayuda de Michael Klein, logramos obtener menos de 100 caracteres!

joeytwiddle
fuente
1
¿Qué tal c>0por c==1y c<1para c==0? Guarda dos bytes.
Michael Klein
¡Fantástico, lo tenemos por debajo de 100! Gracias Michael.
joeytwiddle
1
De nada. Me absorbió un poco y lo reduje a 86 bytes refactorizando un poco:f r=[[[a,b]|a<-['a'..'h'],b<-['1'..'8']]!!i|i<-[0..63],even i||r<"l",odd i||r!!0/='d']
Michael Klein
1
Eso es muy agradable, un enfoque repensado. Aunque lamento decir que extraño e incluso ino nos dan rayas diagonales. Algunos resuelven esto con i+i`div`8(me gusta x+y). Otros comienzan con ['1'..'9']y [0..71]y luego retienen solo los i`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']
joeytwiddle
Ah, bueno, eso sigue siendo un poco mejor
Michael Klein
1

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.

Table[Table[{i,j},{i,{h,g,f,e,d,c,b,a}},{j,Range@8}]~Diagonal~k,{k,If[#=="light",-6,-7],7,If[#=="both",1,2]}]&

%["light"]   (*where % repeats the preceding line *)

{{{b, 1}, {a, 2}}, {{d, 1}, {c, 2}, {b, 3}, {a, 4}}, {{f, 1}, {e , 2}, {d, 3}, {c, 4}, {b, 5}, {a, 6}}, {{h, 1}, {g, 2}, {f, 3}, {e , 4}, {d, 5}, {c, 6}, {b, 7}, {a, 8}}, {{h, 3}, {g, 4}, {f, 5}, {e , 6}, {d, 7}, {c, 8}}, {{h, 5}, {g, 6}, {f, 7}, {e, 8}}, {{h, 7}, {g, 8}}}


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.

Position[Array[Boole@OddQ[#+#2] &,{8,8}],Switch[#,"dark",0,"light",1,"both",0|1]]/.
{j_,k_}:>{j/.Thread[Range@8->{a,b,c,d,e,f,g,h}],k}&

DavidC
fuente
1

JS, 197 bytes

b=[];d=[];l=[];for(i=1;i<9;i++){for(j=1;j<9;j++){a=String.fromCharCode(96+i*1)+j;b.push(a);if((i+j)%2<1){d.push(a)}else{l.push(a)}}}m=[0,"both",b,"dark",d,"light",l];alert(m[m.indexOf(prompt())+1])
Nautilo
fuente
1

Python (3,5), 106 100 96 92 bytes

usa el truco de MegaTom (i+j)%2para ganar 6 bytes

f=lambda s:[chr(97+i//8)+str(1+i%8)for i in range(64)if s[0]=='b'or(i//8+i)%2==(s[0]=='l')]

Pruébalo en repl.it

Resultados

>>> f('light')
['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']
>>> f('dark')
['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']
>>> f('both')
['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']

Versión previa

f=lambda s:[i for i in[i+j for i in'abcdefgh'for j in'123456780'][s[0]=='l'::2-(s[0]=='b')]if'0'not in i]
Erwan
fuente
1

C ++, 119 bytes

Basado en el truco de MegaTom.

#include <stdio.h>
int main(int n,char**v){for(n=0;n<64;++n){if((n+n/8)%2-**(v+1)%3){printf("%c%c ",n/8+97,n%8+49);}}}
Johan du Toit
fuente
0

C (gcc) , 112 bytes

f(char*s){for(int m=*s^'d'?*s^'l'?3:2:1,l=64,x;l--;m&1&!x|(m&2&&x)&&printf("%c%d ",l%8+97,l/8+1))x=l%8%2^l/8%2;}

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.

gastropner
fuente