Kręgle to kolorowe cukierki, w których występuje 5 różnych smaków; winogrono, zielone jabłko, cytryna, pomarańcza i truskawka reprezentowane odpowiednio przez (p) urple, (g) reen, (y) ellow, (o) i (r) ed. Zwykłem jeść kręgle, sortując wszystkie kolory, a następnie je kolejno. Po kilku dziwnych spojrzeniach w biurze udaję, że jem jak normalna osoba. Twoim zadaniem jest naśladowanie tego:
Twój kod (pełny program lub funkcja) otrzyma tablicę kręgli (10x10) jako dane wejściowe (w dowolnym rozsądnym formacie). Ta tablica będzie reprezentować stos nieposortowanych kręgli. Twoim zadaniem jest „zjedzenie” ich od najmniej ulubionego do ulubionego koloru. Moim preferowanym zamówieniem jest winogrono, zielone jabłko, cytryna, pomarańcza, truskawka, ale możesz dowolnie wybierać dowolne zamówienie, o ile jest ono konsekwentnie egzekwowane (podaj swoje preferencje w zgłoszeniu, aby móc Cię za niego osądzić). Po zjedzeniu każdego cukierka Twój kod wyświetli (w tym samym formacie, w którym pobierasz dane) pozostały stos z zjedzonym kawałkiem zastąpiony spacją. Powtórzysz, dopóki pozostanie tylko twoja ulubiona. Możesz wybrać dowolną kręgle do zjedzenia (może być losowe lub deterministyczne). Spacje końcowe muszą być zachowane.
Na przykład sekwencja wyjściowa może wyglądać następująco (użycie zwięzłości 5x5 i wyświetlanie spacji jako .
)
start 1 2 3 4 5 n
.org. .org. .org. .org. .or.. .or.. ..r..
prgrg .rgrg .rgrg .rgrg .rgrg .r.rg .r.r.
gggpr gggpr ggg.r ggg.r ggg.r ggg.r ....r
oyyor oyyor oyyor oyyor oyyor oyyor ....r
.r.p. .r.p. .r.p. .r... .r... .r... .r...
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach
Zasady TL; DR:
- Zgłoszenie może być pełnym programem lub funkcją
- Dane wejściowe można przyjmować w dowolnym rozsądnym formacie (łańcuch, lista, macierz itp.) Dowolną rozsądną metodą (STDIN, argumenty funkcji itp.). Jednak między rzędami musi być pewne rozgraniczenie
- Dane wyjściowe muszą być wytwarzane w tym samym formacie co dane wejściowe dowolną rozsądną metodą (STDOUT, powrót funkcji, itp.). Wyjściowy wynik pośredni może, ale nie musi być ograniczony
- Pierwsze wyjście będzie pierwszym wejściem
- Końcowe spacje muszą zostać zachowane
- Można użyć dowolnej kolejności kolorów (lista w odpowiedzi)
- Można zjadać każdy kręcik bieżącego koloru
- Ostatnim wyjściem będzie tylko twój ulubiony kolor i przestrzenie
- Jeśli to możliwe, dołącz link do kompilatora online, aby przetestować swoje zgłoszenie
Odpowiedzi:
Galaretka ,
16 1413 bajtówTryItOnline!
Najbardziej lubiani, jak na każdego, kto poważnie myśli o ich OCD, jest alfabetyczny!
Pobiera dane wejściowe i wyjściowe jako tekst (tzn. Wiersze są oddzielone nowymi wierszami).
3 bajty zapisane przez odwrócenie kierunku i zastosowanie innej metody: ocenianie zamiast znajdowania znaków z alfabetu.
W jaki sposób?
źródło
JavaScript (ES6),
747574 bajtówAromaty są zamawiane zgodnie z opisem w wyzwaniu: winogrono, zielone jabłko, cytryna, pomarańcza, truskawka.
Wyjścia pośrednie są oddzielone znakami nowej linii.
Przypadek testowy
W tym przypadku testowym użyto przykładu 5x5. Każdy inny rozmiar siatki powinien działać zgodnie z oczekiwaniami.
Pokaż fragment kodu
źródło
Grzmotnąć,
48, 46 bajtówAKTUALIZACJA:
Grał w golfa
Pobiera dane wejściowe na standardowe wejście, drukuje na standardowe wejście. Zjada fioletowy, zielony, żółty, a następnie pomarańczowy.
Równoważny program sed byłby:
Przykładowe dane wyjściowe (ograniczniki służą wyłącznie przejrzystości)
Wypróbuj online!
źródło
Python 2,
60 5756 bajtówrepl.it
Funkcja rekurencyjna, która je w odwrotnej kolejności alfabetycznej, pozostawiając zielone na koniec.
Dane wejściowe
s
to ciąg znaków z ogranicznikiem wiersza z liczbą porządkową mniejszą niż'g'
linia (na przykład nowa linia lub przecinek).Funkcja drukuje dane wejściowe, a następnie powtarza się, jeśli dane wejściowe zawierają coś większego niż „g”, przekazując dane wejściowe przy pierwszym wystąpieniu maksymalnego znaku zastąpionego spacją.
(Prawie część mojej galaretki .)
źródło
Perl,
5346 + 2 = 48 bajtówBiegnij z
-0n
-10 bajtów dzięki @Dada
Edycja: Również dzięki @Dada za wskazanie tego, zapomniałem wydrukować dane wejściowe jako pierwsze wyjście. To zostało naprawione.
W tej odpowiedzi jest trochę podstępu, więc podzielę się tym, co się dzieje.
Przede wszystkim Perl nie lubi przekazywania parametrów wieloliniowych. Zmienna
$/
jest separatorem rekordów wejściowych i za każdym razem, gdy dowolne wejście napotka znak w nim przechowywany, interpreter przerywa to wejście i rozpoczyna nowe wejście. Domyślną zawartością jest znak nowej linii\n
, co oznacza, że przekazanie ciągu wieloliniowego nie jest możliwe. Aby to zrobić, musimy cofnąć się$/
od jego zawartości. Tam właśnie-0
pojawia się flaga: ustawienie-0
zapisze sięnull
w zmiennej$/
, umożliwiając interpreterowi odczytanie wszystkiego do zmiennej niejawnej$_
naraz.Kolejną sztuczką jest
eval
stwierdzenie. Czym dokładnie jesteśmyeval
? Sprawdzamyeval
wyniksprintf
instrukcji, która jest podzielona w następujący sposób:Pierwszą rzeczą, która
sprintf
jest przekazywana, jest ciąg"say while s/%s/./;"
powtórzony 4 razy, więc:Następnie
sprintf
przekazywane są cztery znaki bez słowa,p,o,g,r
które są interpolowane wsprintf
instrukcji, zastępując każde wystąpienie%s
. Następnie otrzymujemy następujący ciąg znaków, który jest przekazywany doeval
funkcji:Każda
while
pętla ocenia wyrażenies/[color]/./
, które zastępuje pierwszą instancję dowolnego koloru w zmiennej niejawnej$_
kropką. Jeśli zostanie dokonana zamiana, zwraca1
, w przeciwnym razie nic nie zwraca. Ponieważs///
ma skutki uboczne, modyfikuje oryginalną zmienną$_
, której zawartość jest następnie drukowanasay
. Wykonuje się cztery wersje tej pętli, zastępując fioletowe, pomarańczowe, zielone, a następnie czerwone, pozostawiając tylko żółte.Przyczyną pozostawienia żółci jest to, że
y
nie może być gołym słowem, ponieważ w rzeczywistości jest to funkcja, a użyciey
zamiast którejkolwiek z tych liter spowodowałoby błąd. Mógłbym to zmienić, umieszczając wokół niego cudzysłowy (+2 bajty) lub używając dużej litery Y i czyniąc rozróżnianie wyrażeń regularnych (+1 bajt), ale w przypadku golfa kodowego każdy bajt się liczy, więc zdecydowałem, że naprawdę mi się podoba cytryna kręci się najbardziej.TL; DR:
Grape, Orange, Green Apple, Strawberry, Lemon
źródło
-0
flaga powinna zaoszczędzić około 10 bajtówFirst output shall be the first input
Perl,
303133 + 2 =323335 bajtówUruchom z
-n0
(kara 2 bajty).Najwyraźniej lubię jeść Skittles w kolejności alfabetycznej, ponieważ program okazuje się w ten sposób krótszy. Program tak naprawdę nie potrzebuje wielu wyjaśnień:
-n0
odczytuje dane wejściowe niejawnie (-n
znaczy „odczytuje dane wejściowe niejawnie”,-0
oznacza „nie przerywaj danych wejściowych w nowym wierszu”);for$x(g..r)
uruchamia pętlę z$x
zestawem od każdej litery odg
dor
z kolei;say;
wypisuje bieżący sygnał wejściowy, po wszelkich mutacjach; w miarę możliwościs/$x/ /
zastępuje jedną kopię$x
(konkretnie pierwszą) spacją; i&&redo
powtarza kod w nawiasach klamrowych (bez przesuwania licznika pętli), jeśli zamiana zakończyła się powodzeniem.Ten program można łatwo uogólnić na więcej smaków Skittle bez zmiany jego długości i będzie on działać ze stosem dowolnej wielkości.
Oto link Ideone, w którym możesz go przetestować. (Ideone nie pozwala ci określić opcji wiersza poleceń, więc musiałem dodać kilka linii na początku, aby ustawić,
-n0
a-M5.010
otrzymasz za darmo.)źródło
say;for$x(g..r){say while s/$x/ /}
?for$x(p,o,g,r)
co nie.say while
jest tylko jeden bajt dłuższy i jest to coś, co uznałem za alternatywę, więc mogę po prostu przejść do tego.say;
ponieważ zasady mówiąFirst output shall be the first input
for$x(g,o,p,r)
wersji, która najpierw kopiuje dane wejściowe. (Przeszukanie zabiera trochę czasu, jeśli brakuje kolorów, ale nie spodziewałbyś się, że zabraknie koloru w paczce kręgli.) Dla przypomnienia, wersja zsay;
pierwszym to 37 bajtów.C #,
134148 bajtówZamówienie:
G -> O -> Y -> P -> R
Użyłem podobnych rzeczy z odpowiedzi @ Poke, obecnie jednak nieco dłuższych, ponieważ muszę przekonwertować tablicę znaków na ciąg znaków; (
źródło
Java 7,
139 135 130 151 138135 135 bajtówZjada kręgle w kolejności: żółty, pomarańczowy, zielony, fioletowy, czerwony
Myślę, że to lepsze niż 2 wyciągi drukowane>.>
źródło
s.length
C 145 - 5 - 18 - 1 = 121 bajtów
bez golfa + ładna
Tu
a[][11]
oznacza n-sobą ciągi o długości 11, jeżeli wymagana jest jeden znak zakańczania więc technicznie tylko 10 widocznych znaków.kolejność: alfabetycznie
funkcja ta sprawdza
'g'
w danych wejściowych i eliminuje ją 1/1, a następnie zwiększa wartość zmiennej trzymającej,'g'
aż znajdzie następne dopasowanie (prawdopodobnie litera'o'
), a następnie eliminuje te dopasowane znaki.Minusem jest to, że ta funkcja jest po prostu zbyt ostrożna, więc jeśli twoje kręgle były w
26
różnych kolorach o nazwie kodowej od liter az, ta funkcja również poradzi sobie z tym wejściem ...źródło
#define
. To skróciło 19 bajtówOktawa, 49 bajtów
Zjada kręgle w kolejności alfabetycznej, najpierw najwyższy kod ascii.
źródło
ES6 (JavaScript),
72, 71 bajtówEDYCJE:
Wersja nierekurencyjna w JavaScript.
Grał w golfa
Dane wejściowe i wyjściowe są ciągami wieloliniowymi, zjadają tabletki w kolejności „fioletowy => pomarańczowy => zielony => żółty”.
Test
źródło
Python 3 -
1419975 bajtówProgram zjada kręgle w tej kolejności -
Orange Red Green Yellow Purple
.Edycja - Podziękowania dla Flp.Tkc, który pomógł zmniejszyć 24 bajty!
Wierzę, że można go jeszcze bardziej pograć w golfa, ponieważ wygląda to bardzo prosto.
źródło
orgy
.Vim
5755 bajtówZapisywanie dwóch bajtów poprzez usunięcie mojego separatora linii. Niestety znacznie trudniej jest go odczytać i sprawdzić poprawność :(.
Materiały niedrukowalne:
TryItOnline
Zjada w kolejności oypg, pozostawiając wszystkie r na koniec :)
źródło
Mathematica, 67 bajtów
Zjada czerwienie, potem żółcie, potem pomarańcze, a następnie fioletowe.
źródło
Java 7, 125 bajtów
Fioletowy, żółty, zielony, czerwony, pomarańczowy. Cieszę się, że w tym rozwiązaniu mogę wybrać zamówienie. :RE
Grał w golfa
Bez golfa
Wypróbuj tutaj!
Inne podejście do drugiej odpowiedzi Java autorstwa @Poke. Zaczynamy od wykonania kopii oryginalnego ciągu. Iterując po każdym kolorze, zastępujemy go za każdym razem, gdy zostanie znaleziony spacją, a następnie dołączamy nowy układ do ciągu wyjściowego, powracając po zjedzeniu wszystkiego oprócz pomarańczy.
Notatki
Separacja między krokami odbywa się za pomocą podwójnego nowego wiersza
\n\n
, ale jeśli siatkę wejściową można pobrać z końcowym znakiem nowej linii na końcu, można ją skrócić do just\n
.źródło
Haskell, 60 bajtów
Dane wejściowe to pojedynczy ciąg, w którym wiersze są oddzielone
,
. Zwracana wartość to lista ciągów znaków ze wszystkimi pośrednimi krokami. Porządek jest alfabetycznie, najpierw największy, więc pozostaje zielony. Przykład użycia:Prosta rekurencja. Zapisz listę wejściową jako wartość zwracaną, zamień największy element większy
g
spacją i ponownie wywołaj funkcję. Przypadek podstawowy występuje wtedy, gdy nie ma już elementu do usunięcia.źródło
MATL, 24 bajty
Wypróbuj online! Wolę jeść kręgle w odwrotnej kolejności alfabetycznej: mój ulubiony kolor to zielony. Wyjaśnienie:
źródło
QBasic, 125 bajtów
Nadużywanie reguł twórczych!
To przesłanie zakłada, że wiele rzeczy jest w porządku:
GORPY
)Mam również 130-bajtową wersję, która używa małych liter i nie zawiera błędów.
Oto przykładowy przebieg w QB64 ,
109
zmieniony na29
dla siatki 5x5:Wyjaśnienie
DATA 71,89,82,79
przechowuje kody ASCIIG
,Y
,R
, iO
.?INPUT$(109)
pobiera od użytkownika 109 naciśnięć klawiszy i drukuje je.Następnie wchodzimy w nieskończoną
DO ... LOOP
konstrukcję. Za każdym razemREAD
wprowadzamy kod ASCII bieżącego Skittle dos
. Następnie zapętlamy wiersze i kolumny od 1 do 10.SCREEN(r,c)
dostaje kod ASCII znaku na ekranie w wierszur
, kolumniec
. Jeśli tak jest równa aktualnej kręgles
, mySLEEP
na jedną sekundę, a następnie wydrukować w przestrzenir
,c
.Główna pętla biegnie cztery razy, usuwając zielone, żółte, czerwone i pomarańczowe kręgle. Przy piątej iteracji wystąpiły
READ
błędy, ponieważ nie mamy danych.źródło