Schreiben Sie das Ganze mit dem Ungebohrten

55

Die ASCII-Zeichen vom Dezimalcode 33 bis 126 sind:

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

Beachten Sie, dass in den meisten Schriftarten 25 dieser Zeichen "Löcher" aufweisen: (eine Gattung, die größer als 0 ist , könnte man sagen)

#$%&04689@ABDOPQRabdegopq

Die anderen 68 "unholed" Zeichen sind:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Ihre Aufgabe ist es, das kürzestmögliche Programm zu schreiben, indem Sie nur die ungelochten Zeichen verwenden, die jedes der gelochten Zeichen genau einmal in beliebiger Reihenfolge ausgeben.

Da Leerzeichen, Tabulatoren und Zeilenumbrüche (Zeilenvorschub und / oder Wagenrücklauf) Leerzeichen sind, werden sie möglicherweise in Ihrem Programm oder seiner Ausgabe angezeigt. Sie zählen weiterhin zur Anzahl der Zeichen. Andere ASCII-Zeichen dürfen nicht verwendet werden (und schon gar nicht Nicht-ASCII-Zeichen).

Anmerkungen

  • Sie müssen nicht alle ungelösten Zeichen oder nur jeweils eines verwenden.
  • Die Ausgabe darf keine ungelochten Zeichen enthalten.
  • Die Whitespace-Sprache kann verwendet werden.
  • Die Ausgabe sollte nach stdout gehen oder kann in eine Datei gehen. Es sollte keine Eingabe geben.

Bonus: Versuchen Sie zum Spaß, alle nicht gelochten Zeichen mit den gelochten Zeichen zu drucken. Ich bin skeptisch, dass dies in einer vorhandenen Sprache möglich ist.

Calvins Hobbys
quelle
9
+1 für den Titel. Wir machen Liebe Sachen wie diese .
Jacob
1
Wo ist die Perl-Lösung ?!
Pierre Arlaud
4
Nun, keine Lösung in Haskell oder C; Wenn es ein Programm ist, das Sie wollen, müssen Sie buchstabieren main.
Rhymoid
2
Bonus kann mit Leerzeichen gemacht werden.
Joshua
1
Wie ist niemandem aufgefallen, dass ich es vergessen habe ~?
Calvins Hobbys

Antworten:

18

Pyth , 43 35 Zeichen

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

Probieren Sie es hier aus .

Gibt die Zeichen in der angegebenen Reihenfolge aus, mit der Ausnahme, dass 9 am Anfang steht und durch Zeilenumbrüche getrennt ist.

Die Zeichenfolge enthält alle Zeichen 7, die größer als die erforderlichen sind, mit der Ausnahme, dass 9 zu @ werden würde. Algorithmus dank @Howard.

Erläuterung:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.
isaacg
quelle
24

GolfScript, 37 36 Zeichen

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

Probieren Sie den Code hier aus .

Die Zeichenfolge enthält die verbotenen Zeichen, die mit 25 xor'ed sind. Glücklicherweise werden alle Zeichen gültigen Zeichen zugeordnet.

Howard
quelle
22

Brainfuck 119

--[------->++<]>-.+.+.+.++++++++++.++++.++.++.+.+++++++.+.+.++.+++++++++++.+.+.+.[------>+<]>--.+.++.+.++.++++++++.+.+.
Teun Pronk
quelle
ähm, das --am Anfang ... Radeln Sie dort auf dem ersten Register zurück zu 254?
WallyWest
1
Ja :) Verkürzt die Schleife auf 36 (um auf 35 zu kommen)
Teun Pronk
Nun, es schlägt mit Sicherheit meine 275 ... gut gemacht ...
WallyWest
@ Calvins Hobbys Ich bin mir ziemlich sicher, dass keine Eingabe erlaubt ist, sorry. OP möchte jedoch möglicherweise klarstellen.
Isaacg
@isaacg Ich weiß, das ist, warum mein Hauptcode keine Eingabe nimmt und das letzte Beispiel ist kein ernstes :)
Teun Pronk
20

