Ich habe einen Java-Pseudocode, der Leerzeichen anstelle von geschweiften Klammern verwendet, und ich möchte, dass Sie ihn konvertieren.
I / O.
Ihr Programm sollte eine Eingabedatei zusammen mit einer Zahl verwenden, die angibt, wie viele Leerzeichen zum Einrücken eines Blocks verwendet werden. Hier ist ein Beispiel:
$ convert.lang input.p 4 // Konvertiere mit 4 Leerzeichen als Blocktrennzeichen $ convert.lang input.p 2 // Konvertiere mit 2 Leerzeichen als Blocktrennzeichen
Anschließend sollte das Ergebnis mit dem angegebenen Blocktrennzeichen konvertiert und das Ergebnis in stdout ausgegeben werden.
Das Fleisch des Programms
Blöcke, die mit :
und jede Zeile innerhalb des Blocks geöffnet werden, werden mit dem Blocktrennzeichen wie Python-Code eingerückt.
während (wahr): System.out.println ("Test");
Jedes :
wird durch a ersetzt {
und a }
wird an das Ende des Blocks angehängt.
while (wahr) { System.out.println ("Test"); }}
Beispiele
Eingang:
öffentlicher Klassentest: public static void main (String [] args): System.out.println ("Java ist ausführlich ...");
Ausgabe:
$ convert Test.pseudojava 4 öffentlicher Klassentest { public static void main (String [] args) { System.out.println ("Java ist ausführlich ..."); }} }}
Eingang:
Main(): printf ("Hallo Welt");
Ausgabe:
$ convert test.file 2 main () { printf ("Hallo Welt"); }}
Eingang:
def generic_op (the_stack, func): # Generischer Op-Handling-Code b = the_stack.pop () wenn isinstance (b, Liste): wenn b: Rückkehr top = b.pop (0) während b: top = func (top, b.pop (0)) the_stack.push (oben) sonst: a = the_stack.pop () Rückgabefunktion (a, b)
Ausgabe:
$ convert code.py 4 def generic_op (the_stack, func) { # Generischer Op-Handling-Code b = the_stack.pop () if isinstance (b, Liste) { wenn b { Rückkehr }} top = b.pop (0) während b { top = func (top, b.pop (0)) }} the_stack.push (oben) }} sonst { a = the_stack.pop () Rückgabefunktion (a, b) }} }}
Wertung
Der Code mit der geringsten Anzahl von Bytes gewinnt!
Antworten:
Perl, 41 Bytes
Wenn man den Shebang als zwei zählt, wird die Eingabe von stdin übernommen. Ein Befehlszeilenargument muss nicht angegeben werden. Jeder gültige Verschachtelungskontext kann ermittelt (und abgeglichen) werden, ohne die Einrückungsgröße zu kennen.
Regex-Zusammenbruch
Beispielnutzung
in1.dat
Ausgabe
in2.dat
Ausgabe
in3.dat
Ausgabe
quelle
Python 3,
299265 BytesBoom bam pow.
Verwendeter Algorithmus:
quelle
Ruby, 70
Fügt einen nachgestellten Zeilenumbruch hinzu. Benötigt nicht den Parameter für die Blockgröße des Einzugs.
Führen Sie dies mit
-n0
(das ist wirklich 68 + 2). Vielen Dank an @primo für das Speichern von über einem Dutzend Bytes.quelle
-p0
funktioniert auch für Ruby (-0
liest alle Eingaben auf einmal,-p
speichert stdin darin$_
und druckt es am Ende automatisch aus).x=$<.readlines*''
. Während ich das mache, gibt essub!
auch eine Überladung mit zwei Parametern (anstelle eines Parameters + Blocks), die eine Ersatzzeichenfolge akzeptiert, sodass Sie usw. verwenden\1
können\2
, anstatt alles verketten zu müssen.