Aufgabe
Codieren Sie eine Zeichenfolge, die ausschließlich aus Großbuchstaben ( A-Z
) besteht , und verwenden Sie dabei nur Nullen und Einsen. Verwenden Sie dabei Ihr eigenes Lieblingsschema. Aber die Regel ist nicht so einfach!
Regeln
- Ihr Programm / Ihre Funktion muss eine gültige Eingabezeichenfolge der Länge 8 korrekt verarbeiten .
- Die Ergebnisse müssen für alle Eingaben gleich lang sein.
- Die Ergebnisse müssen für unterschiedliche Eingaben unterschiedlich sein.
- Die Ergebnisse müssen so kurz wie möglich sein.
- Die Ergebnisse müssen eins zu null ausbalanciert sein (eine Anzahl von Einsen ähnlich der von Nullen). Sie müssen nicht gleich sein (dh perfekt ausbalanciert sein), aber Ihre Punktzahl wird dafür bestraft.
Sie müssen kein Programm / keine Funktion bereitstellen, die Ihre Codierung decodiert.
Ein- und Ausgang
- Sie können eine beliebige Menge von 26 verschieden zu akzeptieren entscheiden druckbaren ASCII - Zeichen statt
A-Z
. - Sie können festlegen, dass anstelle von und ein Paar eindeutiger druckbarer ASCII-Zeichen ausgegeben werden soll .
0
1
- Sie dürfen anstelle einer Bitfolge keine Ganzzahl ausgeben , da diese möglicherweise führende Nullen enthält und es unklar ist, ob Sie die Regel 2 tatsächlich erfüllt haben.
- Wenn Sie von der Standardeinstellung (
A-Z
Eingabe und01
Ausgabe) abweichen möchten , müssen Sie die Eingabe- / Ausgabe-Zeichensätze in Ihrer Übermittlung angeben.
Wertung
- Basisbewertung: Codegröße oder 1, wenn Ihr Programm leer ist.
- Strafen
- Strafe für Länge: multiplizieren
1.5 ** (encoded length - 42)
- Es gibt keinen Bonus dafür, kürzer zu sein. 42 ist die Mindestlänge für eine perfekt ausbalancierte Kodierung von 8-fachen Zeichenfolgen mit der Alphabetgröße 26.
- Strafe für Unausgeglichenheit: Multiplizieren Sie
2 ** max(abs(ones - zeros) for every valid input of length 8)
, woones
undzeros
sind die Zählungen von 1 und 0 in jedem Ausgang. - Ihr Beitrag muss entweder ein Worst-Case-Beispiel (Eingabe / Ausgabe) oder eine theoretische Erklärung zum Strafwert enthalten.
- Strafe für Länge: multiplizieren
- Die niedrigste Punktzahl gewinnt.
Beispiel Einsendung
Hypothetisches esolang, 0 Bytes, Kerbe 74733.8906
Hier ist ein hypothetischer Esolang, bei dem ein leeres Programm alle ASCII-Codes der eingegebenen Zeichen binär ausgibt.
Wenn Sie AAAAAAAA
beispielsweise eine Eingabe machen, druckt das Programm 1000001
8 Mal hintereinander, d 10000011000001100000110000011000001100000110000011000001
. H.
Das eingegebene Alphabet wird als gewählt CEFGIJKLMNQRSTUVXYZabcdefh
. Auf diese Weise werden alle Zeichen in Binärform in sieben Ziffern umgewandelt, und die Null-Eins-Zählungen unterscheiden sich nur um eins pro Zeichen (bei der Umwandlung in Binärform haben alle drei Einsen und vier Nullen oder umgekehrt).
Die Ausgabelänge beträgt immer 56, und der ungünstigste Fall tritt bei den Eingängen auf CCCCCCCC
, bei denen Nullen 8-mal häufiger auftreten als Einsen.
Daher ist der Punktestand dieser Einreichung 1.5 ** (56 - 42) * 2 ** 8 == 74733.8906
.
quelle
Antworten:
Stax , 11 Bytes, 0 Strafe, 11 Punkte
Dieses Programm verwendet
[0-9A-P]
für die Eingabe und[01]
für die Ausgabe.Führen Sie es online aus und debuggen Sie es - klicken Sie zum Starten auf die Schaltfläche Ausführen. Die ersten vier Testfälle werden in Millisekunden ausgeführt. Der fünfte in Sekunden. Der sechste in Jahrtausenden.
Die entsprechende ASCII-Darstellung dieses Programms ist dies.
Es stützt sich stark auf die
|N
Anweisung, die die nachfolgende Permutation eines Arrays erhält.Alle Ausgaben sind Permutationen der Anfangszeichenfolge. Es hat 21 Nullen und 21 Einsen. Daher sind alle Ausgaben 42 Zeichen und perfekt ausbalanciert.
quelle
Jelly , 19 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth,
20 -19 -14 Byte, maximaler Diff: 0, Länge: 64, Ergebnis:149636.5528142154.7251104745.5869Probieren Sie es online!
Verwendet das Kleinbuchstaben (
[a-z]
) anstelle von Großbuchstaben. Verwenden Groß kann durch das ErsetzenG
mitrG1
auf Kosten von 2 Byte.Ich hätte HyperNeutrinos Python 3-Antwort für eine bessere Punktzahl übersetzen können, aber ehrlich gesagt möchte ich eine Antwort, die tatsächlich funktioniert.
quelle
Python 2 ,
779645 Bytes, Max (Diff) = 0, Länge = 48, Score = 7346,95Probieren Sie es online!
Die magische Zahl
4lnk28t9vtqgfrpfda9uyfrjhcjwjvno6aec2nwegi0g4mnublc05dher8fjm4s5gh55lu87a4itmc74t6tozcsfdbxkg82frwljy0wam1jht98g2j0bma021v5d48pwq0fklv0n1ltrxft1fpk5gt5mx5fj4p2mjqqpvcylt1xayxf1iwdmyoxgfvl7oui1oo6147bm9rqpqut9ns8hhjc77t3pqy48otovrsm1t4mmleumspkuef66ma1vi0l4mtkwaeeizuvvds9fro3vhc0mrn6ox17rdpk7xw747qf28934u5jci5q1qj81i7dyf7rf0x7hb19xm93xhxsgh4w8ifs6fhynsddbo9j938ewfvhjlbpiz50n5hanmno6c89blyx50e89z7vjq2ho2r2u2wwyu4q18kv4fi1nhmfbgjbnkdayr5kblaped4fo5u97bi9a67d89irxa0r9cinmnohfgjmh5fhkcr33
(in Basis 36) oder ihr Dezimaläquivalent382136276621246556626597379364678993894472503063952720559883124988542417847157286833446006767955087631166943136913765901237281892296575754126024183763829277879554548743231384272055945084065681774297483130020386641869860456147616177702938121538230311395513497506285733567467605871232294046704309941152721616618474501854355102646152223338484615876165254236449912858255665248186687952137487016925761633237335983620006273901509768720506129789443353730706676483647298576692613113269388239830925662977837917272690235355742330377154505179476767457756888107428475384947712227312747517748632498691058764154580934614231152483398774630508576533263098942260213967880819240793990219283490212843120923539516962682466148372296338428497778127570401190309339992457562121354271
codiert alle 252 Permutationen von 50
s und 51
s.Der Algorithmus wandelt zuerst
A-Z
in0-25
und behandle es als Basis-26 - Zahl, dann fügen56*252**4
.Dann wird die Zahl in eine 5-stellige Basis-252-Zahl umgewandelt und durch die entsprechende Permutation von 5
0
s und 51
s ersetzt.Danach löschen Sie die ersten 2 Bits, was garantiert ist
01
. Dann haben wir den String in einen 48-Bit-String kodiert, der genau aus 240
s und 241
s besteht.quelle
7346.953125
).JavaScript (ES8), Punktzahl 22186.623779296875
Bei Eingabe mit gerader Länge werden immer 3,5 * Nullen und Einsen ausgegeben, sodass nur die Strafe von 1,5 ** 14 bezahlt wird. Unterstützte Zeichen:
'+-.3569:<GKMNSUVYZ\cefijlqrtx
.quelle
Gelee , 16 Bytes
Verwendet
+,-./0123456789:;<=>?@ABCD
für die Eingabe und gibt eine Liste von Einsen und Nullen zurück.Auf diese Weise wird versucht, eine Liste mit 538.257.874.440 Kombinationen im Speicher zu erstellen. Sie benötigen also eine große Menge an RAM, um die Liste wie sie ist auszuführen.
Probieren Sie es online! (prüfbar; Eingangslänge 3, Ausgangslänge 18)
Wie es funktioniert
quelle
Python 3 ,
985135 Bytes, Max Diff 0, Länge 42, Punktzahl 135Probieren Sie es online!
Mit freundlicher Genehmigung von Bubbler
Ungolfed-Code:
Da andere Ansätze recht ineffizient erscheinen, habe ich versucht, einen zeitoptimalen Ansatz zu erstellen. Es ist sauber O (N) in N Bits der Codierung, was groß-O-optimal ist.
Hinweis: Versuchen Sie, an Pascals Dreieck für dieses zu denken ( dieses Diagramm zeigt es)
Beispielausgaben:
Ausführungszeit: <0,013 s (für alle Eingänge ungefähr konstant)
quelle
Perl 5 , 55 Bytes, maximales Diff 0, Länge 42, Punktzahl
5655Dies funktioniert, wird aber lange dauern, aber machbar sein (
ZZZZZZZZ
hat auf meinem Computer 2,5 Tage ). Speicher ist kein Problem.Verwendet
A-Z
als Eingabe und1
undA
als Kodierungszeichen. Sie sind immer perfekt ausbalanciert. Überspringt die ersten26^7 = 8031810176
ausgeglichenen Kombinationen, die Zeichenfolgen mit weniger als 8 Zeichen darstellen, aber das ist in Ordnung, da diese538257874440
verfügbar sind und ich208827064575
und verwende208827064575 + 8031810176 < 538257874440
.Es "zählt" jedoch tatsächlich bis zu der Zielkombination, die sehr lange dauern wird. Aus diesem Grund habe ich im TIO-Link nur eine zu kurze Eingabezeichenfolge verwendet (die auch unterstützt wird), um zu demonstrieren, dass die Ausgabe korrekt ist. Funktioniert etwas besser als
AAAAAA
vor dem Timeout von TIO.ZZZZZZZZ
sollte etwa26^3 = 17576
mal langsamer sein.Probieren Sie es online!
Der Decoder ist fast der gleiche:
Probieren Sie es online!
quelle
> <> , 75 Bytes, Max Diff 0, Länge 42, Punktzahl 75
Probieren Sie es online!
Faire Warnung, es wird sehr, sehr lange dauern, bis dies auch für den unbedeutenden
AAAAAAAA
Fall abgeschlossen ist. Durchläuft jede Binärdarstellung eines Zählers, bis die (Basis 26 Darstellung des Eingangs) 'te Binärzahl mit 211
s erreicht ist. Wenn Sie das Programm testen möchten etwas können Sie die ersetzenab+
in der dritten Zeile mit1
denen die n - te binäre Zahl mit nur einem einzigen zurückzukehren1
, Probieren Sie es online!quelle
Python 3 , 75 Bytes, Max Diff 0, Länge 42, Punktzahl 112
Probieren Sie es online!
Dies funktioniert theoretisch nur aufgrund von Speicherbeschränkungen. Es gibt
538257874440
unterschiedliche symmetrische Null-Eins-Zeichenfolgen mit der Länge 42 und208827064575
möglichen Eingaben, sodass einige der möglichen Ausgaben nicht verwendet werden.-37 Bytes dank @recursive
quelle
int(s,26)
den Indexwert verwenden, anstattsum(...)
den eingegebenen Zeichensatz zu ändern.[0-9A-P]
, nicht wahr? Auf meinem Computerint("123ABC",26) == 12855114
C ++, 146 Bytes, 42 maximale Länge, 0 Unwucht, Punktzahl 146
Funktioniert für jeden fortlaufenden 26 Zeichen, aber Warnung, es läuft eine inakzeptable Zeit
quelle
#include<algorithm>
mit#import<regex>
.