Ihre Herausforderung besteht darin, ein Programm zu schreiben, das die Farbe eines bestimmten Quadrats vom Schachbrett ausgibt. So sieht ein Schachbrett aus:
Sie können sehen, dass das Quadrat a1 dunkel ist und h1 ein helles Quadrat. Ihr Programm muss dark
oder ausgeben light
, wenn ein Quadrat angegeben wird. Einige Beispiele:
STDIN: b1
STDOUT: light
STDIN: g6
STDOUT: light
STDIN: d4
STDOUT: dark
Die Regeln:
- Sie müssen ein vollständiges Programm bereitstellen, das STDIN und STDOUT zur Ausgabe von
dark
oder verwendetlight
. - Angenommen, die Eingabe ist immer gültig (
[a-h][1-8]
) - Das ist Code-Golf , also gewinnt die kürzeste Anzahl von Bytes!
Anzeigetafel
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>
Antworten:
GS2 ,
1715 BytesDer Quellcode verwendet die CP437- Codierung. Probieren Sie es online!
Nachprüfung
Wie es funktioniert
quelle
Python 2,
4138 Bytes3 Bytes dank Mego für das String-Interlacing
Nimmt Eingaben wie
"g6"
. Das ist hell und dunkel miteinander verflochten.quelle
int(input(),35)
ist der brillante Teil. Ich dachte an das String-Interlacing, aber Ihre Eingabemethode spart die meisten Bytes.Hexagony ,
3432 BytesUngefaltet und mit kommentierten Ausführungspfaden:
Mit Timwis erstaunlichem HexagonyColorer erstelltes Diagramm .
Der violette Pfad ist der Anfangspfad, der zwei Zeichen liest, deren Differenz berechnet und modulo 2 annimmt. Der
<
Pfad fungiert dann als Zweig, in dem der dunkelgraue Pfad (Ergebnis1
)dark
und der hellgraue Pfad (Ergebnis0
) gedruckt werdenlight
.Wie ich die Differenz und das Modulo berechne, ist hier ein Diagramm des Speichergitters (mit Werten, die für die Eingabe verwendet wurden
a1
):Das Diagramm wurde mit Timwis noch besserer esoterischer IDE (die einen visuellen Debugger für Hexagony enthält) erstellt.
Der Speicherzeiger beginnt an der mit row bezeichneten Kante , an der wir das Zeichen lesen.
}
bewegt sich zu der mit col bezeichneten Kante , wo wir die Ziffer lesen."
bewegt sich zu der mit diff bezeichneten Kante, wo-
die Differenz der beiden berechnet wird.'
bewegt sich zu der unbeschrifteten Zelle, in die wir die einfügen2
, und{=
bewegt sich zu der Zelle mit der Bezeichnung mod, mit der wir das Modulo berechnen%
.Dies kann durch Wiederverwendung einiger der Elemente um einige Bytes golfen werden
;
, aber ich bezweifle, dass es durch viele Elemente golfen werden kann, sicherlich nicht bis zur Seitenlänge 3.quelle
CJam, 18 Bytes
Online-Demo
Präparation
quelle
:-)
:^)
sed, 37
Erläuterung
s/[1357aceg]//g
Entfernt alle ungeraden Koordinaten. Der resultierende Musterpuffer hat dann eine Länge von 1 für "hell" oder eine Länge von 0 oder 2 für "dunkel". Stimmt mit den/^.$/
Mustern der Länge 1c
überein , ändert das Muster in "Licht" undq
passt an. Ansonsten wird das Musterc
auf "dunkel" gehängt.quelle
q
ist überflüssig, und Sie können für dunkle zuerst prüfen , statt mit/../
, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//...Pyth, 18 Bytes
Interpretieren Sie die Eingabe als Basiszahl, hacken Sie sie
lightdark
in zwei Hälften und drucken Sie sie.quelle
ShadyAsFuck, 91 Bytes / BrainFuck, 181 Bytes
Mein erstes echtes BrainFuck-Programm, danke Mego für die Hilfe und den Hinweis auf das Algorithmus-Archiv. (Das heißt, ich habe es nicht wirklich alleine gemacht, sondern einige vorhandene Algorithmen kopiert. Immer noch eine Erfahrung =)
Dies ist natürlich die Übersetzung von meinen Brainfuck-Antworten:
Entwickelt mit diesem Interpreter / Debugger .
Ich habe zwei Code-Schnipsel für
divmod
undif/else
von hier gestohlen . (Danke an @Mego!)Jetzt haben
>sum 2
wir die Zellenkonfiguration und führen den Divmod-Algorithmus aus:Die Ausgabe des DivMod sieht so aus,
0 d-n%d >n%d n/d
aber wir haben das auf Null gesetztd-n%d
und setzen auch die nächste Zelle auf Null :Füllen Sie eine Zelle bis zum Wert,
100
um die Ausgabe zu vereinfachen:Jetzt ist die Konfiguration
>cond 0 100
und für die Anwendung desif/else
Algorithmus benötigen wir zwei temporäre Variablen, also wählen wir die Konfigurationtemp0 >c temp1 100
quelle
Python 2, 45 Bytes
Nimmt Eingaben wie
"a1"
. Probieren Sie es online ausquelle
"ldiagrhgt"[expression::2]
sollte funktionieren, während ein oder zwei BytesIm Ernst , 19 Bytes
Nimmt Eingaben wie
"a1"
Probieren Sie es online aus (Sie müssen die Eingabe manuell eingeben; die Permalinks mögen keine Anführungszeichen)
quelle
Turing Machine Code, 235 Byte
Verwenden Sie die hier definierte Regeltabellensyntax.
quelle
JavaScript (ES6), 45 Byte
quelle
TI-BASIC, 66 Bytes
Getestet mit einem TI-84 + Taschenrechner.
Hier ist eine interessantere Variante der dritten Zeile, die leider genau dieselbe Größe hat:
Man könnte meinen, TI-BASIC wäre bei dieser Herausforderung anständig, da es sich um Modulo 2 handelt. Diese Lösungen scheinen so kurz wie möglich zu sein.
Wir verwenden eine Menge Bytes, um beide Zeichen in die Zeichenkette zu bekommen, aber was wirklich kostet, sind die dreizehn Zwei-Byte-Kleinbuchstaben.
quelle
Befunge-93 ,
39373331 BytesAlle Kredite an Linus , die vorgeschlagen diese 31-Byte - Lösung:
Testen Sie es mit diesem Interpreter .
Erläuterung
Das
<
am Anfang sendet den Anweisungszeiger nach links, wo er nach rechts umläuft. Es liest sich dann in zwei Zeichen von der Eingabe als ASCII, subtrahiert sie und macht einen Modulo von 2. Wiea
und1
beide ungerade sind (in Form von ASCII - Code), das funktioniert. Dasv
lenkt den Anweisungszeiger nach unten ...... auf den
_
, der den Anweisungszeiger nach links sendet, wenn die Stapelspitze 0 ist, und ansonsten nach rechts. Die Zeichen "hell" bzw. "dunkel" werden in umgekehrter Reihenfolge auf den Stapel geschoben. Beide Pfade treffen^
auf der linken Seite, wodurch der Befehlszeiger nach oben zeigt ...... zum Ausgangssegment.
:
dupliziert die Oberseite des Stapels,#
springt über das,
und auf das_
, was den Befehlszeiger nach rechts sendet, wenn die Oberseite des Stapels 0 ist, und ansonsten nach links. Wenn der Stapel leer ist, ist die Oberseite des Stapels (nach:
) 0, so dass der Befehlszeiger auf das trifft,@
was die Ausführung stoppt. Andernfalls trifft es den,
, der den Anfang des Stapels als Zeichen ausgibt, und#
springt dann über den:
und auf den>
, der den Vorgang erneut startet.quelle
rad"v>"k
ohne Leerzeichen speichern ?dar k
." Probieren Sie es im verlinkten Online-Dolmetscher aus.<>:#,_@ v%2-~~\n"^"light"_"krad
, reparieren Sie die neue Zeile.Japt ,
2322 BytesJapt ist eine verkürzte Version von Ja vaScri pt . Dolmetscher
Wie es funktioniert
Mit der neuen Version 0.1.3 (veröffentlicht am 22. November) werden dies 17 Bytes , weniger als mit Ausnahme von GS2:
Oder alternativ eine Zauberformel: (26 Bytes)
quelle
Java,
157127124 Bytesquelle
interface i{static void main
Da alleTeaScript , 23 Bytes
Leider sind die Saiten
dark
undlight
können nicht komprimiert werden.quelle
Ruby,
durchgestrichen 4436 Bytesquelle
puts
mit$><<
(ohne Leerzeichen).puts
fürp
C 55 Bytes
Probieren Sie es online aus
Vielen Dank an DigitalTrauma für viele Golftipps
quelle
(
nachputs
s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}
. Es wird davon ausgegangen, dass die Breite der Ganzzahl groß genug ist, um 3 Zeichen einer Zeichenfolge aufzunehmen. Sie sollten auch in der Lage sein,main(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}
für 54 zu tun , obwohl aus irgendeinem Grund gets () Mülls
zurückgibt, wenn nicht global, so segfaults.BotEngine ,
16514 × 11 = 154Hier ist es mit den verschiedenen Pfadsegmenten hervorgehoben:
(Nicht-Leerzeichen, die nicht hervorgehoben sind, dienen als Argumente für die Anweisungen
e
und -S
jede dieser Anweisungen verwendet das Symbol links (relativ zur Fahrtrichtung des Bot) als Argument.)quelle
𝔼𝕊𝕄𝕚𝕟, 26 Zeichen / 34 Bytes
Try it here (Firefox only).
quelle
C 49 Bytes
quelle
gets(&c)%256+c/256
?gets(&c)
. Ich habe meinen Beitrag entsprechend aktualisiert.Clojure, 63 Bytes
Ich spare wertvolle 2 Bytes, indem ich "hell" und "dunkel" mit einem einzigen Anführungszeichen zitiere, sodass Clojure es als Literal verwendet, anstatt jedes Wort in Anführungszeichen zu setzen. Ich spare auch ein paar Bytes, indem ich pr anstelle von println verwende.
Einige Infos zum Zitieren in Clojure
quelle
Minkolang 0.12 ,
2824 BytesProbieren Sie es hier aus.
Erläuterung
quelle
C 46 Bytes
Erwartet eine Umgebung, in der
int
s Little-Endian gespeichert sind und mindestens zwei Byte groß sind.Erläuterung
c
istargc
, so enthält es anfangs01 00 00 00
.gets
Ich lese zwei Zeichen, sagea (0x61)
und1 (0x31)
und speichere sie in demc
, was jetzt istDarstellen der Zahl 0x3161 oder 12641.
Im Wesentlichen
c = x + 256*y
möchten wir in diesem gegebenen Problem(x + y) mod 2
eine Zeichenfolge berechnen und entsprechend drucken. Dazu hätte ichc % 255 % 2
wie damals schreiben könnenFunktioniert aber
37
auch:x
liegt im Bereich von 49-57 einschließlich (Ziffern 1-8), sox % 37 == x - 37
.y
liegt im Bereich von 97-104 einschließlich (Kleinbuchstaben ah), soy % 37 == y - 74
.Dies bedeutet, wir können zu vereinfachen
und drehen Sie einfach die Zeichenfolgen, um die Parität zu korrigieren.
quelle
Strahl , 127 Bytes
Eine Erklärung Hellblau - Liest ein Zeichen von der Eingabe in den Strahl, speichert den Strahlwert im Speicher und liest ein Zeichen von der Eingabe in den Strahl.
Dunkelblau - Fügt dem Strahl einen Speicher hinzu, indem der Speicher auf 0 verringert wird, während der Strahl inkrementiert wird
Hellgrün - Ein geradzahliges Testkonstrukt. Die Schleife wird nach links verlassen, wenn der Strahl gerade ist, oder nach rechts, wenn er ungerade ist.
Dunkelgrün - Gibt dunkel aus
Hellbraun - Gibt Licht aus
quelle
O ,
2217BytesDies macht das, was es tun muss, ohne zusätzliche Vorteile.
quelle
Labyrinth ,
48464542 BytesDanke an Sp3000 für das Speichern von zwei Bytes.
Probieren Sie es online!
Erläuterung
Der Anfang des Codes ist eine lustige Sackgasse. Denken Sie daran, dass Labyrinth eine unendliche Anzahl von Nullen annimmt, wenn Operanden am unteren Rand des Stapels erforderlich sind. Der Code beginnt mit einem
-
Rechtslauf, der versucht, zwei Zahlen zu subtrahieren, und der Stapel wird zu:Dann
,
liest das erste Zeichen,a
sagen:Das
"
ist ein No-Op, aber dies ist auch eine Sackgasse, also dreht sich der Befehlszeiger um und beginnt nach links zu gehen. Dann`
liest das andere Zeichen,2
sagen:Dieses Mal werden
-
diese beiden Zahlen subtrahiert:Die IP folgt nun der Kurve des "Korridors". Das
#
ruft die Stapeltiefe ab, wobei die impliziten Nullen ignoriert werden2
.Und
%
berechnet das Modulo:Zu diesem Zeitpunkt befindet sich die IP an einer Kreuzung. Wenn der obere Rand des Stapels Null ist, bewegt er sich geradeaus, wo
100.97.114.107.@
gedruckt wirddark
. Wenn der obere Rand des Stapels jedoch nicht Null ist (speziell1
), wird er nach rechts verschoben, wo0:::8.5.3.4.116.@
gedruckt wirdlight
(beachten Sie, dass der führende Rand weggelassen werden kann1
, da sich bereits ein1
auf dem Stapel befindet, und der wiederholte Wert gespeichert werden kann10
in108
,105
,103
,104
indem Sie ein paar Kopien der Herstellung ,10
wenn wir bekommen es zuerst).quelle
Matlab, 51 Bytes
Ich glaube nicht, dass dies einer Erklärung bedarf =)
quelle
> <> 31 Bytes
Hier denke ich: "Es muss einen besseren Weg geben ..."
quelle
Perl,
2927 BytesDieser Code erfordert den
-p
Schalter, den ich als 1 Byte gezählt habe.Probieren Sie es online auf Ideone .
Wie es funktioniert
Aufgrund des
-p
Schalters liest Perl eine Eingabezeile und speichert sie in$_
././
ist ein regulärer Ausdruck, der einem Zeichen entspricht. Dies hat zwei Auswirkungen:Da das Spiel erfolgreich ist,
/./
gibt 1 .Das Nachspiel (zweites eingegebenes Zeichen) wird in gespeichert
$'
.$'+ord
Fügt die Ganzzahl, die das zweite Eingabezeichen darstellt, zum Codepunkt (ord
) des ersten Zeichens der impliziten Variablen hinzu$_
.&
Nimmt das bitweise UND des Rückgabewerts von/./
und der Summe$'+ord
, 1 ist die Summe, wenn ungerade, 0, wenn es gerade ist.?light:dark
kehrt leuchtet , wenn der vorhergehende Ausdruck zurückgegeben 1 und dunkel anderweitig.Zum Schluss
$_=
ordnet$_
Perl das Ergebnis zu , das aufgrund der-p
Umstellung automatisch gedruckt wird .quelle