Niektórzy liczą owce, aby zasnąć. Inni liczą kozy.
Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą N i wysyła N-1 przebudzonych kóz, a następnie jedną śpiącą kozę, tak jakby ktoś liczył N kóz, a na ostatniej zasnął.
Przebudźcie się kozy wyglądają tak:
\
___/o>
-(___)"
'' ''
Śpiące kozy wyglądają tak:
\
___/->
,(___)"
`` ``
Są one połączone łańcuchem z pojedynczym odstępem między brodą a ogonem sąsiednich kóz:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
Dane wyjściowe mogą mieć końcowe spacje i jedną końcową nową linię.
Najkrótszy kod w bajtach wygrywa.
Przykłady
N = 1:
\
___/->
,(___)"
`` ``
N = 2:
\ \
___/o> ___/->
-(___)" ,(___)"
'' '' `` ``
N = 3:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
N = 4:
\ \ \ \
___/o> ___/o> ___/o> ___/->
-(___)" -(___)" -(___)" ,(___)"
'' '' '' '' '' '' `` ``
Większy N powinien równie dobrze działać.
code-golf
string
ascii-art
kolmogorov-complexity
Hobby Calvina
źródło
źródło
Odpowiedzi:
MATL ,
5653 bajtówWypróbuj online!
Wyjaśnienie
Przebudźcie się koza
Przebudzoną kozę można zapakować w sznurek
i rozpakowane, co zostanie wkrótce wyjaśnione. Jednak symbole pojedynczego cudzysłowu musiałyby zostać zduplikowane , aby je uniknąć, więc literał ciąg musiałby zostać zdefiniowany jako (zwróć uwagę na otaczające symbole pojedynczego cudzysłowu i powielenie oryginalnych):
Aby zapisać bajty, definiujemy ciąg za pomocą znaków o jeden punkt kodowy powyżej , unikając w ten sposób powielania. Literał łańcuchowy staje się
Na końcu kodu odejmiemy 1 i przekonwertujemy na char. (Moglibyśmy to zrobić teraz, zaraz po literałach ciągu; ale pozostawienie go na koniec uratuje kolejne powielanie pojedynczych cudzysłowów, jak zobaczymy).
Aby wyjaśnić, w jaki sposób ciąg jest rozpakowywany, będziemy pracować z oryginalnymi znakami (które są tworzone na końcu kodu przez odjęcie 1), więc wyjaśnienie jest łatwiejsze do naśladowania. Najpierw przekształcamy ciąg
w 8-rzędową tablicę znaków 2D, w porządku według kolumny (w dół, potem w poprzek). To automatycznie uzupełnia ostatnią kolumnę char 0 (na końcu kodu odejmowanie 1 przekształci ją w liczbę -1, co po konwersji na char daje ponownie char 0). Char 0 jest wyświetlany jako spacja. Tak skutecznie wypełniamy spacjami. Rezultatem przekształcenia jest
Teraz odwracamy w pionie:
a następnie transponuj i ponownie obróć w pionie, aby obudzić kozę:
Dwie operacje odwracania są potrzebne, ponieważ oryginalny spakowany ciąg znaków jest „odwrócony”. Ma to na celu wykorzystanie faktu, że rzeczywista tablica znaków 2D reprezentująca kozę ma 6 początkowych spacji w pierwszym rzędzie, które są automatycznie wypełniane przez wypełnienie, gdy łańcuch jest przekształcany w 8-rzędową tablicę 2D. Ale wypełnianie odbywa się na końcu (nie na początku) ostatniej kolumny (nie w wierszu), stąd odwrócenie i transpozycja.
Śpiąca koza
Śpiąca koza jest generowany z obudzić kozła przez transliteracji znaków
o
,'
,-
na-
,`
,,
odpowiednio. W rzeczywistości, ze względu na transformację jednego kodu punktowego powyżej, transliteracji znakówp
,(
,'
na.
,a
,-
, który ponownie ratuje nas od konieczności powielania symbolu apostrofu. Dlatego na końcu programu pozostawiono operację odejmowania-jeden.Struktura kodu
N
czasy przebudzenia kozy , pracując z punktami kodowymi zwiększonymi o 1.Skomentowany kod
źródło
Python 3.6, 102 bajty
Tak, f-stringi !
źródło
JavaScript, 122 bajty
Odpowiedź
Uwaga dodatkowa
W poniższym kodzie (91 bajtów) kozy są ustawione pionowo. Nie jest on zgodny z formatem wyjściowym, ale może warto zauważyć, że wyrównanie w poziomie wymagane w formacie wyjściowym wymaga więcej bajtów:
źródło
Partia, 234 bajty
Pobiera dane wejściowe ze standardowego wejścia. Batch ma problemy z
"
iz>
różnych powodów, więc muszę użyć symboli zastępczych, a następnie zmienić je na końcu.źródło
set/pn
działa.^
Ucieka znaków.Pyke,
5654 bajtówWypróbuj tutaj!
4 bajty za dużo, ponieważ Pyke nie dopuszcza podwójnych cudzysłowów w ciągach :(
źródło
JavaScript (ES6),
110109 bajtówKonieczność obsługi wszystkich trzech rodzajów znaków cytowania była irytująca, ale na szczęście komentarz @ pinkfloydx33 dał mi błysk inspiracji, że mogłem dodać cudzysłowy na końcu, oszczędzając w ten sposób 1 bajt.
źródło
'+"'' ''"
(zakładając, że pojedyncze cudzysłowy sąf=
w mojej liczbie bajtów, jest tylko dla kompletności.GolfScript , 91 bajtów
Wkład:
3
Wydajność:
Wyjaśnienie
Wypróbuj online!
źródło
Galaretka ,
6256 bajtówPrzetestuj w TryItOnline
W jaki sposób?
źródło
PHP, 200 bajtów
źródło
C ++, 180 bajtów
źródło
#include <string>
ani jednego,using namespace std;
ani jednegousing std::string;
bajtu, jeśli twoja funkcja nie może zostać skompilowana bez nich.Pypeć , 60 + 1 = 61 bajtów
Dodano jeden bajt dla
n
flagi.Konstruuje obudzoną kozę jako listę linii i wciąga ją
y
. Sznurek mnoży, abya-1
obudzić kozy. Zastępuje-o'
z,-`
INy
i Łączy go do końca. Wydruki, oddzielone znakiem nowej linii.Wypróbuj online!
(Wydaje mi się, że po raz pierwszy używam składni Pip-a
\"...\"
, która pozwala na dosłowne podwójne cudzysłowy w ciągu).źródło
CJam , 58 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python 2.7,
101113 bajtówEdycja: Dodano definicję funkcji
od golfa:
Uwaga: Python2.7 jest o jeden bajt krótszy niż Python3, ponieważ nie wymaga nawiasów podczas drukowania.
źródło
n
, a przeoczyłeś zmianę ogona śpiącego kozła (widziałeś również odpowiedź Py 3.6?).print "...
i umieścić wszystko w jednym wierszu, używając 1;
do oddzielenia dwóch instrukcji. Ogon nadal nie jest pokazany w golfowym kodzie, ale wygląda na to, że go policzyłeś, co powinno dać 112 bajtów .05AB1E , 66 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Bash + GNU Coreutils,
165155 bajtówBiegnij z:
Zasadniczo drukuje programu N razy tego samego kozła (odwrócone) i substytuty pierwsi
-
, dla,
, pierwszyo
na-
i pierwszy'' ''
dla backticks. Następnie odwraca linie.źródło
PHP,
133131 bajtówZnalazłem dwa bajty do gry w golfa z dala od jednej wersji bez kręconych.
źródło
PowerShell v2 +, 96 bajtów
(ab) używa domyślnego
Write-Output
formatowania, aby uwzględnić nową linię między elementami. Wykorzystuje konkatenację i mnożenie łańcucha w celu konstruowania kóz linia po linii. Jedyną sztuczką jest pierwsza linia,$n--
która wypisuje prawidłową liczbę uszu, a następnie dekrementacja,$n
więc jest poprawna dla pozostałych linii.źródło
Rubin, 102 bajty
źródło
Python 3. 170 bajtów
hmm, najwyraźniej konstruowanie łańcucha bez manipulowania listą daje krótszy kod
źródło
Formuła IBM / Lotus Notes,
187174188 bajtów(nie konkuruje)EDYCJA Znaleziono miejsce, które nie powinno tam być i usunęło niepotrzebne @Implode
188, ponieważ przeoczyłem fakt, że ogon śpiącej kozy jest inny :-(
Nie golfowany:
Stosowanie:
Utwórz formularz Notatki z dwoma polami o nazwach ai g.
a = edytowalny, liczba, g = obliczony, tekst.
Wklej powyższą formułę do g i ustaw domyślną wartość 0.
Ustaw czcionkę formularza na Terminal.
Utwórz nowy dokument za pomocą formularza, wprowadź cyfrę ai naciśnij F9, aby zaktualizować kozy.
Próbki:
Nie konkuruje, ponieważ format zepsuje się, gdy liczba kóz osiągnie szerokość strony.Biorąc nieskończenie szeroki ekran to
powinnobędą pracować dla dowolnej liczby kózthough. Tak to wygląda, gdy strona nie jest wystarczająco szeroka.źródło
Emacs Lisp, 241 bajtów
„Nieco golfa”
gdzie
s
jest jedna śpiąca koza,a
dodaje obudzoną kozę ig(n)
jest funkcją liczenia.źródło
Java 8,
236222218173 bajtówWyjaśnienie:
Wypróbuj online.
źródło
Płótno , 58 bajtów
Wypróbuj online!
Dość nudna odpowiedź, naprawdę ... buduje obudzoną kozę, powtarza ją poziomo
n-1
, buduje i dodaje śpiącego kozła, drukuje wynik.źródło