Kürzestes Programm, dessen verkettetes Programm + Ausgabe eine Permutation der 95 druckbaren ASCII-Zeichen ist

12

Schreiben Sie ein Programm, das so kurz wie möglich ist (gemessen an der Anzahl der Bytes), keine Eingaben vornimmt, keine Kommentare enthält und eine Zeichenfolge / -folge ausgibt, sodass die verkettete Programm- + Ausgabe genau 95 Zeichen lang ist und jedes druckbare ASCII-Zeichen enthält genau einmal , dh Programm + Ausgabe ist eine Permutation der 95 Zeichen mit den ASCII-Codes 32-126:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 

Im Falle eines Unentschieden ist der Gewinner der Eintrag, dessen (95 Zeichen) verkettetes Programm + Ausgabe der obigen Zeichenfolge am nächsten kommt, gemessen an der Levenshtein-Bearbeitungsentfernung (dh der Anzahl der Einzelzeichen-Löschungen, -Einfügungen oder Ersetzungen erforderlich, um es in ASCII-Reihenfolge zu bringen).

res
quelle
2
Bedeutet dies also, dass das Programm automatisch disqualifiziert wird, wenn es z. B. wiederholte Zeichen enthält? Das ist rau.
Brotkasten
5
Siehe auch
John Dvorak
1
Vielleicht möchten Sie auch entscheiden, ob der Alte echo $0disqualifiziert wird.
Peter Taylor
3
Sind Zeichen außerhalb des druckbaren ASCII-Zeichenbereichs (und möglicherweise deren Duplikate) zulässig? Oder muss das Programm + Ausgabe jedes druckbare Zeichen genau einmal enthalten und nichts mehr ?
Primo
1
@primo Ich gehe davon aus, dass sie erlaubt sind. Ich denke, es ist Zeit, eine "Shift-and-Eval" -Lösung zu schreiben, die Duplikate verwendet (obwohl String-Literale schwer zu bekommen sein werden)
John Dvorak

Antworten:

12

GolfScript, 14 Zeichen

