Oto krakers solny ASCII :
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Oto dwa ułożone krakersy:
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Napisz najkrótszy możliwy program, który przyjmuje dodatnią liczbę całkowitą i rysuje stos tak wielu krakersów solnych ASCII.
Dane wejściowe mogą pochodzić ze stdin, wiersza poleceń lub możesz po prostu napisać funkcję. Dane wejściowe zawsze będą prawidłowe. Dane wyjściowe muszą przejść do standardowej lub najbliższej alternatywy.
Każdy ułożony cracker jest zawsze przesunięty o 2 znaki w dół i 7 znaków na prawo od crackera poniżej. Nie powinno być żadnych spacji ani obcych znaków nowej linii.
Najkrótszy program w bajtach wygrywa.
Przykłady
Jeśli wejście jest 1
wyjściem jest
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Jeśli wejście jest 2
wyjściem jest
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Jeśli wejście jest 3
wyjściem jest
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . __________|______
| . | . | . . . |
|______| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
I tak dalej.
code-golf
ascii-art
kolmogorov-complexity
Hobby Calvina
źródło
źródło
___|___
zamiast tego znajduje się górna granica ułożonych crackerów_______
. Domyślam się, że wyglądałoby to dziwnie, gdyby było to drugieOdpowiedzi:
CJam,
140125119116 bajtówWypróbuj online.
Jedna sól
Fragment kodu
pozostawia na stosie:
Ułożone solanki
Załóżmy, że sól z góry jest zapisana w Z.
źródło
JavaScript (E6) 249
259 289 304 345Nie jestem tak pewny kompresji łańcucha.Znaleziono dobrą kompresję ciągów.Prosta skrzynka na 1 cracker wydaje się trudna do zarządzania. Może być lepszy sposób ...Mniej więcej golfisty
To jest podstawowy kod, zanim zacząłem grać w golfa. To nie jest dokładnie to samo i działa tylko dla n> 2
Testuj w konsoli FireFox / FireBug
Wydajność
źródło
Python,
252241 znakówDzięki FryAmTheEggman i Vincentowi za wycięcie 11 postaci.
Przewaga krakersów:
Ten kod wydaje się naprawdę nieefektywny, ale pokażą inne odpowiedzi. Po prostu kopiuje i wkleja krakersa solnego do tablicy we właściwym miejscu, odpowiada, że najniższy krakers jest wyłączony o 1 znak, a następnie drukuje wszystko.
Mogę sprowadzić go do 230 znaków, jeśli użyję pliku zewnętrznego (kod 202 + rozmiar pliku 38 + 1 nazwa pliku).
źródło
n=1 upto 2^10
, abyśmy mogli być pewni, że Twój program naprawdę postępuje właściwie.list(' '*(7*N+12))
może być[' ']*(7*N+12)
.G=[list(' '*(7*N+12))for _ in R(2*N+5)]
zG=map(list,[' '*(7*N+12)]*(2*N+5))
Perl 189
Kradnąc kilka pomysłów na kompresję łańcucha od choroby, sprowadziłem się do:
Aby ułatwić przeglądanie w przeglądarce:
W kontekście, najlepiej jak potrafię wcześniej:
Perl 207
Dodanie nowego wiersza i wcięcia w celu ułatwienia czytania w przeglądarce:
Możesz zamienić „pop” na „<>”, aby wziąć licznik ze STDIN zamiast parametru wiersza poleceń i uzyskać 206 bajtów. Przejście do STDERR spowodowałoby spadek do 204 bajtów.
Gdybym mógł włączyć funkcję „powiedz” bez kary bajtowej, mógłbym dostać się do 202.
wywoływane jako:
źródło
say
bez kary, ponieważ jest to to samo, co uruchamianie w wierszu poleceń z-E
zamiast-e
.perl -E''
nie liczy się do wszystkich twoich postaci._|_
.Perl 201
(usuń nowe wiersze oprócz pierwszego, który uzyska #)
say
+<>
= 198.źródło
Haskell, 215 bajtów
Ten buduje stos krakersów indukcyjnie, wyciągając części krakersów i odstępy od kilku cyklicznych list:
Przepływ sterowania jest dość prosty; większość podstępu polega na ponownym wykorzystaniu jak największej części krakersów.
Nie golfowany:
źródło
Python, 299
Myślałem, że jestem sprytny, ale rozwiązanie okazało się zbyt skomplikowane i dłuższe niż jakiekolwiek proste podejście, ale nie mogłem się oprzeć opublikowaniu go. Program wyraźnie oblicza, który znak musi być narysowany w różnych pozycjach ciągu wyjściowego, bez zapętlania poszczególnych krakersów.
Ostatnia linia została rozwinięta, aby zobaczyć, co się dzieje:
źródło
C 284
Dla funkcji
f
i#define
s, z wyłączeniem niepotrzebnych białych znaków imain
. Zgodnie z komentarzem edc65, zawarłem 128-bitową liczbę całkowitą (co i tak zamierzałem zrobić), ale ponownie przeliczyłem się i mogę zrobić tylko 29 crackerów, zanim zaczną brakować blaty.Poniżej pełna funkcja i program testowy. Skomentuje to później.
Dane wyjściowe zawierają tylko cztery różne znaki. Są one dekodowane z liczb binarnych 0-3 przez
" _.|"
. Tablicas[]
zawiera liczbę całkowitą dla każdej kolumny danych wyjściowych, 2 bity na symbol, która jest zainicjalizowana tak, aby zawierała skrajnie prawy krakers.Pierwsza
for
pętla kopiuje poprzedni cracker, przesuwa go w lewo, aby go przesunąć w górę, usuwa prawy dolny róg za pomocą,&
a LUB - z poprzednim crackerem, 7 kroków w lewo.Druga
for
pętla dekoduje 2-bitową reprezentację każdego znaku na rzeczywisty znak i drukuje znak. Jest tu dużo kodu, aby po prostu wyeliminować niepotrzebne białe znaki na wyjściu. Jestem rozczarowany, że mój wynik poszedł w górę zamiast w dół od mojej poprzedniej wersji.Wydajność
To 29 krakersów. Zastąpiłem spację
-
innym wyglądem, aby pokazać, że nie ma końcowych spacji ani obcych znaków nowego wiersza na wyjściu.źródło
JavaScript (ES6) HTML5 - 233
236bajtówPrawdopodobnie nie jest to poprawna odpowiedź, ale po prostu nie mogłem się powstrzymać od opublikowania, przepraszam :-P
Test Firefox z
F(1)
,F(2)
,F(3)
, itd.Przykład: http://jsfiddle.net/Lvmg9fe8/7/
źródło
F(1)
lub jakikolwiek inny numer, po wpisaniu tego kodu w konsoli JS w przeglądarce Firefox…