Herausforderung
Schreiben Sie ein vollständiges Programm / eine vollständige Funktion, um ein bestimmtes Gebäude mit einer Geschwindigkeit von 1 Stockwerk pro Sekunde abzureißen .
EINGANG
Eingabe ist ein Gebäude durch STDIN (oder wie auch immer in Ihrer Sprache genannt) oder durch ein ARGUMENT einer Funktion. t = 0 s
|
|#|
{#}
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
Eingabe besteht aus:
|
markiert Anfang und Ende eines Stockwerks.{
,}
Markiert den Boden mit Sprengstoff.#
ist ein Fenster, das zur Dekoration dient.ist Raum, der überall in den Böden ist, wo
#
nicht da ist.T
markiert den Boden (kann nicht abgerissen werden).*
markiert den detonierten Boden.
Eingaberegeln:
- Das Gebäude beginnt von oben mit eins
|
und endet auf dem Boden (mit no (T
) = no (char used in ground floor
)). - Ein Fenster
#
befindet sich an jeder ungeraden Stelle in jeder Etage. T
markiert das Ende Ihrer Eingabe.- Nur eine Etage besteht aus Sprengstoff.
- Jede Etage besteht aus ungeraden Nr. von Zeichen.
- Wenn Sie die Etagen hinuntersteigen, können die Etagen entweder die gleiche Größe wie die vorherige Etage haben oder 2 Zeichen größer sein.
- Die Eingabe kann als Array von
chars
oder erfolgenstrings
.
Ausgabe :
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
Ausgaberegeln:
- Jede Etage endet mit einem
newline
Zeichen. - Boden kann / kann keine nachlaufende Newline haben.
- Geben Sie das Gebäude (oder was davon übrig ist) alle 0,5 s aus.
- Die Ausgabe ist wie eine Animation, die alle 0,5 s geändert und angezeigt wird.
(Sie können auch gerne GIFs mit Ihrer Antwort posten.)
Dies ist ein Code-Golf, also gewinnt der Code in kürzesten Bytes!
Das letzte Einreichungsdatum ist genau 5 Tage ab jetzt
(Aber weißt du was? Gewinnen ist nicht alles. Probieren Sie diese Herausforderung auch in Ihrer Lieblingssprache aus, auch nachdem ein Gewinner bekannt gegeben wurde:]).
EDIT: Ich habe die Art und Weise geändert, wie Sie Eingaben machen (meine schlechte eigentlich).
Antworten:
Vim,
4138 BytesHier
^
wird für ein wörtliches Caret verwendet; ␍ wird für STRG-M verwendet.Erläuterung
qw:sl 500m␍q
schläft eine halbe Sekunde, während die halbe Sekunde Schlaf als Makro w aufgezeichnet wird./{␍
bewegt sich mit Sprengstoff zu Boden.qq
beginnt mit der Aufzeichnung des Makros q, das sich rekursiv selbst aufruft.jk
bewegt sich runter und rauf; Dies erzeugt einen Fehler, wenn Sie sich in der letzten Zeile (Boden) befinden. Der Fehler beendet das rekursive Makro.^v$r*
Ersetzt alles vom ersten Nicht-Leerzeichen bis zum Zeilenende durch *.@w
wartet eine halbe Sekunde unddd
löscht dann die aktuelle Etage.:-␍
bewegt sich eine Etage nach oben, ohne das Makro zu beenden, wenn Sie sich in der obersten Zeile befinden.@w
wartet dann eine weitere halbe Sekunde und@q
ruft das q-Makro auf (zunächst leer).q@q
stoppt die Aufzeichnung des Makros q, ruft es dann auf und löst die Rekursion aus.Animation
quelle
my answer could be "golfed" further
... ist nicht , dass genug? : PJavaScript (ES6),
208198 Bytesquelle
Java 7,
589477476 BytesOk, es ist ein Chaos / lang, aber diese Herausforderung hat so viele nervige Dinge für Java. Mehrzeiliges Drucken;
Thread.sleep(500)
was erfordert einthrows Exception
; Ersetzen eines Teilstrings zwischen zwei Begrenzern durch eine gleiche Menge von*
; usw.All dies führt dazu, dass das Programm ziemlich groß ist. Es kann definitiv noch mehr Golf gespielt werden, vielleicht sogar mit einem anderen Ansatz halbiert werden, aber zumindest gibt es jetzt eine Antwort. ;)
Ungolfed:
Testcode:
Probieren Sie es hier aus. (Auf ideone wird es sofort ausgegeben und ignoriert das
sleep
..)quelle
try{...}finally{return;}
?throws Exception
Haskell,
245221 BytesAnwendungsbeispiel:
Wie es funktioniert:
Hinweis: Es gibt auch
threadDelay
vonGHC.Conc
stattusleep
vonSystem.Posix.Unistd
was etwas kürzer ist, aber es funktioniert nur mit demGHC
Compiler, so dass es keine generischeHaskell
Antwort wäre.quelle
C,
314287281271 Bytes-10 nach dem Wechsel
!=
zu-
und Vermeiden von Zeichenliteralen, wenn es möglich ist, sowieisspace
(vielen Dank an H Walters). Der ungolfed Code bleibt jedoch unverändert.-6 Bytes nach dem Anwenden des Komas und dem Löschen
{}
nach zweiif
.-26 Bytes nach geringer Optimierung, Entfernen unnötiger Klammern sowie Ändern lokaler Variablen in globale (mit automatischer 0-Initialisierung) und
b[0]
durch*b
.Testcode mit ungolfed
f
:quelle
s,e,t
außerhalb global wies,e,t;
i
mit anderen.Perl, 153 Bytes
Dies verwendet den GNU-Schlafbefehl, um 500 Millisekunden zu warten.
Ungolfed Version
quelle
PHP,
286282274234229 BytesNimmt die Eingabe als Liste von Zeichenfolgen aus Befehlszeilenargumenten (kein Zeilenumbruchzeichen!)
In Datei speichern, ausführen mit
php <filename> ' |' ' |#|' ' {#}' ' |# #|' '|# # #|' '|# # #|' '|# # #|' 'TTTTTTT'
Nervenzusammenbruch
quelle