Die druckbaren ASCII-Zeichen (Hex-Codes 20 bis 7E) lauten in der Reihenfolge:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Beachten Sie, dass dort Platz ist.)
Diese Zeichenfolge enthält alle druckbaren ASCII-Zeichen mindestens einmal in aufsteigender Reihenfolge, wenn sie von links nach rechts gelesen werden, jedoch nicht in absteigender Reihenfolge.
Die Saite
REVERSED:~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! NORMAL: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
enthält alle druckbaren ASCII-Zeichen mindestens einmal in aufsteigender und absteigender Reihenfolge. Mit anderen Worten, wenn die Zeichen mit ihrem numerischen Code bewertet werden, haben die am längsten zunehmenden und am längsten abnehmenden Teilsequenzen eine Länge von 95 (die Anzahl der druckbaren ASCII-Zeichen).
Herausforderung
Wählen Sie eine zusammenhängende Teilmenge von N druckbaren ASCII-Zeichen aus, z. B. LMNOP
(N = 5). Schreiben Sie ein Programm, indem Sie nur die N Zeichen verwenden, deren Ausgabe alle 95 ASCII-Zeichen in aufsteigender und absteigender Reihenfolge enthält, wie im obigen Beispiel.
Der Gewinner ist die Einsendung mit dem niedrigsten N. Bei Gleichstand gewinnt der kürzeste Code in Bytes.
Anmerkungen
- Eine zusammenhängende Teilmenge ist eine Menge der druckbaren ASCII-Zeichen, die alle in einer durchgehenden Linie angezeigt werden, z. B.
LMNOP
oder89:;<=>
. - Ihre zusammenhängende Untergruppe kann von
~
einem Punkt zum anderen "schleifen" , dies führt jedoch zu einer Strafe von +3 für N. Also{|}~
hat N = 4, aber{|}~ !
N = 6 + 3 = 9. - Ihr Programm enthält möglicherweise nur die N druckbaren ASCII-Zeichen aus der von Ihnen ausgewählten zusammenhängenden Teilmenge. Sie müssen nicht alle erscheinen und können in beliebiger Reihenfolge mehrmals auftreten. (Alle nicht druckbaren ASCII-Zeichen und alle nicht ASCII-Zeichen sind nicht zulässig. Dies bedeutet, dass Tabulatoren und Zeilenumbrüche nicht zulässig sind.)
- Ihre Ausgabe darf nur druckbare ASCII-Zeichen enthalten und darf nicht länger als 10000 Zeichen sein.
- Die längsten ansteigenden und absteigenden Teilfolgen Ihrer Ausgabe müssen beide die Länge 95 haben (wie oben erläutert).
- Ausgabe auf Standardausgabe. Es erfolgt keine Eingabe.
- N ist eine positive ganze Zahl kleiner als 96.
quelle
Antworten:
Unär, N = 1
14680262330376163203871465704220787333741951071 Bytes
Verwendet nur das '0'-Byte (ASCII 49).
Hat ungefähr 4.13253e + 60 Bytes von der @ Comintern-Lösung abgelegt. Dank noch an ihn :)
Im originalen Brainfuck:
quelle
Unär , N = 1
4132527913354820031118363262102424570092493175835499123283719 (4.1325279e + 60) Bytes
Der Quellcode in Unary ist offensichtlich zu groß, um hier veröffentlicht zu werden. Es kann leicht reproduziert werden, indem eine Datei mit "0" eingegeben (oder generiert) wird, die die gleiche Länge wie die Anzahl der obigen Bytes hat.
Hier ist die binäre Darstellung:
Und der äquivalente Brainf ** k-Code (Zeilenumbrüche zur Verdeutlichung):
Ausgabe:
BEARBEITEN : 9.097887e + 87 unnötige Zeichen ausgespielt.
quelle
Brainfuck, N = 2
24.383 Bytes. Verwendet nur - und. (ASCII 45 und 46). Versuchen Sie es hier: http://esoteric.sange.fi/brainfuck/impl/interp/i.html . Kann wahrscheinlich als Morse-Code mit den richtigen Leerzeichen analysiert werden.
Erfordert einen Interpreter gemäß der traditionellen Definition von Brainfuck, der ein Array von (mindestens) 30.000 Byte- Zellen verwendet, die alle auf Null initialisiert sind.
quelle
-
, dann den absteigenden Teil,.-.-.etc
dann den aufsteigenden Teil (Gruppen zu 255,-
gefolgt von a.
). Soweit ich das beurteilen kann, ist alles da. Siehe auch Bearbeiten auf meiner Antwort zur Erklärung.-
mit nur einer.
am Ende :). Mein Fehler.C Jam - N = 3; 7659 Bytes
Versuchen Sie es unter http://cjam.aditsu.net/
quelle
Brainf ** k, N = 4
Mein erstes Brainfuck-Programm. Verwendet 3 Zeichen aus dem Block
+,-.
(Ascii 43 bis 46.)410 Bytes (eines
.
kann aus dem Programm gelöscht werden, wenn das Doppelte~~
zu einem Einzelnen reduziert werden kann~
.)Hier ist die Liste der Befehle in diesem Bereich der ASCII-Tabelle (ich benötige den Eingabebefehl nicht):
Zum Glück sind die restlichen Befehle
<>[]
(Bewegen des Datenzeigers und Ausführen von bedingten Sprüngen) nicht erforderlich!Zur Verdeutlichung in 3 Zeilen aufteilen: 1: Inkrementieren, bis die Daten 32 erreichen. 2: Ausgabe und Inkrementieren, bis die Daten 126 erreichen. 3: Ausgabe und Dekrementieren, bis die Daten 32 erreichen.
Ausgabe
Editiere N = 2
Per @ nneonneos Antwort ist es möglich, jedes
+
durch 255-
Zeichen für N = 2 zu ersetzen . Durch eine Neuanordnung des Codes und der Ausgabe (Anzeige von unten nach oben) kann die erste Zeile auf 256-126 = 130-
Zeichen reduziert werden. Dies fiel mir ein, nachdem ich ins Bett gegangen war, und niemand schlug mich darauf ein. https://codegolf.stackexchange.com/a/35801/15599quelle
~
stattdessen verwenden,~~
da die zunehmenden und abnehmenden Teilfolgen noch vorhanden wären.C; N = 43 = 40 + 3
Hier vermeide ich häufig vorkommende Zeichen wie
+
-
*
/
Ziffern0-9
, Komma,
und Semikolon;
.Also musste ich verschiedene Zahlen nur mit den Operationen ausdrücken
&
%
~
.Möglicherweise ist weiteres Golfen möglich (das Auffinden kleinster Darstellungen für die Nummern 63 und 95 ist eine Übung für den Leser).
Die ASCII-Teilmenge ist 32 ... 41 und 97 ... 126.
Ich bin nicht sicher, ob Zeilenumbrüche im Code zulässig sind. Wenn nicht, entfernen Sie sie einfach.
quelle
Wirbel , N = 2, 6486 Bytes
Mit nur 2 Zeichen
01
.Ausgabe :
Ich denke, ich kann mit Loops mehr Golf spielen, aber das Codieren mit 0s und 1s war schrecklich, also werde ich es nicht tun.
Kommentiert
Beachten Sie, dass es
O
undl
als0
und gibt1
.quelle
Python 2.7 N = 45 = 42 + 3
Dies verwendet
string.printable
, sortiert und spuckt es ausstdout
. Ich speichere ein paar Zeichen, indem ich das.
Instdout.write
miteval
einfüge und die Zeichenfolge mit denord
Werten der Zeichen formatiere, die ich verwenden könnte.Raus mit dem Alten - N = 49 = 46 + 3
Obwohl Python diestring.printable
Liste enthält, ist diese leider nicht in Ascii-Reihenfolge, und es gibt keine Möglichkeit, sie ohne a*
oder a zu verwenden.
, sodass weniger Zeichen erforderlich sind, um sie manuell auszuführen.Verwenden des Zeichenbereichs:
Die offensichtliche Version: N = 63 = 60 + 3
Dies ist die offensichtliche Version, die den Zeichenbereich verwendet:
quelle
len('x')
Speichern von 2 weiteren Zeichen sogar eine 1 verwendet habe .import
Lösung nur dann funktionieren, wenn Sie;
eine beträchtliche Anzahl von Zeichen hinzugefügt haben.C; N = 61 = 58 + 3
Um die Verwendung einer so großen Teilmenge zu kompensieren, habe ich meinen Code golfen.
Die ASCII-Teilmenge ist 32 ... 59 und 97 ... 126.
Es war eine lustige Herausforderung, dem
=
Charakter auszuweichen!quelle
;
. Sie können dies möglicherweise verwenden, um Ihre Antwort zu erweitern, ohne dass es sich dabei um eine Kopie der anderen handelt.Python 2.7 N = 28 + 12 + 3 = 43
Zeichen verwenden
cdefghijklmnopqrstuvwxyz{|}~
und dann umschließen!"#$%&'()*+
Um dies zu vermeiden, musste
,.-
ich einige Tricks anwenden. Ich habe verwendet,exec
damit ich den Code in Zeichenfolgen umwandeln kann, die mir die Verwendungchr(ord('+') + len('xxx'))
für.
undchr(ord('+') + len('x'))
für ermöglichten,
. An jeder Stelle, an der ich eine -1 brauchte, verwendete ich ~ 0 in Form von~len('')
. Um das zu vermeidena
, habe ichchr(ord('c') + ~len('x'))
(99 - 2) benutzt.Die Zeichenfolge, die zusammengesetzt wird, hat N = 48, verwendet Zeichen
abcdefghijklmnopqrstuvwxyz{|}~
und wird dann umbrochen!"#$%&'()*+,-.
Beachten Sie, dass die Zeilenumbrüche und Kommentare nur der Lesbarkeit dienen.
quelle
Rubin - N = 48
Lass Ruby Ruby sein und nimm die Umgehungsstrafe an.
N = 48 <- 15 ('' - '.') + 30 ('a' - '~') + 3
oder
Alt:
N = 72 {Geradeauswertung} <- 72 ('.'-' u ') + ungültige Zeilenumbrüche
Es wird hier ein bisschen umgeschlagen, um das 'v' in "reverse" zu vermeiden. Ich habe es hier gelassen, weil ich den Pack-Hack ("C *") mag.
quelle
x86_64 Maschinencode, Mach-O-Format
N = 2, 32768 Zeichen (zu groß, um die Nachrichtenbeschränkung zu erfüllen)
Bearbeiten: Pastebin ist nicht verfügbar. Den vollständigen Text finden Sie unter: http://www.ionoclast.com/random/golf.bin.txt
quelle
#include <unistd.h> int main() { char const s[] = "~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"! !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; write( 1, s, sizeof s ); }
Assembly sollte viel besser funktionieren.Rubin, N = 27
Verwendet
$
durch>
.quelle
Scala, N = 69
Verwendet die Zeichen
01246789\bdefu
(Unicode-Escape- Zeichen ) als ausgefallene Schreibweise(' 'to'~')++('~'to' ')map print
.quelle