Umstellbarer Code Bowling

14

Code-Bowling-Herausforderung

Schreiben Sie ein Programm oder eine Funktion, die dieselbe Ausgabe erzeugt, unabhängig davon, wie Sie den Quellcode neu anordnen. (Ausgabe kann kein Fehler sein)


Pangram- Wertung

  • Ihre Punktzahl ist die Anzahl der eindeutigen Zeichen in Ihrem Quellcode.

    Ein Programm mit Quellcode AJBhätte eine Punktzahl von 3
    Ein Programm mit Quellcode AAJhätte eine Punktzahl von 2
    Ein Programm mit Quellcode 111hätte eine Punktzahl von1

  • Dies ist eine Variante. Das Programm mit der höchsten Punktzahl gewinnt!

(Für Ihre Bequemlichkeit ein automatisiertes Scoring - Tool wurde erstellt , hier )


Herausforderungsregeln

  1. Eingabe
    Das Programm / die Funktion kann eine Eingabe annehmen, die jedoch völlig optional ist.

  2. Ausgang
    Dieser Ausgang kann sein etwas Sie wollen, aber es sollte nicht null, nicht null, nicht leer ist , und nicht-Fehler. (Die Ausgabe muss daher mindestens 1 Byte betragen.)

  3. Neuanordnung Unabhängig davon
    , wie der Quellcode neu angeordnet wird, sollte die Ausgabe dieselbe sein.

    Beispiel:
       Programm: ABJAusgaben hello world, wie auch Programme: [ AJB, JAB, JBA, etc.]

Dies ist eine Variante. Das Programm mit der höchsten Anzahl von Zeichen gewinnt!

Albert Renshaw
quelle
1
Ohne konkrete Aufgabenstellung ist diese Herausforderung meiner Meinung nach zu weit gefasst.
Dennis
2
Was bedeutet Nicht-Null?
Dennis
2
Während Ihre Pangram-Wertung ein Versuch ist, Code-Bowling zum Funktionieren zu bringen, bin ich mir nicht sicher, ob diese Herausforderungen wirklich mit Code-Bowling gekennzeichnet werden sollten . Der Bewertungsmechanismus unterscheidet sich stark von dem, was Code-Bowling sein soll. Ich würde also sagen, entweder Code-Challenge verwenden oder ein neues Tag erstellen.
Martin Ender
1
Ich muss Martin zustimmen. Zum Beispiel ist diese Herausforderung kein Code-Golf. Sobald Sie mit einer anderen Zahl als der Gesamtzahl der Zeichen (oder Bytes) punkten, ist dies keine Code-Bowling-Herausforderung mehr
Nathan Merrill,
3
Muss das Programm / die Funktion enden? (zB kann ich 0für immer drucken ?)
MildlyMilquetoast

Antworten:

18

Sprache, 1.112.064 Punkte, wenn UTF-8

Mein Programm besteht aus jedem möglichen UTF-8-Zeichen. Es gibt "Hallo Welt" aus und belegt 1,75 * 1076 Yottabyte Speicherplatz.

(Um das Programm zu generieren, müssen Sie lediglich eine Datei mit 17498005810995570277424757300680353162371620393379153004301136096632219477184361459647073663110750484 Zeichen erstellen und sicherstellen, dass jedes mögliche UTF-8-Zeichen in der Datei enthalten ist.)

Nathan Merrill
quelle
2
Sie, mein Herr, sind ein Genie. Und warte, warum fällt mein Computer aus? : 'P
HyperNeutrino
Ich dachte, dass Unicode 1114112 Zeichen hatte?
MilkyWay90
14

Viele Sprachen, 2 Punkte

0.

Produziert 0.0als 0.oder .0. Erfordert eine liberale Zahlenanalyse, die mit einem Dezimalpunkt am Anfang oder Ende in Ordnung ist und 0 für das fehlende Integral oder den fehlenden Dezimalteil annimmt. 0000000.würde die gleiche Punktzahl geben.

Dies funktioniert auch in den folgenden Sprachen (in einigen Fällen mit einer anderen Ausgabe, wie angegeben):

  • Python REPL
  • Javascript REPL
  • MATLAB (produziert ans = 0)
  • Oktave (produziert ans = 0)
  • MATL (produziert 0)
  • CJam
  • Retina (produziert 0)
  • Gestapelt (produziert 0)

