Drucken Sie jedes Zeichen, das Ihr Programm nicht hat


220

Ihre Aufgabe ist es, ein Programm zu erstellen (das nur druckbare ASCII-Zeichen und / oder Tabulatoren und Zeilenumbrüche verwendet), das genau die Zeichen im druckbaren ASCII-Bereich ( 0x20bis 0x7e) ausgibt , die nicht im Quellcode Ihres Programms enthalten sind (in beliebiger Reihenfolge) oft du willst).

Der kürzeste Code, um dies in einer Sprache zu tun, gewinnt.


19
Sie sind, aber sie sind nicht in dem Bereich 0x20zu 0x7e, die als das „druckbaren ASCII - Zeichen“ definiert sind. Tabulatoren und Zeilenumbrüche sind eigentlich Steuerzeichen.
Joe Z.

3
Dürfen wir Zeilenumbrüche (oder andere nicht druckbare ASCII-Zeichen) drucken?
Flornquake

1
Tabs und Newlines werden nicht so gerendert, dass sie eine Druckposition einnehmen. Sie bewegen die Position. Siehe die ANSI C "isprint" Funktion.
Kaz

1
Wie wurde diese Frage wiederbelebt? Es hat wieder angefangen, Stimmen zu bekommen.
Joe Z.

3
@ Timwi: Wenn Sie dies tun möchten, müssen Sie auch alle Zeichen im CJK-Zeichenbereich ausgeben (mit Ausnahme derjenigen, die in Ihrem Code enthalten sind). Die Verwaltung ist zu kompliziert, daher habe ich sie auf ASCII beschränkt.
Joe Z.

Antworten:



274

Polyglot, 95

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

Tut nichts.


19
Nein, aber das ist eine Polygot. Das will ich nicht zerstören.
Johannes Kuhn

95
Ich habe dies in den GNU Fortran-Compiler eingespeist und es ist ein Fehler aufgetreten.
Marinus

12
In C #undef X;whatever junk you wantfunktioniert.
Ugoren

