21 fryzur apokalipsy
Biorąc pod uwagę listę liczb od 1 do 21 (lub od 0 do 20), wyjmij „zszyty razem” rysunek następujących powierzchni ( patrz zasady dotyczące informacji o zszywaniu ):
___ ,,, ooo === +++ ### -*~*-
(o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
*** ||| _/7 ))) ((( xxx @__
(o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
((_ >X< '*` ^^^ )|( \|/ &&&
(o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Każda unikalna twarz wymieniona w nowym wierszu (# to identyfikator liczby całkowitej twarzy):
___
(o o)
ooO--(_)--Ooo #1
,,,
(o o)
ooO--(_)--Ooo #2
ooo
(o o)
ooO--(_)--Ooo #3
===
(o o)
ooO--(_)--Ooo #4
+++
(o o)
ooO--(_)--Ooo #5
###
(o o)
ooO--(_)--Ooo #6
-*~*-
(o o)
ooO--(_)--Ooo #7
***
(o o)
ooO--(_)--Ooo #8
|||
(o o)
ooO--(_)--Ooo #9
_/7
(o o)
ooO--(_)--Ooo #10
)))
(o o)
ooO--(_)--Ooo #11
(((
(o o)
ooO--(_)--Ooo #12
xxx
(o o)
ooO--(_)--Ooo #13
@__
(o o)
ooO--(_)--Ooo #14
((_
(o o)
ooO--(_)--Ooo #15
>X<
(o o)
ooO--(_)--Ooo #16
'*`
(o o)
ooO--(_)--Ooo #17
^^^
(o o)
ooO--(_)--Ooo #18
)|(
(o o)
ooO--(_)--Ooo #19
\|/
(o o)
ooO--(_)--Ooo #20
&&&
(o o)
ooO--(_)--Ooo #21
Twarz jest następująca:
hhhhh
(o o)
ooO--(_)--OooS
Gdzie h
jest dynamiczna apokaliptyczna fryzura i S
potencjalny łącznik.
Przykłady
Wejście: [1,2,3,4,5]
Wynik:
___ ,,, ooo === +++
(o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Wejście: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]
Wynik:
___ ,,, ooo === +++ ### -*~*- *** ||| _/7 ))) ((( xxx @__ ((_ >X< '*` ^^^ )|( \|/ &&&
(o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Wejście: ["Fraggle Rock"]
/ [22]
/ [-21041024]
/[22,23,24,25,26]
Wynik: Nobody cares.
Wejście: [1,1,1,1]
Wynik:
___ ___ ___ ___
(o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Zasady
- Wcześniejsze i końcowe znaki nowej linii / spacje / łącznik są w porządku.
- Twarze mogą pojawiać się na wejściu więcej niż jeden raz.
- Jeśli na wejściu jest niepoprawna liczba, możesz mieć niezdefiniowane zachowanie.
- Szwy:
- Zszyte ściany zostaną połączone pojedynczym łącznikiem w dolnej (trzeciej) linii.
- Wszystkie twarze będą na jednej linii (w przeciwieństwie do pierwszego rysunku).
- Dane wejściowe mogą być indeksowane 0 lub 1, przy czym 20 oznacza maksimum dla 0, 21 dla 1.
- To jest golf golfowy , wygrana o najniższej liczbie bajtów.
Odpowiedzi:
Japt
-R
,12211711311010910710510410310210099 bajtów1-indeksowany, z zawijaniem indeksu. Postępowałem zgodnie ze specyfikacją tutaj, która wymaga łącznika między ostatnią linią każdej twarzy, a nie przypadków testowych, które zawierają łącznik po ostatniej linii każdej twarzy.
Spróbuj
źródło
&
celu skorzystaniam³
było genialne. Zwłaszcza, że dzięki temu był oparty na 1.&
tam przenieść, gdybym zrobił to w oparciu o 1;) Wciąż czuję, że jest tu więcej do gry w golfa, ale jest już późno, więc będzie musiał poczekać do jutra.Python 2 , 209 bajtów
Wypróbuj online!
Indeksowanie w oparciu o 0; nic szczególnie sprytnego tutaj, tylko dane dostępne poprzez krojenie i użycie exec zamiast pętli.
źródło
Węgiel drzewny ,
103102 bajtówWypróbuj online!Link jest do pełnej wersji kodu. Wyjaśnienie:
Zapętlić dwa razy wejście. Każdy wynik jest następnie domyślnie drukowany w osobnym wierszu.
W drugiej pętli po prostu wygeneruj oczy.
Zawiń fryzurę 6 cali
-
, inne fryzury w przestrzeni.Wyodrębnij trzy znaki fryzury ze skompresowanego sznurka.
Wstaw dziewięć odstępów między włosami lub oczami.
Przesuń 4 pola w lewo.
Wydrukuj pozostałe twarze, połączone za pomocą
-
.źródło
R ,
413391 bajtówDzięki Giuseppe za 22 bajty mniej i otrzymanie tego poniżej 400 bajtów.
Wypróbuj online!
źródło
utf8ToInt
iintToUtf8
rep
aby skrócić:for(i in s)K(I(c(rep<--
JavaScript (ES6),
200199 bajtówOczekuje 1-indeksowanych danych wejściowych.
Wypróbuj online!
Skomentował
źródło
Rubin , 164 bajty
Zero indeksowane. Wypróbuj online!
Wszystkie trudne rzeczy dzieją się w górnej linii.
"_,o=+# *| )(x ^ &"
zawiera wszystkie fryzury z 3 identycznymi postaciami, z których wybieramy tęi
postać,j
.jeśli
j
nie jest spacją, poniższe wyrażenie zwraca 3 kopie znaku. Jeśli jest to spacja, wybieramy odpowiednią fryzurę pomiędzy%w{}
. „Dziwne” fryzury mają numery 6,9,13,14,15,16,18,19 ii%11-2
dają idealny hasz do0..7
Pozostało tylko wypełnienie 14 pól (na środku) i wydrukowanie odpowiedniej liczby środków / dna.
źródło
center(14)
Python 2 , 204 bajty
Wypróbuj online!
źródło
Java 8,
273263 bajtówWypróbuj online.
Wyjaśnienie:
źródło
R ,
247242 bajtówWypróbuj online!
Teraz próbuję doprowadzić R do łatwiejszej do zarządzania liczby bajtów ...
Ponieważ manipulowanie postaciami w R jest tak beznadziejnie gadatliwe, postanowiłem wymienić wszystkie wzory twarzy i fryzur w niezmienionej formie. Do ładnego drukowania fryzur, w których używam
format
funkcjijustify="centre"
. Niestety, musimy użyć dodatkowego znaku wypełniania,i==20
ponieważformat
oblicza wypełnienie tak, jakby ukośnik został pominięty, jak\\|/
.Obecna wersja nie używa łącznika końcowego.
Edycja: Podziękowania dla JayCe za -2 i Giuseppe za -3 bajty.
źródło
justify="centre"
że prawdopodobnie mogę go ponownie wykorzystać. Minus dwa znaki :"/"=rep
format(h[i],,,,"c",14+!20-i)
*
wygląda jeszcze lepiej - teraz przypominastring * number
operację wspólną dla wielu innych języków!DO! ( C-Wow 1.1.0), 251 bajtów
(Wymaga przekazania argumentów podczas wykonywania programu, oddzielonych spacją)
Wersja bez golfa:
źródło
Czerwony ,
333319 bajtówWypróbuj online!
źródło
Rubinowy , 163 bajty
Wypróbuj online!
0-indeksowane. I bawił się poziom rzeki st za odpowiedź i znaleźć inne podejście do zakodowania fryzury, pozornie podobnej golfiness. Tutaj traktujemy „najdłuższą” fryzurę 5-znakową jako szczególny przypadek, trywialne wzory w pierwszej części listy są kodowane przez 1 znak, a w drugiej części wszystkie wzory 3-znakowe są wymienione dosłownie, bez względu na to - czy te znaki są odrębne czy nie. Wreszcie pojawia się płyta kotła o małpiej twarzy.
źródło
C (gcc) ,
210212 bajtów-4 bajty dzięki ceilingcat . (Rozrósł się ponownie, gdy naprawiłem błąd, który miał oryginalny kod).
Całkiem proste.
Wypróbuj online!
źródło
PowerShell ,
187171 bajtów-16 bajtów dzięki mazzy
Wypróbuj online!
Indeksowane 0, ma łącznik końcowy.
Rozwinięty:
Nic nadzwyczajnego. Tylko pierwsza linia ma porządną logikę. Indeksuje się w sznurku włosów za pomocą
$current_entry_value*3
is
czerpie ten kawałek za pomocą ubstring
, przed połączeniem wszystkich kawałków w jedną dużą linię. Natknąłem się na problem `` ucieczki przed następnym karetką, pozostawiając mnie zastanawiającego się, dlaczego dostaję błąd IndexOutOfBounds, ale to naprawiono. Teraz używam znacznie lepszego sposobu na połączenie pierwszej linii.195 bajtów, aby postępować zgodnie ze specyfikacją bez myślników początkowych / końcowych
źródło
Python 3 , 240 bajtów
Wypróbuj online!
źródło
Runiczne Zaklęcia , 313 bajtów
Wypróbuj online!
Racjonalnie kompaktowy pod względem kompresji ciągów znaków i ponownego wykorzystywania segmentów tam, gdzie to możliwe, a także wykorzystywania wartości wejściowych jako bezpośrednich przesunięć skoku, gdy
B
ranczowania.Jeśli dozwolone jest nadmiarowe końcowe miejsce, można je skrócić o 2 bajty, pomijając znak
4-
w ostatnim wierszu. +2 bajty,1-
jeśli-
nie ma tam finału (dopasowanie specyfikacji, naruszenie przykładów).Kawał,
" (o o) "
jest denerwujący, niemożliwy do skompresowania, ponieważ konstruowanie go przy użyciu takich rzeczy" "4*
kończy się dokładnie taką samą liczbą bajtów.Przekazywanie danych wejściowych> 21 robi fajne rzeczy. Np. Pojedynczy 22 daje dokładne golenie .
źródło