Być może widziałeś drabinę Jakuba w muzeach nauki dla dzieci. Jeśli nie znasz ich wyglądu, na Wikimedia Commons znajduje się kilka zdjęć i przykładów wideo . Dzisiejsze wyzwanie polega na stworzeniu animowanej wersji gadżetu elektrycznego ASCII. Ostatecznie powinien wyglądać mniej więcej tak:
Konstrukcja drabiny
Oto podstawowy kształt drabiny o wysokości ( H ) 6:
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
Liczby po lewej wskazują po prostu numer wiersza dla tego przykładu i nie powinny być uwzględniane w danych wyjściowych. Odniesiemy się do danego wiersza po jego numerze ( R ). Wiersz 0 jest na dole ¯¯
. Każdy rząd od 1 do H składa się z czterech części:
- Spacja
(U + 0020) powtórzona ( H - R ) razy
\
Cięcie z tyłu (U + 005C)- Spacja
(U + 0020) powtórzona (2 * R ) razy
/
Cięcie do przodu (U + 002F)
Wiersz 0 jest identyczny, z wyjątkiem tego, że oba ukośniki zostały zastąpione makronem ¯
(U + 00AF). Końcowe białe znaki na końcu każdej linii lub pod drabiną są w porządku. Wiodące białe znaki nie są.
Konstrukcja łuku
Po zbudowaniu drabiny możesz tworzyć łuki między lewą i prawą stroną. Jeden łuk znajduje się całkowicie w rzędzie i zastępuje odstępy między prowadzącym \
a końcowym /
. Dlatego rząd 2 będzie miał 4 znaki w swoim łuku, rząd 3 będzie miał 6 i tak dalej. Każdy łuk składa się według następujących zasad:
- Jedynymi dozwolonymi znakami są
_/¯\
(U + 005F, U + 002F, U + 00AF, U + 005C) - Aby zapewnić gładki wygląd, po którymkolwiek
¯
lub/
musi następować¯
lub\
- Aby zapewnić gładki wygląd, po którymkolwiek
_
lub\
musi następować_
lub/
- Dwie powyższe zasady dotyczą również krawędzi drabiny
- Trzy powyższe zasady skutecznie oznaczają, że pierwszy znak na łuku musi być
_
lub,/
a ostatni znak musi być_
lub\
(\¯\_//
jest nieprawidłowy na obu końcach, ale\_/¯\/
jest OK) - Musi istnieć niezerowa szansa, aby każda dopuszczalna postać pojawiła się w danym punkcie
- Każdy łuk jest niezależny od każdego innego
Animacja
Żywotność pojedynczego łuku jest tworzona przez rozpoczęcie go w pierwszym rzędzie i „przesunięcie” go w górę o jeden rząd na raz, aż osiągnie szczyt. IE, najpierw wygeneruj łuk w rzędzie 1, następnie ustaw go z powrotem w spacje i wygeneruj łuk w rzędzie 2 i tak dalej. Biorąc pod uwagę liczbę łuków do pokazania ( N ), pokaż pełne życie wielu łuków pojedynczo, stosując następujące wytyczne:
- Tylko jeden łuk powinien być jednocześnie „żywy”. Następny łuk nie może rozpocząć się, dopóki bieżący nie osiągnie szczytu, a następnie nie zgaśnie.
- Każdy rząd okresu łuku powinien być pokazany dla dokładnie jednej klatki
- Przed rozpoczęciem nowego łuku powinna być jedna rama tylko podstawowej drabiny (bez łuków) (opcjonalnie przed pierwszym łukiem)
- Animacja powinna pokazywać pełne życie N łuków. Jeśli N = 0, powinien animować losowe łuki na zawsze, aż do zatrzymania.
- Jeśli N > 0, możesz nadal zapętlać animację na zawsze, ale musi to być pętla tych samych łuków w kółko. (Przykładowy GIF na górze tego postu ma H = 6 i N = 3, ale zapętla się na zawsze.)
- Animacja powinna odbywać się w miejscu. Oznacza to, że każda ramka powinna całkowicie zastąpić następną ramkę i znajdować się w tym samym miejscu.
- Długość każdej klatki może być dowolna, ale umożliwia oglądanie jej przez człowieka (IE, należy kierować się zdrowym rozsądkiem: niedopuszczalne są zarówno 0,01 s / ramka, jak i 30 s / ramka).
Wejście wyjście
- Dane wejściowe i wyjściowe mogą być w dowolnym standardowym formacie
- Możesz wyeksportować plik GIF, napisać tekst na ekranie, wydrukować pojedynczy plik dla każdej klatki lub w inny rozsądny sposób
- Standardowe luki są zabronione
- Wysokość drabiny H będzie dodatnią liczbą całkowitą
- Liczba łuków pokazujących N będzie nieujemną liczbą całkowitą
- Zarówno H, jak i N są przyjmowane jako dane wejściowe w dowolnej kolejności, którą wybierzesz (w odpowiedzi podaj kolejność)
Warunki wygranej
To jest golf golfowy, więc wygrywa najkrótszy kod.
the first character in the arc must be _ or / and the last character must be _ or \
iThere must be a non-zero chance for each allowable character to occur at a given point
. Aby być symetrycznym, zarówno pierwsza, jak i ostatnia postać musiałyby być za_
każdym razem, co oznacza, że nie ma żadnej szansy na wystąpienie ani jednego,/
ani „\”.0xAF
znajduje się punkt kodowy»
.Odpowiedzi:
Python 2 ,
287271270276275 bajtówWypróbuj online!
Nie czyści ekranu na Tio, ale działa w konsoli.
Gif z tego działa:
źródło
print'\n'*99
zamiastos.system('cls')
i stracićos
import. Nadal nie działa na TIO, ale działa zarówno w konsolach Windows, jak i Linux.JavaScript (ES6), 245 bajtów
Liczba bajtów zakłada kodowanie ISO-8859-1.
źródło
A=x=>[...Array(x)].map;
na początku i zastąpienie obu zastosowań.map
, to tylko własnośćArray.prototype
i bezużyteczne. Próbowałem działających wersji, ale wszystkie wyszły dłuższe niż 245 bajtów.C (gcc) , 406 bajtów
Wypróbuj online!
Opis:
źródło
\--/
. To prawdopodobnie łatwa poprawka. Czy jesteś w stanie uchwycić i opublikować GIF, który działa w Xterm?PowerShell ,
347319 bajtówWypróbuj online! Nie mogłem dostać
$args
grać ładnie, więc link wywołuje tę funkcję bez czyszczenia konsoli.Bez golfa
źródło
$l=(($h..1)|%{"$(" "*($h-$_))\$(" "*$_*2)/"})+"$(" "*$h)¯¯"
for($x=0;$x-ne$n;$x++)
może byćfor($x=0;$x++-ne$n;)
. Sprowadziłem to do 324 bajtów (321 znaków) . Wskazówki na temat gry w golfa w <wszystkich językach> i Wskazówki na temat gry w golfa w programie PowerShell również mogą być interesujące.sleep 1
zapisuje trochę (domyślnie jest to -sekund), ale jest dość powolny, ale wciąż rozsądny,sleep -m 99
jest dość szybki, ale także rozsądny. Zapisuje 5/1 bajtów w zależności od tego, co lubisz. Nie sprawdzić próbę Kevina alefunction
abyfilter
to darmowa bajt, jak również.Rubinowy , 293 bajtów
Wypróbuj online!
Jestem w systemie Windows, więc po prostu drukuje wiele „\ n” w celu wyczyszczenia konsoli. Przyjmuje 2 argumenty
n
ih
jako dwie linie na standardowe wejście.źródło