Votre défi consiste à écrire un programme qui affiche la couleur d’un carré donné sur l’échiquier. Voici à quoi ressemble un échiquier:
Vous pouvez voir que le carré a1 est sombre et que h1 est un carré clair. Votre programme doit sortir dark
ou light
, quand on lui donne un carré. Quelques exemples:
STDIN: b1
STDOUT: light
STDIN: g6
STDOUT: light
STDIN: d4
STDOUT: dark
Les règles:
- Vous devez fournir un programme complet qui utilise STDIN et utilise STDOUT pour la sortie
dark
oulight
. - Supposons que l'entrée est toujours valide (
[a-h][1-8]
) - C'est du code-golf , donc le plus petit nombre d'octets gagne!
Tableau de bord
var QUESTION_ID=63772,OVERRIDE_USER=8478;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Réponses:
GS2 ,
17 à15 octetsLe code source utilise le codage CP437 . Essayez-le en ligne!
Vérification
Comment ça fonctionne
la source
Python 2,
4138 octets3 octets grâce à Mego pour l'entrelacement de chaînes
Prend les entrées comme
"g6"
. C'est la lumière et l'obscurité entrelacées.la source
int(input(),35)
c'est la partie la plus brillante. J'ai pensé à l'entrelacement des chaînes, mais votre méthode d'entrée enregistre le plus grand nombre d'octets.Hexagonie ,
3432 octetsDéplié et avec des chemins d'exécution annotés:
Diagramme généré avec l' incroyable HexagonyColorer de Timwi .
Le chemin violet est le chemin initial qui lit deux caractères, calcule leur différence et le prend modulo 2. Il
<
agit alors comme une branche, où le chemin gris foncé (résultat1
) est imprimédark
et le chemin gris clair (résultat0
)light
.Pour ce qui est de la façon dont je calcule la différence et le modulo, voici un diagramme de la grille de mémoire (avec les valeurs prises pour l’entrée
a1
):Diagramme généré avec l' IDE Esoteric encore plus étonnant de Timwi (qui a un débogueur visuel pour Hexagony).
Le pointeur de mémoire commence sur le bord étiqueté ligne , où nous lisons le caractère.
}
se déplace vers le bord étiqueté col , où nous lisons le chiffre."
se déplace vers le bord nommé diff où-
calcule la différence entre les deux.'
se déplace vers la cellule non étiquetée où nous mettons la2
, et{=
se déplace vers la cellule étiquetée mod où nous calculons le modulo avec%
.Cela pourrait être golfable de quelques octets en réutilisant une partie de la
;
, mais je doute qu’on puisse jouer au golf beaucoup, certainement pas jusqu’à la longueur de côté 3.la source
CJam, 18 octets
Démo en ligne
Dissection
la source
:-)
:^)
sed, 37
Explication
s/[1357aceg]//g
supprime toutes les coordonnées impaires indexées. Le tampon de motif résultant a alors une longueur de 1 pour "clair" ou de 0 ou 2 pour "sombre"./^.$/
correspond aux motifs 1-longueur,c
Hanges le motif à « lumière » etq
uits. Sinon, le motif estc
pendu à "sombre".la source
q
est redondant, et vous pouvez vérifier d' abord au lieu sombre avec/../
, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//...Pyth, 18 octets
Interprétez l’entrée comme un numéro de base, coupez-la
lightdark
en deux, imprimez.la source
ShadyAsFuck, 91 octets / BrainFuck, 181 octets
Mon premier vrai programme BrainFuck, remercie Mego pour son aide et pour m'avoir dirigé vers l'archive d'algorithmes. (Cela signifie que je ne l'ai pas vraiment fait moi-même, mais que j'ai copié certains algorithmes existants. Encore une expérience =)
C’est bien sûr la traduction de mes réponses stupides:
Développé à l'aide de cet interpréteur / débogueur .
J'ai volé deux extraits de code pour
divmod
et àif/else
partir d' ici. (Merci à @Mego!)Maintenant que nous avons la configuration des cellules,
>sum 2
nous effectuons maintenant l'algorithme divmod:La sortie du divmod ressemble à ceci,
0 d-n%d >n%d n/d
mais nous avons également mis àd-n%d
zéro la cellule suivante:Remplissez une cellule jusqu'à la valeur
100
pour faciliter la sortie:Maintenant, la configuration est
>cond 0 100
et pour appliquer l’if/else
algorithme nous avons besoin de deux variables temporaires, nous avons donc choisi la configuration.temp0 >c temp1 100
la source
Python 2, 45 octets
Prend les entrées comme
"a1"
. Essayez-le en lignela source
"ldiagrhgt"[expression::2]
devrait fonctionner tout en sauvegardant un octet ou deuxSérieusement , 19 octets
Prend des entrées comme
"a1"
Essayez-le en ligne (vous devrez entrer manuellement l'entrée; les permaliens n'aiment pas les guillemets)
la source
Code de la machine de Turing, 235 octets
Utilisation de la syntaxe de la table de règles définie ici.
la source
JavaScript (ES6), 45 octets
la source
TI-BASIC, 66 octets
Testé sur une calculatrice TI-84 +.
Voici une variation plus intéressante sur la troisième ligne, qui a malheureusement exactement la même taille:
On pourrait penser que TI-BASIC serait décent face à ce défi, puisqu'il implique le modulo 2. Ce n'est pas le cas; ces solutions semblent être les plus courtes possibles.
Nous passons beaucoup d'octets pour obtenir les deux caractères dans la chaîne, mais ce qui coûte réellement, ce sont les treize lettres minuscules à deux octets.
la source
Befunge-93 ,
39373331 octetsTout crédit à Linus qui a suggéré cette solution à 31 octets:
Testez-le avec cet interprète .
Explication
Au
<
début, le pointeur d'instruction est envoyé à gauche, où il tourne à droite. Il lit ensuite deux caractères de l'entrée en tant qu'ASCII, les soustrait et effectue un modulo de 2. Commea
et1
sont tous les deux impairs (en termes de code ASCII), cela fonctionne. Lev
redirige le pointeur d'instruction vers le bas ...... sur le
_
, ce qui envoie le pointeur d'instruction à gauche si le haut de la pile est à 0 et à droite sinon. Les caractères de "clair" ou "sombre", respectivement, sont poussés sur la pile dans l'ordre inverse. Les deux chemins atteignent la^
gauche, ce qui envoie le pointeur d'instruction vers le haut ...... au segment de sortie.
:
duplique le haut de la pile,#
saute par-dessus le,
et sur le_
, ce qui envoie le pointeur d'instruction à droite si le haut de la pile est à 0 et à gauche sinon. Lorsque la pile est vide, le haut de la pile (après:
) est égal à 0. Le pointeur d'instruction frappe alors le@
qui arrête l'exécution. Sinon, il frappe le,
, qui affiche le haut de la pile sous forme de caractère, puis le#
saute par dessus le:
et sur le>
, ce qui relance le processus.la source
rad"v>"k
sans espace?dar k
." Essayez-le dans l'interprète en ligne lié.<>:#,_@ v%2-~~\n"^"light"_"krad
, corrigez la nouvelle ligne.Japt ,
2322 octetsJapt est une version abrégée de Ja vaScri pt . Interprète
Comment ça fonctionne
Avec la nouvelle version 0.1.3 (publiée le 22 novembre), cela devient 17 octets , plus court que tout sauf GS2:
Ou, alternativement, une formule magique: (26 octets)
la source
Java,
157127124 octetsla source
interface i{static void main
puisque tout dans une interface est public par défautTeaScript , 23 octets
Malheureusement , les chaînes
dark
etlight
ne peuvent pas être compressés.la source
Ruby,
rayé de 4436 octetsla source
puts
par$><<
(sans espace).puts
pourp
C, 55 octets
Essayez-le en ligne
Merci DigitalTrauma pour beaucoup de conseils de golf
la source
(
aprèsputs
s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}
. Suppose que la largeur de l’entier est suffisamment grande pour contenir 3 caractères de chaîne. Vous devriez également pouvoir le fairemain(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}
pour 54 ans, bien que pour une raison quelconque, gets () retourne garbages
si ce n’est pas global, il segfafaults.Moteur Bot ,
16514x11 = 154La voici avec les différents segments de chemin mis en évidence:
(Tous les caractères non-espace non surlignés servent d'arguments pour les instructions
e
et -S
chacune de ces instructions utilise le symbole situé à gauche (par rapport à la direction de déplacement du bot) comme argument)la source
, 26 caractères / 34 octets
Try it here (Firefox only).
la source
C, 49 octets
la source
gets(&c)%256+c/256
?gets(&c)
. J'ai mis à jour ma soumission en conséquence.Clojure, 63 octets
J'économise 2 octets dignes en citant "clair" et "sombre" avec une seule citation afin que Clojure le prenne comme un littéral, par opposition à l'encapsulation de chaque mot entre deux guillemets. Je sauve aussi quelques octets en utilisant pr plutôt que println.
Quelques infos sur la cotation à Clojure
la source
Minkolang 0.12 ,
2824 octetsEssayez ici.
Explication
la source
C, 46 octets
Attend un environnement où
int
s sont stockés en little-endian et ont au moins deux octets.Explication
c
estargc
, donc initialement il contient01 00 00 00
.gets
lira deux caractères, direa (0x61)
et1 (0x31)
, et les stocker dansc
, qui est maintenantreprésentant le nombre 0x3161 ou 12641.
Essentiellement, dans ce problème, étant donné
c = x + 256*y
, nous voulons calculer(x + y) mod 2
et imprimer une chaîne en conséquence. Pour ce faire, j'aurais pu écrirec % 255 % 2
, comme alorsCependant,
37
fonctionne également:x
est compris entre 49 et 57 inclus (chiffres 1-8), doncx % 37 == x - 37
.y
se situe dans la plage 97-104 inclus (minuscule ah), doncy % 37 == y - 74
.Cela signifie que nous pouvons simplifier
et retournez simplement les chaînes pour corriger la parité.
la source
Faisceau , 127 octets
Une explication Bleu clair - lit un caractère depuis l’entrée dans le faisceau, sauvegarde la valeur du faisceau dans la mémoire, lit un caractère de l’entrée dans le faisceau.
Bleu foncé - Ajoute magasin à faisceau en décrémentant magasin à 0 tout en incrémentant le faisceau
Vert clair - Une construction de test encore impaire. La boucle sortira à gauche si le faisceau est pair ou à droite si elle est impaire.
Vert foncé - Sorties sombres
Tan - Émet la lumière
la source
O ,
2217 octetsCela fait ce qu'il est nécessaire de faire, sans avantages supplémentaires.
la source
Labyrinth ,
48464542 bytesMerci à Sp3000 pour la sauvegarde de deux octets.
Essayez-le en ligne!
Explication
Le début du code est une impasse amusante. N'oubliez pas que Labyrinth suppose un nombre infini de zéros lorsqu'il nécessite des opérandes au bas de la pile. Le code commence par la
-
droite, qui tente de soustraire deux nombres, ainsi la pile devient:Puis
,
lit le premier caractère,a
dites:Le
"
est un non-op, mais c'est aussi une impasse donc le pointeur d'instruction se retourne et commence à aller à la gauche. Puis`
lit l'autre personnage,2
dites:Cette fois,
-
soustrait ces deux nombres:La propriété intellectuelle suit maintenant la courbe du "corridor". La
#
obtient la profondeur de la pile, en ignorant les zéros implicites, ce qui arrive facilement à être2
:Et
%
calcule le modulo:À ce stade, l'IP est à une jonction. Si le sommet de la pile est à zéro, il se déplacera tout droit, où les
100.97.114.107.@
impressionsdark
. Mais si le sommet de la pile est différent de zéro (en particulier,1
), il se déplacera à droite, où est0:::8.5.3.4.116.@
imprimélight
(notez que nous pouvons omettre le premier1
, car il y en a déjà un1
sur la pile et nous pouvons économiser sur la répétition.10
dans108
,105
,103
,104
en faisant quelques exemplaires du10
quand nous avons y arriver).la source
Matlab, 51 octets
Je ne pense pas que cela nécessite aucune explication =)
la source
> <> , 31 octets
Ici, je pense "il doit y avoir un meilleur moyen ..."
la source
Perl,
29 à27 octetsCe code nécessite le
-p
commutateur, que j'ai compté comme 1 octet.Essayez-le en ligne sur Ideone .
Comment ça fonctionne
A cause du
-p
commutateur, Perl lit une ligne d’entrée et la stocke$_
././
est une expression régulière qui correspond à un caractère. Cela a deux implications:Puisque la correspondance est réussie,
/./
renvoie 1 .La post-correspondance (deuxième caractère saisi) est stockée dans
$'
.$'+ord
ajoute le nombre entier représenté par le deuxième caractère saisi au point de code (ord
) du premier caractère de la variable implicite$_
.&
prend le bit AND ET de la valeur de retour de/./
et de la somme$'+ord
, renvoyer 1 est la somme si impair, 0 si elle est paire.?light:dark
retourne clair si l'expression précédente a retourné 1 et sombre sinon.Enfin,
$_=
assigne le résultat à$_
, que Perl imprime automatiquement à cause du-p
commutateur.la source