Jestem zmęczona, ale nie mogę zasnąć. Pomóż mi policzyć owce.
Biorąc pod uwagę wejściową N (dodatnią liczbę całkowitą), spraw, aby N owiec przeskoczyło przez ogrodzenie ascii, jak na poniższej próbce. Tylko jedna klatka powinna być wyświetlana jednocześnie:
o |-|
──|-|── 0
o|-|
──|-|── 0
o
|-|
──|-|── 0
|-|o
──|-|── 0
|-| o
──|-|── 0
o |-|
──|-|── 1
o|-|
──|-|── 1
o
|-|
──|-|── 1
Licznik należy przechowywać w prawym dolnym rogu „podłoża”. Dozwolone są końcowe i wiodące białe znaki i znaki nowej linii. Jeśli Twój wybrany język ma trudności z czyszczeniem ekranu dla każdej klatki, możesz dodać wystarczającą liczbę nowych wierszy, aby wyczyścić ekran - w odpowiedzi podaj, ile linii dodajesz w tym celu. Program powinien zakończyć się, gdy niąta owca znajduje się na piątej płodności.
Muszę wstać jutro wcześnie, więc wygrywa najkrótszy kod w bajtach. Prześlij funkcję lub pełny program. Obowiązują standardowe luki.
N=3
ostatnia klatka będzie zawierała owcę na prawym końcu, a licznik nadal powie2
. Czy to jest poprawne?Odpowiedzi:
MATL ,
605653 bajtówAnimacja z powyższym kodem działa bardzo szybko. Następująca wersja zawiera pauzę, aby spowolnić animację, a tym samym łatwiej ją zobaczyć (niewymagane przez wyzwanie), kosztem 4 dodatkowych bajtów:
Wypróbuj w MATL Online! Tłumacz jest wersją beta; odśwież stronę, jeśli nie działa.
Lub zobacz nagranie z kompilatora offline:
Wyjaśnienie
źródło
JavaScript (ES6),
120124 bajtówOstatnia obliczona klatka jest wyświetlana jako pierwsza. Dzięki temu numer skoku wynosi
n-1
In
alert
, charaktery mają różną szerokość, więc wygląda na zepsute.Pokaż fragment kodu
Poprzednia odpowiedź:
120 bajtów, numer skoku jest niepoprawny, ponieważ zaczyna się od 1 zamiast 0
źródło
alert
. Mam ten sam wynik niż Chrome z edge, a gorzej z Firefoxem.JavaScript (ES6),
144142 bajtyCzyści dane wyjściowe i czeka 300 ms między każdą ramką:
Możesz to przetestować tutaj (pamiętaj, aby otworzyć konsolę).
źródło
4
do5
) po tym, jak ostatnia owca skoczyła przez płot ...Rubinowy, 83 bajty
Drukuje na standardowe wyjście. Wyjście oddzielone znakami nowej linii. Zmniejszenie wysokości ekranu do 3 powoduje, że jednocześnie widoczny jest tylko jeden obraz.
źródło
C #, 234 bajtów
źródło
string[] args
i pod nimi znajdują się białe znakifor (int
.Int32.Parse
może byćint.Parse
.Program
na justP
lub cośstring
może byćvar
. Liczba całkowita w pętli for może zostać zainicjowana w tym samym czasie, gdy parsowanaargs[0]
jest liczba całkowita.Action<string[]>
i możesz usunąć nawiasy wokół zewnętrznej pętli for, więc myślę, że mam 200 bajtów:using C=System.Console;a=>{for(int n=0;n-1+""!=a[0];++n)foreach(int p in new[]{5,6,3,10,11}){C.Clear();C.Write(" \n |-| \n──|-|── ".Remove(p,1).Insert(p,"o")+n);for(var w=3e7;w>0;--w);}};
PHP + JavaScript, 168 bajtów
Zapisz do pliku
s.php
, zadzwoń w przeglądarce za pomocąs.php?n=<n>
.Wywołuje się z nowymi parametrami dla każdej ramki, bez opóźnienia.
Mógłbym zaoszczędzić 5 więcej
index.php
; ale nie chcę iść tak daleko.źródło
C AB|─|DE ──|─|── $c",EABCD,$s),($c+=!$f)<$n?"
.short_open_tag
. Włącz (domyślnie) lub dodajphp
+ spację po<?
.Tcl, 168 bajtów
Wersja z ekranem o wysokości 10 wierszy. (Zamień
7
poniżej na wysokość ekranu w kolumnach minus cztery).Działa to bardzo szybko, więc możesz dodać pauzę w drugim wierszu:
Tcl, 177 bajtów
Działa poprzez ponowne użycie łańcucha u góry do dwóch różnych rzeczy:
Sam szablon jest obrazem ciągu do wyświetlenia. Najpierw mapujemy (zamieniamy ciąg) cyfrę aktualnej pozycji owcy (pętla wewnętrzna) na „o”. Następnie odwzorowujemy pozostałe cyfry na spacje. Następnie wypisujemy powstały ciąg.
(Sam łańcuch zaczyna się po ostatnim {w trzecim wierszu i kończy od skrajnego lewego} w ostatnim wierszu.)
źródło
QBasic, 110 bajtów
Pętle nad
5*n
kleszczami. Przy każdym kleszczu czyści ekran, drukuje licznik i liczbę owiec, a następnie używaLOCATE
do wydrukowaniao
w odpowiednim miejscu. Przyx
czym kod pozycji między 0 i 4:(x=2)+2
x=2
to prawda,-1+2
=1
x=2
jest fałszem,0+2
=2
1+x-(x>1)+x\3
x
jest0
lub1
,x>1
jest fałszywe ix\3
jest0
:1+x-0+0
=1
lub2
x
jest2
,x>1
jest prawdziwe ix\3
wynosi0
:1+x-(-1)+0
=4
x
jest3
lub4
,x>1
jest prawdą ix\3
jest1
:1+x-(-1)+1
=6
lub7
Na koniec
SLEEP
przez 1 sekundę i pętlę. Jeśli nie masz nic przeciwko wciśnięciu Enter przy każdej klatce, mogę ogolić dwa bajty, usuwając argument doSLEEP
.źródło
PHP,
132131 bajtówEdycja po komentarzach (dzięki!):
Który nie jest golfem:
Oryginalny post
Testowane na ubuntu (nie wiem, czy
system("clear")
działa na systemie Windows)Nie golfowany:
źródło
clear
nie potrzebuje cytatów.cls
w DOS.$i=0;
, ostrzeżenia zwykle nie są wyświetlane w kodzie golfowym (-5 bajtów). Z tego samego powodu nie potrzebujesz cudzysłowówclear
io
(-4 bajtów). Zastąp\n
s rzeczywistymi znakami nowej linii (-2 bajty). Ponieważ masz tylko wyrażenia, a nie instrukcje, możesz umieścić wfor
pętli wszystko oprócz ostatniego , co pozwala usunąć nawiasy kwadratowe (for(;;system(clear),$c=…)sleep(1);
) (-2 bajty). I na koniec zapomniałeś dodać warunek$i<$argv[0]
(+ 11 bajtów).node.js + sleep , 169 bajtów
Oryginalne rozwiązanie
node.js,
146142185 bajtówTestowane tylko z terminalem ubuntu (a teraz z n owcami):
To jest ramka co 9 ms. Bardziej kojąca wersja (ramka co 1s):
I bez golfa:
źródło
05AB1E ,
666059 bajtówWykorzystuje kodowanie CP-1252 .
Wyjaśnienie
Iteracja odnosi się do wewnętrznej iteracji (0 -> 4) podróży owiec.
Główne pętle
Wygeneruj górny wiersz
Wygeneruj środkowy rząd
Wygeneruj dolny wiersz
źródło
Galaretka ,
55 5453 bajtówTryItOnline
Drukuje ramki oddzielone liniami.
W jaki sposób?
źródło
Python 2,
171159144 bajtów,163151136 znakówRozwiązanie za pomocą funkcji rekurencyjnej. Zadzwoń jako f (int)
EDYTOWAĆ
-12 po ponownym przeczytaniu komentarzy i stwierdzeniu, że liczba nie musi się zwiększać, gdy owce dotrą do końca pola
-15 poprzez bezpośrednie iterowanie listy indeksów i utratę zmiennej
Notatki
Zakłada kodowanie UTF-8
Użycie - zamiast ─ (jak w odpowiedzi @Luis MATL) obniżyłoby bajt o 8, aby dopasować liczbę znaków i utraciłoby zależność UTF-8
Dodano 50 nowych linii - dane wyjściowe znajdują się na dole konsoli (tańsze niż importowanie i używanie systemu os.system („wyczyść”) i działa w systemach Windows i Linux)
Wersja z 1 sekundowym opóźnieniem między wyjściami (170 bajtów, 162 znaków)
źródło
Bash + standardowe narzędzia Linux (339 bajtów)
źródło