Für Python ist dies meiner Meinung nach die einzige Möglichkeit, eine Punktzahl über 1 zu erzielen, da die Möglichkeiten ausgeschöpft werden können.

  • Jeder binäre oder unäre Operator schlägt als letztes Zeichen fehl
  • Jeder [](){}erfordert eine Übereinstimmung und schlägt fehl, wenn die letzte zuerst kommt
  • Tabulatoren oder Leerzeichen können keine Zeile beginnen. Zeilenumbrüche können in REPL nicht verwendet werden.
  • A , kann nicht das erste Zeichen sein
  • Ein #Erster würde alles kommentieren und nicht ausgeben
  • Ein Start \ist eine ungültige Zeilenfortsetzung
  • Backticks (Python 2) müssen gepaart werden, und sie, die nichts umgeben, sind ein Fehler
  • $, !, ?, Und @kann nicht ohne andere unbrauchbar Zeichen verwendet werden

Diese Blätter Buchstaben, Ziffern _, .und Zitate.

  • Bei Anführungszeichen gibt jeder Nicht-String außerhalb einen Fehler aus.
  • Buchstaben mit möglichen Ziffern und _Variablennamen, von denen eine gewisse Permutation immer nicht existiert.

Die Blätter Ziffern und .. Wenn Sie verschiedene Ziffern zulassen, erhalten Sie eine andere Nummer, es sei denn, alle Ziffern sind 0. Also, ich denke Nullen und .ist der einzige Weg, um eine Punktzahl über zu bekommen 1. Aber ich kenne den Python-Lexer nicht gut, daher könnte mir etwas fehlen.

xnor
quelle
11

CJam , 15 Punkte

T U
V	LMOQR[]0q

Probieren Sie es online!

Druckt immer 0000:

  • 0 drückt einfach eine Null.
  • T, U, VSind Variablen , die auf Null vorge initialisiert werden.
  • L, M, O, Q, RSind Variablen , die auf eine leere Liste vorab initialisiert werden, so dass sie in der Ausgabe nicht auftauchen.
  • [und ]kann Dinge in eine Liste einschließen oder nicht, aber sie müssen nicht richtig zugeordnet sein und die Ausgabe wird zum Drucken trotzdem abgeflacht.
  • q Liest die Eingabe, die leer ist und daher auch nicht in der Ausgabe erscheint.
  • Zeilenumbruch, Leerzeichen und Tabulator werden vom Parser ignoriert.
Martin Ender
quelle
Dies ist eine großartige Antwort für eine Sprache wie CJam! Nice
Albert Renshaw
Könnte ein Kleinbuchstabe rhinzugefügt werden, um etwas zu erreichen, das dem Kleinbuchstaben ähnlich ist q?
Albert Renshaw
1
@ AlbertRenshaw Sie können nicht beide haben, weil man auf EOF Fehler aus.
Martin Ender
9

MATL , 3 5 6 Punkte

Die Idee, Leerzeichen einzufügen, stammt aus Bijans Antwort .

lv
 T1

Der Code oder eine beliebige Permutation davon gibt drei durch Zeilenumbrüche getrennte aus.

Probieren Sie es online!

Erläuterung

  • Die Funktion ldrückt standardmäßig die Nummer eins auf den Stapel.
  • Literal 1macht das Gleiche.
  • Literal TPushes true, die als Nummer eins angezeigt wird.
  • Leerzeichen und Zeilenumbruch sind Trennzeichen und hier nichts zu tun.
  • vVerkettet den gesamten Stack zu einem Spaltenvektor. So würde zum Beispiel vafter Tdie ersten beiden Zahlen in eine Spalte verketten (und dann würde die nächste Zahl gepusht werden). Eine Initiale vwürde ein leeres Array erzeugen.

Am Ende des Codes wird der Stapel implizit mit den folgenden Regeln angezeigt:

  • Jedes Element oder Array im Stapel wird in einer anderen Zeile angezeigt.
  • Spaltenvektoren werden mit jedem Element in einer anderen Zeile angezeigt.
  • Das leere Array verursacht keine Ausgabe.

Jede Permutation der eingegebenen Zeichen erzeugt also 1dreimal in verschiedenen Zeilen.

