Verwandt mit: Erstellen Sie einen; # -Interpreter und generieren Sie; # -Code
;#
- Ein Wirbelwindführer
Dies ist eine einfache Sprache mit zwei Befehlen. Die einzige Datenstruktur ist ein Akkumulator, der mit 0 initialisiert wird.
;
Erhöhen Sie den Akku#
Berechnen Sie den Wert des Akkumulators modulo 127 und geben Sie das entsprechende ASCII-Zeichen aus. Setzen Sie dann den Akku auf 0 zurück.
Der Quellcode kann zusätzliche Zeichen enthalten (druckbares ASCII + Leerzeichen), diese werden jedoch als Kommentare behandelt und haben keine Auswirkungen auf die Programmausführung.
Herausforderung
Da die meisten Computer nicht ;#
vorinstalliert sind, wäre es sehr nützlich, ein Tool zu haben, das ;#
Code in eine andere Sprache konvertieren kann. In dieser Herausforderung schreiben Sie ein Programm, um dies zu erreichen.
Eingang
Einige ;#
Quellcodes, die über Argument oder STDIN aufgenommen wurden. Dieser Quellcode kann andere (Kommentar-) Zeichen als ;
oder enthalten #
.
Ausgabe
Code in derselben Sprache wie Ihre Einreichung, der bei Ausführung dieselbe Zeichenfolge wie der ursprüngliche ;#
Code ausgibt / zurückgibt . Dieser resultierende Code gibt möglicherweise nach der Zielzeichenfolge eine abschließende neue Zeile aus, wenn dies für Ihre Sprache praktischer ist.
Anmerkungen
Achten Sie auf Escape-Sequenzen, z. B. auf Code, der Backslashes oder Anführungszeichen druckt. Achten Sie auch auf ;#
Code, der Dinge enthalten kann, die wie Schlüsselwörter oder Befehle in Ihrer Sprache aussehen.
Zusätzliche Einschränkungen
Alle Programme müssen beendet werden (ich betrachte dies normalerweise als Standard, aber jemand hat danach gefragt, also gebe ich es hier an).
Beispiele
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (python): print(";#")
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (element): \'`
;#
vorinstallierten ...;
oder#
?Antworten:
Python 2 ,
7669 BytesCode
Die Eingabe ist von Anführungszeichen umgeben.
Probieren Sie es online!
Erläuterung
Der erste Teil der Ausgabe erfolgt im Wesentlichen über die Eingabe mit
input('print')
. Wir teilen die Eingabe in Hashtags und verwerfen das letzte Element. Wir drucken die Darstellung von ord (y% 127) , wobei y die Anzahl der Vorkommen des Semikolons ist. Wir hängen das,
am Ende des Ausdrucks an, um sicherzustellen, dass dabei keine neue Zeile gedruckt wird.Dies würde den folgenden Python-Code für das
Hello, World!
-Programm ergeben:Welches kann online ausprobiert werden .
quelle
Brainfuck , 126 Bytes
Probieren Sie es online!
Das Ausgabeprogramm schlägt in der TIO-Implementierung fehl, wenn die
;#
Ausgabe 65536 Zeichen überschreitet. Ich habe auch eine 130-Byte-Version erstellt, die[+]
anstelle von ausgibt<
, um dieses Problem zu vermeiden:Erläuterung
quelle
Leerzeichen, 291 Bytes
Ersetzen Sie S durch Leerzeichen, T durch Tabulator und N durch eine neue Zeile.
Das Generieren von Leerzeichen in Leerzeichen ist nicht die effizienteste Sache der Welt. Das Generieren jeglicher Art von dynamischem Code erfordert signifikantes Bit-Twiddling, was in einer Sprache ohne bitweise Operationen dazu führen würde, dass die Codegröße explodiert. Daher versucht dieses Programm nicht, etwas Kluges zu tun, sondern setzt stattdessen darauf, nur das Quellprogramm eins zu eins zu übersetzen. Es lässt sich wie folgt zerlegen:
Der vom Programm generierte Code sieht folgendermaßen aus:
quelle
V ,
192028 BytesBugfix, kaputt wenn es
#
am Ende keine gabBugfix, implementiert
mod 127
Probieren Sie es online!
Versuchen Sie es mit generiertem Code
Erläuterung:
In V kann im Einfügemodus ein beliebiges ASCII-Zeichen mithilfe von Code eingefügt werden
<C-v><Code>
. Der V-Code ersetzt alle#
mit<C-v>0
, wobei die Null ein Pseudo-Akkumulator per ist#
. Jedes#
setzt den Akku auf 0 zurück, so dass ein Akku pro Akku in Ordnung ist. Dann führt der Code für jedes gefundene Semikolon ein Inkrement durch, das nur die nächste gefundene Zahl inkrementiert, die der nächste Akkumulator wäre. Das0
wird an das Ende angehängt, damit die Anweisung für;
s ohne Folgendes nicht fehlschlägt#
.Hexdump:
quelle
05AB1E ,
20 19 1816 Bytes-1 dank Adnan
-2 dank carusocomputing
-2 dank Kevin Cruijssen
Probieren Sie es online! (Enthält die Ausgabe des ausgeführten 05AB1E-Codes)
quelle
';¢
kann seing
,žy
drückt 128, kann irgendwie funktionieren und warum nicht einfach das ganze Wort buchstabieren und es in Anführungszeichen setzen?';¢
Incase verwenden, es gibt andere Zeichen als;
.žy<
ist das gleiche wie127
. Das Ausdrucken des von Anführungszeichen umgebenen Wortes wird unterbrochen, wenn eines der Zeichen ein Anführungszeichen ist.ƵQ
ist eine komprimierte Version von 127 .Python 2 , 75 Bytes
Probieren Sie es online! (Enthält die Ausgabe von der Ausführung des transpilierten Python-Codes)
Danke an ovs für viele, viele Bytes!
Erläuterung
Dieses Programm übersetzt die #; Code durch Teilen von #s (
s.split('#')[:-1]
), Zählen der Anzahl der Semikolons in jedem Chunk-Mod 127 (x.count(';')%127for x in ...
) und Konvertieren dieser in das entsprechende ASCII-Zeichen (chr(...)
). Diese Liste wird dann verkettet (''.join(...)
), in eine Python-Darstellung des Strings (der Backticks) konvertiert und in ein Python-Programm zum Drucken von Strings ("print"+...
) eingefügt .quelle
Jelly ,
25 2416 BytesEin vollständiges Programm, das den entsprechenden Jelly-Code druckt (als monadischer Link gibt es eine Liste mit Listen gemischter Typen zurück).
Das erste Beispiel finden Sie unter Online testen! was ergibt dieses Programm .
Wie?
Zählt das
;
s in jedem Lauf zwischen#
s und nimmt jedes Modulo 127 und fügtỌ
nach jedem einen Cast zur Ordinalanweisung, dem monadischen Atom, hinzu.Jelly leitet implizit jeden Wert an STDOUT weiter, während es ein solches Programm durchläuft, dh
72Ọ101Ọ108Ọ108Ọ111Ọ44Ọ32Ọ119Ọ111Ọ114Ọ108Ọ100Ọ33Ọ
drucktHello, world!
.Ein Hinweis zur Eingabe: Jelly nimmt Zeichenketteneingaben im Python-Format entgegen. Das leere Programm könnte eingegeben werden , wie
""
, und die Hash-only - Programme wie"#"
,"##"
usw. Andere Manipulationen können für die Eingabe enthält , Schrägstriche und Anführungszeichen erforderlich.quelle
Kubisch ,
138137 BytesProbieren Sie es online!
Hinweis: Sie können ersetzen müssen
&6
mit?6&
für sie auf TIO zu arbeiten.&6
ist jedoch in der Sprachspezifikation.Wie es funktioniert
Ausgabeprogramm:
quelle
@6
,%6
und-6
. Befehle, die zuvor beim impliziten Aufruf nichts getan haben, verwenden jetzt den Editor. So@
ist das gleiche wie@6
,%
ist das gleiche wie%6
, etc.JavaScript (ES6), 101 Byte
Löscht bei einer gegebenen Eingabezeichenfolge alle unnötigen Zeichen und gibt dann die Quelle der folgenden Funktion zurück:
Wo
...
steht die gereinigte;#
Quelle ?quelle
C
9896999897 Bytes+3 Bytes, weil ich vergessen habe, dass C nicht interpretiert wird :(
Laufen mit:
Druckt:
quelle
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
produziertf(){puts(""");}
, was ungültig ist. Die Herausforderung lautet insbesondere: "Eine Sache, auf die Sie achten müssen, sind Escape-Sequenzen, z. B. Code, der Backslashes oder Anführungszeichen druckt."Gelee , 26 Bytes
Probieren Sie es online!
Und versuchen Sie diesen Jelly-Code hier!
Die Jelly-Ausgabe wird zu einem Code
Ọø‘‘‘‘‘‘‘‘‘‘‘‘‘Ọø‘‘‘‘‘‘‘‘‘‘Ọø
, der chr (13) + chr (10) ausgibt.quelle
PHP, 72 Bytes
quelle
> <>
1068177 BytesDies ist mein erstes Golfspiel in> <> (Fisch)! Eine ziemlich interessante Sprache muss ich sagen. Viel Spaß!
quelle
i:1+?!
ini:0(?
, und ich fühle mich auch wie Sie ein paar Bytes speichern können , wenn Sie das Ergebnis auf dem Stapel aufgebaut und für das Ende der Eingabe bis zur Ausgabe gewartet. Ich meine, das sind vieleo
s;)C # 169 Bytes
Golf gespielt:
Vom Menschen lesbare Version:
quelle
Haskell ,
106102 BytesProbieren Sie es online!
Ungolfed
quelle
Brachylog , 33 Bytes
Probieren Sie es online!
Fühlen Sie sich ein bisschen zu müde, um dies im Moment zu erklären, wenn jemand dies sieht und sich fragt, wie es funktioniert, schreiben Sie einen Kommentar, um mich daran zu erinnern.
quelle
MathGolf , 17 Bytes
Probieren Sie es online!
Erläuterung
Da jedes Zeichen mit auf den Stapel (und damit auf die Ausgabe) gelegt werden kann
'<char>
, wird eine Folge solcher Codeblöcke ausgegeben.quelle
Þ
.Þ
. ( Die verwendeten Dokumente geben jedoch immer noch den alten Wert an. )MATL ,
3228 BytesProbieren Sie es online!
Ein völlig anderer Ansatz
strsplit
als ein automatisches Programm.quelle
Eigentlich 25 Bytes
Probieren Sie es online! (Beinhaltet die Ausgabe des transpilierten Actually-Codes)
Erläuterung:
quelle
shortC , 48 bytes
quelle
Fourier, 32 Bytes
Probieren Sie es auf FourIDE!
Dies war eine recht einfache Herausforderung, da Fourier im Grunde eine Obermenge von; # ist:
quelle
CJam, 14 Bytes
Erläuterung:
quelle
APL, 31 Bytes
Ausgabe:
Erläuterung:
⌽
: kehrt die Eingabe um{
...}
: übergebe es an diese Funktion:⍵⊂⍨'#'=⍵
: Partition bei jedem#
in der Zeichenkette (von Anfang an, weshalb es zuerst umgekehrt werden musste)+/¨';'=
: Zähle die;
s in jeder Partition127|
: modulo 127⌽
: wieder umkehren'⎕UCS',
: Stellen Sie den String voran⎕UCS
, bei dem es sich um die Unicode-Funktion handelt.⍕
: String-Darstellungquelle
⍕
da die tatsächliche Ausgabe an STDOUT dieselbe ist.Ruby , 47 + 1 = 48 Bytes
+1 Byte für
-p
.Probieren Sie es online!
-30 Bytes dank @manatwork !
quelle
;
oder enthalten#
."./;+#/
→/.*?#/
und den Codeblocks.length-1
→ zu änderns.count(?;)
. Übrigens ist deine Mathematik auch falsch, da sie%
eine höhere Priorität hat als-
, so sollte es sein(s.length-1)%127
. Und in.gsub
‚s - Codeblock Sie die erfassten Gruppen mit Zugriff$&
,$1
... so dass der|s|
Code - Block - Parameter ist in der Regel nicht möglich. Und die Zeichenfolge Interpolation stringifies:{"$><<#{$&.count(?;)%127}.chr;"}
. Probieren Sie es online!gsub
Wird$_
direkt geändert , sodass Sie es nicht erneut zuweisen müssen. Sie haben jedoch Probleme, wenn Sie nach Ihrem letzten Kommentar Zeichen haben#
... siehe hierPyth,
252324 Bytes+1 Bytes dank @FryAmTheEggman
Versuch es!
behandelt Zeichen, die nur mit 1-Zeichen-Zeichenfolgen maskiert werden müssen.
Beispielausgaben:
Benutzt meinen; # Interpreter .
quelle
#
die Eingabe keine enthält , da sie gedruckt wird0
. Sie können dies mitjk
anstelle von behebens
.C 150 Bytes
Erweitert:
Es ist ein komplettes Programm, das Kommentare (beenden), ignorieren und immer korrekten Ausgabecode erzeugen soll. Ich gehe von EOF = -1 aus
Getestet auf SystemResque-Cd 4.9.6, kompiliert mit gcc 4.9.4
quelle
Braingasmus , 40 Bytes
Ich muss sagen, das ist überraschend kurz.
Der generierte Code für
;
ist a+
, der die aktuelle Zelle inkrementiert.Der generierte Code für
#
enthält eine akward, manuelle Modulo-Operationquelle
Braingolf , 55 Bytes
Probieren Sie es online!
Ersetzt im Grunde genommen
;
mit1+
,#
with#~1+%@
und stellt das Ganze mit a voran,0
weil der monadische+
Operator gerade gebrochen ist.1+
Fügt dem letzten Element im Stapel 1 hinzu.#~1+%@
Drückt den Zeichenwert von~
(126), addiert 1, um 127, Modul mit einem anderen Element auf dem Stapel zu bilden, und druckt dann als Zeichen.Erläuterung
quelle
q / kdb +, 42 Bytes
Lösung:
Beispiele:
Beachten Sie, dass das
,
Symbol verwendet wird, um eine Liste (gegenüber einem Atom) als"\""
eine Liste eines Elements zu kennzeichnen , anstatt ein Atom zu sein.Erläuterung:
Nimm die Eingabezeichenfolge, entferne alles, was nicht a
#
oder a;
ist , teile sie in Listen auf#
, zähle die Anzahl der Elemente in jeder Liste, führe Mod 127 für das Ergebnis aus und gib sie in eine Zeichenfolge um:Anmerkungen:
#
, da sonst der letzte Block irrtümlicherweise von der gelöscht wird-1_
.;#
.quelle
Perl 5 , 78 Bytes
Probieren Sie es online!
quelle