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
AJB
hätte eine Punktzahl von3
Ein Programm mit QuellcodeAAJ
hätte eine Punktzahl von2
Ein Programm mit Quellcode111
hätte eine Punktzahl von1
Dies ist eine Code-Bowling- Variante. Das Programm mit der höchsten Punktzahl gewinnt!
(Für Ihre Bequemlichkeit ein automatisiertes Scoring - Tool wurde erstellt , hier )
Herausforderungsregeln
Eingabe
Das Programm / die Funktion kann eine Eingabe annehmen, die jedoch völlig optional ist.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.)- Neuanordnung Unabhängig davon
, wie der Quellcode neu angeordnet wird, sollte die Ausgabe dieselbe sein.
Beispiel:
Programm:ABJ
Ausgabenhello world
, wie auch Programme: [AJB
,JAB
,JBA
, etc.]
Dies ist eine Code-Bowling- Variante. Das Programm mit der höchsten Anzahl von Zeichen gewinnt!
quelle
0
für immer drucken ?)Antworten:
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.)
quelle
Viele Sprachen, 2 Punkte
Produziert
0.0
als0.
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):
ans = 0
)ans = 0
)0
)0
)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.
[](){}
erfordert eine Übereinstimmung und schlägt fehl, wenn die letzte zuerst kommt,
kann nicht das erste Zeichen sein#
Erster würde alles kommentieren und nicht ausgeben\
ist eine ungültige Zeilenfortsetzung$
,!
,?
, Und@
kann nicht ohne andere unbrauchbar Zeichen verwendet werdenDiese Blätter Buchstaben, Ziffern
_
,.
und Zitate._
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 sind0
. Also, ich denke Nullen und.
ist der einzige Weg, um eine Punktzahl über zu bekommen1
. Aber ich kenne den Python-Lexer nicht gut, daher könnte mir etwas fehlen.quelle
CJam , 15 Punkte
Probieren Sie es online!
Druckt immer
0000
:0
drückt einfach eine Null.T
,U
,V
Sind Variablen , die auf Null vorge initialisiert werden.L
,M
,O
,Q
,R
Sind 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.quelle
r
hinzugefügt werden, um etwas zu erreichen, das dem Kleinbuchstaben ähnlich istq
?MATL ,
356 PunkteDie Idee, Leerzeichen einzufügen, stammt aus Bijans Antwort .
Der Code oder eine beliebige Permutation davon gibt drei durch Zeilenumbrüche getrennte aus.
Probieren Sie es online!
Erläuterung
l
drückt standardmäßig die Nummer eins auf den Stapel.1
macht das Gleiche.T
Pushestrue
, die als Nummer eins angezeigt wird.v
Verkettet den gesamten Stack zu einem Spaltenvektor. So würde zum Beispielv
afterT
die ersten beiden Zahlen in eine Spalte verketten (und dann würde die nächste Zahl gepusht werden). Eine Initialev
würde ein leeres Array erzeugen.Am Ende des Codes wird der Stapel implizit mit den folgenden Regeln angezeigt:
Jede Permutation der eingegebenen Zeichen erzeugt also
1
dreimal in verschiedenen Zeilen.quelle
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öhenJelly , Ergebnis
53101Verwenden Sie nur Zeichen, die Teil von Jellys Codepage sind .
Jelly hat implizite Eingaben von
0
und 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 anfangs0
(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.quelle
TI-Basic (Serie 83), 93 Punkte (99 auf einem TI-84 Plus)
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
undgetTime
Listen 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).
quelle
(nicht konkurrierend) Brainf-ck, 63 Bytes
Nun, ich weiß nicht, ob dies als Betrug angesehen wird, aber ...
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.
quelle
Haskell, 3 Punkte
Egal wie neu angeordnet, dieser Code gibt immer eine Funktion zurück, die die Eingabe erhöht. Anwendungsbeispiele in repl:
quelle
√ å ı ¥ ® Ï Ø ¿ , 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
,O
undł
. 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:
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.
quelle
J, 3 Bytes
Die Zeichen 1, Leerzeichen und Zeilenumbrüche geben immer 1 aus.
quelle
/// ,
12 PunkteProbieren 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.
quelle
Punkte , 1.114.111 Zeichen (bei Verwendung von Unicode).
<87 dots here> Every Unicode character except NUL and . here
Erläuterung:
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.
quelle
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 .)(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.Wir müssen also nur 13 Zeichen vermeiden:
(
,)
: Ungepaarte Klammern verursachen Fehler1
-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"\r
oder bedeuten könnte\n
. Also ist es besser, nur die zu entfernen*
.quelle
Deadfish , Ergebnis 86
Wenn das illegal ist, dann gibt es das auch
(Punktzahl 1)
quelle