Eine Sprache, die bei eingeschränkten Quellen und anderen derartigen Herausforderungen sehr nützlich ist , ist Unary , ein Brainfuck-Derivat, in dem Programme mit nur einem Zeichen geschrieben sind. Ihre Aufgabe ist es, ein Programm zu schreiben, um Programme von Brainfuck nach Unary zu konvertieren, und ein Programm, um das Gegenteil zu tun, beide Programme in derselben Sprache. Ihre Punktzahl ist die Summe der Längen der beiden Programme.
Wie konvertiert man von Brainfuck zu Unary?
- Zuerst konvertieren Sie Ihren Brainfuck-Code nach folgender Tabelle in einen Binärcode:
- Verketten Sie nun den Code in der Reihenfolge des Codes zu einer riesigen Binärzahl.
- Stellen Sie
1
der Zeichenfolge ein voran , um eine eindeutige Binärzahl sicherzustellen. - Wandeln Sie eine Binärzahl mit einem beliebigen Zeichen in eine unäre Zahl um.
- Bsp .:
+.
wäre000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(84 Nullen).
Brainfuck -> Unary Specs
- Drucken Sie nicht das tatsächliche Programm, sondern nur die Länge des resultierenden Programms, da die resultierenden Programme unglaublich groß sein werden.
- Nehmen Sie das brainfuck-Programm als String durch stdin, function arg usw. und geben Sie die Länge aus.
- Das Programm ist immer gültig und enthält nur die 8 Zeichen.
Unary -> Brainfuck Specs
- Sie müssen die Umkehrung des obigen Algorithmus implementieren.
- Auch hier handelt es sich aufgrund der großen Größen um eine Zahl, die die Länge des Unary-Codes beschreibt.
- Gleiche I / O-Regeln wie immer.
- Das Programm ist immer gültig und enthält nur die 8 Zeichen.
Testfälle
- Hallo Welt -
++++++[>++++++++++++<-]>.>++++++++++[>++++++++++<-]>+.+++++++..+++.>++++[>+++++++++++<-]>.<+++[>----<-]>.<<<<<+++[>+++++<-]>.>>.+++.------.--------.>>+.
=239234107117088762456728667968602154633390994619022073954825877681363348343524058579165785448174718768772358485472231582844556848101441556
- Fibonacci -
++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>++++++++++++++++>>+<<[>>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[<+>-]>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<.>.>>[>>+<<-]>[>+<<+>-]>[<+>-]<<<-]<<++...
=13067995222095367150854793937817629722033205198624522624687536186118993888926522550140580142585590431635487113180955099384652678100247403485397450658564826143160529351955621991895221530908461364045400531236124980271740502887704217664044858614821622360156740992393765239123681327824577149595724956207165558106099868913919959549896553103116795519592552089266360725543244154867904980260
Dies ist Code-Golf, also gewinnt die niedrigste Punktzahl in Bytes!
Möchte jemand eine Lösung für Unary finden? ; P
code-golf
brainfuck
base-conversion
compiler
Maltysen
quelle
quelle
10101010101010
, wann sie sein sollten1010010010010
Antworten:
Pyth, 17 + 17 = 34 Bytes
BF -> Unär, 17 Bytes
Unär -> BF, 17 Bytes
quelle
Brainfuck ,
563 335 318 316296 +529 373 366336 = 632 BytesDa hier offensichtlich eine Lösung in einer verwandten Sprache fehlte, hier die Lösung in Brainfuck und Golunar. Ich konnte keine Antwort auf unary posten, weil das ein paar fantastische Billionen Mal mehr Gedächtnis benötigen würde, als es Atome im Universum gibt ^^
Die "Zurück" -Routine prüft nicht, ob der Golunar / Unary-Code gültig ist. Wenn die Bitanzahl mod 3! = 1 ist, wird eine Endlosschleife mit vielen ">" ausgegeben.
Dank an Nitrodon, der mir geholfen hat, weniger als 300 Zeichen für den unären Code des BF zu erhalten
Brainfuck zu unary
Probieren Sie es online!
und zurück
Probieren Sie es online!
Golunar / unary -digits,
509 303 288 286268 +478 337 331304 = 572 BytesBrainfuck zu unary
und zurück
Quellcodes
Brainfuck zu unary
und zurück
quelle
Python 2,
80796355 +8664 = 119 BytesVielen Dank an Sp3000 für seine zahlreichen Vorschläge, die viele Bytes gespart haben.
Brainfuck zu Unary,
78776153 + 2 = 55 BytesZwei Bytes hinzugefügt, um die umgebenden Zeichen bei der Eingabe zu berücksichtigen.
Unär für Brainfuck,
8664 BytesSchau es dir auf ideone hier an.
quelle
CJam, 35 Bytes
Brainfuck zu Unary, 17 Bytes
Probieren Sie es online aus.
Wie es funktioniert
Unär für Brainfuck, 18 Bytes
Probieren Sie es online aus.
Wie es funktioniert
quelle
Bash + Coreutils, 39 + 47 = 86
b2u.sh
:u2b.sh
:Testausgang:
quelle
tr -dc 0-9
(und im Code Golf kann man davon ausgehen, dass?
es gut ohne Flucht ist)Japt , 13 + 13 = 26 Bytes
Brainfuck zu Unary
Versuch es!
Erläuterung:
Unär für Brainfuck
Versuch es!
Erläuterung:
Anmerkungen
Ich kann den Meta-Post nicht finden, aber wenn mein Gedächtnis die richtigen Antworten liefert, können die E / A-Vorgänge auf Zahlen beschränkt werden, die von ihrer Sprache unterstützt werden, sofern sie einen Algorithmus implementieren, der funktioniert, wenn die Sprache größere Zahlen unterstützt. Dies ist der Fall, wenn Japt eine Zeichenfolge als "Basis unter
n
Verwendung diesern
Zeichen für die Ziffern" behandeln kann, wird nur dernumber
Datentyp auf der anderen Seite des Vorgangs verwendet, sodass die Testfälle nicht erfolgreich ausgeführt werden können. Die Ausgabe des ersten Programms und die Eingabe des zweiten Programms erzwingen, dass die Zahl zu einer Zahl wird, die als a dargestellt werden kannnumber
, anstatt die tatsächliche Zahl zu verwenden. Für Zahlen, die von Japt perfekt dargestellt werden könnennumber
Datentyp Diese Programme funktionieren wie gewünscht. Wenn sich dernumber
Datentyp ändert, um größere Nummern zu unterstützen, werden diese Programme auch diese Nummern unterstützen.quelle
05AB1E , 33 (17 + 16) Bytes
Brainfuck zu Unary-Länge:
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Unäre Länge nach Brainfuck
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Pfeil , 77 + 142 = 219 Bytes
Probieren Sie es online!
quelle
C (gcc) , 254 Bytes
Probieren Sie es online!
Legt anhand von input (
i
) fest, welche Richtung verwendet werden soll , und speichert das Ergebnis im übergebenen Puffer (o
). Beachten Sie, dass einige Compiler das Speichern von 4 Bytes basierend auf der implementierungsdefinierten Reihenfolge von o ++ erlauben. In diesen Fällen wird durch die bereitgestellte Lösung ein zusätzliches Zeichen aus der Unary-> BF-Konvertierung abgeschnitten, undo[1]
alle können durch ersetzt werden*o
, um das Verhalten wiederherzustellen.quelle
#include <string.h>
die Fußzeile anstelle der Kopfzeile einzufügen, um zu zeigen, dass es ohne diesen Import funktioniert. Wäre C ++ nicht auch kürzer, weil der Operator überladen ist? : Psi
aufui
vielleicht ändern*i>47&*i<58
->*i%48<10
?mpz_init_set_str
->mpz_set_str