Wyzwanie
Rozważ tęczę jako siedem kolorów, reprezentowanych przez łańcuchy jako Red Orange Yellow Green Blue Indigo Violet
.
Twoim zadaniem jest stworzenie programu, który odbiera jeden z tych kolorów jako dane wejściowe i wyjściowe w kolejności kolorów tęczy. Obejmuje to nakładanie sięViolet -> Red
Wejście
Sznurek zawierający jeden z kolorów tęczy.
Wynik
Kolejny w kolejności kolor tęczy.
Zasady
- W nazwach kolorów rozróżniana jest wielkość liter. Muszą pasować do przypadku zawartego w tym poście.
- Dane wejściowe zawsze będą prawidłowe. Każde zachowanie jest dozwolone w przypadku nieprawidłowych danych wejściowych.
- To jest golf golfowy, więc wygrywa najmniejsza ilość bajtów!
Przykład wejścia i wyjścia
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.
Odpowiedzi:
SOGL V0.12 , 23 bajty
Wypróbuj tutaj!
Wyjaśnienie:
źródło
JavaScript, 68 bajtów
Dla danych wejściowych
"Red"
ta funkcja najpierw konstruuje RegExp,/Red(.[a-z]*)/
aby dopasować ciąg,'RedOrangeYellowGreenBlueIndigoVioletRed'
a następnie zwraca wynik pierwszego przechwytywania.Pokaż fragment kodu
źródło
'RedOrangeYellowGreenBlueIndigoVioletRed'
czy cośPerl 5
-p
,5857 bajtówWypróbuj online!
Teraz, gdy wyzwanie zostało zmienione na cykliczne, rozwiązanie wyrażeń regularnych
nie jest już optymalny (ze względu na podwójne
Red
)Również 57 bajtów:
Wypróbuj online!
źródło
Python , 79 bajtów
Wypróbuj online!
Uchwyty
Violet -> Red
. Pożądana funkcja jest podana anonimowo w drugim wierszu.80 bajtów
Wypróbuj online!
źródło
Perl 6 , 56 bajtów
Wypróbuj online!
Wykorzystuje fakt, że bity 2-4 kodów ASCII pierwszej litery każdego koloru są mapowane na 0-6.
Oto fajne, niekonkurujące rozwiązanie, które używa „fioletowego” zamiast „indygo” i „fioletowego” (38 znaków, 59 bajtów):
Wypróbuj online!
źródło
%12
rozwiązanie dla Coconut, ale oczywiście jest to fajniejsze.Rubin
-n
,6260 bajtów-2 autorstwa Asone Tuhid.
Wypróbuj online!
Podejście Regex również wygląda obiecująco dla Ruby. Doszedłem jednak do krótszego rozwiązania, korzystając z perspektywy i bezpośrednio drukując mecz, zamiast grać z grupami przechwytywania. Lista kolorów jest odwrócona, ponieważ lookahead jest o 1 bajt tańszy niż lookbeind.
źródło
/#$_/
interpoluje)Czerwony , 87 bajtów
Wypróbuj online!
źródło
05AB1E , 30 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Excel, 85 bajtów
Używa małych liter.
To samo podejście, z wielkimi literami 86 bajtów:
źródło
Haskell ,
80 7175 bajtówDzięki Laikoni za skrócenie 9 bajtów!
Wypróbuj online!
Inne rozwiązanie, nieco bardziej idiomatyczne, ale nie mogłem go skrócić:
Musi wyprowadzić się z
Read
powodu wymogu, że dane wejściowe są łańcuchem i przynajmniejEq
alboShow
w celu przetestowania równości lub przedstawienia wyniku.źródło
span
: Wypróbuj online!span
...Violet
powinno się to owijaćRed
, więc musisz dodaćRed
ponownie na końcu łańcucha.succ Violet
nie będzie działać dlaEnum
s nieSiatkówka ,
6558 bajtówWypróbuj online!
Wyjaśnienie
Zaczynamy od dołączenia
(.[a-z]+)
do danych wejściowych, zamieniając je w regex, który pasuje do koloru wejściowego, po czym następuje dokładnie jeden dodatkowy kolor (przechwytywanie tego drugiego).Teraz
:
zamienia dane wejściowe stołu montażowego na własne wyrażenie regularne. Tak więc poprzedni wynik staje się wyrażeniem regularnym i jest dopasowywany do listy kolorów. Dopasowanie (pojedyncze) zostanie zastąpione pierwszą grupą przechwytującą (tj. Następnym kolorem w cyklu) i zwrócone. Wyjście na końcu programu odbywa się automatycznie.źródło
\1
Vim,
59565352 bajtów-1 bajt dzięki tsh
źródło
Java (JDK 10) , 77 bajtów
Wypróbuj online!
Kredyty
źródło
s->"RedOrangeYellowGreenBlueIndigoVioletRed".split(s)[1].split("(?=[A-Z])")[0]
s->"Red Orange Yellow Green Blue Indigo Violet Red".split(s)[1].split(" ")[1]
Kokos , 79 bajtów
Wypróbuj online!
źródło
s->"# green indigo yellow # # orange blue # violet red".split()[ord(s[0])%12]
Łuska , 28 bajtów
Wypróbuj online!
Być może istnieją lepsze opcje zarządzania argumentami, ale to najlepsze, co mogłem znaleźć
Wyjaśnienie
źródło
Stax ,
313029 bajtówUruchom i debuguj
To używa instrukcji tłumaczenia pierścienia. Zastępuje każdy element w tablicy następującym po nim z „pierścienia dekodera”. Zwykle służy do zastępowania znaków w ciągu, ale można go również stosować do całego ciągu, jeśli jest zawinięty w tablicę singletonów.
Oto rozpakowana, nieprzygotowana, skomentowana reprezentacja ascii tego samego programu.
Uruchom ten
źródło
J ,
67 6462 bajtów-2 bajty dzięki FrownyFrog
Wypróbuj online!
źródło
&.
faktycznie działa na to. Wypróbuj onlineR ,
10993 bajtówWypróbuj online!
-16 podziękowania dla Giuseppe za skorzystanie z
match
poradyźródło
match(y,x)%%7+1
indeksowanie jest krótsze niż twojeif
oświadczenie. Dodatkowo wbudowanecolors()
zawiera wiele nazw kolorów, jeśli znajdziesz indeksy :)colors()
że nie zawieraindigo
! No cóż, nadal +1!match
jest lepiej tutajcolors()
: /Partia, 97 bajtów
Objaśnienie: W
call
drugim wierszu efektset s=%s:Red =%
polega na podstawieniu parametru do polecenia i jego ocenie, zamieniając go na np. , Który usuwa przedrostek ciągu zawierającego parametr. Podstawienie w trzecim wierszu zastępuje następnie wszystkie spacje separatorami instrukcji i komentarzami. Działa to, ponieważ podstawianie ciągu następuje przed analizą.źródło
Rubinowy
-n
,7569 bajtówWypróbuj online!
źródło
i&&
rzecz? Nie trzeba tego sprawdzaćnil
, ponieważ „Ignoruj błędy, jeśli nie jest to kolor”.Julia 0.6 , 76 bajtów
Wypróbuj online!
To obsługuje Violet-> Red poprzez recykling sznurka z
^
operatorem mocy .Oto nieco dłuższe rozwiązanie bez wyrażeń regularnych:
źródło
PowerShell , 74 bajty
Wypróbuj online!
Wyciąga ciąg
"Red ... Violet "
i mnoży go przez dwa, aby poprawnie obsłużyćViolet -> Red
przypadek testowy. Następnie-split
ten ciąg wejściowy$args
daje nam tablicę dwóch ciągów. Bierzemy drugi jego ciąg[1]
, a następnie-split
ten biały znak, aby dać nam tablicę ciągów i wziąć pierwszy[0]
.Na przykład w przypadku wprowadzania
"Yellow"
pierwszy krok spowoduje@("Red Orange ", " Green Blue Indigo ... Indigo Violet ")
. Bierzemy drugi z nich, dzielimy go na białą spację (która usuwa białą spację), w rezultacie@("Green", "Blue", ... "Violet")
, więc biorąc[0]
jedną z nich daje właściwy następny ciąg.źródło
Język formuły IBM / Lotus Notes,
7974 bajtyPoprzednia wersja 79:
Pobiera dane wejściowe z edytowalnego pola tekstowego o nazwie
a
.Nie ma TIO dla języka formuł, więc oto kilka zrzutów ekranu.
źródło
PHP, 92 bajty
Wypróbuj online!
źródło
Kotlin , 73 bajty
Wypróbuj online!
Korzystając z faktu, że wiele kolorów ma 6 znaków, te, które nie są poprzedzone spacjami, mają długość 6 znaków. Mamy nadzieję, że dopuszczalne jest, aby niektóre kolory były drukowane ze spacjami przed nimi.
np. czerwony jest
" Red"
, niebieski jest" Blue"
źródło
SmileBASIC,
9484 bajtówźródło
Gema , 67 znaków
Przykładowy przebieg:
Gema , 59 znaków
Nudny. Najgłupsze podejście w historii, ale dość krótkie.
Przykładowy przebieg:
źródło
q / kdb + ,
5955 bajtówRozwiązanie:
Przykłady:
Wyjaśnienie:
Utwórz słownik koloru => następny kolor, wejście jest kluczem do słownika:
Premia:
Ma 53 bajty w K4:
źródło
Japt ,
4543 bajtów-2 bajty dzięki Shaggy
Wypróbuj online!
źródło
N
sed, 72 bajty
Wypróbuj online
Przykład 1:
Wkład:
Wynik:
Przykład 2:
Wkład:
Wynik:
źródło