Schreiben Sie das kürzestmögliche Programm, sodass die Ausgabe N ist, wenn Sie das erste Zeichen und jedes N-te Zeichen danach zu einem neuen Programm kombinieren. Dies muss für N = 1, 2, ..., 16 funktionieren.
Eine andere Art zu sagen ist, wenn Sie alle Zeichen aus Ihrem Programm entfernen , außer dem ersten und jedem N-ten danach, sollte die Ausgabe des verbleibenden Codes N sein.
Beispiel
Wenn Ihr Code war
ABCDEFGHIJKLMNOP
N = 1 ergibt ABCDEFGHIJKLMNOP
. Wenn Sie dies ausführen, sollte 1 ausgegeben werden.
N = 2 ergibt ACEGIKMO
. Wenn Sie dies ausführen, sollte 2 ausgegeben werden.
N = 3 ergibt ADGJMP
. Wenn Sie dies ausführen, sollte 3 ausgegeben werden.
N = 4 ergibt AEIM
. Wenn Sie dies ausführen, sollte 4 ausgegeben werden.
N = 5 ergibt AFKP
. Wenn Sie dies ausführen, sollte 5 ausgegeben werden.
N = 6 ergibt AGM
. Wenn Sie dies ausführen, sollte 6 ausgegeben werden.
N = 7 ergibt AHO
. Wenn Sie dies ausführen, sollte 7 ausgegeben werden.
N = 8 ergibt AI
. Wenn Sie dies ausführen, sollte 8 ausgegeben werden.
N = 9 ergibt AJ
. Wenn Sie dies ausführen, sollte 9 ausgegeben werden.
N = 10 ergibt AK
. Wenn Sie dies ausführen, sollte 10 ausgegeben werden.
N = 11 ergibt AL
. Wenn Sie dies ausführen, sollte 11 ausgegeben werden.
N = 12 ergibtAM
. Wenn Sie dies ausführen, sollte 12 ausgegeben werden.
N = 13 ergibt AN
. Wenn Sie dies ausführen, sollte 13 ausgegeben werden.
N = 14 ergibt AO
. Wenn Sie dies ausführen, sollte 14 ausgegeben werden.
N = 15 ergibt AP
. Wenn Sie dies ausführen, sollte 15 ausgegeben werden.
N = 16 ergibt A
. Das Ausführen von this sollte 16 ausgeben.
Einzelheiten
- Alle Zeichen sind zulässig, ASCII und Nicht-ASCII. (Zeilenumbrüche und nicht druckbares ASCII sind ebenfalls zulässig. Beachten Sie, dass Wagenrücklauf und Zeilenvorschub als unterschiedliche Zeichen gelten.)
- Ihre Punktzahl ist die Länge in Zeichen Ihres unveränderten Programms (15 im Beispiel). Die niedrigste Punktzahl gewinnt.
- Eine Punktzahl unter 16 ist eindeutig unmöglich, da dann mindestens zwei der geänderten Programme identisch wären.
- Die Ausgabe kann in einer Datei oder einem Standardformat oder in einem anderen vernünftigen Format erfolgen. Die Ausgabe der 16 verschiedenen Programme muss jedoch alle an derselben Stelle erfolgen (z. B. ist es nicht in Ordnung, wenn
AO
stdout, sondernA
eine Datei abgelegt wird). Es erfolgt keine Eingabe. - Die Ausgabe muss dezimal und nicht hexadezimal erfolgen. Die eigentliche Ausgabe sollte nur die 1 oder 2 Zeichen enthalten, aus denen die Zahl von 1 bis 16 besteht, sonst nichts. (Sachen wie Matlab's
ans =
sind in Ordnung.) - Ihr Programm muss nicht für N = 17 oder höher funktionieren.
quelle
ABCDEFGHIJKLMNO
undN = 15
Ergebniscode einfach sindA
.Antworten:
APL, 49
Geänderte Programme
Erklärung
Ich beginne von unten, da dies das Erklären erleichtern würde
Es gibt zwei Sprachfunktionen von APL, die berücksichtigt werden müssen. Erstens hat APL keine Operatorpriorität, Anweisungen werden immer von rechts nach links ausgewertet. Zweitens verhalten sich viele APL-Funktionen ganz unterschiedlich, je nachdem, ob sie ein Argument rechts (monadisch) oder zwei Argumente links und rechts (dyadisch) haben.
Monadic
⌊
ist Abrundungs (Boden - Funktion), Dyadic×
offensichtlich Multiplikation ist,⍝
Kommentare aus Rest der ZeileDies sollte diese offensichtlich machen:
9:
⌊/9×1
/
ist Reduzieren. Grundsätzlich übernimmt es die Funktion des linken und des rechten Arrays, fügt die Funktion zwischen jedes Elementepaar des Arrays ein und wertet aus. (Dies wird in einigen Sprachen als "Falz" bezeichnet.)Hier ist das richtige Argument ein Skalar,
/
also nichts.8:
⌊|8×× 2
Monadic
×
ist die Signum - Funktion und monadischen|
ist der absolute Wert Funktion also× 2
auswertet zu1
und|8×1
ist natürlich8
7:
⌊11-4 ⍝
sollte offensichtlich sein6:
⌊⍟19×51⍝2
Monadic
⍟
ist natürlich logSo
⍟19×51
auswertet zuln(19×51) = 6.87626...
und⌊
Runden es auf6
5:
⌊⍟21×○5
Monadisch
○
multipliziert sein Argument mit π⍟21×○5
istln(21×5π) = 5.79869...
4:
⌊7|18××4×1 ⍝2
Dyadic
|
ist die Mod-Funktion, die×4×1
ausgewertet1
wird und7|18×1
ist18 mod 7 = 4
3: Durch
⌊○⍟/119-××5 1 ⍝ 2
Leerzeichen getrennte Werte sind ein Array. Beachten Sie, dass es sich in APL um eine implizite Zuordnung handelt, wenn die meisten skalaren Funktionen Array-Argumente angeben.
Dyadisch
⍟
ist logAlso
××5 1
ist signum von signum auf 5 und 1, was ergibt1 1
,119-1 1
ist¯118 ¯118
(¯
ist nur das Minuszeichen. APL muss zwischen negativen Zahlen und Subtraktion unterscheiden) und⍟/¯118 ¯118
ist log -118 (-118) = 12:
⌊⍟7⍟|21189×1×345× 1 ⍝⍝_2
Du kannst es selbst herausfinden
1:
⌊⊃⍟○7⍟⍟1|/2111118 9⍝×-1 ×○3×4_5_× 1_ _⍝_⍝ __2
Diese bestehen aus einer komplizierteren Verwendung von
/
. Wennn
eine Zahl,F
eine Funktion undA
ein Array ist,nF/A
wird jede Gruppe vonn
aufeinanderfolgenden Einträgen vonA
und angewendetF/
. Nimmt man beispielsweise2×/1 2 3
jedes Paar aufeinanderfolgender Einträge (welche1 2
und sind2 3
) und wendet sie×/
auf jede Gruppe an,2 6
so ergibt sich
1|/2111118 9
nur ein Rückgabewert2111118 9
(wie es für|/
Skalare gilt). Dann⍟○7⍟⍟
ln gilt, dann melden Sie sich 7 auf diese Zahlen, dann sie multipliziert mit π und ln wieder. Die Zahlen, die auf der anderen Seite erscheinen, werden1.46424... 0.23972...
hier
⊃
verwendet, um nur das erste Element eines Arrays auszuwählen.quelle
Python -
12011137 (Generator:241218) - Es lebe die Hasch!Strategie:
Ich habe versucht, jede Zeile mit so vielen Hashes wie der gewünschten Ausgabe zu beginnen
n
. Dann überspringen alle anderen Versionen diese Zeile vollständig.Die Hauptschwierigkeit bestand jedoch darin, die richtige Anzahl von Hashes anzufügen, damit der nächste Lauf genau auf den Anfang der nächsten Zeile trifft. Darüber hinaus können Störungen bei anderen Versionen auftreten, z. B. bei Version 16, die direkt in die
print
Befehl von Zeile 5 und so weiter. Dies war also eine Menge Versuch und Irrtum, kombiniert mit einem Hilfsskript für schnelle Tests.Statistiken:
1201113710661002 (88,1%)Code:
Testskript:
Ausgabe:
Update: Ein generierendes Skript!
Ich dachte über meine Lösung nach und dass es ein Muster geben muss, um es algorithmisch zu generieren. Auf geht's:
Es baut das Programm Zeile für Zeile auf:
i
mit demprint i
Befehl und eine neue Zeile hinzui - 1
hacken Sie zwischen zwei benachbarten Zeichen.print i
(aufgrund von Fehlausrichtung) oder einen
-version mitn in range(1, 17)
einer Ausnahme nicht enthält, fügen Sie der vorherigen Zeile einen weiteren Hash hinzu.Es gab tatsächlich ein kürzeres Programm zurück, als ich heute Morgen manuell gefunden habe. (Also habe ich meine Lösung oben aktualisiert.) Außerdem bin ich mir ziemlich sicher, dass es nach diesem Muster keine kürzere Implementierung gibt. Aber du weißt nie!
Golf Version -
241218:Beachten Sie, dass es einen kürzeren Generator geben kann, z. B. indem Sie die erforderliche Anzahl aufeinanderfolgender Hashes für jede Zeile fest codieren. Aber dieser berechnet sie selbst und kann für jeden N> 16 verwendet werden.
quelle
p 1
statt verwendenprint 1
.Befunge 93 - Fünf Millionen siebenhundertfünfundsechzigtausend und siebenhundertsechsundsiebzig Zeichen
Ich fordere, ernst genommen zu werden ...
3 Gründe warum. 1. Grund: Ein befunge-Skript hat immer eine Größe von 80x25, also musste es etwas geben , das durch Code in den Zeilen reduziert wurde. 2. Grund: Warum das etwa 5,5 Millionen Leerzeichen sind, liegt daran, dass 720 720 das kleinste gemeinsame Vielfache von 1 bis 16 ist. 3. Grund: Wow, das ist ziemlich absurd.
quelle
209 Zeichen (verschiedene Sprachen)
Ich habe nur versucht, die Dinge einfach zu halten und zu vermeiden, etwas mit vielen Primfaktoren in Positionen zu bringen. Der Vorteil ist die Fähigkeit, in vielen Skriptsprachen ausgeführt zu werden. Es sollte in jeder Sprache funktionieren, die nicht absichtlich pervers ist und die folgenden Funktionen aufweist:
Beispielsweise,
Python 2-Befehlszeileninterpreter (wenn auch nicht aus einer Datei):
MATLAB (einfach '#' durch '%' ersetzen):
NB Vor der ersten '1' sollten 17 Leerzeichen stehen. Ihr kennt viele Sprachen, also helft mir bitte, mehr aufzulisten, in denen es laufen könnte (:
BEARBEITEN: Unäres + an Position 0 für Python hinzugefügt, um zu vermeiden, dass die Zeile eingerückt wird.
quelle
IndentationError
Lauf in die Kommandozeile. Aber vielleicht haben Sie beim Veröffentlichen des Codes hier nicht die richtige Abzeichensyntax verwendet.unexpected indent
in die Python 2.7-Konsole. Aber es funktioniert in Matlab, also keine Sorge. Ich glaube, dass es auch in Ruby funktioniert.CJam, 89 Bytes
Dieser Ansatz verwendet keinerlei Kommentare.
i
wird in eine Ganzzahl umgewandelt, daher ist es hier ein Noop. Es könnte durch Leerzeichen ersetzt werden, aber die Buchstaben scheinen mir besser lesbar zu sein ...Probieren Sie es online aus, indem Sie den folgenden Code ausführen :
Beispiellauf
quelle
GolfScript, 61 Bytes
Dies nutzt die Vorteile von comments (
#
) und den undokumentierten "Superkommentaren" (alles, was auf einen nicht übereinstimmenden folgt}
, wird stillschweigend ignoriert)._
ist ein Noop. Es könnte durch Leerzeichen ersetzt werden, aber die Unterstriche erscheinen mir lesbarer ...Probieren Sie es online aus.
Beispiellauf
quelle