4, 8, 15, 16, 23, 42
Schreiben Sie ein Programm, das diese Zahlenfolge unendlich ausgibt. Die Zahlen dürfen jedoch nirgendwo in Ihrem Quellcode vorkommen.
Folgendes ist kein gültiges Java-Programm zur Ausgabe von The Numbers, da The Numbers im Quellcode enthalten sind:
class TheNumbers {
public static void main(String[] args) {
for(int n = 0;;) System.out.println(
n == 4 ? n = 8 :
n == 8 ? n = 15 :
n == 15 ? n = 16 :
n == 16 ? n = 23 :
n == 23 ? n = 42 : (n = 4)
);
}
}
Die Definition von "Die Zahlen dürfen nicht in Ihrem Quellcode vorkommen" lautet wie folgt:
- Sie dürfen die Ziffer 4 nicht verwenden.
- Sie dürfen die Ziffer 8 nicht verwenden.
- Sie dürfen nicht die Ziffer 1 gefolgt von der Ziffer 5 verwenden.
- Sie dürfen nicht die Ziffer 1 gefolgt von der Ziffer 6 verwenden.
- Sie dürfen nicht die Ziffer 2 gefolgt von der Ziffer 3 verwenden.
Wenn Ihre Sprache bestimmte Zeichen ignoriert, die zwischen den Ziffern stehen können, ist dies keine gültige Ersetzung. Wenn Ihre Sprache beispielsweise das Literal 1_5
als interpretiert 15
, zählt dies als die Ziffer 1, gefolgt von der Ziffer 5.
Alternative Basen sind in der Einschränkung enthalten, zum Beispiel:
- Binär 100 kann nicht als Ersatz für 4 verwendet werden.
- Oktal 10 kann nicht als Ersatz für 8 verwendet werden.
- Hexadezimal F kann nicht als Ersatz für 15 verwendet werden.
Daher ist Folgendes ein gültiges (aber nicht sehr inspiriertes) Java-Programm zur Ausgabe von The Numbers, da The Numbers nicht im Quellcode enthalten sind:
class TheNumbers {
public static void main(String[] args) {
for(int n = '*';;) {
System.out.println(n -= '&');
System.out.println(n *= 2);
System.out.println(n += 7);
System.out.println(++n);
System.out.println(n += 7);
System.out.println(n += 19);
}
}
}
Beachten Sie, dass in diesem Programm '*'
und '&'
für die ganzen Zahlen 42 und 38 ersetzt werden, da sonst die Ziffern 4 und 8 in seinem Quellcode erscheinen würden.
Die Definition von "gibt die Sequenz unendlich aus" kann interpretiert werden. So wäre beispielsweise ein Programm gültig, das Glyphen ausgibt, die kleiner werden, bis sie "unendlich" klein sind.
Ein dickes Lob, wenn Sie in der Lage sind, die Sequenz auf eine Weise zu generieren, die im Grunde nicht jede Zahl hart codiert.
- Ableiten zu einer Formel. Mein Eindruck ist, dass es keinen gibt, aber vielleicht gibt es ihn oder er kann gefälscht werden.
- Behebung eines Pseudozufallsgenerators zur Rückgabe der Sequenz.
Dies ist ein Beliebtheitswettbewerb, also sei kreativ. Die Antwort mit den meisten Stimmen am 26. März ist der Gewinner.
quelle
This isn't an interesting question, IMHO, since the solution is pretty trivial. Please post in the sandbox next time.
wäre viel besser alsThis is a stupid question.
, aber das ist nur meine persönliche Meinung.Antworten:
Java
Ich habe mich entschlossen, einen weiteren Eintrag hinzuzufügen, da dieser völlig anders ist als der erste (eher ein Beispiel).
Dieses Programm berechnet den Durchschnitt eines vom Benutzer eingegebenen Arrays ...
... oder doch?
quelle
Python
Bearbeiten: Gemäß dem Vorschlag von Nneonneo enthält das Skript jetzt keine Ziffern mehr.
quelle
while True:
so schreiben , dass Ihre Antwort überhaupt keine Ziffern enthält.while True:
ist häufiger.Perl
Im Quellcode ist nichts versteckt. Nee. Wenn der Code nicht funktioniert, geben Sie ihn
use re "eval";
vorher ein (erforderlich in Perl 5.18).Erklärung im Spoiler.
quelle
Brainfuck
Ich bin so schlecht in ASCII-Kunst!
Testen Sie es hier: http://ideone.com/kh3DYI
quelle
Unix C
Es gibt viele Stellen, an denen numerische Konstanten gefunden werden können.
quelle
C #
quelle
a(i)=a(i-1)+a(i-3)+a(i-5)
scheint wirklich wie eine einfachere LösungC #
Unter Verwendung der Tatsache, dass eine beliebige Folge von N Elementen durch ein N-1-Polynom erzeugt werden kann und die Eingabe der Zahlen viele Pieptöne und Boops erforderlich macht. Als Referenz ist das abgeleitete Polynom I
Der Einfachheit halber habe ich die Faktoren den für die Zahlen genannten Variablen zugewiesen;)
Erste Version:
Ich mochte die Implikation einer steigenden Spannung, da die Anzahl der Signaltöne nach jeder Nummer abnimmt.
Dann dachte ich, ich könnte die Faktoren auch mit Piepton und Boops berechnen:
Ging danach ein wenig über Bord ...
Die Verwendung des Standardoperators in C # für Werttypen ermöglicht die Initialisierung von BEEEP auf Null. Auf diese Weise werden im Code keine numerischen Literale verwendet. Der grundlegende Algorithmus ist der gleiche. Die Faktoren werden jedoch inline berechnet.
quelle
D
Darf ich in meinem Code nicht die Nummern 4, 8, 15, 16, 23 oder 42 verwenden? Kein Problem, dann verwende ich gar keine Zahlen!
quelle
Javascript + HTML
Anti-Golf!
Das
<pre>
Element zeigt eine Nummer in der Sequenz an. Es enthält auch den gesamten Code, der erforderlich ist, um zur nächsten Nummer in der Sequenz zu gelangen. Das<pre>
wird also ausgewertet, was dazu führt, dass der Text der<pre>
Aktualisierung der nächsten Nummer in der Sequenz ähnelt. Dieser Vorgang wiederholt sich endlos.Hier ist es in Aktion!
quelle
C
Zieh deine Schutzbrille an :-)
quelle
4
und zwei8
.Haskell, 1 LoC
Ich habe mich für einen lesbaren Einzeiler entschieden, um zu zeigen, wie großartig Haskell ist. Außerdem habe ich beschlossen, alle Ziffern zu vermeiden , nur für den Fall.
Dank der integrierten verzögerten Auswertung kann Haskell unendlich lange Listen bearbeiten (zuordnen, teilen, verbinden, filtern ...). Es hat sogar mehrere integrierte Funktionen, um sie zu erstellen. Da eine Zeichenfolge nur eine Liste von Zeichen ist, sind unendlich lange Zeichenfolgen auch für Haskell kein Geheimnis.
quelle
fromEnum
sieht schöner aus alsData.Char.ord
, und ist etwas kürzerMathematica
Wir können die Frage beantworten, indem wir uns auf die sich wiederholenden Teilnenner der unten gezeigten periodischen fortgesetzten Fraktion konzentrieren . Sie sind das, was wir brauchen.
Immerhin enthalten sie die nicht terminierende Sequenz, die wir zu produzieren versuchen: 4, 8, 15, 16, 23, 42, 4, 8, 15, 16, 23, 42 ...
In Mathematica erhält man das quadratische Irrationale , das dem periodischen fortgesetzten Bruch von entspricht
wobei sich die 0 auf den impliziten ganzzahligen Teil bezieht.
Wir können überprüfen, indem wir die Operation umkehren:
Die 4 und 8 verletzen eine der Regeln der Herausforderung. Die Teilzeichenfolge
15
ist eine zusätzliche Verletzung. Wir können das quadratische Irrationale neu formatieren, um die Regeln zu erfüllen.Nun greifen wir die Sequenz von Interesse auf:
Und die Liste für immer ausdrucken ...
quelle
16
in der Fraktion zu entfernen, während ich einen Kommentar dazu getippt habe.C / C ++
Mit nur die Zeichen
L
,O
,S
undT
wiederholt in dieser Reihenfolge:quelle
Java
Ich kann in dieser Sequenz kein Muster finden. Wenn es kein erkennbares Muster gibt, können wir genauso gut ein paar kleine Primzahlen zusammenwerfen, sie in Javas eingebautes RNG stopfen und es einen Tag nennen. Ich sehe nicht ein, wie das möglicherweise schief gehen könnte, aber andererseits bin ich ein Optimist :)
quelle
while(true)
: ideone.com/1xaPdOBash Einzeiler
Zeilenumbruch zur besseren Lesbarkeit hinzugefügt. Es (ab) verwendet die Tatsache, dass dies die ersten sechs Nummern der OEIS-Sequenz A130826 sind .
quelle
awk -F"[ ,]" '/%S/ {for (i=3;i<=9;i++) printf $i" "}'
ancurl
.yes
und die Umleitung auf/dev/null
mit ablegencurl -s
. Etwas wieyes $(curl -s "https://oeis.org/search?q=id:A$((130726+100))&t=text" | awk -F"[ ,]" '/%S/ {for (i=3;i<9;i++) printf $i" "}')
yes
undcurl -s
- ich habe dies nur schamlos zu meiner Antwort hinzugefügt. :-)C Verwenden Sie überhaupt keine Zahlen und keine Zeichenwerte
quelle
Mir gefällt die Idee, die Sequenz zu verwenden
wie in dieser Antwort . Gefunden über die OEIS-Suche als Sequenz A122115 .
Wenn wir die Reihenfolge in umgekehrter Reihenfolge durchgehen, finden wir ein passendes Initialisierungs-Fünffach, das nicht 4, 8, 15, 16 oder 23 enthält.
Python3:
quelle
JavaScript
Überhaupt keine Zahlen sind ein guter Schachzug. Anstatt die Sequenz einmal pro Durchgang durch die Schleife zu drucken, drucken Sie nur eine Nummer pro Durchgang.
Der untere Teil der Zeichenfolge kodiert die zu druckenden Zahlen und der obere Teil der Zeichenfolge kodiert das nächste zu suchende Zeichen. Wo die beiden Teile (einen einzigen
F
) Code treffen, wird der Zyklus zurückgesetzt.quelle
Python
Bitweise Operatoren und ein paar einfache Berechnungen.
quelle
Rubin
Erzeugt die Zahlen durch Einbetten der gleichermaßen mystischen Folge 0, ∞, 9, 0, 36, 6, 6, 63 ;
Daraus kann kein Gutes entstehen.
quelle
C (
5450 Zeichen)Ich schreibe eine Golfantwort, weil Golf wenigstens Spaß macht.
quelle
a=0;
. Der einzige Effekt wäre, dass Sie die Sequenz an einer anderen Stelle als 4 (wahrscheinlich 8) starten könnten. Auf jeden Fall wird dies die Sequenz durcheinander bringen, wenn siea
überläuft. Es ist technisch undefiniertes Verhalten, aber das Ergebnis ist wahrscheinlich, dass Sie die Hälfte der Zeit Müll drucken.for
hilft nicht, wenn es keine Initialisierung gibt.for(;;)
ist die gleiche Anzahl von Zeichen wiewhile()
. Ich habe die Regeln so interpretiert, dass Zeilenumbrüche vorhanden sein müssen ... Aber ich könnte die Schwanzrekursion mit main ...Haskell
http://ideone.com/erQfcd
Bearbeiten: Was ich verwendet habe, um die Koeffizienten zu generieren: https://gist.github.com/ion1/9578025
Edit: Ich mochte das Programm von agrif sehr und habe am Ende ein Haskell-Äquivalent geschrieben, als ich es herausgefunden habe. Ich habe eine andere Basis für die magische Zahl gewählt.
http://ideone.com/kzL6AK
Edit: Ich mochte auch sein zweites Programm und schrieb am Ende eine Haskell-Implementierung von quadratischen Irrationalen ;-). Unter Verwendung der Bibliothek und der magischen Nummer des agrif druckt dieses Programm die Sequenz.
So könnte man mit Hilfe der Bibliothek nach der magischen Zahl suchen:
Der aufgedruckte Wert steht für die Nummer
(−644047 + 1 √424477224534)/30815
. Alles, was Sie tun müssen, ist, Faktoren zu finden, die nicht zugelassene Ziffernfolgen in den Zahlen beseitigen, ohne den Wert des Ausdrucks zu ändern.quelle
C #
Ich fand den Samen, nachdem ich bei einem Flug über den Pazifik einen Radiosender gehört hatte.
quelle
Python
Während viele Leute Muster aus OEIS verwendeten, entschloss ich mich, meine eigenen Funktionen zu erstellen, um die Zahlen darzustellen.
Die erste Funktion, die ich erstellt habe, war periodic (). Es handelt sich um eine Funktion, die alle sechs Eingangsnummern unter Verwendung der zyklischen Eigenschaften der Triggerfunktionen wiederholt. Es geht so:
Dann erstelle ich ein Polynom (). Das verwendet das folgende Polynom:
(In meinem Code werden einige der Koeffizienten als Summen dargestellt, da sie die verlorenen Zahlen als eine ihrer Ziffern enthalten.)
Dieses Polynom konvertiert die Ausgabe von periodic () in die richtige verlorene Zahl wie folgt:
Durch ständiges Erhöhen von i und Durchlaufen beider Funktionen werden die verlorenen Zahlen unendlich oft wiederholt.
(Hinweis: Ich verwende float () häufig im Code. Dies ist der Grund, warum Python die Gleitkommadivision durchführt, anstatt 2/3 = 0 zu sagen.)
quelle
4
inpolynomial
.Emacs Lisp 73 Zeichen
Der beste Weg, um für immer zu loopen? Eine zyklische Liste!
Aber warte, es gibt noch mehr!
? \ ^ D ist die gute Möglichkeit, das Zeichen für EOT einzufügen. Wenn ich jedoch nur eine Datei einreiche, würde ich das wörtliche "\ ^ D" nicht benötigen. Ich könnte einfach ein '?' gefolgt von einem tatsächlichen EOT-Zeichen, wodurch sich die tatsächliche Anzahl der benötigten Zeichen auf 63 verringert
Bearbeiten
Ich habe an "Gel" gearbeitet, das noch keine echte Sprache ist, aber im Grunde genommen eine Reihe von Emacs-Lisp-Makros für Codegolf. In "Gel" wäre dies die Lösung:
und ohne zu warten:
44 Zeichen mit schöner Zeicheneingabe. Wäre 34, wenn es sich nicht um eine Web-Einreichung handeln würde.
quelle
Julia
Nach einer Weile habe ich einen mathematischen Weg gefunden, um die Sequenz durch andere Sequenzen auszudrücken, ohne eine der Zahlen zu verwenden (oder knifflige Wege, sie zu verwenden):
Ausgabe:
quelle
C ++
Eine schöne, saubere Sprache wie C ++ kann es Ihnen ermöglichen, Ihren Quellcode auf eine übersichtliche und gut lesbare Weise zu gestalten, und hat den Vorteil, dass Sie ihn mit minimaler Mehrdeutigkeit einfach von Hand kopieren können.
Hier wird die Lösung nur mit der Nummer 1 erreicht.
Test: http://ideone.com/fuOdem
quelle
Schema (Guile)
http://ideone.com/QBzuBC
Möglicherweise verstößt dies gegen die Regel "Zahlen nicht in andere Basen kodieren", aber ich denke, es ist dunkel genug, dass es nicht zählt. Als Beweis für diese Dunkelheit sind diese beiden magischen Zahlen in der Basis 51:
Edit : Gleicher Trick, andere Darstellung. Eigentlich mag ich das mehr, da es nicht auf eine willkürlich gewählte Basis ankommt. Es erfordert jedoch eine Schemaimplementierung mit unendlich genauer Unterstützung für quadratische Irrationalen, die (AFAIK) nicht existiert. Sie könnten es jedoch in etwas wie Mathematica implementieren.
quelle
PHP
Ich dachte, es wäre an der Zeit, dass jemand eine PHP-Antwort einreicht, nicht die beste, aber trotzdem eine unterhaltsame
Die Ahs sind die Schreie der Passagiere, als das Flugzeug abstürzt
quelle
Perl
quelle