introduction
Voici à quoi ressemble un échiquier.
Vous pouvez voir que a1
c'est un carré sombre . Cependant, b1
c'est un carré clair .
La tâche
Le défi est, étant donné dark
, light
ou both
, sortie tout le noir , la lumière ou tous les carrés avec un séparateur (comme un espace ou un saut de ligne). L'ordre de tous les carrés n'a pas d'importance .
Cas de test
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
Remarque: j'ai amélioré la sortie mais ce n'est pas nécessaire .
C'est du code-golf , donc la soumission avec le moins d'octets gagne!
a2a4a6...
ça irait?[[a2,a4,a6,a8],[...]...]
light
,dark
etboth
doivent être entrée commeString
s ou peuvent - ils être représentés par tout type de données?Réponses:
Pyth,
2221 octets-1 octet par @ Sp3000
Sous la fonction
%Chz3
,dark
hache à 1,light
à 0 etboth
à 2. Si nous prenons la parité de la somme des ords d'un carré d'échecs (c'est-à-direa1
->[97, 33]
->(97 + 33)%2
=0
, les carrés sombres vont à 0 et la lumière à 1 Cela nous permet de filtrer par inégalité.Essayez-le ici .
la source
fn%Chz3%sCMT2sM*<G8S8
Utilitaires Bash + GNU, 74
{a..h}{1..9}
est une extension d'accolade bash qui produit toutes les coordonnées d'une carte 8x8, plus une colonne supplémentaire9
. Ceci est important car cela rend la longueur de ligne impaire, ce qui permet l'effet de damier.le
printf
formate simplement chaque coordonnée, une par ligne.L'expression sed construite supprime ensuite toutes les
x9
coordonnées, puis imprime les lignes d'entrée paires ou impaires ou les deux, selon l'entrée de script.la source
JavaScript (SpiderMonkey 30+),
90858382 octetsRenvoie une chaîne de carrés séparés par des virgules. Version compatible pour 99 octets:
Fonctionne en énumérant les 64 noms carrés, puis en les analysant dans la base 19 pour voir s'ils sont modulo 2 clair ou foncé.
la source
JavaScript (ES6), 82
87 98Fonction anonyme renvoyant une chaîne de carrés séparés par des espaces.
TESTER
la source
Lot, 192 octets
la source
Pyth,
4839 octetsEssayez-le ici!
Encore plus long que l'autre solution Pyth, mais je ne pense pas pouvoir battre cela avec mon algorithme.
Explication
D'abord, nous générons une liste de tous les carrés du tableau et nous l'affectons à
Y
. Ensuite, nous filtrons cette liste afin qu'il ne reste que des carrés légers et attribuons cette liste àJ
. Après cela, nous évaluons l'entrée et imprimons:Y
si l'entrée étaitboth
J
si l'entrée étaitlight
Y-J
si l'entrée étaitdark
Déterminer si un carré est léger fonctionne comme suit:
18
fora8
, etc.x%2 == y%2
)la source
Python 2,
737170 octetsJe suis toujours un peu confus si les fonctions sont correctes pour la question, car le défi mentionne un "séparateur", mais comme il y a beaucoup d'autres soumissions de fonctions, j'ai fait la même chose.
Similaire à la réponse d' Erwan mais avec
beaucoupplus de Python 2-ness.(-2 octets grâce à @xnor)
la source
s=="dark"
ets[0]=="d"
mais pour ma défense dans mon premier essai, j'ai utilisés,*_=s
et 4cmp
ord(s[_])&_
ouord(s[_])/_
.%
:) Merci!PHP,
132126120108106 106 octetsIl parcourt les colonnes (0-7) et les lignes (1-8) et vérifie si la somme des deux est impaire / paire.
Testé avec PHP 5.6.4, exécutez-le:
php -d error_reporting=30709 -r '<CODE>' {dark|light|both}
la source
$s==2
par$s-1
. Si $ s = 2 et -1, c'est 1, ce qui est vrai et continuera$c=0
peut être$c
, ça donnera un tas d'avis, mais au moins pour l'obscurité ça marche très bien$s-1
ça ne marche pas, mais ça devrait. Merci pour cette bonne idée! Je déboguerai plus tard.$c
variable non définie ? Cela semble un peu étrange et invalide. Ou pas?Vitsy ,
9082 octetsExplication de la première ligne:
Explication de la deuxième ligne:
Il y aura des nouvelles lignes de fin de bonus pour «sombre» et «les deux». Nécessite que seuls «sombre», «les deux» ou «clair» soient entrés.
Essayez-le en ligne!
la source
PowerShell v3 +,
142129 octetsPrend entrée
$a
et définit deux variables pour si nous devons produire des carrés d'$d
arche ou d'$l
ight en fonction de la première lettre de l'entrée.Ensuite, nous bouclons
a-h
et1-8
et utilise la même astuce que sur déterminer la couleur d'un carré d'échecs pour analyser , que ce soit un carré clair ou sombre (réglage variable d'aide$q
dans le premier test) et ajouter cette place au pipeline le cas échéant. Après l'exécution, les éléments du pipeline sont sortis un par ligne.Nécessite la version 3 ou plus récente pour l'
-in
opérateur.Édition - 13 octets enregistrés en éliminant
switch
et en modifiant l'ordre de test d'égalitéla source
Jolf, 48 octets
Tout est grec pour moi ¯ \ _ (ツ) _ / ¯ Ceci est une transcription de l'excellente réponse d'edc65.
la source
Perl, 69 + 3 = 72 octets
Pour être exécuté avec
perl -p
, pour lequel j'ai ajouté 3 octets.Version moins golfée (légèrement différente, car l'opérateur de la baby-car rend le formatage difficile):
La version golfée utilise
"@{[]}"
; la version commentée utilise@a=...; "@"
pour que le code commenté soit toujours exécutable.la source
map$l.$_,1..8
-1grep$i=!$i||$b,map
encore -1C ++, 132 octets
Prend entrée par ligne de commande. Utilise pointeur / modulo vaudou pour la condition d'impression.
la source
n
boucle soit nécessaire. Je pense que imbriqué pour les bouclesi
etj
couper quelques octets. L'(i+j)%2
approche est vraiment intelligente. Je n'y avais pas pensé.(i//8+i%8)%2
c'est la même chose que(i//8+i)%2
vous pouvez gagner quelques octets si vous supprimez la définition dej=n%8
Java, 143
Hé, ce n'est pas la réponse la plus longue :)
L'entrée est considérée comme un argument de ligne de commande.
la source
PHP,
998279767473 octetsUtilise le codage ISO 8859-1.
Courez comme ceci (
-d
ajouté pour l'esthétique uniquement):Cela fonctionne comme ceci: la variable
$x
est incrémentée de 1 à 71, les nombres correspondent aux cellules comme indiqué ci-dessous.Par conséquent,
$x modulo 9
donne le numéro de colonne et$x / 9
donne le numéro de ligne, que je convertis en une lettre en utilisantchr
. Le code$z<c|$z>k^$x&1
donnetrue
pour inputboth
($z<c
) et dans le caslight
oudark
uniquement pour les cellules paires ou impaires respectivement ($z>k ^ $x&1
). Le résultat de cette expression détermine si les coordonnées de cellule seront ensuite imprimées. Enfin, si cela$x modulo 9
aboutit0
, je saute cette cellule inexistante.1817 octets (corrigé un bug) en n'ayant qu'une seule boucle, convertissant le nombre en un caractère au lieu de l'inversexor
.125
dans l'expression$x/9+69.9
pour obtenir le numéro de ligne correct avant de le convertir en un caractère~ß
pour générer un espacela source
JavaScript ES6,
187160159 octetsJe manque probablement quelque chose de douloureusement évident.Tant pis. Ne pas avoir à aplatir le tableau aide.Renvoie un tableau 2D.
Essayez-le ici:
Afficher l'extrait de code
la source
Rubis, 85
Je pense qu'il existe des moyens plus courts à ce sujet, mais c'est une utilisation mignonne de
.upto
.la source
R,
12994 octetsJe savais que je pouvais mieux générer la carte :). Essentiellement, cela construit une carte inversée, filtrant les références de grille où l'ombre ne correspond pas à l'entrée. La sortie est séparée par des espaces.
Non golfé
Tester
la source
Oracle SQL 11.2,
192180 octetsNon golfé
La vue v génère les coordonnées de chaque carré. Si la somme des coordonnées est paire, le carré est noir, sinon il est blanc.
la source
Rouille,
263259244 octetsForme développée:
la source
MATL , 31 octets
Essayez-le en ligne!
la source
CJam, 29
Juste une solution rapide et sale: p
Essayez-le en ligne
Explication:
la source
Haskell,
1331161051009891 octetsC'est ma première tentative de jouer au golf à Haskell.
Avec l'aide de Michael Klein, nous avons réussi à obtenir moins de 100 caractères!
la source
c>0
pourc==1
etc<1
pourc==0
? Enregistre deux octets.f r=[[[a,b]|a<-['a'..'h'],b<-['1'..'8']]!!i|i<-[0..63],even i||r<"l",odd i||r!!0/='d']
i
ne nous donne pas de rayures diagonales. Certains résolvent cela aveci+i`div`8
(commex+y
). D' autres commencent par['1'..'9']
et[0..71]
puis ne retenir que lesi`mod`9<8
résultats plus tard, pour 96 octets. Cependant, cet hybride de nos deux approches fait bien à 91 octets: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 octets
Méthode 1 : 108 octets. Cela construit le tableau sous forme de tableau, avec des étiquettes dans chaque cellule, et renvoie des diagonales ou des bandes claires ou sombres selon les besoins.
Méthode 2 : 133 octets. Crée un tableau et sélectionne en fonction de la nature paire-impaire de la somme du numéro de ligne + numéro de colonne de chaque cellule.
la source
JS, 197 octets
la source
Python (3.5),
1061009692 octetsutilisez l'astuce de MegaTom
(i+j)%2
pour gagner 6 octetsEssayez-le sur repl.it
Résultats
La version précédente
la source
C ++, 119 octets
Basé sur l'astuce de MegaTom.
la source
C (gcc) , 112 octets
Essayez-le en ligne!
Si a == 1, alors un carré sera toujours noir si la "bizarrerie" de la ligne et de la colonne est la même, c'est-à-dire que les deux sont impairs ou les deux sont pairs. L'inverse est vrai pour les carrés blancs, où la ligne et la colonne diffèrent toujours en bizarrerie.
Après cela, il suffit de combiner des boucles de lignes et de colonnes, ainsi que de consulter un tableau de priorité des opérateurs jusqu'à ce qu'un niveau d'incompréhensibilité suffisant soit atteint.
la source