Luis Mendo
quelle
Erläuterung? Ich bin gespannt, wie das geht.
Genosse SparklePony
@Sparkle Hinzugefügt eine Erklärung
Luis Mendo
Nett! Außerdem wollte ich nur wissen, dass ich diesen Text Removing any part of the source code however should cause that specific output to not be produced.zum Zeitpunkt Ihrer Veröffentlichung in der Challenge hatte. Ich wollte ihn nicht hinzufügen und er wurde entfernt. Vielleicht hilft dir das, die Punktzahl ein bisschen zu erhöhen
Albert Renshaw
1
@ AlbertRenshaw Danke für das Heads-up! Zwei weitere Punkte
Luis Mendo
Ich beschuldige Sie, meine Idee gestohlen zu haben. Es ist jedoch kein Problem.
Bijan
6

Jelly , Ergebnis 53 101

¶ ¤$¥&+ABDFHNPQSUVX^_aborv|®²×ȧȯḄḅḌḞḢḤḷṀṂṚṛṠṢṪẠạị«»()kquƁƇƊƑƘⱮƝƤƬƲȤɓɗƒɦƙɱɲƥʠɼʂƭʋȥẸẈẒẎŻẹḥḳṇọụṿẉỵẓḋėġṅẏ

Verwenden Sie nur Zeichen, die Teil von Jellys Codepage sind .

Jelly hat implizite Eingaben von 0und die erste Hälfte (bis und einschließlich ạị«») der obigen Code-Zeichenfolge besteht hauptsächlich aus monadischen (Großbuchstaben) und dyadischen (Kleinbuchstaben und Symbole) Atomen, die bei einer gegebenen Null oder einer Liste mit nur einer Null ( oder zwei solcher Eingaben bei Dyaden) geben eine Null oder eine Liste mit nur einer Null zurück.

Ausnahmen sind:

  • Das Leerzeichen: Es wird ignoriert (obwohl es in der Codepage steht).

  • Der Pilcrow trennt Links (wie ein Zeilenvorschub - aber das ist wirklich das gleiche Byte), aber keine anderen Bytes verweisen auf den Code davor.

  • Der Skarabäus ¤weist den Parser an, alles, was übrig bleibt, beginnend mit einem Nullpunkt (oder einer Konstanten) als Konstante (und arbeitet als erstes Atom) zu behandeln.

  • Der Dollar, $weist den Parser an, die beiden Links, die er hat, als Monade zu behandeln (und funktioniert überraschenderweise als erstes Atom).

  • In ¥ähnlicher Weise weist der Yen den Parser an, die beiden Links, die übrig bleiben, als Dyade zu behandeln.

  • Das empfohlene ®,, erinnert an den Wert der Registrierung anfangs 0(das Copyright des Gegenstücks ©bricht ab, wenn es als erstes Atom verwendet wird, da die Arität aus der Arität des Links zu seinem Link ermittelt wird, der noch nicht festgelegt ist).

