Ihre Herausforderung besteht darin, Eingabetext in Brain-Flak-Code umzuwandeln, der den Text ausgibt.
Tutorial von hier mit freundlicher Genehmigung hier genommen
Brain-Flak hat zwei Stapel, die als "links" und "rechts" bekannt sind. Der aktive Stapel beginnt links. Wenn ein leerer Stapel abgelegt wird, wird 0 zurückgegeben. Das war's. Keine anderen Variablen. Wenn das Programm gestartet wird, wird jedes Befehlszeilenargument auf den aktiven Stapel übertragen.
Die einzigen gültigen Zeichen in einem Brain-Flak-Programm sind ()[]{}<>
, und sie müssen immer ausgeglichen sein. Es gibt zwei Arten von Funktionen: Niladen und Monaden . Ein Nilad ist eine Funktion, die 0 Argumente akzeptiert . Hier sind alle Niladen:
()
Wertet zu eins aus.[]
Wertet auf die Höhe des aktuellen Stapels aus.{}
Pop den aktiven Stapel. Wertet den gepoppten Wert aus.<>
Schaltet den aktiven Stapel um. Wertet auf Null aus.
Diese werden bei der Auswertung miteinander verkettet. Wenn wir also eine '3' über dem aktiven Stapel hatten, ist dieser Ausschnitt:
()(){}
würde auswerten, zu 1 + 1 + active.pop()
dem 5 auswerten würde.
Die Monaden nehmen ein Argument, einen Teil des Brain-Flak-Codes. Hier sind alle Monaden:
(n)
Drücken Sie 'n' auf dem aktiven Stapel.[n]
Wertet zu negativem 'n' aus{foo}
Während sich Null nicht oben auf dem Stapel befindet, tun Sie foo.<foo>
Foo ausführen, aber mit 0 bewerten.
Diese Funktionen geben also auch den Wert in ihnen zurück
(()()())
Will aber 3 schieben
((()()()))
Schiebt 3 zweimal .
Der {}
wird zur Summe aller Läufe ausgewertet. Wenn wir also "3" und "4" oben auf dem Stapel hätten:
{{}}
würde mit 7 bewertet.
Wenn das Programm ausgeführt ist, wird jeder auf dem aktiven Stapel verbleibende Wert mit einem Zeilenumbruch zwischen gedruckt. Werte auf dem anderen Stapel werden ignoriert.
Regeln
- Sie können davon ausgehen, dass der Brain-Flak mit Ascii-Out ausgeführt wird. (
-A
) - Der Brain-Flak-Code muss NICHT eingegeben werden
- Es gelten alle Standardregeln
- Der Code muss innerhalb von 1 Minute für jede Eingabe von bis zu 1024 Bytes auf TIO ausgeführt werden. (Wenn kein TIO-Ausgang verfügbar ist, liefern Sie einen Interpreter und ich werde ihn auf meinem Computer ausführen (mein Computer sollte in der Lage sein, TIO nahe zu kommen).
- Sie müssen die Eingabe einer beliebigen Länge unterstützen.
- Sie können Eingaben aus einer Datei übernehmen.
- Eine Optimierung für Testfälle ist nicht zulässig
- Deterministische Ausgabe ist erforderlich
- Programme müssen nicht stapelrein sein
Testfälle (versuchen Sie Ihren Code auf diesen, die tatsächlichen Bewertungstexte werden in 1-2 Wochen nach der Veröffentlichung der Herausforderung veröffentlicht)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
The meaning of brain-flak is to flak your brain with pain.
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
To be, or not to be, that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles
And by opposing end them. To die-to sleep,
No more; and by a sleep to say we die
<your brain-flak code here>
The fitness pacer test is a multi stage test. Avacado Avacado Avacadad Avacadad carrot.bat carrot.jar carrot.carrot Quack Quack Quack Quack Quack Quack Quack Quack Quack downgoat doawngoat down down gaot
This challenge came from a online program that turned text into brain-fuck. However brain-fuck has limitations and it is not nearly as cool as brain-flak. I really am looking forward to cool programs :) I am glad you took the time to read this and look forward to seeing your answer.
Gewinnen
Um zu gewinnen, müssen Sie die Gesamtlänge des Brain-Flak-Codes für jeden Testfall angeben, der 1-2 Wochen nach dem Post-Datum veröffentlicht wird. Die kürzeste Gesamtlänge gewinnt.
HINWEIS!!!!!!:
Dies ist kein Code-Golf , die Länge Ihres Codes hat keinen Einfluss auf Ihr Endergebnis. Es wird geschätzt, sauberen lesbaren Code zu erstellen. Vielen Dank!
Testfälle
quelle
<your brain-flak code here>
unter 1000 fällt, wird mit dem Kopfgeld belohnt. Was ich für einen weiteren Tag nicht posten kann, whoops; Ich habe nicht bemerkt, wie neu das war.Antworten:
Brain-Flak , 130 Bytes
Probieren Sie es online!
Ausgabe für
<your brain-flak code here>
: 5045 BytesProbieren Sie es online!
quelle
Python 3 , 17744 Bytes
Bearbeiten: Ich habe einige Optionen hinzugefügt, um das Golfen in stapelsicheren Situationen zu unterstützen.
Probieren Sie es online!
Eine
einfacherekursive Lösung, die ich weiter verbessern werde. Dies funktioniert sehr gut mit kleineren Eingängen, verliert jedoch die Antwort von MegaTom auf Ruby bei längeren Eingaben .Anmerkungen:
[]
unbrauchbar werden (obwohl sie durch Auskommentieren einiger Zeilen deaktiviert werden können und nur durchetwa 100 Byteserheblich ).Da dies ein rekursiver Algorithmus ist, dauert es bei Zeichen mit großen Werten länger. Zum Beispiel dauert die Auswertung des Zeichens takes (Wert 255) 9 Sekunden, wobei jeder Testfall gleichzeitig 1,6 Sekunden dauert.Cache implementiert![]
)-
. Dies hat ein paar Bytes herausgeschnitten und viel Zeit in Anbetracht des Wertes dieses Bindestrichs war 8212: o.Beispielausgaben:
<your brain-flak code here>
(312 Byte):Probieren Sie es online!
Hello, World!
( 142 Bytes [Hinweis: DiederzeitigeBestleistung betrug 148 Bytes und beträgt jetzt 136 Bytes]):Probieren Sie es online!
quelle
Ruby , 17398 Bytes für alle (neuen) Testfälle
Probieren Sie es online!
<your brain-flak code here>
,362358 BytesProbieren Sie es online!
quelle
Must run under 1 minute for inputs up to 1024 bytes
Regel (obwohl es jetzt viel schneller ist)cache
, notcash
; pPython 3 , 16222 Bytes
Probieren Sie es online!
Zuerst unter 1000 für
<your brain-flak code here>
: DBrain-Flak , 448 Bytes
Probieren Sie es online!
(ursprünglich 827 für
<your brain-flak code here>
)quelle
05AB1E , zu viele Bytes (Mein erstes BF irgendetwas)
Probieren Sie es online!
Extrem einfacher Golfversuch mit dem vorgefertigten "Multiplikations" -Brain-Flak-Code. Es wird nur das Divisorenpaar mit der kleinsten Summe für jeden ASCII-Codepunkt gefunden und anschließend beide Divisorenpaare als Zahlen übertragen. Der Brainflak-Code
({}<>)({<({}[()])><>({})<>}{}<><{}>)
wird dann angehängt und in einer Schleife ausgeführt, bis sich alle Werte auf dem alternativen Stapel befinden.Liste der Leute, denen ich danke:
(()())(()()())
=((()())())
(-252 bytes
)-927 bytes
).Beispiel Golf von
<your brain-flak code here>
at347032182291 Bytes:Brain-Flak , 2291 Bytes
Probieren Sie es online!
Jede Zeile stellt einen Charakter dar, der gerade Golf spielt, das ist 60% besser als die Grundlösung, die ich veröffentlicht habe , und wenn ich buchstäblich nichts über Brainflak weiß, ist dies meiner Meinung nach eine gute Grundlage dafür, was ich nicht tun soll. Ich werde die Antwort in Kürze treffen, mitten in etwas anderem, und ich bin mir sicher, dass ich das verbessern kann. (Ich beziehe die Zeilenumbrüche in die Byteanzahl ein, weil ich nicht erwarte, dass dies gewinnt).
quelle
(()()()())(()()()()())
und((()()()())())
2) Die Multiplikation mit einer Konstanten kann viel kürzer sein alspush(); multiply();
. Um beispielsweise eine Zahl zu verdoppeln, können Sie dies(({}){})
eher tun als(()())({}<>)({<({}[()])><>({})<>}{}<><{}>)
. Aber das ist keine schreckliche Grundlinie. Wenn du mehr Input willst,Brain-Flak
Probieren Sie es online!
Ausgabe für
<your brain-flak code here>
582 Bytes:quelle