Wyzwanie
Napisz pełny program / funkcję, aby wyburzyć dany budynek z szybkością 1 piętra na sekundę .
WEJŚCIE
Dane wejściowe to budowanie poprzez STDIN (lub jakikolwiek inny sposób wywoływany w Twoim języku) lub ARGUMENT funkcji. t = 0 s
|
|#|
{#}
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
dane wejściowe obejmują:
|
oznacza początek i koniec podłogi.{
,}
oznacza podłogę materiałami wybuchowymi.#
to okno do dekoracji.jest przestrzeń, która jest wszędzie wewnątrz podłóg, gdzie jej
#
nie ma.T
oznacza ziemię (nie można jej rozebrać).*
oznacza zdetonowaną podłogę.
Reguły wprowadzania:
- budowanie zaczyna się od góry z jednym
|
i kończy na ziemi (bez no (T
) = no (char used in ground floor
)). - okno
#
jest w każdym dziwnym miejscu na każdym piętrze. T
oznacza koniec twojego wpisu.- tylko jedna podłoga składa się z materiałów wybuchowych.
- każda podłoga jest wykonana z nieparzystego nie. znaków.
- gdy schodzisz po podłogach, podłogi mogą być równej wielkości z poprzedniej podłogi lub mogą być o 2 znaki większe.
- Dane wejściowe można traktować jako tablicę
chars
lubstrings
.
Wynik :
t = 0,5 s
|
|#|
***
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 1 s
|
|#|
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 1,5 s
|
***
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 2 s
|
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 2,5 s
*
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 3 s
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 3,5 s
*****
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 4 s
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 4,5 s
*******
|# # #|
|# # #|
TTTTTTT
t = 6,5 s
*******
TTTTTTT
t = 7 s
TTTTTTT
Reguły wyjściowe:
- każde piętro kończy się jedną
newline
postacią. - ziemia może / może nie mieć końca nowej linii.
- wysyłaj budynek (lub co z niego zostało) co 0,5 s.
- Wyjście przypomina animację, która jest modyfikowana co 0,5 sekundy i jest wyświetlana.
(Możesz również opublikować pliki GIF z odpowiedzią)
To jest Code-Golf, więc kod w najkrótszych bajtach wygrywa!
ostatnia data złożenia to dokładnie 5 dni od teraz
(Ale wiesz co? Zwycięstwo to nie wszystko, możesz spróbować tego wyzwania w swoim ulubionym języku, nawet po ogłoszeniu zwycięzcy:]).
EDYCJA: Zmieniłem sposób, w jaki przyjmujesz dane wejściowe (właściwie moje złe).
Odpowiedzi:
Vim,
4138 bajtówTutaj
^
jest używany w dosłownym kodzie; ␍ jest używany dla CTRL-M.Wyjaśnienie
qw:sl 500m␍q
śpi pół sekundy, nagrywając pół sekundy jako makro w./{␍
przesuwa się na podłogę z materiałami wybuchowymi.qq
rozpoczyna rejestrowanie makra q, które rekurencyjnie wywoła się.jk
porusza się w dół i w górę; generuje to błąd, jeśli jesteś w ostatniej linii (na ziemi); błąd kończy makro rekurencyjne.^v$r*
zamienia wszystko od pierwszego znaku niebiałego do końca linii na *.@w
czeka pół sekundy, a następniedd
usuwa bieżące piętro.:-␍
przesuwa się o piętro bez kończenia makra, jeśli jesteś na górnej linii.@w
następnie czeka kolejne pół sekundy i@q
wywołuje makro q (początkowo puste).q@q
zatrzymuje rejestrowanie makra q, a następnie wywołuje je, wyzwalając rekurencję.Animacja
źródło
my answer could be "golfed" further
... nie jest to , że wystarczy? : PJavaScript (ES6),
208198 bajtówźródło
Java 7,
589477476 bajtówOk, to bałagan / długi, ale to wyzwanie ma tyle irytujących rzeczy dla Javy. Drukowanie wielu linii;
Thread.sleep(500)
co wymagathrows Exception
; zastępując podciąg między dwoma ogranicznikami równą ilością*
; itd.Wszystko to sprawia, że program jest dość duży. Można go z pewnością trochę golfa, może nawet o połowę z innym podejściem, ale przynajmniej jest teraz odpowiedź. ;)
Nie golfowany:
Kod testowy:
Wypróbuj tutaj. (Na ideone wysyła natychmiast i ignoruje
sleep
..)źródło
try{...}finally{return;}
?throws Exception
Haskell,
245221 bajtówPrzykład użycia:
Jak to działa:
Uwaga: istnieje również
threadDelay
zeGHC.Conc
zamiastusleep
odSystem.Posix.Unistd
której jest trochę krótsza, ale działa tylko zGHC
kompilatorem, więc nie byłoby ogólnaHaskell
odpowiedź.źródło
DO,
314287281271 bajtów-10 Po zmianie
!=
do-
i uniknięcia literały char gdy jest to możliwe, jak równieżisspace
(wiele dzięki H Walters). Ale niezgolfowany kod pozostaje niezmieniony.-6 bajtów po zastosowaniu śpiączki i usunięciu
{}
po dwóchif
.-26 bajtów po niewielkiej optymalizacji, usuwaniu niepotrzebnych nawiasów, a także zmianie lokalnych zmiennych na globalne (z automatyczną inicjalizacją 0) i
b[0]
przez*b
.Kod testowy z nie golfowym
f
:źródło
s,e,t
zewnątrz globalnie w ten sposóbs,e,t;
i
z innymi.Perl, 153 bajty
Używa polecenia GNU sleep do oczekiwania na 500 milisekund.
Wersja bez golfa
źródło
PHP,
286282274234229 bajtówpobiera dane wejściowe jako listę ciągów z argumentów wiersza poleceń (bez znaku nowej linii!)
zapisz do pliku, uruchom z
php <filename> ' |' ' |#|' ' {#}' ' |# #|' '|# # #|' '|# # #|' '|# # #|' 'TTTTTTT'
awaria
źródło