Bonus - dc, 179 Zeichen

Oh gut, eine weitere Herausforderung mit eingeschränktem Zeichensatz, wo dies Pzulässig ist.

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

Da dces anscheinend dunkel genug ist zu erklären (seltsam für mich, wenn man die seltsamen Dinge hier betrachtet!), Folgt hier eine Übersicht:

Es ist in erster Linie ein RPN-Rechner mit Arithmetik mit willkürlicher Genauigkeit. Aber für diese Herausforderung verwende ich den PBefehl, der eine Zahl als eine Reihe von Zeichen in der Basis 256 interpretiert und diese ausgibt. Beispiele: 65 PAusdrucke A(ASCII-Code 65). 16706 PDrucke AB(16706 = 65 * 256 + 66).

Abgesehen davon ist das einzig interessante Merkmal, dass es alle hexadezimalen Ziffern erkennt, 0-9A-Fauch wenn sie nicht in einer hexadezimalen Zahl enthalten sind. Dezimaleingabe ist der Standard, so dass die Eingabesignal- 999Mittel 9 hundreds + 9 tens + 9und ABCMittel 10 hundreds + 11 tens + 12sie äquivalent zu machen 1122.

Die Fähigkeit, die Ziffern ABDin Dezimalzahlen zu verwenden 12357, macht die Unfähigkeit, sie zu verwenden , teilweise wett , und die Wahl der Reihenfolge und Gruppierung erledigt den Rest. (Wenn ich ein paar Zahlen müssen x, y, zund sie sind nicht mit dem erlaubten Ziffern darstellbar, dann versuche ich darstellen x*256*256+y*256+zstatt.)

Das Programm kann wahrscheinlich durch Verwendung größerer Gruppen etwas kürzer gemacht werden. Ich habe 3 Bytes pro Nummer nicht überschritten.


quelle
1
@DigitalTrauma anders herum war der Bonus am Ende der Problemstellung.
Ha! Das habe ich vermisst! Ausgezeichnet! +1
Digitales Trauma
Kannst du das erklären? Und gibt es einen Ort, an dem wir das betreiben können?
Calvins Hobbys
4
Ein Ort, an dem Sie es betreiben können? dc ist keine alberne Sprache, die für die Erstellung schwer lesbarer Programme entwickelt wurde, sondern ein seriöser Taschenrechner. Führen Sie es auf einem beliebigen Unix-Computer (oder Cygwin) aus. en.wikipedia.org/wiki/Dc_(computer_program)
@ Calvin'sHobbies Wenn Sie Zugriff auf nahezu jede Linux- oder Unix-Maschine (einschließlich OSX) haben, speichern Sie diese einfach als Textdatei, z. B. bonus.dc, und führen Sie sie aus dc bonus.dc. dc ist eine der ältesten sprachen überhaupt und seit buchstäblich Jahrzehnten ein fester bestandteil von * nix. Es ist jedoch nicht bekannt, wahrscheinlich aufgrund seiner arkanen und nicht sehr lesbaren RPN-Syntax. Toll für ein paar Code-Golf- Herausforderungen ;-)
Digital Trauma
12

Bash + Coreutils, 56 Bytes

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

Wenn Sie zum ASCII-Wert der durchbrochenen Zeichen eine 7 addieren, erhalten Sie alle nicht durchbrochenen Zeichen (mit Ausnahme von "9"). Also machen wir diese Transformation nur in umgekehrter Reihenfolge, dann eine ähnliche Transformation (subtrahieren Sie 12 von "E"), um die "9" zu erhalten.

Ausgabe:

#$%&0468@ABDOPQRabdegopq
9
Digitales Trauma
quelle
7
Mir gefällt, wie die erste Zeile 7 von einer Reihe von Zeichen subtrahiert und ein -7auffallend angezeigtes Interpunktionszeichen enthält , und diese beiden Fakten haben nichts miteinander zu tun.
@ WumpusQ.Wumbley Ich hatte nicht einmal bemerkt, dass :)
Digital Trauma
6

Perl - 49 Bytes

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

Dies ist so ziemlich eine Perl-Version von Howards Lösung. XOR-Verknüpfung der Zeichenkette mit 25. Die Ausgabe ist eine Datei mit dem Namen #$%&04689@ABDOPQRabdegopq. Ich hatte die Idee, symlinkden Dateinamen als Ausgabeformat zu verwenden, da alles andere verboten ist.

Hier ist eine andere Perl-Lösung, die ich mir ausgedacht habe. Es kann wahrscheinlich sehr viel verbessert werden und es ist ziemlich lang, also lasse ich es jetzt in einem lesbaren Format.

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

Dieser gibt viele Dateien aus, der Name jeder Datei ist eines der Zeichen. Ich konnte nicht herausfinden, wie man Zeichenfolgen anfügt, ohne ein verbotenes Zeichen zu verwenden.

for, while, map, say, print, eval, s///e, Und jeder Variablenname nicht verwendet werden kann (Variablen mit Start @oder $in Perl) , die dies erschwert.

Hoffentlich sind Dateinamen als Ausgabeformat in Ordnung, da ich mir ziemlich sicher bin, dass bei jeder anderen Art der Ausgabe von Informationen eines der verbotenen Zeichen verwendet wird.

hmatt1
quelle
Ich gebe dir +1 für Kreativität! Sehr kluger Umgang mit Code!
WallyWest
Ich weiß, das ist ziemlich alt, aber es ist möglich, die Ausgabe auf dem Bildschirm auszudrucken und ein paar Bytes mit dem -pFlag zu speichern und *_=\(... ): Probieren Sie es online aus!
Dom Hastings
@ DomHastings cool! Ich denke die -pFlagge wäre allerdings verboten, da die pein Loch hat.
hmatt1
5

MATLAB, 36 Bytes

SO SCHLIESSEN SIE .... Nur 1 Byte mehr als der aktuelle Gewinner (isaacg)! Was bei weiterer Betrachtung bereits das tat, was ich mir vorgenommen hatte. Nun, kein Schaden bei der Neuerfindung des Rades ...

Ich weiß, dass dies eine alte Herausforderung ist, aber ich habe das erst gemerkt, nachdem ich mich dafür interessiert hatte.

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

Wenn ich MATLAB nur verstehen lassen könnte, dass ich einen String ohne separate ''... Vorschläge haben möchte , wer?

Sanchises
quelle
4

Brainfuck 303 275

++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>+++.--->----.+.+.++>.>----.++.++.+.->.+.+.-->----.++++>-.+.+.+.-->>+.+.-->----.+.++.+>-.+.+.

Brainfuck, die ultimative uneingeschränkte esoterische Sprache (abgesehen von Whitespace);)