Der Code von den Klammern, (und )und, sind derzeit nicht verwendeter Code Punkte, diese all get geparsten und jeder wird eine neue Kette (ähnlich wie eine neue Zeile würde, obwohl sie nicht die Wirkung der Schaffung aufrufbaren Links wie eine neue Zeile, aber Das ist hier kein Problem, da nichts versucht, dies zu tun.

Jonathan Allan
quelle
1
Sie können alle Zeichen außerhalb der Codepage kostenlos hinzufügen, da der Interpreter sie vor der Verarbeitung des Codes löscht. Ich weiß immer noch nicht, was Nicht-Null bedeutet.
Dennis
1
Ich denke, der Geist der Herausforderung ist wahrscheinlich, dass Charaktere auf der Seite sein sollten. Ich fragte nach non-nil und die Antwort war, eine minimale Ausgabe von 1 Byte anzugeben.
Jonathan Allan
@ Tennis eine Idee über die richtige Terminologie für das, was mit dem Parsen in Klammern passiert?
Jonathan Allan
Alle nicht verwendeten Zeichen beginnen mit einer neuen Verknüpfung, genau wie eine neue Zeile.
Dennis
1
Nennen wir sie undefiniertes Verhalten. : P
Dennis
4

TI-Basic (Serie 83), 93 Punkte (99 auf einem TI-84 Plus)

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZθnπeiAnsrandgetKeyZXsclZYsclXsclYsclXminXmaxYminYmaxTminTmaxθminθmaxZXminZXmaxZYminZYmaxZθminZθmaxZTminZTmaxTblStartPlotStartZPlotStartnMaxZnMaxnMinZnMinΔTblTstepθstepZTstepZθstepΔXΔYXFactYFactTblInputNI%PVPMTFVP/YC/YPlotStepZPlotStepXresZXresTraceStep

Alle die Ziffern, alle Ein-Byte - Variablen (einschließlich θ und n , die unabhängigen Variablen für Polar- und sequentielle Grafik), die Konstanten & pgr, e und i , einige nicht-ganz-Variablen ( Ans, rand, undgetKey ), und 59 verschiedenen Fenstervariablen (alle, deren Definition garantiert ist).

Die implizite Multiplikation garantiert, dass das Ergebnis 0 ist, wenn wir dies in beliebiger Reihenfolge durchführen. Wenn dies auf einem neuen Rechner ausgeführt wird, sind alle Variablen 0; auch wenn nicht,getKey wird 0 sein, da keine Zeit zum Drücken einer Taste bleibt, bevor das Programm einen Wert zurückgibt.

Auf einem TI-84 Plus oder höher, wir 6 weitere Punkte , indem die Token erhalten können getDate, getTime, startTmr, getDtFmt, getTmFmt, isClockOn. Das Ergebnis wird nun immer {0 0 0}da seingetDate und getTimeListen der Länge 3 zurückgeben und die implizite Multiplikation über die Elemente verteilt.

Ich denke, dies sind alle möglichen Token, die verwendet werden können: Alle tatsächlichen Befehle sind Präfix, Infix oder Postfix (was bedeutet, dass sie am Anfang oder Ende des Programms nicht funktionieren) und alle anderen Variablen sind möglicherweise undefiniert (und verursachen einen Fehler, wenn benutzt).

Mischa Lawrow
quelle
Das ist schlau. Nicht besonders beeindruckend haha, aber klug in der Tat! +1
Albert Renshaw
3

(nicht konkurrierend) Brainf-ck, 63 Bytes

Nun, ich weiß nicht, ob dies als Betrug angesehen wird, aber ...

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Der Punkt druckt das aktuelle Zeichen (0x00) und die restlichen Zeichen tun nichts. Dies könnte technisch unendlich erweitert werden, also lass es mich wissen, wenn dies als Betrug angesehen wird.

brianush1
quelle
Ich würde das für eine Null-Ausgabe halten
Albert Renshaw
Oh, soll ich meine Antwort dann löschen oder als nicht konkurrierend markieren?
brianush1
1
Es gibt 97 typisierbare Zeichen, von denen Sie 7 nicht verwenden können (8-1), also würde ich 90 sagen.
Bijan
@ brianush1 du kannst es als nicht konkurrierend belassen, damit andere es sehen können. Ich bearbeite die Frage etwas weiter, um zu erklären, dass die Ausgabe mindestens 1 Byte
Albert Renshaw
15
@AlbertRenshaw (Entschuldigung für all diese Kommentare) Wenn die Ausgabe 1 Byte sein muss, sollte das NULL-Zeichen zählen, da es ein Byte ist, obwohl eines mit dem Wert 0.
brianush1
3

Haskell, 3 Punkte

+ 1

Egal wie neu angeordnet, dieser Code gibt immer eine Funktion zurück, die die Eingabe erhöht. Anwendungsbeispiele in repl:

>(+ 1) 1
2
>(1+ ) 1  
2
>( +1) 1
2
Antisthenes
quelle
2

√ å ı ¥ ® Ï Ø ¿ , 128.234 (?) Punkte

Ich bin mit Hilfe von @DestructibleLemon bei 128.234 angekommen. Dieses Programm verwendet alle Unicode - Zeichen (128.237) mit der Ausnahme o, Ound ł. Seltsamerweise sind zwei davon Ausgabebefehle.

Sicherlich könnte aber keine Sprache all diese Zeichen verwenden, oder? Nun, diese Sprache ignoriert nur die Befehle, die sie nicht erkennt. Problem gelöst.

Diese Sprache gibt standardmäßig Folgendes aus:

===== OUTPUT =====



==================

Das ist nicht null, nicht null, nicht leer und nicht fehlerhaft.

Hinweis: Wenn dies gegen eine ungeschriebene Regel verstößt, benachrichtigen Sie mich in den Kommentaren und ich werde dies ändern. Wenn du meine Punktzahl kennst (vorausgesetzt, dies ist zulässig), schreibe auch in die Kommentare.

Caird Coinheringaahing
quelle
Welchen Zeichensatz verwendet es? utf 8? utf-16? Verwendet es ausschließlich Unicode?
Zerstörbare Zitrone
@DestructibleLemon Auf der Github-Seite scheint "CP-1252" für die Codierung zu verwenden.
brianush1
@DestructibleLemon Die Befehle sind alle in CP-1252 (Windows-1252) enthalten, es werden jedoch alle Unicode-Zeichen als gültige Syntax akzeptiert
caird coinheringaahing
Anscheinend gibt es 128.237 Unicode-Zeichen, also hätten Sie 128.234? en.wikipedia.org/wiki/Unicode#cite_note-24
Destructible Lemon
Anderen Antworten zufolge gibt es anscheinend 1.112.064 Unicode, daher bin ich mir nicht mehr sicher
Destructible Lemon
1

J, 3 Bytes

 1

Die Zeichen 1, Leerzeichen und Zeilenumbrüche geben immer 1 aus.

Bijan
quelle
1

/// , 1 2 Punkte

\_

Probieren Sie es online!

Ich habe keine Ahnung, wie ich es in einer anderen Turing-vollständigen Sprache machen soll. Natürlich gibt es HQ9, aber das fühlt sich schummelig an.

1 Byte dank @Martin Ender.

Genosse SparklePony
quelle
Dies sollten zwei Punkte sein, keine Bytes
Destructible Lemon
@DestructibleLemon Tut mir leid, TIO-Formatierung.
Genosse SparklePony
1

Punkte , 1.114.111 Zeichen (bei Verwendung von Unicode).

<87 dots here> Every Unicode character except NUL and . here

Erläuterung:

1                                           leading binary number
1010                                        010 increments the value under the pointer
1010111                                     111 prints out chr(1)

Die resultierende Binärzeichenfolge ist also 1010111, die in Dezimalzahlen umgewandelt wird, 87, wir benötigen also 87 Punkte.

Jedes andere Zeichen ist ein Kommentar, daher verwenden wir jedes Zeichen mit Ausnahme einer NUL, da Python3 die Datei dann nicht mehr liest, und einen Punkt, weil Punkte keine Kommentare sind.

MilkyWay90
quelle
0

Vorspiel , Partitur 1.112.051

(Betrachtet man nur das druckbare ASCII [\t\n -~], ergibt sich eine Punktzahl von 84. Betrachtet man alle Unicode-Codepunkte , ergibt sich eine Punktzahl von 1.112.051 .)

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

(Fügen Sie danach alle Zeichen hinzu [\u{7f}-\u{10ffff}].)

Immer drucken 0 .


Prelude ist eine parallele stapelbasierte Sprache, in der der Stapel mit unendlich vielen Nullen gefüllt ist.

  • +: Füge zwei Werte (immer 0) hinzu (0) und drücke, um sie zu stapeln.
  • -: Füge zwei Werte ein (immer 0), subtrahiere sie (0) und drücke zum Stapeln.
  • #: Pop einen Wert und verwerfen.
  • !: Füge einen Wert ein und gib ihn als Zahl aus (immer 0) (Angabe sagt "Zeichen", aber Interpreter sagt "Zahl"; in beiden Fällen wird ein Byte gedruckt)
  • 0: Drückt 0.
  • ^, v,V : Schiebt der Spitzenwert der vorherigen / nächsten parallelen Programme ( „Stimmen“), aber die Stapel aller „Stimmen“ wird mit 0 gefüllt, so dass sie immer 0 drücken.
  • andere Zeichen: no-op.

Wir müssen also nur 13 Zeichen vermeiden:

  • (, ) : Ungepaarte Klammern verursachen Fehler
  • 1- 9: Wir wollen nur 0 ausgeben.
  • ?: Wir wollen nichts eingeben.
  • *: Verursacht eine sehr komplizierte Konsistenzprüfung des Codes vor und nach einer Zeile, die aus einem Lone besteht *. Also müssen wir entweder die neue Zeile oder die entfernen *. Die Referenzimplementierung verwendet Python 2, .readline()was eine "neue Zeile" \roder bedeuten könnte \n. Also ist es besser, nur die zu entfernen *.
kennytm
quelle
0

Deadfish , Ergebnis 86

o.ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghjklmnpqrtuvwxyz?!|[]_-();'"*&^$#@!1234567890+=<>,/\:

Wenn das illegal ist, dann gibt es das auch

o

(Punktzahl 1)

Schnarchen
quelle