Moi teściowie mają na swoim podwórku staw rybny wypełniony koi. Tak naprawdę nie przyszło mi to do głowy, dopóki nie zauważyłem następującego fragmentu mojego kodu.
',') & '_'
... Miałem twarze ryb, które patrzyły na mnie z ekranu ...
Co dało mi świetny pomysł ...
Moją misją dla was, moi drodzy golfiści, jest stworzenie akwarium ASCII o jednej linii, zgodnie z następującymi zasadami:
- Rozmiar akwarium od strony zbiornika do drugiej strony zbiornika nie powinien być mniejszy niż 60 znaków i nie większy niż 80 znaków. Boki zbiornika należy wskazać za pomocą
|
znaku rury / baru ( ). - Ryby muszą być w stanie „pływać” od lewej do prawej między bokami akwarium. Ponieważ będą się obracać, widok z przodu jest wymagany do przejścia z jednego kierunku do drugiego.
Ryba musi wyglądać następująco:
}}< }} ',')
Ryba pływa w prawo(',' {{ >{{
Ryba pływa w lewo}}('_'){{
Ryba skierowana do przodu
Kiedy ryba skręca, aby zmienić kierunek (30% szansy), musi zacząć od jednego kierunku, przodem do przodu, a następnie skierować się w drugim kierunku ... Upewnij się, że jest wystarczająco dużo miejsca na obrót ryby, tj. Wymaga sześciu spacji przed minimalna krawędź zbiornika ...
- O ile ryba nie wydmuchuje bańki lub nie zmieni kierunku, będzie kontynuować w kierunku, w którym jest skierowana, jeśli znajdzie się w odległości sześciu pól od boku akwarium, zmieni kierunek.
- Ryba (skierowana w lewo lub w prawo) może czasami (10% szansy) przestać wysadzać pęcherzyki kolejno (
.oO*
), więc ryba musi mieć wolne miejsce obok nich, aby bąbel mógł istnieć, więc ryba może pływaj tak blisko boków, oszczędzaj jedno miejsce. Bańka musi zniknąć, zanim ryba będzie mogła przejść dalej ...
Seria przykładowych wierszy zachowania ryby, ze -
znakami wskazującymi spacje, ponieważ funkcja wyświetlania kodu tutaj jest trochę ścisła ... Spodziewam się, że te myślniki zostaną zastąpione spacjami, gdy kodujesz to ...
Każda linia tutaj może być uważana za ramkę poklatkową.
|-}}< }} ',')----------|
|--}}< }} ',')---------|
|---}}< }} ',')--------|
|----}}< }} ',')-------|
|-----}}< }} ',')------|
|-----}}< }} ',').-----|
|-----}}< }} ',')o-----|
|-----}}< }} ',')O-----|
|-----}}< }} ',')*-----|
|---------}}('_'){{----|
|-----------(',' {{ >{{|
|----------(',' {{ >{{-|
|---------(',' {{ >{{--|
|--------.(',' {{ >{{--|
|--------o(',' {{ >{{--|
|--------O(',' {{ >{{--|
|--------*(',' {{ >{{--|
|--------(',' {{ >{{---|
|-------(',' {{ >{{----|
|------(',' {{ >{{-----|
itd. Powyższy przykład jest, jak powiedziałem, niewielki, ale masz ogólny pomysł ...
Najkrótszy kod wygrywa ...
Oczekuję, że dane wyjściowe w tej samej linii (jeśli to możliwe), jeśli nie, wyświetlanie klatka po klatce po kolei jest w porządku ... To, czy przejdziesz jedną linię, czy wiele linii, zależy od Ciebie. Jeśli wykonujesz wiele linii, muszą one być oddzielone nową linią.
Także zegar jest narzucany między ramkami, 2000ms. To jest obowiązkowe .
Zobaczmy, co masz!
źródło
Odpowiedzi:
Python 3 (278)
Poprzednio: 334, 332, 325, 302, 300, 299, 291, 286, 284, 281
Gra w Pythona jest zawsze trudna ze względu na wymagania dotyczące wcięć instrukcji, ale mimo to poszło niesamowicie dobrze!
Ogromne podziękowania dla Volatility i DSM za to, że pomogłem mi w grze w golfa o wiele dalej.
Czysta wersja
źródło
Rubin,
291289Ryba ma jedenaście znaków, co sprawia, że akwarium ma szerokość 6 * 9 + 11 + 2 = 67 znaków, co idealnie pasuje do wymaganej tolerancji.
Funkcja
f
lambda wykonuje wszystkie ciężkie podnoszenie: przyjmuje zmianę jako parę argumentów, a następnie próbuje zastosować podstawienie w akwarium. Jeśli się powiedzie, maluje jedną klatkę animacji. Następnie zgłasza wartość sukcesu jako2
(podjęte opóźnienie) lubnil
(opóźnienie niewykonane).Ryba nie wydmuchuje bąbelków dwa razy z rzędu. (Poprawka:
...while rand>0.1
- 4 znaki)Ryby mogą dmuchać bąbelki nawet przed wymuszonym nawrotem. (Poprawka: zmiana układu gałęzi)
Istnieje rama, w której bąbelek całkowicie zniknął (w tym
*
), ale ryba nie przesunęła się do powstałej pustki. To wynika z litery, ale nie z przykładu. (Stały zamienićf[?*,w]
zq[?*]=w
- wolna)Nie czyści konsoli. Poprawka: dodaj
`clear`
(uniks) lubsystem 'cls'
(konsolę Windows) przed,puts q
aby naprawić ( Ref. ) Lub użyjprint
zamiastputs
i wstaw\r
do akwarium ( sugerowane przez @manatwork ).Wersja do odczytu:
źródło
\r
do początku q:q="\r|#{r+s*9}|"
. Następnie użyj$><<q
zamiastputs q
. Jest o 1 znak dłuższy, ale wygląda lepiej bez użycia zewnętrznych poleceń.\r
czyści ekran? W moim przypadku tak nie jest. Lub dlaczego nie lubiszputs
?\r
jest zwrot karetki. Używając$><<q
wyjścia, kursor pozostanie w tej samej linii (puts
wymusza a\n
po wyjściu), więc rozpoczęcie następnego wyjścia za pomocą\r
przeskoczy z powrotem na początek bieżącej linii i zacznie wyprowadzać stamtąd. W ten sposób nadpisuje poprzedni „obraz” linii akwarium.\r
.R, 451 znaków
Pierwsza próba:
Zębaty:
Drukuje akwarium jako standardowe na jednej linii (następnie 2 s przerwy i powrót karetki przed wydrukowaniem akwarium w t + 1).
źródło
Perl, 281
lub bardziej wyraźnie
Ryba obraca się poprawnie. Dmuchanie baniek.
285 - jeśli podoba Ci się prawdziwe akwarium, a nie przewijana wersja:
źródło
$d=0
w przypadku „wymaganego zwrotu”.sleep2
(bez miejsca) nie działa dla mnie; także podczas skrętu nie ustawia się wyrównanej powierzchni ryby. I bąbelki wydają się nigdy nie pojawiać.C,
400394373 znakówZ białymi znakami:
źródło
i==l?(c=r):(c=l)
skrócićc=i==l?r:l
?#define p printf(