Klepsydra
Ta klepsydra ma 60 „piasków czasu” i całkowicie wypełnia każdą komorę. Zegar ma szerokość 19 znaków i wysokość 13 znaków. Każda komora ma 5 rzędów piasku, a na środku jest rząd, który może pomieścić 1 piasek. Górny rząd może pomieścić 17 piasków, następny 15 i tak dalej (patrz poniżej). Piaski wpadają do dolnej komory z prędkością jednego piasku na sekundę.
START 3 SECONDS LATER 38 SECONDS LATER
███████████████████ ███████████████████ ███████████████████
█.................█ 17 █.............. █ 14 █ █ 0
██...............██ 15 ██...............██ 15 ██ ██ 0
███.............███ 13 ███.............███ 13 ███....... ███ 7
█████.........█████ 09 █████.........█████ 09 █████.........█████ 09
███████.....███████ 05 ███████.....███████ 05 ███████.....███████ 05
█████████.█████████ 01 █████████.█████████ 01 █████████.█████████ 01
███████ ███████ ███████ . ███████ ███████ . ███████
█████ █████ █████ . █████ █████ . █████
███ ███ ███ . ███ ███.... ███
██ ██ ██ ██ ██...............██
█ █ █ █ █.................█
███████████████████ ███████████████████ ███████████████████
Wyzwanie
Wyświetl klepsydrę (nie są wymagane żadne cyfry ani nagłówki) po pewnym czasie (0 ≤ t ≤ 60).
Zasady kodowania
- Klepsydra powinna wyglądać dokładnie tak, jak pokazano tutaj. Możesz zamienić
█
znak i / lub.
znak na cokolwiek, co chcesz dopasować do swojego języka (Unicode, problemy ze zgodnością ASCII). - Wejście powinno być liczbą taką jak 45 lub 7. Wyświetl zegar po tych wielu sekundach.
- Dane wyjściowe można wyświetlić lub zapisać w pliku. Nie jest wymagany żaden dodatkowy tekst ani etykiety, jak pokazano powyżej - wystarczy klepsydra.
- Jeśli użytkownik wpisze t> 60, nie musisz obsługiwać błędu.
Zwrotnica
- Najkrótszy kod wygrywa.
Odpowiedzi:
JavaScript ( ES6 ), 203
208 233 270 256znakówEdytuj Zmieniono za pomocą pętli zamiast sekwencji wywołań.
Edytuj Dodane brakujące górne i dolne rzędy.
Funkcja zwracająca dane wyjściowe. Uruchom fragment w przeglądarce Firefox, aby go przetestować.
źródło
setTimeout( tick, 1000);
Python 2, 200
xnor stworzył 197 bajtową wersję na czacie .
Chciałbym opublikować wyjaśnienie, ale straciłem orientację, jak to naprawdę działa ...
Oto animowana wersja z przekleństwami:
źródło
Python 2.7,
362356347Wyjście po 38 sekundach:
źródło
C 544
Oto, co mam do tej pory dla rozwiązania C.
Skompilowano za pomocą następującego polecenia:
Trzeba przyznać, że ten język jest bardzo obszerny - takie stwierdzenie stanowiło pewną przeszkodę przy wychodzeniu z bloków, ale tak naprawdę szukałem pretekstu do ćwiczenia posługiwania się C.
Mam nadzieję, że podoba Ci się moje rozwiązanie i daj mi znać, jeśli widzisz sposoby poprawy.
źródło
for
zamiastwhere
,?:
zamiastif else
globalne zmienne int nie potrzebaint
,include
nie są potrzebne. (Lubię twoją matematykę)r,i,y,x,b,d,n[]={0,43,28,15,6,1,0,1,5,13,25,39,0};char H[14][20];main(s,a)char**a;{for(s=atoi(a[1]);y<13;){b=x=i=0;d=abs(y-6);d+=3<d?3:d;d=9-d?9-d:10;r=s>55?59-s:s>38?4:s>24?3:s>12?2:s>4?1:r;for(;b<19;)H[y][b++]=35;for(;x<19-2*d;x++)H[y][x+d]=(x>s-n[y]?" .":". ")[y>6];for(;i<r;)H[7+i++][9]=46;H[y++][b]=10;}puts(H);}
(uwaga, do długich komentarzy takich jak ten dodawane są dziwne niewidzialne znaki)Matlab, 252 bajty
Pomysł polega na zbudowaniu macierzy, która wygląda następująco:
Stamtąd łatwo jest wypełnić wpisy ciągami zależnymi od
n
(wypełnienie wszystkich wpisów, które są większen
i mniejsze niżn+60
kropkami)Ponieważ
n=38
otrzymujemy ten wynik:źródło
Java, 712
Dane wejściowe są pobierane z wiersza poleceń. Obsługuje zarówno wartości ujemne dla czasu, jak i większe niż wymagane.
wynik:
Wypełnia piasek od środka, rozszerzając się na zewnątrz. Prawdopodobnie mogę grać w golfa bardziej, jeśli się lenię, jak wypełnia dolną połowę i opróżnia górną połowę. Ale na razie mi się podoba.
źródło
Haskell 512 bajtów
Wejście
m 55
Wynik
Dane
m 48
wyjścioweźródło
++
. Możesz także zaoszczędzić niektóre bajty, wstępnie definiująclength
ireverse
.C #, 382
410nadal może być możliwe zmniejszenie go o kilka bajtów ...
Skrzypek - 38 sek
źródło
int u=60-22
a nie tylkoint u=38
?Rubinowy:
196190186185184 znakówCW, ponieważ nie jest dokładnie zgodny z wysłanymi próbkami, ponieważ pochłania piasek, zaczynając od lewej. Głównie tylko demonstracja
String.[]=
metody.Przykładowy przebieg:
Ruby: 215 znaków
To generuje dokładnie wymaganą wydajność:
Przykładowy przebieg:
źródło