Herausforderung
Betrachten Sie den Regenbogen als sieben Farben, dargestellt durch Zeichenfolgen als Red Orange Yellow Green Blue Indigo Violet
.
Ihre Aufgabe ist es, ein Programm zu erstellen, das eine dieser Farben als Ein- und Ausgabe in der Reihenfolge der Regenbogenfarben erhält. Dies schließt Überlappungen einViolet -> Red
Eingang
Eine Zeichenfolge, die eine der Regenbogenfarben enthält.
Ausgabe
Die nächste in der Bestellfarbe des Regenbogens.
Regeln
- Farbnamen unterscheiden zwischen Groß- und Kleinschreibung. Sie müssen mit dem in diesem Beitrag enthaltenen Fall übereinstimmen.
- Die Eingabe ist immer gültig. Jedes Verhalten ist für ungültige Eingaben zulässig.
- Dies ist Codegolf, also gewinnt die kürzeste Anzahl von Bytes!
Beispiel für Ein- und Ausgabe
Input -> Output
Red -> Orange
Orange -> Yellow
Yellow -> Green
Green -> Blue
Blue -> Indigo
Indigo -> Violet
Violet -> Red
Provide at least one example input and output. Make sure they match your own description of what the input should look like.
Antworten:
SOGL V0.12 , 23 Bytes
Probieren Sie es hier aus!
Erläuterung:
quelle
JavaScript, 68 Bytes
Für die Eingabe erstellt
"Red"
diese Funktion zuerst ein RegExp/Red(.[a-z]*)/
, das mit der Zeichenfolge übereinstimmt,'RedOrangeYellowGreenBlueIndigoVioletRed'
und gibt dann das erste Erfassungsergebnis zurück.Code-Snippet anzeigen
quelle
'RedOrangeYellowGreenBlueIndigoVioletRed'
oder etwas ändernPerl 5
-p
,5857 BytesProbieren Sie es online!
Jetzt, da die Herausforderung geändert wurde, um zyklisch zu sein, ist die Regex-Lösung
ist nicht mehr optimal (wegen des doppelten
Red
)Auch 57 Bytes:
Probieren Sie es online!
quelle
Python , 79 Bytes
Probieren Sie es online!
Griffe
Violet -> Red
. Die gewünschte Funktion wird anonym in der zweiten Zeile angegeben.80 Bytes
Probieren Sie es online!
quelle
Perl 6 , 56 Bytes
Probieren Sie es online!
Nutzt die Tatsache aus, dass Bits 2-4 der ASCII-Codes des ersten Buchstabens jeder Farbe zufällig auf 0-6 abgebildet werden.
Hier ist eine nette, nicht konkurrierende Lösung, die "lila" anstelle von "indigo" und "violett" verwendet (38 Zeichen, 59 Bytes):
Probieren Sie es online!
quelle
%12
Lösung für Kokosnuss, aber das ist natürlich ordentlicher.Rubin
-n
,6260 Bytes-2 von Asone Tuhid.
Probieren Sie es online!
Der Regex-Ansatz sieht auch für Ruby vielversprechend aus. Ich bin jedoch zu einer kürzeren Lösung gekommen, indem ich einen Lookahead verwendet und das Match direkt gedruckt habe, anstatt mit Erfassungsgruppen zu spielen. Die Liste der Farben ist in umgekehrter Richtung, da lookahead 1 Byte billiger ist als lookbehind.
quelle
/#$_/
interpoliert)Rot , 87 Bytes
Probieren Sie es online!
quelle
05AB1E , 30 Bytes
Probieren Sie es online!
Erläuterung
quelle
Excel, 85 Bytes
Verwendet Kleinbuchstaben.
Gleicher Ansatz mit 86 Bytes in Großbuchstaben:
quelle
Haskell ,
80 7175 BytesDanke an Laikoni für die Kürzung von 9 Bytes!
Probieren Sie es online!
Eine andere Lösung, etwas idiomatischer, aber ich könnte es nicht kürzer machen:
Es muss abgeleitet werden,
Read
weil die Eingabe eine Zeichenfolge ist und mindestensEq
oderShow
um entweder auf Gleichheit zu testen oder das Ergebnis anzuzeigen.quelle
span
: Online ausprobieren!span
...Violet
sich um einen Umbruch handeln sollRed
, sodass SieRed
das Ende der Zeichenfolge erneut hinzufügen müssen .succ Violet
funktioniert nicht fürEnum
s nichtRetina ,
6558 BytesProbieren Sie es online!
Erläuterung
Wir beginnen mit dem Anhängen
(.[a-z]+)
an die Eingabe und verwandeln sie in eine Regex, die der Eingabefarbe entspricht, unmittelbar gefolgt von genau einer weiteren Farbe (Erfassung der letzteren).Jetzt wird der
:
Bühneneingang durch einen eigenen regulären Ausdruck ersetzt. Das vorherige Ergebnis wird zum regulären Ausdruck und mit der Liste der Farben abgeglichen. Die (einzelne) Übereinstimmung wird durch die erste Erfassungsgruppe (dh die nächste Farbe im Zyklus) ersetzt und zurückgegeben. Die Ausgabe am Programmende erfolgt automatisch.quelle
\1
und zum Ziel springen zu müssen, verschwendet viele Bytes: :-)Vim,
59565352 Bytes-1 Byte dank tsh
quelle
Java (JDK 10) , 77 Byte
Probieren Sie es online!
Credits
quelle
s->"RedOrangeYellowGreenBlueIndigoVioletRed".split(s)[1].split("(?=[A-Z])")[0]
s->"Red Orange Yellow Green Blue Indigo Violet Red".split(s)[1].split(" ")[1]
Kokosnuss , 79 Bytes
Probieren Sie es online!
quelle
s->"# green indigo yellow # # orange blue # violet red".split()[ord(s[0])%12]
Schale , 28 Bytes
Probieren Sie es online!
Vielleicht gibt es bessere Optionen für die Verwaltung der Argumente, aber dies ist das Beste, was ich finden konnte
Erläuterung
quelle
Stax ,
313029 BytesFühren Sie es aus und debuggen Sie es
Dies verwendet den Ringübersetzungsbefehl. Es ersetzt jedes Element in einem Array durch das folgende Element aus dem "Decoder-Ring". Normalerweise wird die Zeichenersetzung in einer Zeichenfolge verwendet, sie kann jedoch auch für eine gesamte Zeichenfolge verwendet werden, wenn sie in ein Singleton-Array eingeschlossen ist.
Hier ist die entpackte, ungolfierte, kommentierte ASCII-Darstellung desselben Programms.
Führen Sie dieses aus
quelle
J ,
67 6462 Bytes-2 Bytes danke an FrownyFrog
Probieren Sie es online!
quelle
&.
funktioniert eigentlich dafür. Versuchen Sie es onlineR ,
10993 BytesProbieren Sie es online!
-16 Dank an Giuseppe für die Verwendung von
match
Ratschlägenquelle
match(y,x)%%7+1
ist kürzer für die Indizierung als Ihreif
Aussage. Darüber hinauscolors()
enthält das Builtin viele Farbnamen, wenn Sie die Indizes finden :)colors()
nicht enthaltenindigo
! Na ja, trotzdem +1!match
ist besser hiercolors()
: /Batch, 97 Bytes
Erläuterung: In
call
der zweiten Zeile wird der Parameter durch den Befehl ersetzt und ausgewertet.set s=%s:Red =%
Dadurch wird beispielsweise das Präfix der Zeichenfolge gelöscht, die den Parameter enthält. Die Ersetzung in der dritten Zeile ersetzt dann alle Leerzeichen durch Anweisungstrennzeichen und Kommentare. Dies funktioniert, weil die Zeichenfolge vor dem Parsen ersetzt wird.quelle
Ruby
-n
,7569 BytesProbieren Sie es online!
quelle
i&&
Ding? Keine Notwendigkeit zu überprüfennil
, wie "Ignorieren Sie Fehler, wenn dies keine Farbe ist."Julia 0,6 , 76 Bytes
Probieren Sie es online!
Dies behandelt das Violett-> Rot, indem die Saite mit Strom versorgt wird
^
Netzbetreiber .Hier ist eine etwas längere Lösung ohne reguläre Ausdrücke:
quelle
PowerShell , 74 Byte
Probieren Sie es online!
Nimmt den String
"Red ... Violet "
und multipliziert ihn mit zwei, um denViolet -> Red
Testfall richtig zu behandeln . Wir haben dann-split
diese Zeichenfolge bei der Eingabe$args
, um uns ein Array von zwei Zeichenfolgen zu geben. Wir nehmen die zweite Zeichenkette[1]
, dann-split
die Whitespace- Zeichenkette , um uns eine Reihe von Zeichenketten zu geben und die erste zu nehmen[0]
.Bei der Eingabe
"Yellow"
führt der erste Schritt beispielsweise zu@("Red Orange ", " Green Blue Indigo ... Indigo Violet ")
. Wir nehmen die zweite davon, teilen sie in Leerzeichen auf (wodurch das Leerzeichen entfernt wird), was dazu führt@("Green", "Blue", ... "Violet")
, dass die[0]
nächste richtige Zeichenfolge entsteht.quelle
IBM / Lotus Notes Formula Language,
7974 ByteVorgängerversion für 79:
Übernimmt Eingaben aus einem bearbeitbaren Textfeld namens
a
.Es gibt kein TIO für die Formelsprache. Hier sind ein paar Screenshots.
quelle
PHP, 92 Bytes
Probieren Sie es online!
quelle
Kotlin , 73 Bytes
Probieren Sie es online!
Unter Ausnutzung der Tatsache, dass viele Farben aus 6 Zeichen bestehen, wird den Farben, denen keine Leerzeichen vorangestellt sind, eine Länge von 6 Zeichen vorangestellt. Es ist hoffentlich akzeptabel, dass einige der Farben mit Leerzeichen vor ihnen ausgegeben werden.
zB ist Rot, ist
" Red"
Blau" Blue"
quelle
SmileBASIC,
9484 Bytesquelle
Gema , 67 Zeichen
Probelauf:
Gema , 59 Zeichen
Langweilig. Dümmster Ansatz aller Zeiten, aber ziemlich kurz.
Probelauf:
quelle
q / kdb + ,
5955 BytesLösung:
Beispiele:
Erläuterung:
Erstellen Sie ein Wörterbuch der Farbe => nächste Farbe, die Eingabe ist der Schlüssel zum Wörterbuch:
Bonus:
Es ist 53 Bytes in K4:
quelle
Japt ,
4543 Bytes-2 Bytes dank Shaggy
Probieren Sie es online!
quelle
N
sed, 72 bytes
Probieren Sie es online
Beispiel 1:
Eingang:
Ausgabe:
Beispiel 2:
Eingang:
Ausgabe:
quelle