WallyWest
quelle
1
Bitte alte Fragmente löschen, nicht durchstreichen.
isaacg
2
Ich sehe, dass Sie die Anführungszeichen (ich weiß nicht, wie sie heißen) für Ihre Code-Schnipsel verwendet haben. Könnte einfacher sein, wählen Sie Ihren Code und drücken Sie Ctrl+ K:)
Teun Pronk
@isaacg Fertig. TeunPronk, fertig!
WallyWest
6
Oder drücke einfach die Leertaste viermal, wenn es sich nur um eine oder zwei Zeilen handelt. @TeunPronk Das? `Das ist ein Backtick. (Wird auch als schwerwiegender Akzent bezeichnet, obwohl " Zitat-Dinger " für mich neu ist: P)
Türklinke
1
@Doorknob Dann haben wir beide heute etwas gelernt, obwohl das, was du gelernt hast, sowieso falsch ist: P
Teun Pronk
4

JS - 196 - probier es aus

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')
bebe
quelle
1
Meine Güte, das ist verrückt. Es scheint, Js ist eine der am meisten missbräuchlichen Sprache =)
Fehler
Missbräuchlich ja, aber das ist ein bloßer Fleck im Vergleich zu meinem Eintrag ... Sorry @bebe, aber ich habe Sie diesmal-JS'd ...
WallyWest
1
@WallyWest Ich erkläre den Krieg.
Bebe
1
217 : h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')- Inline l, gekürzt m, ibei der ersten Verwendung deklariert , ein paar zusätzliche Vars für wiederholte Muster erstellt (Sie könnten dies möglicherweise verbessern, indem Sie die Reihenfolge der ausgegebenen Zeichen anpassen, aber das ist nicht meine Geduld: P).
Alconja
2

GolfScript, 89 Zeichen

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

Erstellt einfach ein Array aller ASCII-Zeichen und subtrahiert die nicht "gelochten" Zeichen von ihnen.

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string
Türknauf
quelle
2

Befunge 98 - 69 Bytes

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

Macht es in 3 Teilen. Eine, bei der sich die Werte für nicht gelochte Zeichen von den Werten für gelochte Zeichen um 5 unterscheiden. Dann die Werte, die sich um 1 unterscheiden, und schließlich eine Liste der nicht gelochten Zeichen, die sich um 3 von den Werten für gelochte Zeichen unterscheiden. Die Programmbeendigungsanweisung in Befunge ist "@" (Zeichenwert 64), also lade ich am Ende "?" (char value 63) addiere 1 und füge das in den Code mit der Anweisung 's' ein.

Ich könnte vielleicht mehr Golf spielen, indem ich die drei zusammenlege

>:5j2 ,(differ value)_

Abschnitt, aber wahrscheinlich nicht viel.

AndoDaan
quelle
2

JavaScript 240 228

Ersteinreichung:

z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()

Nun, dies ist ein großartiger Anfang, hier ist, wie es zusammenbricht ...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

Und dann dachte ich ... "Es muss einen einfacheren Weg geben ..." und da ist ...

Überarbeitete Einreichung: z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')

Nachdem ich gesehen habe, dass ich es nutzen kann eval (indem ich es zusammensetze, Inspiration von @bebe; das ist viel schneller als das constructorvon a constructorvon a number...), habe ich es auf 228 heruntergebohrt ... ich weiß, dass es diese bestimmte Golf Challenge möglicherweise nicht gewinnen wird , aber dies ist nur meine Art zu zeigen, wie oft Sie JavaScript missbrauchen und trotzdem das gewünschte Ergebnis erzielen können ...

WallyWest
quelle
2

Main - Schlaflosigkeit , 50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

Es gibt aus:

abdegopq04689@ABDOPQR#$%&

Bonus - Schlaflosigkeit, 268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

Es gibt aus:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Ich denke, es sollte möglich sein, die Länge des Programms zu reduzieren, wenn die Ausgabe neu angeordnet wird, aber ich muss mein Suchprogramm ändern, um dies zu tun.

Nur um eine andere Sprache zu zeigen, die mit einer begrenzten Anzahl von Zeichen arbeiten kann. Übrigens, es kann fast jede Ausgabe mit nur 3 eindeutigen Zeichen in der Quelle schreiben.

Gegenwärtig ist dies die einzige Sprache, die sowohl die Hauptherausforderung als auch den Bonus unter allen vorhandenen Antworten erfüllen kann.

Insomnia Interpreter .

n̴̖̋h̴̖̋ã̷͉h̷̭̿d̷̰̀ĥ̷̳
quelle
1

Befunge 98 - 46 Bytes

Befunge-ified-Version von isaacgs Pyth-Eintrag:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <
AndoDaan
quelle