Lassen Sie uns gleich loslegen. Ihre Herausforderung besteht darin, ein Programm zu erstellen, das diese Dinge abhängig von seiner Eingabe ausführt:
Wenn die Eingabe eine Zahl ist, geben Sie "Primzahl" aus, wenn die Zahl eine Primzahl ist, und "Nicht Primzahl", wenn die Zahl keine Primzahl ist. Sie können davon ausgehen, dass die Zahl> 1 ist.
Wenn es sich bei der Eingabe um zwei Zahlen handelt, geben Sie jede einzelne Primzahl zwischen der ersten Zahl (einschließlich) und der zweiten Zahl (exklusiv) aus. Sie können davon ausgehen, dass die erste Zahl kleiner als die zweite ist.
Hier kommt die eigentliche Herausforderung: Wenn keine Eingabe erfolgt, sollte das Programm eine kürzere Version von sich selbst ausgeben, die genau die gleichen Aktionen wie das ursprüngliche Programm ausführt. Das Programm darf weder aus Dateien noch aus dem Internet lesen. Das neue Programm sollte dies auch können. Es sollte für mindestens 5 Generationen funktionieren. Das neue Programm muss nicht in derselben Sprache wie das erste sein.
Wertung:
Ihre Punktzahl entspricht der Summe der Anzahl der Bytes in den ersten fünf Generationen Ihrer Übermittlung (die Übermittlung selbst ist die erste Generation). Wenn der neue Code im ersten Programm fest codiert ist, multiplizieren Sie die Punktzahl mit 1,5. Die niedrigste Punktzahl gewinnt. (Wenn Sie einen Fehler im Punktesystem finden, lassen Sie es mich bitte in den Kommentaren wissen.)
Antworten:
CJam, 66 + 65 + 64 + 63 + 62 = 320
325355BytesDie folgenden 5 Zeilen sind die ersten 5 Generationen:
Der letzte produziert
die immer noch die Hauptaufgaben korrekt ausführt.
Testen Sie es hier.
Erläuterung
Das grundlegende CJam Quine ist
die sehr leicht zu einer verallgemeinerten Quine erweitert werden kann. Eine Erklärung hierzu finden Sie in meiner Antwort hier .
Die Grundideen für diese Antwort sind:
Hier ist eine Aufschlüsselung des Codes in der Quine:
quelle
C, Punktzahl: 553 + 552 + 551 + 550 + 549 = 2755,
Ursprüngliche Länge: 553, Durchschnitt: 551
EDIT: Nur 5 Generationen, nicht 6!
Es sieht so aus, als hätte Martin mich sowohl in der Zeit als auch in der Punktzahl geschlagen (um fast eine Größenordnung!). Ah, gut.
Das ursprüngliche Programm lautet wie folgt:
Ich werde es zum besseren Verständnis ein wenig entschlüsseln, aber damit es richtig funktioniert, sind die neuen Zeilen NICHT Teil des Programms.
Das einzige, was sich von Programm zu Programm ändert, ist der Wert von
k
, der bei jeder Iteration genau eine Ziffer verliert. Interessanterweise wird k nach der 5. Generation Null und bleibt dort, sodass Sie ad infinitum iterieren und immer eine gültige Ausgabe haben können.quelle
Tcl 253 + 252 + 251 + 250 + 249 = 1255 Bytes
Der Code muss mit einem Zeilenumbruch enden. Erläuterung:
Schreiben Sie den Code in x und führen Sie ihn aus.
Führen Sie den Befehl aus, dessen Name die Argumentlänge ist, und geben Sie die Argumente weiter.
Gibt 1 zurück, wenn a eine Primzahl ist, sonst 0. Verwendet Rekursion; Der zweite Backslash verhindert das Ersetzen von Befehlen durch den Interpreter und aktiviert den von
expr
(der faul ist).Einfache Umsetzung der Anforderungen.
Dies ist die Quine, die jedes Mal von Anfang an ein Leerzeichen entfernt.
quelle