Im Kartenspiel Magic: the Gathering gibt es fünf verschiedene Farben, die lose Zuordnungen von Karten darstellen: Weiß ( W
), Blau ( U
), Schwarz ( B
), Rot ( R
) und Grün ( G
). Diese sind oft wie folgt in einem Fünfeck angeordnet:
W
G U
R B
Sowohl in der Überlieferung von MtG als auch in vielen Kartenmechaniken werden benachbarte Farben in diesem Fünfeck gewöhnlich als Verbündete betrachtet, und nicht benachbarte (entgegengesetzte) Farben werden als Feinde betrachtet.
In dieser Herausforderung erhalten Sie zwei Farben und sollten deren Beziehung bestimmen.
Die Herausforderung
Sie erhalten zwei verschiedene Zeichen aus dem Satz BGRUW
. Sie können diese als eine Zeichenfolge mit zwei Zeichen, eine Zeichenfolge mit einem Trennzeichen zwischen den Zeichen, zwei separate Zeichenwerte, zwei Singleton-Zeichenfolgen, zwei Ganzzahlen, die ihre Codepunkte darstellen, oder einen Listen- oder Settyp mit zwei Zeichen / Zeichenfolgen / Ganzzahlen verwenden.
Ihre Ausgabe sollte einen von zwei unterschiedlichen und konsistenten Werten Ihrer Wahl enthalten, einer, der angibt, dass die beiden Farben Verbündete sind, und einer, der angibt, dass sie Feinde sind. Einer dieser beiden Werte wird möglicherweise überhaupt nicht ausgegeben.
Sie können ein Programm oder eine Funktion schreiben und eine unserer Standardmethoden zum Empfangen und Bereitstellen von Eingaben verwenden.
Sie können jede Programmiersprache verwenden , beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind.
Das ist Code-Golf , also gewinnt die kürzeste gültige Antwort - gemessen in Bytes .
Testfälle
Es gibt nur 20 mögliche Eingaben, deshalb liste ich sie alle auf.
Freunde:
WU UB BR RG GW UW BU RB GR WG
Feinde:
WB UR BG RW GU BW RU GB WR UG
quelle
Antworten:
JavaScript (ES6),
26 23 17 1514 ByteÜbernimmt die Eingabe als zwei ASCII-Codes in der aktuellen Syntax
(a)(b)
. Kehrt4
für Freunde oder0
für Feinde zurück.Probieren Sie es online!
Wie?
Anmerkung: Im Folgenden ist nur der ganzzahlige Quotient der Division durch 0,6 angegeben.
Vorheriger Ansatz, 15 Bytes
Übernimmt die Eingabe als zwei ASCII-Codes in der aktuellen Syntax
(a)(b)
. Kehrt0
für Freunde oder1
für Feinde zurück.Probieren Sie es online!
Wie?
Anfänglicher Ansatz, 23 Bytes
Übernimmt die Eingabe als 2-stellige Zeichenfolge. Kehrt
true
für Freunde oderfalse
für Feinde zurück.Probieren Sie es online!
quelle
a*b%290&8
würde es genauso gut funktionieren (0
für Freunde oder8
für Feinde produzieren).Gelee , 6 Bytes
Nimmt zwei Codepunkte als Argument. Ergibt 1 für Freunde, 0 für Feinde.
Probieren Sie es online!
Hintergrund
Sei n und m der Codepunkt zweier eingegebener Zeichen. Mit | n - m | Wir müssen uns nur mit allen 2-Zeichen-Kombinationen befassen. Die folgende Tabelle zeigt für alle 2 Zeichenkombinationen die entsprechenden absoluten Unterschiede.
Alle Feindkombinationen sind durch 3 , 5 oder 7 teilbar , aber keine der Freundkombinationen. Freunde sind also genau diejenigen, die mit 3 × 5 × 7 = 105 co-prime sind .
Wie es funktioniert
quelle
_
ist Gelee. Hast du etwas anderes benutzt?ạ
nur als absoluter Wert gelesen , nicht als absoluter Unterschied.Python 2 , 19 Bytes
Probieren Sie es online!
Eine anonyme Funktion: Kehrt
1
für Freunde und0
für Feinde zurück.quelle
Befunge-98,
1312 BytesProbieren Sie es online!
Drucke
0
für Freunde und1
für FeindeHierbei wird die Differenz zwischen den ASCII-Werten der Buchstaben verwendet.
Wenn wir das nehmen
(((ASCII difference % 9) % 5) % 3)
, werden die Werte für die Feinde 0 sein. Dann werden wir nicht den Wert und drucken es.Vielen Dank an @Martin für das Golfen
quelle
IA%9%5%3¬
Bearbeiten Probieren Sie es online!Gelee ,
87 BytesHuckepack von Mistah Figgins ' fabelhafter Befunge-Antwort !
Probieren Sie es online!
Wie?
Wie Mistah Figgins feststellte, kann die Entscheidung getroffen werden, indem der absolute Unterschied zwischen den ASCII-Werten mod 9 mod 5 mod 3 - 0s sind dann Freunde und 1s und 2s sind Feinde.
Wenn wir stattdessen den (einfachen) Differenz-Mod 9 nehmen, stellen wir fest, dass Freunde 1, 2, 7 und 8 sind, während Feinde 3, 4, 5 und 6 sind.
Der Code nimmt die Differenz mit
I
und indiziert dann in die Liste der Länge 9[1,1,0,0,0,0,1,1,0]
, die 390 in binär ist390B
. Die Indizierung ist sowohl modular (so dass die Indizierung die Mod 9 kostenlos durchführt) als auch 1-basiert (daher die 1 ganz links).quelle
Metaprogrammierung von C ++ - Vorlagen, 85 Byte
weniger golfen:
Da dies eine Metaprogrammiersprache ist, ist ein kompiliertes Konstrukt eine mögliche Ausgabe.
Eine Instanz von
f<'W','B'>
kompiliert genau dann, wenn'W'
und'B'
sind Feinde.Mathe basiert auf Befunge Antwort .
Live-Beispiel .
Da die Metaprogrammierung von C ++ - Vorlagen eine der schlimmsten Golfsprachen ist, sollte sich jeder schämen, der schlimmer ist als diese. ;)
quelle
template
s insgesamt zwei redundante Leerzeichen .Ruby,
2219 BytesEingabe: ASCII-Code der 2 Zeichen. Ausgang: 1 für Verbündete, 0 für Feinde.
Wie es funktioniert:
Holen Sie sich die Differenz zwischen den 2 Zahlen Modulo 9, verwenden Sie eine Bitmaske (390 ist binär 110000110) und erhalten Sie ein einzelnes Bit mit dem
[]
Operator.quelle
->x,y{x*y%103%2}
Beachten Sie, dass0
und1
umgekehrt sind.x*y%51>9
wie alle anderen. Ich denke, es wäre unfair gegenüber den Gegenstimmen, es jetzt so radikal zu ändern.CJam , 8 Bytes
Ein unbenannter Block, der zwei Zeichencodes auf dem Stapel erwartet und diese durch
0
(Freunde) oder1
(Gegner) ersetzt.Probieren Sie es online!
Erläuterung
Nun, wir haben jetzt eine Menge lustiger arithmetischer Lösungen gesehen. Ich denke, es ist in Ordnung, wenn ich jetzt meine eigene präsentiere. Das nächstliegende, was ich bisher gesehen habe, ist die C-Lösung von Steadybox . Dieser wurde mit Hilfe eines GolfScript-Brute-Forcers gefunden, den ich vor einiger Zeit für Anarchy-Golf geschrieben habe.
Hier ist, was dieser mit den verschiedenen Eingaben macht (wobei die Reihenfolge ignoriert wird, da die anfängliche Multiplikation kommutativ ist):
Wir können sehen, wie das Produkt aus den Eingaben modulo 51 die Eingaben in große und kleine Ergebnisse trennt, und wir können jeden der dazwischen liegenden Werte verwenden, um zwischen den beiden Fällen zu unterscheiden.
quelle
Röda ,
302221 BytesDank @fergusq gespeicherte Bytes, indem
_
die Werte im Stream als Eingabe verwendet werdenProbieren Sie es online!
Die Funktion wird ausgeführt,
push "WU" | f
nachdem der Funktion ein Name zugewiesen wurdeErläuterung
quelle
{[(_.._)in"WUBRGWGRBUW"]}
aber dann muss die Funktion wie folgt aufgerufen werden[a, b] | f
.05AB1E , 10 Bytes
Gibt 0 für Freund und 1 für Feind zurück.
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
C
3332292422 BytesGibt 1 zurück, wenn Freunde, 0, wenn Gegner.
quelle
Vim,
2221 BytesEingabe: Eine einzelne Zeile mit den beiden Zeichen.
Ausgabe: leerer Puffer bei Freunden, Puffer
WUBRGWGRBUW
bei Feinden.Erläuterung
quelle
C
anstelle voncw
Japt , 6 Bytes
Inspiriert von der Lösung von @Martin Ender .
Nimmt ein Array von zwei Zeichencodes als Eingabe.
Probieren Sie es online! | Test Suite
Rückkehr
true
für Freunde,false
für Feinde.14-Byte-Lösung:
Nimmt zwei Zeichencodes als Eingabe
Probieren Sie es online! | Test Suite
Erläuterung:
12-Byte-Lösung:
Probieren Sie es online! | Test Suite
Erläuterung:
Rückkehr
1
für Freunde und0
für Feinde.9-Byte-Lösung :
Inspiriert von @ Arnauld's Lösung .
Test Suite
Rückkehr
1
für Freunde,0
für Feinde.11-Byte-Lösung:
inspiriert von @Mistah Figgins Lösung .
Test Suite
quelle
Brain-Flak ,
155, 147, 135 BytesProbieren Sie es online!
Dies sind 134 Byte Code plus 1 Byte Strafe für das
-a
Flag, das die ASCII-Eingabe ermöglicht.Dies funktioniert, indem der absolute Unterschied zwischen den Eingaben ermittelt und überprüft wird, ob sie 2, 11, 16 oder 19 entsprechen. Wenn dies der Fall ist, ist die Eingabe ein Freund und gibt eine 1 aus. Wenn dies nicht der Fall ist, wird nichts gedruckt. Da nichts in Brain-Flak einem leeren Stapel entspricht, der falsch ist, ist keine Ausgabe ein falscher Wert. ( meta )
Eine Sache, die ich an dieser Antwort besonders mag, ist, dass der "absolute Unterschied" -Snippet (das heißt
(([(({}[{}]))<>])){({}())<>}{}{}<>{}
) nicht stapelrein ist, aber dennoch in dieser Antwort verwendet werden kann, da es uns egal ist, auf welchem Stapel wir landen, bevor wir codieren die möglichen Unterschiede.Bei einer späteren Bearbeitung habe ich dies noch stärker ausgenutzt, indem ich die Reste auf dem Stapel missbraucht habe, die nicht den absoluten Unterschied ergeben. Bei der ersten Überarbeitung habe ich beide ausgeschaltet, um es ein wenig vernünftiger zu halten. Wenn Sie dies nicht tun, erhalten Sie zwei Hauptgolfplätze:
Offensichtlich wird der Code entfernt, um sie zu platzieren:,
{}{}
aber was noch wichtiger ist:Es erlaubt uns, die
2, 11, 16, 19
Sequenz von zu komprimierenzu
Glücklicherweise ist kein zusätzlicher Code erforderlich, um diese Reste später zu verarbeiten, sodass sie nur auf dem alternativen Stapel verbleiben.
Da Brain Flak notorisch schwer zu verstehen ist, ist hier eine lesbare / kommentierte Version:
quelle
Jelly , 14 Bytes
Rückkehr
1
für Feinde und0
für Freunde.Testsuite bei Online testen !
Wie?
quelle
05AB1E , 7 Bytes
Dies ist eine Portierung meiner Gelee-Antwort . Nimmt eine Liste von Codepunkten als Eingabe. Druckt 1 für Freunde, 0 für Feinde.
Probieren Sie es online!
Wie es funktioniert
quelle
CJam ,
16121110 BytesGolf 4 Bytes mit Mistah Figgins Algorithmus
1 Byte dank Lynn gespeichert
Ausgänge
1
für feindliche Farben,0
für verbündete Farben.Probieren Sie es online! (Oder überprüfen Sie alle Testfälle )
Erläuterung
quelle
l:m9%5%3%!
ist ein Byte kürzer.Retina , 18 Bytes
Probieren Sie es online!
Ganz einfach: Sortiert die Eingabe und versucht, eines der sortierten Verbündetenpaare damit abzugleichen. Leider glaube ich nicht, dass die String-basierte Natur von Retina es ermöglicht, dass einer der interessanteren Ansätze wettbewerbsfähig ist.
Als kleinen Vorgeschmack auf die nächste Retina-Version plane ich, eine Option hinzuzufügen, die Regex und Zielzeichenfolge vertauscht (sodass die aktuelle Zeichenfolge als Regex verwendet wird und Sie ihr eine zu überprüfende Zeichenfolge geben). In diesem Fall ist diese Option kürzer Lösung wird funktionieren (oder etwas in diese Richtung):
quelle
Java (OpenJDK 8) ,
2823 Bytes-5 Bytes dank Fergusq
Probieren Sie es online!
quelle
"WUBRGWGRBUW"::contains
?Brachylog , 10 Bytes
Eine unkomplizierte Lösung ohne Tricks.
Probieren Sie es online!
Erläuterung
quelle
Gelee , 6 Bytes
Der Vollständigkeit halber. Nimmt zwei Codepunkte als Argument. Ergibt 0 für Freunde, 1 für Feinde.
Probieren Sie es online!
Hintergrund
Sei n und m der Codepunkt zweier eingegebener Zeichen. Mit | n - m | Wir müssen uns nur mit allen 2-Zeichen-Kombinationen befassen. Die folgende Tabelle zeigt für alle 2 Zeichenkombinationen die entsprechenden absoluten Unterschiede.
Wenn wir diese ganzen Zahlen durch 3 teilen , erhalten wir die folgenden Quotienten.
1 , 4 und 7 können mit Modulo 3 auf 1 abgebildet werden .
Jetzt müssen wir uns nur noch die Parität ansehen.
Wie es funktioniert
quelle
Cubix, 11 Bytes
Eine Cubix-Implementierung der Arnauld-Lösung.
Verwendungszweck
Geben Sie die beiden Zeichen ein und geben Sie sie
0
für Freunde und1
Feinde aus. Probieren Sie es hier aus.Erläuterung
Der Code kann so erweitert werden.
Die Zeichen werden in dieser Reihenfolge ausgeführt (ohne Kontrollfluss):
quelle
Python 2 , 26 Bytes
Probieren Sie es online!
quelle
AWK, 23 Bytes
Anwendungsbeispiel: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB
Dies wird gedruckt,
1
wenn das Paar ein Freund ist,0
ansonsten. Ich wollte etwas Kluges tun, aber alles, woran ich dachte, würde länger dauern.quelle
Gelee , 12 Bytes
Ausgänge
1
für Verbündete,0
für Feinde.Probieren Sie es online!
Erläuterung
quelle
Ruby, 28 Bytes
Outputs true für Freund, false für Feind:
Die ungolfed Version ist nicht viel anders:
quelle
05AB1E , 7 Bytes
Anpassung des Mod-Tricks aus Jonathans Jelly-Antwort
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
GolfScript , 7 Bytes
Nimmt zwei Codepunkte als Eingabe.
Probieren Sie es online! (Testsuite, die das Eingabeformat zur Vereinfachung konvertiert.)
Ein GolfScript-Port meiner CJam-Antwort (der technisch gesehen ein CJam-Port des Ergebnisses meines GolfScript-Brute-Forcers ist ... ähhh ...).
Da GolfScript jedoch Modulo mit negativen Eingaben richtig einstellt, gibt es eine unterhaltsame alternative Lösung bei gleicher Byteanzahl, die
4
für Gegner verwendet wird, anstatt1
:Probieren Sie es online!
quelle
Java 7, 38 Bytes
Port von @Mistah Figgins 'Befunge-98-Antwort ist die kürzeste in Java 7 von den bisher geposteten Antworten.
Wie für die anderen:
39 Bytes: Port aus der Antwort von @Arnauld auf JavaScript (ES6) .
39 Bytes: Port von @MartinEnders CJam-Antwort
47 Bytes: Port von @Steadybox 'C-Antwort
52 Bytes: Port von @Lynns Python 2-Antwort
HINWEIS: Übersprungene Antworten, die Primzahlen / Palindrome und dergleichen verwenden, da diese in Java nicht annähernd kurz sind. ;)
TODO: Ich überlege mir meine eigene Antwort. Obwohl ich bezweifle, dass sie kürzer ist als die meisten.Probieren Sie alles hier.
EDIT: Ok, ich habe mir etwas ausgedacht, das nicht so schlimm ist:
50 Bytes:
Erläuterung:
Alle Gegner sind entweder im Bereich 4-6 (inklusive) oder 0.
EDIT2: Hmm .. Ich habe gerade bemerkt, dass es der Antwort von @Steadybox sehr ähnlich ist .. :(
quelle
PHP, 31 Bytes
Laufen Sie mit
echo AB | php -nR '<code>
, woA
undB
sind die beiden Farben.strtr
Gibt die Zeichenfolge von der Position zurück, an der sich die Eingabe befindet.mit
WBGURWRUGBW
als Heuhaufen gibt dies eine wahrheitsgemäße Zeichenfolge zurück, wenn die Farben Feinde sind; leere Zeichenfolge, wenn nicht.!
Wendet die wahrheitsgemäße Zeichenfolge auf anfalse
, was zu einer leeren Ausgabe führt,und die leere Zeichenfolge auf an
true
, was zu einer Ausgabe führt1
.quelle