6
Funktioniert auch in Python (da es #für Kommentare wie Ruby und Perl verwendet wird)
Doorknob

87
"Der kürzeste Code, um dies in einer Sprache zu tun, gewinnt." Für das Fehlen eines Codes, der in jeder Sprache funktioniert , sollte dieser Eintrag gewinnen, da es der Code ist, der in der größten Anzahl von Sprachen funktioniert. ;-D
msb

142

PHP 5.2, 4

<?<<

Als Datei speichern, die NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.phpirgendwo in aufgerufen wird /home. short_open_tagmuss Onin deinem sein php.ini.

Die Ausgabe ist:

PHP Parse error:  syntax error, unexpected T_SL in /home/wherever/NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php on line 1

42
Haha, schön die Regeln zu biegen.
Johannes Kuhn

6
Schön, aber leider kann ich einen :in der Ausgabe erkennen.
Howard


78
Ich weiß es zu schätzen, @TheGuywithTheHat, aber ich habe es vor ungefähr einem Jahr beantwortet, im Gegensatz zu gestern.
Ry

9
@TheGuywithTheHat Dies war eine der Antworten, als die Lücke lustig und neu war und zu Ihrem verknüpften Meta-Post führte. Jetzt ist es nicht mehr.
Johannes Kuhn

48

JavaScript - 88

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

druckt "bcdfghijkmnpquvxyz"


13
Wow ich mag die toLowerCase Idee, es ist genial!
Pierre Arlaud

2
Sie können drei Zeichen mit ein bisschen Mathe speichern: "!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)weil 95*72= 6840und das Verschieben der verschwendeten Zeichen in eine Zeichenfolge es Ihnen ermöglicht, die Anführungszeichen zu verwenden, anstatt sie zu verschwenden. Außerdem fühlt es sich kitschig an, Zeichen in einem Kommentar zu verstecken.
Umbrella

28

Leerzeichen, 61 57 Zeichen

Es ist nicht die kürzeste, aber es hat wahrscheinlich die einfachste Logik (es ist wirklich nur eine Schleife).

Hier ist es vollständig kommentiert, wobei S Leerzeichen ist, T Tabulator ist, L Zeilenvorschub ist:

SSSTSSSSSL     # push 0x20
LSSSL          # label S
SSSTL          # push 1
TSSS           # add
SLS            # duplicate top of stack
SLS            # duplicate again
TLSS           # output ASCII character
SSSTTTTTTSL    # push 0x7E
TSST           # subtract (result - 0x7E)
LTTSL          # branch to label S if top of stack is negative
LLL            # end

Vielen Dank an @res für die Korrektur des oben genannten Problems (zusätzliches Duplikat für die Verzweigungsanweisung erforderlich) und für das Drücken kleinerer Zahlen auf den Stapel.


1
Dies funktioniert nicht wie es ist, kann jedoch behoben werden, indem unmittelbar vor dem bedingten Zweig (LTTSL) ein Duplikat des obersten Stapels (SLS) eingefügt wird. Dies ist erforderlich, da der Befehl für den bedingten Zweig den obersten Stapel entfernt . Das resultierende Programm mit 64 Zeichen funktioniert wie angekündigt. (Wenn das Programm in einer Datei mit .ws Erweiterung gespeichert wird, kann es online unter getestet werden golf.shinh.org/checker.html )
res

1
Auch kann die Programmlänge reduziert wird 57 fast das gleiche Programm verwenden , aber mit den drei geschoben Zahlen -94, 127, 126 geändert zu 32, 1 bzw. 126: SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL.
Res

Ich weiß, es ist schon über 5 Jahre her, aber Sie können 5 Bytes Golf spielen, indem Sie das Label S in Label (leer) ändern ( LSSSLwird LSSLund LTTSLwird LTTL) und den Ausgang am Ende entfernen (die drei LLL). Probieren Sie es online mit rohen 52 Bytes oder hier mit Hervorhebung und Erklärung .
Kevin Cruijssen

22

C 83 74 69 Zeichen

main(z) {for(;++z<96;"\33iE!vk?}GkRP8z"[z/7]&1<<z%7&&putchar(z+32));}

Ich habe wirklich versucht, es unter 80 Zeichen zu bringen, aber ich habe es einfach nicht geschafft. Ich habe mich schließlich entschlossen, das, was ich habe, zu posten, in der Annahme, dass ich (oder jemand anderes) zehn Minuten nach dem Posten eine 79-Zeichen-Lösung herausfinden werde. Okay, es waren keine zehn Minuten, aber im Prinzip hat es funktioniert.

Ich wollte wirklich eine Version veröffentlichen, die keinen freien Platz im Quellcode haben musste, sondern die auf einer seltsamen Attraktor-Umlaufbahn zwischen einer Handvoll Lösungen landete. Nachdem ich viele Minuten lang versucht hatte, einen von ihnen zu einer stabilen Lösung zu bewegen, gab ich auf und fügte den Raum hinzu.


21

Golfscript, 26 24 Zeichen

"126,32>''+".~\-'.~\-"'-

Nimmt ein Skript zur Bereichsgenerierung, dupliziert es, führt es aus, subtrahiert es von seinem Ergebnis und subtrahiert dann den Ergebnis-Subtraktionscode und das andere Anführungszeichen.


2
Verdammt, das ist schlau.
Marinus

1
Entfernen ''+, Escape-Programm vor der Subtraktion, setzen Sie ein Noop .;(keinen besseren Weg, um den Punkt zu verdecken), verwenden Sie Code-Block anstelle von String -> {126,33>`-.;}.~das ist 16 Zeichen
Howard

Sie können das Semikolon auch entfernen, indem Sie es in beliebiger Reihenfolge verwenden, wie oft Sie möchten .
Howard

@Howard Ich fürchte, ich verstehe deine Idee nicht. Sie können es als separate Antwort posten.
John Dvorak

@PeterTaylor Ich dachte, ich hätte ein Leerzeichen gedruckt?
John Dvorak

20

Fisch - 80

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

Bei Fischfehlern wird der Ausdruck "Etwas riecht fischig ..." ausgegeben. Da z eine schlechte Anweisung ist, kommt es sofort zu Fehlern


17

Ich weiß, dass es keine Wettbewerbe gewinnt. Ich wollte es nur in einer Sprache versuchen, die normalerweise nicht verwendet wird, nur zum Spaß.

Java - 209 195 152 140 Zeichen

class a{public static void main(String[]a){for(char c=0;;c++)System.out.print("publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:}".indexOf(c)<0?c:"");}}

Mit Zeilenumbrüchen und Tabulatoren

class a{
    public static void main(String[]a) {
        for(char c=0;;c++)
            System.out.print("publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:"");
    }
}

Achtung, wenn Sie ausführen: Programm wird nicht beendet. Haha

Erläuterung

  1. for(char c=0;;c++): Da a charals ein behandelt werden kann int, nutze ich das hier zu meinem Vorteil, um durch alle möglichen Werte von zu inkrementieren c. Ich lasse die Abbruchbedingung in der Schleife (die zwischen den beiden Semikolons steht) aus, um Zeichen zu sparen, da nicht angegeben wurde, dass das Programm abgebrochen werden muss. :)
  2. "publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:"": Leider kein sehr eleganter Ansatz, aber er erledigt die Arbeit. Listen Sie jedes im Quellcode vorhandene Zeichen manuell als StringLiteral auf und prüfen Sie dann, ob der Strom char cdarin mit vorkommt indexOf(). Wenn der indexOf()Aufruf zurückkommt -1, ist er nicht vorhanden und sollte daher gedruckt werden. Der Rest verwendet nur den ternären Operator, um Zeichen und Platz zu sparen.

kannst du ein bisschen erklären
Joey Rohan

1
@joeyrohan Sicher, habe gerade eine Erklärung hinzugefügt. :)
Asteri

cool;) nice stuff :)
Joey Rohan

2
Sie könnten die GESAMTE ASCII-Drucktabelle in einen Kommentar einfügen und ein Java-Programm erstellen, das nichts zurückgibt. Es würde deines schlagen :-)
Pierre Arlaud

9
Sie hätten mir sagen können, dass dies jedes einzelne Unicode-Zeichen drucken wird, bevor ich es in meinem Terminal ausführte.
nyuszika7h

14

Perl, 49 Zeichen

say grep/[^+-246\[-^aceghmprsy]/,map chr,041..126

Dies ist eine interessante Herausforderung - es ist eine Art Anti-Quine, und ich habe es geschafft, das Programm ein paar Mal zu verkürzen, indem ich die Anzahl der darin enthaltenen Zeichen vergrößerte .


14

Ruby, 81 78 68 66 62 57

(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}

Prüft einfach selbst. Doppelte Zeichen manuell entfernt.

Vielen Dank an Josh für das Speichern von 4 Zeichen und an Minitech für das Speichern von 5 Zeichen!


Kannst du das if nicht hinter das $> << x setzen, um eine der Endzeilen zu speichern?
Josh

@ Josh Ja. Ich werde das jetzt tun.
Türklinke

Sie können es zu 58 nehmen:(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
Ry-25.08.13

1
Ah, und mit einer besseren Wahl des Variablennamens, 57:(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
Ry-

$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join55 Bytes mit einem anderen Ansatz.
Twe4ked

14

Befunge (48)

<|::-1,+*88:<+3*87
6<@.**85
9>"()~&"/%$ |!#';=?}

Ausgaben: {zyxwvutsrqponmlkjihgfedcba` _ ^] [ZYXWVUTSRQPONMLKJIHGFEDCBA240


Heiliger Bimbam! Gute Arbeit!
Cruncher

12

Nicht sehr ernst, aber ich musste es versuchen:

JSFuck (138152)

(kompilierte Quelle hier)

Originalquelle:

for(x=0x7e;x>0x19;x--){
    console.log(String.fromCharCode(x).replace(/[\[\]!\+\(\)]/ig, ''))
}

Druckt alle Zeichen außer () + []!


2
(x)<=> Erhöht [x][+[]]die Codegröße, verkleinert jedoch das benötigte Alphabet.
FireFly

12

Ihre Aufgabe ist es, ein Programm zu erstellen (nur druckbare ASCII-Zeichen und / oder Tabulatoren und Zeilenumbrüche).

Meine Güte, du hast es APL schwer gemacht (Ist das delibarate?)
Also entscheide ich mich, alle Regeln zu ignorieren !!!

APL (Dyalog), 3 10

⎕AV

Gibt den atomaren Vektor aus (der alle druckbaren ASCII-Zeichen enthält)


Es stellte sich heraus, dass ich den Teil "ohne" völlig vergessen habe ...
Aber das ist eine einfache Lösung

⎕AV~'AV'''

~'AV'''bedeutet exclude ( ~) die Zeichen A, V und einfache Anführungszeichen (escaped als doppelte einfache Anführungszeichen)

Was das Drucken von Nicht-ASCII betrifft, ignoriere ich alle Regeln.


"drucke genau die Zeichen im druckbaren ASCII-Bereich ( 0x20bis 0x7e) aus, die nicht im Quellcode deines Programms enthalten sind" Ich glaube, die Ausgabe enthält möglicherweise keine Zeichen außerhalb des druckbaren ASCII-Bereichs ("genau" ist das Schlüsselwort) und Ihr Programm enthält 'A' und 'V', daher sollten sie nicht gedruckt werden.
FireFly

1
Sie sollten zumindest ~den Satz ausgeschlossener Zeichen erweitern. a.-.'a.-'''
;-) Übrigens

2
Sie können alle Regeln ignorieren, dies führt jedoch dazu, dass Sie nicht als Antwort akzeptiert werden.
Joe Z.

11

GolfScript ( 18 16 Zeichen)

"),@`^^32>#.~".~

Online-Demo mit einer zusätzlichen Zeile, die eine Korrektheitsprüfung durchführt und die Anzahl der fehlerhaften Zeichen ausgibt.

(Ich habe verschiedene äquivalente Alternativen. @`^Kann ersetzt werden durch \\`; #Kann ersetzt werden durch `oder ]. Die richtige Kombination kann mit Howards Trick verwendet werden, um seine Punktzahl von 15 zu erreichen, da Backslashes nicht wie in String-Literalen in Blöcken maskiert werden müssen: {),\`^32>].~}.~Aber Howard verdient die Anerkennung für diesen Trick.



2
Zum Glück endet Ascii in }~- noch besser für Codeblöcke, siehe meine neue Antwort ;-)
Howard