{`),32>46-^}.~

Ausgabe :

 !"#$%&'(*+/015789:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]_abcdefghijklmnopqrstuvwxyz|
Howard
quelle
Die Herausforderung (zumindest soweit ich das verstehe) bestand darin, ein Programm zu schreiben, dessen Programm und Ausgabe eine Permutation der 95 druckbaren ASCII-Zeichen ist, und nicht das kürzestmögliche Programm, das die 95 druckbaren ASCII-Zeichen ausgibt.
Frank Schmitt
Entschuldigung, mein Fehler. Im Titel heißt es "Programm + Ausgabe", während später in der Frage verkettetes Programm + Ausgabe gelesen wird.
Frank Schmitt
),- Wow. Ich liebe das.
John Dvorak
1
@JanDvorak codegolf.SE: der einzige Ort, an dem sich die Leute über ein enges Paren und ein Komma freuen. : P
Türklinke
@Doorknob in golfscript bedeutet "rechts uncons (rparen) und machen ein Array dieser Größe (Komma)". Tatsächlich haben Sie eine Zeichenfolge, die um ein Zeichen gekürzt ist (die rechte geschweifte), und ein Array, das direkt unter der ASCII-Position dieses Zeichens endet (at |). Trimmen Sie die nicht druckbaren Zeichen, den Punkt und das xor (symmetrischer Satzunterschied hier) mit dem Quellcode (Subtraktion wird genommen) ohne Angabe der richtigen Locke, und Sie sind fertig. Und ja, string xor array ist string.
John Dvorak
6

Perl, 89 Zeichen

Dies ist das Beste, was ich bisher konnte:

q< !"#%&'()+/8:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\^_`abcdefghjklmosuvwxz|>;
print~-$=.73*2,y[]{}

Für diejenigen, die mit Perl nicht vertraut sind, können die beiden Argumente für die printAnweisung als ~(-($=)) . (73 * 2)und dargestellt werden tr///.

Das Programm gibt 6 Zeichen aus:

591460

Leider gibt es in Perl jedes einzelne Iterationskonstruktion dass ich mir vorstellen kann ( for, while, until, map, grep) Aktien mindestens ein Zeichen mit print. Wenn Zeilenumbrüche in der Ausgabe erscheinen dürfen, könnte ich mit Perl 5.010 eine Lösung mit 87 Zeichen finden:

q{ !"#%&'*,-./0:;>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^`bcdfgjkmnoprtuvxz|~}while($_+=say)<9
Brot-Box
quelle
Mal sehen, ob ich eine größere Zahl drucken kann :-)
John Dvorak
äh ... kannst du die zweite Zeile für mich übersetzen?
John Dvorak
1
@JanDvorak $=ist die Anzahl der horizontalen Linien im aktuellen Ausgabegerät. Standardmäßig ist 60 ~-$=die bitweise Inversion des Zweierkomplementnegativs von 60, was zufällig ist 59. 73*2ist 146. .und ,mach was du von ihnen erwartest. y[]{}ist eine andere Art zu sagen tr///, welches der transliterate Operator ist. Es braucht $_und tut nichts, weil Sie ihm keine zu ersetzenden Zeichen gegeben haben. Es gibt die Anzahl der ersetzten Zeichen zurück 0. Wir haben also ~-$= . 73*2 , y[]{}= 59 . 146 , 0= "591460".
Dan
6

PHP 67 Bytes

<?=U4eB1gkFdA6J9snZD2IE8y5PhwQV^xHGmqYMfNjKpbR3vcLalCWi0_TtrOSXouz;

Ausgabe:

-|"/@>& *+}:[!],'~(){.\`7#%$

Es scheint, dass es eine 65-Byte-Lösung geben sollte, die 30 Zeichen anstatt nur 28 ausgibt, aber ich konnte es nicht zum Ausrichten bringen. Die 6 nicht verwendeten Zeichen OSXouzwurden stattdessen auf eines der String-Literale geheftet.

Bearbeiten: Bei weiterer Überlegung ist es nicht möglich, mehr als 28 Zeichen auf diese Weise zu generieren. UPPER ^ lowerergibt immer ein Zeichen zwischen 32 und 63, daher werden für alle 10 Stellen benötigt @[\]_`{|}~. Vier der verbleibenden 22 werden im Skript selbst verwendet, so dass nur 18 übrig bleiben, die nur mit Buchstaben erhalten werden können. Der Tiebreaker könnte jedoch deutlich verbessert werden.

primo
quelle
Ah, klar, Barewords. Wie hätte ich das vergessen können?
John Dvorak
3

Rubin, 91 Zeichen

%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcefghijklmnqvwxyz|~};puts(?@‌​.ord*98+1)

Ausgänge 6273.

%{...} Trick von Jan Dvorak gestohlen

Türknauf
quelle
Ohne Kommentare. Wie klar gesagt.
Johannes Kuhn
@JohannesKuhn Ah, habe das nicht bemerkt. bearbeitet.
Türknauf
%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcefghijklmnqvwxyz|~};puts([email protected]*98+1)Ich denke, Sie möchten (für 91 Zeichen), dass das Semikolon als druckbares Trennzeichen (anstelle einer neuen Zeile) und die Buchstaben "ord" aus den geschweiften Klammern entfernt werden.
Res
@res Ja, es ist schwer, all diese Briefe zu verwalten: P
Türklinke
Jetzt ist \ dreimal enthalten.
Howard
3

Perl, 61 Zeichen

print$:x8^CJIBQTOWAEULHVGFNMKRPZY,q<#"/;*g~?|={.>&+u15m97ws26

Ausgabe:

c@db[yo]le_ah\jfD`kX}zS-! %)('v304

$:Standardeinstellung ist " \n-". x8wiederholt es achtmal; Das 24-stellige Ergebnis wird dann bitweise mit einem 23-stelligen Barestring (der letzte -bleibt unverändert) gespeichert . Der zweite Teil besteht aus einer 12-stelligen Q-Zeichenfolge (bitweise) und einer 10-stelligen Barestring (die letzten 2 Zeichen werden verworfen).

Grimmig
quelle
1
Ich finde, Ihre Programmlänge beträgt 61 Zeichen.
Res
Vielen Dank. Mein Texteditor hat aufgrund der EOF 62 Zeichen gemeldet.
Grimmy
1

Ruby, 95 Zeichen, 6 Änderungen

%{ !"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|~}

Ja. Das ist es. Nur ein frei schwebendes String-Literal, das niemals gedruckt wird. Ruby unterstützt Zeichenfolgenliterale (von Perl entlehnt, glaube ich) in der Form eines Prozent-Typ-Begrenzers - der Begrenzer ist ein nicht alphanumerisches Zeichen, und wenn der öffnende Begrenzer eine öffnende Klammer ist (eine von[({< ) ist, ist der schließende Begrenzer der entsprechende schließende Klammer (geschachtelte Klammern sind erlaubt).

Mir ist klar, dass dies eher eine Basisübermittlung ist, aber es sei denn, jemand schafft es tatsächlich, etwas zu drucken, oder es gibt eine Sprache mit einem Freiform-String-Literal mit zwei Zeichen und einem anderen Öffnungs- und Schließbegrenzer. Dies ist das Beste, was es gibt.

John Dvorak
quelle
0

Tcl 96, Abstand bearbeiten 12

if 0    {!"#$%&'()*+,-./123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeghjklmnopqrstuvwxyz|~}
Johannes Kuhn
quelle
Ich fürchte, eines der Leerzeichen sollte ein Tabulator sein
John Dvorak
Ist ein Tab oder ein Leerzeichen druckbar?
Johannes Kuhn
Registerkarte ist nicht druckbar (ASCII 9), aber Speicherplatz ist druckbar (ASCII 32).
John Dvorak
1
[
Ich habe
1
join {!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghklmpqrstuvwxyz|~} scheint mit 95 Zeichen zu arbeiten? (Vielen Dank für Ihren Eintrag Tut mir leid , das Chamäleon -. Leider habe ich in Eile bearbeitet und sollte anders gemacht Dinge haben.)
res