Paul ist einer Ihrer belgischen Bekannten und möchte, dass Sie ein Programm erstellen, das mindestens eine der folgenden fünf Zeichenfolgen ausgibt :
12496=>14288=>15472=>14536=>14264
14264=>12496=>14288=>15472=>14536
14536=>14264=>12496=>14288=>15472
15472=>14536=>14264=>12496=>14288
14288=>15472=>14536=>14264=>12496
Es stellt die Freunde dar, auf die er am stolzesten ist, und er möchte mit ihnen essen. Paul denkt auch, dass die Zahl 6 perfekt ist, und das ist die einzige Zahl, die es wert ist, benutzt zu werden. So Sie keine andere Ziffer als „6“ können in Ihrem Code (0 bis 5 und 7 bis 9 sind verboten). Ihr Programm kann keine Eingaben vornehmen. Die Ausgabe kann vor und / oder nach der Zeichenfolge Garbage enthalten, sollte jedoch mindestens eine der oben genannten Zeichenfolgen enthalten.
Dies ist zum Beispiel eine gültige Ausgabe:
220frefze
f**14288=>15472=>14536=>14264=>12496**fczfe fz**15472=>14536=>14264=>12496=>14288**zfe
fzehth
Ich habe in der Frage "leichtfertig" angedeutet, wie ich damit rechne, aber wie weiß? Vielleicht gibt es einen besseren Weg ... Ich hoffe, Sie haben Spaß.
Dies ist Code-Golf: Die niedrigste Punktzahl in Bytes gewinnt.
Antworten:
05AB1E ,
1817 BytesProbieren Sie es online!
Erläuterung
Kurz gesagt, wir berechnen jede Zahl als
f(n+1) = sum(divisors(f(n)) - f(n)
quelle
Pyke, 16 Bytes
Probieren Sie es hier aus!
Immer wenn sich ein Zeichenfolgenliteral am Ende eines Programms befindet, wird es mit dem Token unmittelbar davor ausgetauscht, wodurch in solchen Fällen 1 Byte gespart wird. Pykes
factors
Funktion enthält weder die Nummer selbst noch 1. Wenn Nummern zulässig wären, könnte 1 Byte durch Ersetzen gespeichert werdenw$
mit4
Pyke, 21 Bytes
Probieren Sie es hier aus!
Erstellen Sie eine Liste der erforderlichen Nummern und fügen Sie sie hinzu. Nicht sehr interessant, abgesehen vom Trick mit den Saiten.
quelle
MATLAB, 44 Bytes
Probieren Sie es online!
Ich habe in den Zahlen kein Muster gefunden (und es wäre sowieso schwierig, das Muster für irgendetwas zu verwenden, da ich keine Zahlen verwenden kann), also werde ich mich einfach für den naiven Ansatz entscheiden.
'=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'
ist die Zeichenfolge,'12496=>14288=>15472=>14536=>14264'
wenn 12 zu den ASCII-Werten hinzugefügt wird. Geben Sie nun diese Zeichenfolge ein, subtrahieren Sie sie6+6
und verknüpfen Sie sie mit der leeren Zeichenfolge''
, um sie in ein Zeichenarray zu konvertieren.quelle
=>
.JavaScript (ES6), 57 Byte / 47 (UTF-8) Zeichen
Dank user5090812 für 10 B sparen
Erläuterung
Zuerst erstellen wir ein Array und füllen es mit den Zeichen in der Zeichenfolge
バ㟐㱰㣈㞸
. Dann durchlaufen wir den String (a
hat den Wert des aktuellen Elements) und ändern das Zeichen in seinen Zeichencode. Dann verbinden wir alle Werte im Array durch=>
.Alt: 67 Bytes
Erläuterung
Zuerst erstellen wir ein Array mit der Länge 5. Dann ändern wir die Werte des Arrays an jedem Index für den Zeichencode des Zeichens an demselben Index in der Zeichenfolge
バ㟐㱰㣈㞸
. Dies sind die Nummern aller Freunde von Paul in der Reihenfolge. Wenn wir das haben, verbinden wir das Array miteinander und verwenden es=>
als Trennzeichen.Verwendung
Um es zu benutzen, führe einfach folgendes aus:
Ausgabe
quelle
Ruby, 36 Bytes (26 Zeichen)
Weil warum nicht. Höllisch langweilig.
ältere Version - 53 Bytes
Erklärung: Das Kodieren der Zahlen in der Basis 25 ergibt die 5 sechs freien Zeichenketten. Um sie zu dekodieren, muss ich nur die Zahl 25 mit nur 6 darstellen: (6-1) (6-1) => ~ -6 ~ -6
quelle
Perl 6 ,
6359 BytesDekodiert die Zahlen von der Basis 25, da dies die einzige von
.parse-base
(2 bis 36) unterstützte Basis ist, bei der keine von ihnen ungültige Ziffern hat.Vielen Dank an Neil für -3 Bytes.
Perl 6 ,
8275 BytesDekodiert die Zahl
15472
in der Basis 36 und generiert dann die Folge, indem jede Zahl als die Summe der richtigen Teiler der vorherigen Zahl berechnet wird.Perl 6 , 69 Bytes (47 Zeichen) - nicht konkurrierend
Verwendet keine der verbotenen ASCII-Ziffern, sondern Unicode-Ziffern aus dem arabisch-indischen Block (jeweils 2 Byte)! Das
{ }
Zeichenfolgeninterpolationen stellen sicher, dass sie als Perl 6-Zahlenliterale analysiert und dann in ihre ASCII-Darstellungen umgewandelt werden.Okay, das ist Schummeln - deshalb habe ich es nicht als meine Hauptantwort benutzt ... :)
quelle
--$/*$/
?--($/=6)*$/)
.Gelee ,
54 BytesDruckt alle fünf Zeichenfolgen. Nutzt die Tatsache aus, dass "Garbage" -Ausgabe zulässig ist und vergräbt die fünf Zeichenfolgen in 10 3003 Zeichen Ausgabe.
Wie es funktioniert
quelle
C
94,8477 BytesBlöd einfach. Besonderer Dank an @Neil
f () {printf ("% d =>% d =>% d =>% d =>% d", '~' 'r' - 'd', '~' 'd' - 'h', ' ~ ' ' r '-' L ',' ~ ' ' z '+' d ',' ~ '*' t '-' P ');}quelle
char*m
Innere von verschiebenfor()
, um ein Byte zu speichern, und es macht die Funktion wiederverwendbar (notwendige Bedingung für Funktionen). Außerdem geben Sie eine nachgestellte Null aus.*++m
würde das beheben. Sie können aber auch einige Bytes speichern von 60 statt 66 subtrahiert:g(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}
.initial declaration used outside C99 mode
aber ich bin glücklich, den Putchar zu vereinfachen. Vielen Dank!PHP,
736360 BytesLaufen Sie mit
-nr
.etwas weniger faul: nahm String als Liste
=>1(ascii)(ascii)
dh:
124
,96
,=>1
,42
,88
,=>1
,54
,72
,=>1
,45
,36
,=>1
,42
,64
;Drucken
=>1
nach String-Index, ASCII-Code anhängenNervenzusammenbruch
quelle
C ++, 92 Bytes
quelle
PHP, 53 Bytes
Hex-Dump:
Ausgabe:
Erläuterung:
Jeder der fünfstelligen Ganzzahlabschnitte wird als vorzeichenloser kleiner Endian codiert, dann miteinander verkettet und das Ergebnis wird komprimiert. Dies geschieht, um einen Bytedampf zu erzeugen, der keine störenden Ziffernzeichen enthält, die dann in eine Zeichenfolge fest codiert werden. Zum Extrahieren entpacken Sie den Stream, entpacken die Zwei-Byte-Shorts, interpretieren sie als Zeichenfolge und verbinden Sie sich mit
>=
.quelle
Java 8, 134 Bytes
Golf gespielt:
Ungolfed, volles Programm:
quelle
Batch, 191 Bytes
Ich schätze, dass es mindestens 32 Bytes dauern würde, um jede Zahl nur unter Verwendung von zu berechnen
6
s und weiteren , um sie alle auszudrucken. Das sind bereits 192 Bytes. Außerdem denke ich, dass fünf%
Sekunden hintereinander ein Rekord für mich sind. Ordentlicher Batch-Trick: Der Trick%n%
wird ersetzt, bevor diefor
Schleife ausgewertet wird, sodass die Schleife alle Faktoren von berechnetn
und von diesen subtrahiertn
, wodurch das gewünschte Ergebnis negiert wird.quelle
Gelee , 12 Bytes
Druckt die vierte Zeichenfolge und sonst nichts.
Probieren Sie es online!
Wie es funktioniert
quelle
Python 2,
7872 BytesBearbeiten - Danke an Stewie Griffin für das Speichern von 6 Bytes!
Eine andere Lösung wäre auch, alle möglichen Permutationen auszugeben. OP sagt, Müll ist in Ordnung.
Das Konvertieren von
int
oderlist
nach ist zu redundantstr
. Ich denke, das wäre in einigen esoterischen Sprachen einfacher, aber ich kenne keine von ihnen.quelle