11

Brainfuck, 173

+++++[->++++++<]>>>++[------<+>]<++++>>----[----<+>]>-[-------<+>]>-[---<+>]<------->>-[---<+>]<+++++++++>>--[-----<+>]<+++++>>+[---------<++>]+++++++++++++[<[.+<]>[>]<-]\=,

Ziemlich lange, ich könnte es später noch einmal versuchen.


6
Schreiben Sie ein Programm, das nichts tut, und fügen Sie den Rest der ASCII-Zeichen zur Quelle hinzu. Der schlimmste Fall fühlt sich wie 96 Zeichen an.
Jasen

10

J ( 52-40 )

Edit: Duh, vergessen e.

'''(-@.e#[)~95{32}a'(-.@e.#[)~95{.32}.a.

Alte Version:

(>@(*/@('(>@*/''&~:).#]32{95}a'&~:)&.>)#])95{.32}.a.

Andere Variante (gleiche Länge, aber weniger Leistung):

([#~*/"1@('([#~*/"1@''&:0)95{.32}a'&~:"0))95{.32}.a.

@JanDvorak: hoppla Tippfehler
marinus

Verdammt! Ich hatte gehofft, dass ich in Ruby tief genug bin, um dich zu schlagen, und dann lässt du es bis auf 40 fallen.: P
Türklinke

Der Neue sieht viel leiser aus.
John Dvorak

1
@Doorknob: Ich habe eine in APL, die nur 24 Zeichen enthält, aber Nicht-ASCII-Zeichen enthält.
Marinus

Ja, ich habe das ASCII-Verfahren angewendet, um Sprachen wie APL zu vermeiden.
Joe Z.

7

Python 3 - 68 61

x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"
exec(x)

... danke an @WolframH für die Verbesserungen.


1
Ich glaube , Sie setzen können exec(x)in einer neuen Zeile und das Speichern ;in x. Außerdem können Sie in Python 3 x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)61 Zeichen verwenden (druckt mehrere Leerzeichen, was zulässig ist).
WolframH

@WolframH genial, danke!

7

PowerShell: 96

Muss gespeichert und als Skript ausgeführt werden.

diff([char[]](gc $MyInvocation.InvocationName))([char[]](32..126))-Pa|?{$_.SideIndicator-eq'=>'}

diffist ein eingebauter Alias ​​für Compare-Object.

gcist ein eingebauter Alias ​​für Get-Content.

$MyInvocation.InvocationName Ruft den vollständigen Pfad zum ausgeführten Skript ab.

32..126ist das dezimale Äquivalent für 0x20..0x7eund erstellt so ein Array der dezimalen ASCII-Codes, nach denen wir suchen.

[char[]]Nimmt den Inhalt des nächsten Objekts, fügt ihn in ein Array ein, zerlegt ihn und konvertiert ihn in ASCII-Zeichen. Wir haben also jetzt zwei ASCII-Zeichen-Arrays - eines stammt aus diesem Skript, das andere wird durch die Herausforderungskriterien definiert.

-Pasetzt Compare-Object„Passthru“ -Format auf, so dass nur die Elemente , die zwischen den Eingängen Ausgang an der Konsole unterschiedlich sind zu finden sind - Indikatoren , von denen Teile waren , die eingegeben werden , nach wie vor gespeichert in den Objektdaten, aber nicht angezeigt werden.

|?{$_.SideIndicator-eq'=>'}Pipe Compare-Object-Ausgabe an Where-Object, die nur die Elemente filtert, die für die zweite Eingabe exklusiv sind.


Vernünftig und lehrreich.
Stéphane Gourichon

7

PHP - 92

<? //A"$%&'()*+[,.]0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#

Ausgabe:

nichts

Das OP fragt, ob alle nicht verwendeten Zeichen gedruckt werden sollen. Ich benutze sie einfach alle


Was ist <?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'?
Jocap

Ich wusste, dass es eine Einreichung geben würde, die nur alle Zeichen verwendet.
MilkyWay90

Dies verwendet nicht die Zeichen!;>Xn
Jo King

6

Javascript, 92

(function f(){for(i=32;126>i++;)!~(""+f).indexOf(c=String.fromCharCode(i))&&console.log(c)})()

Ist das eine faire Lösung? alert ('! "# $% ^ * + / -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [] ^ _` bcdfghijkmnopqsuvwxyz {|} ~') Kommt bei 95 Zeichen an und ist blöd wie die Hölle.: p
tristin

2
@tristin: P yeah Javascript ist ein bisschen ausführlich, wenn es darum geht, Zeichencode für Zeichenfolgen zu verwenden. Und wird nicht jedes Zeichen ausgegeben, das Ihr Programm nicht hat? Der Text, den Sie alarmieren, ist auch in Ihrem Programm :)
C5H8NNaO4

1
Haha, hoppla. Naja.
Tristin

6

Java - 126 Zeichen

minimiert:

class hjq{public static void main(String...w){for(char z='"'|0;++z!='a';)if("'()+.0;=OS".indexOf(z)==~0)System.out.print(z);}}

nicht minimiert:

class hjq {
    public static void main(String... w) { 
        for (char z = '"'|0; ++z != 'a';) {
            if ("'()+.0;=OS".indexOf(z) == ~0) {
                System.out.print(z);
            }
        }
    }
}

Dies ist ein interessantes Problem, da einzelne Token möglicherweise von ihrer längeren Form profitieren, da sie Zeichen wiederverwenden. Normalerweise String[]wäre dies beispielsweise kürzer, String...die eckigen Klammern in der bedingten Zeichenfolge sind jedoch nicht mehr erforderlich.

Ich fand den Trick darin, Zeichen am Anfang und am Ende des Bereichs zu verwenden, damit Sie sie von der Ausgabe ausschließen können, indem Sie einfach den Anfang und das Ende Ihrer Schleife ändern.

Für Java ist ein Schlüsselzeichen, das ausgeschlossen werden muss ", da das in der Zeichenfolge einen Escape-Befehl erfordert, der \zu Ihrem Programm beiträgt, und in die Zeichenfolge aufgenommen werden muss, die beiträgt \\. Durch Entfernen "aus der bedingten Zeichenfolge entfernen Sie 4 Zeichen. Dies kann erreicht werden, indem Sie sicherstellen, dass Sie und verwenden !und Ihre Schleife von starten #.

Alle Kleinbuchstaben erscheinen am Ende des Bereichs, mit nur {, |, }und ~nach ihnen kommen. Aufgrund der Ausführlichkeit von Java werden die meisten Kleinbuchstaben nur für das Boilerplate verwendet. Ebenso {und }für ein Java-Programm trivial, weil das Boilerplate sie benötigt.

|kann verwendet werden, wenn Sie eine oder-Bedingung haben, aber ich konnte keinen Weg finden, eine zu nutzen, die zu einem kürzeren Programm führt, als es nur |als bitweiser Operator zu verwenden. Das |0macht mich ein bisschen dreckig, weil es der einzige Teil ist, der ein Nopp ist, um den Charakter reinzuholen.

~0Erträge -1, was praktisch ist, weil wir das überprüfen müssen indexOf. Wenn Sie dies mit "using !=for the loop conditional" kombinieren, wird das <Zeichen insgesamt eliminiert , was bedeutet, dass es nicht in die bedingte Zeichenfolge eingefügt werden muss.


5

sh (47)

tr</dev/urandom -cd \[:print:]|tr -d "`cat $0`"

Verwendet den selbstreferenziellen Ansatz. Es wird davon ausgegangen, /dev/urandomdass letztendlich jedes Oktett mindestens einmal ausgegeben wird. Beendet nicht.

Wenn wir davon ausgehen, dass dies maninstalliert ist, könnten wir stattdessen die ascii(7)Manpage (und damit ein Abschlussprogramm) verwenden ( 44 Zeichen, danke @fennec).

man ascii|tr -cd \[:print:]|tr -d "`cat $0`"

Könnten Sie eine andere Datei verwenden, möglicherweise mit einem kürzeren Namen, bei der im Grunde alle möglichen Oktette garantiert sind? und vielleicht sogar kündigen? Ich denke an / dev / memory oder so.

@fennec, wenn wir das annehmen manund zshinstalliert sind, man zshallscheint den Kriterien zu entsprechen. Ich könnte das als Variation hinzufügen.
FireFly

man asciikönnte dir einen weiteren Brief retten, denke ich.

Welches verwenden trSie? GNU trbehandelt das -" cat $0" in als einen Bereichsoperator, der die Ausgabe unterbricht.
Toby Speight

Übrigens, wenn das asciiProgramm installiert ist, können Sie es anstelle von verwenden man ascii.
Toby Speight

5

BitShift , 1038 Bytes

BitShift ist eine Sprache, die nur 0und 1als Syntax unterstützt. Ich dachte, es wäre einfach, alle anderen Zeichen zu drucken, aber da es das Schleifen nicht wirklich unterstützt, endeten immer noch massive 1038 Bytes.
Ich glaube jedoch, dass es nicht wirklich möglich ist, kleiner zu werden.

101001100101011011010100110111010100100101011001101111010100100101011001000101011011010100101100110110101001001010110010001010110110101000001101010010010101100100010101101101010000010000011001010110110101000010000101011011010100110111010100100101011111100101011011010100110111010100100101011001101111010100100101011001000101011011010100000000011010100100101011001000101011011010100110010000101011011010100110111010100100101011001101001101010010010101100100010101101101010011001000010101101101010011011101010010010101111011111110010101101101010011011101010010010101100101100101011011010100010001010110110101001000010101101101010011011101010010010101110111110010101101101010011011101010010010101111111100101011011010100110111010100100101011111011110101001001010110010001010110110101001000100000101011011010100110111010100100101011111010011010100100101011001000101011011010100100000101011011010100110111010100100101011001101111010100100101011001000101011011010100010000010101101101010011011101010010010101101001101101010010010101101001101010

Druckt

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

Probieren Sie es hier aus


4

Auf jeden Fall die längste Lösung, aber das Codieren in Lino macht immer Spaß:

L.in.oleum -655 523 Zeichen

"libraries"/arch/cpu/base;/hmi/conout;/data/bytes;/data/string/t2s;/data/heap;/data/heap/connect/mgrab;"stockfile"a;"directors"displaystatus=engage;"injection"c=524;b<-bytes.bytesizeconvert:c;b<-heap.alloc:b;a<-heap.alloc:c;[filecommand]=readfile;[filename]=stockfile;[fileposition]=0;[fileblocksize]=c;[fileblockpointer]=b;arch.fileread;[string.psource]=b;[string.ptarget]=a;string.t2s;b<-heap.alloc:7fh;c=32;d=b;"f"[d_32]=c;+c;+d;?c<7fh>f;"w"d=[a];+a;?d=0>y;?d<32>w;?d>7eh>w;e=b;e+d;[e]=33;^w;"y"b+32;"v"conout.say:b;bye;

Keine Kommentare, liest nur die Quelle in binäre kompiliert. Speichern unter a.txtoder es wird nicht kompiliert!


4
Nein, der JSFuck ist länger.
Joe Z.

4

Brainfuck, 133 123 114 110 Bytes

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

Ein bisschen mehr an einer früheren Lösung herumgebastelt (bevor ich merkte, dass die unten stehende kleiner war - obwohl dies war, bevor ich einige schwere Optimierungen vorgenommen habe). Dies funktioniert, indem 4 Sätze von ASCII-Zahlen gespeichert und mit einer kniffligen Schleife ausgedruckt werden und anschließend die fehlenden Zeichen (dh solche, die zwischen ungültigen ASCII-Zahlen liegen) eingegeben werden.

Ursprüngliche Vorlage

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

Es macht Folgendes:

  • Erstellen Sie 4 Register mit 11. 13, 28, 33
  • Erstellen Sie eine 5. mit dem Wert 31, um den Druckvorgang zu starten
  • Drucke ASCII 32-42 (11)
  • Drucken Sie Ascii 44
  • Druck Ascii 47-59 (13)
  • Drucken Sie Ascii 61
  • Drucke ASCII 63-90 (28)
  • Drucken Sie Ascii 92
  • Druck Ascii 94-126 (33)

4

Haskell (70)

import Data.List
main=putStrLn$[' '..'~']\\" \\\"$'.=DLS[]aimnoprstu~"

Die langweilige Lösung für doppelte Zeichen in einem Programm in einer Zeichenfolge, die von der universellen Menge subtrahiert wird. Weit entfernt von einem Codegolfgewinner, obwohl es für seine Länge überraschend gut lesbar ist.

(Jetzt mit Listensubtraktion anstelle von filter/ notWith.)


du kannst wechseln import Data.Listzuimport List
proud haskeller

. @ proudhaskeller huh, wirklich? Es scheint nicht zu funktionieren, wenn ich es mit runhaskell"Modul 'Liste' nicht gefunden" versuche . Mir ist aufgefallen, dass ich die Anzahl der Zeichen falsch gezählt habe, also habe ich es korrigiert.
FireFly

1
Nun, das ist komisch, versuchen Sie es mit Ghc oder Ghci? Es funktioniert für mich
stolzer Haskeller

@proudhaskeller Nein, ich kann es nicht zum Laufen bringen. Dies ist mit GHC 7.8.3.
FireFly

3

J - 21

(u:32+i.97)-.1!:1<":5

Schreiben Sie dies in eine Datei, die 5im aktuellen Verzeichnis aufgerufen wird . Laden Sie dann das Skript mit0!:1<'5'

Oder 25 ohne den Filetrick:

(-.~".)'(":u:32+i.0-~95)'

Quellcode enthält ', der nicht aus der Ausgabe entfernt wird.
FireFly

3

Clojure (142, 106103)

(defn -main[](let[c"(fn[l](pr(reduce disj(set(map char(range 32 126)))l)));-\\\"o"]((load-string c)c)))

formatiert:

(defn -main []
  (let [c "(fn[l](pr(reduce disj(set(map char(range 32 126)))l)));-\\\"o"]
    ((load-string c) c)))

Denke, das macht es, braucht vielleicht ein paar Verbesserungen. Ausgabe:

#{@ ` ! A B b # C $ D % E & F ' G H I * J + K k , L M . N / O 0 P Q q R S 4 T 5 U V v 7 W w 8 X x 9 Y y : Z z { < | = } > ^ ? _}

führt die Zeichenfolge, die auswertbarer Clojure-Code ist, auf sich selbst aus. Die Zeichenfolge enthält am Ende einige Kommentare, um die außerhalb der Zeichenfolge verwendeten Zeichen abzurufen (Hauptmethode usw.).


3

Python 2, 69

for x in range(38):print chr(x+59)#!"$%&'*,-./012467bdjklmqsuvwyz{|}~

Ich verwende die längste (die ich finden kann) Folge von fortlaufenden Zeichen, die ich ausdrucken und die anderen als Kommentar nach dem Code hinzufügen kann.


8
Ich werde nichts, was einen Kommentar hat
John Dvorak

Meine Antwort sollte den schlechtesten Weg zeigen, um diese Aufgabe zu lösen. (Verwenden Sie die Kommentarlücke).
Johannes Kuhn

9
ok ... bis auf diesen vielsprachigen Text, der nichts anderes als ein Kommentar ist.
John Dvorak

@JohannesKuhn Da es sich jedoch um den längsten Code handelt, wird der Wettbewerb nicht gewonnen. : P
Joe Z.

5
@JoeZ. Es gewinnt mit großem Abstand, wenn Sie durch die Anzahl der Sprachen dividieren, in denen es funktioniert
John Dvorak
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.