Die Herausforderung besteht diesmal darin, das n- te Fibohexaprim zu finden . Die Definition eines Fibohexaprims lautet wie folgt:
Wir beobachten zunächst eine Liste mit Fibonacci-Zahlen:
N | Fibonacci number
1 | 1
2 | 1
3 | 2
4 | 3
5 | 5
6 | 8
7 | 13
8 | 21
9 | 34
10 | 55
11 | 89
12 | 144
13 | 233
14 | 377
15 | 610
16 | 987
17 | 1597
Danach konvertieren wir die Zahlen in Hexadezimalzahlen:
N | Fib | Hex
1 | 1 | 1
2 | 1 | 1
3 | 2 | 2
4 | 3 | 3
5 | 5 | 5
6 | 8 | 8
7 | 13 | D
8 | 21 | 15
9 | 34 | 22
10 | 55 | 37
11 | 89 | 59
12 | 144 | 90
13 | 233 | E9
14 | 377 | 179
15 | 610 | 262
16 | 987 | 3DB
17 | 1597 | 63D
Aus den hexadezimalen Zahlen filtern wir die Buchstaben heraus. Wir haben nur noch Zahlen. Wir müssen prüfen, ob diese Zahlen Primzahlen sind:
hex | filtered | is prime? | N =
1 > 1 > false
1 > 1 > false
2 > 2 > true 1
3 > 3 > true 2
5 > 5 > true 3
8 > 8 > false
D > 0 > false
15 > 15 > false
22 > 22 > false
37 > 37 > true 4
59 > 59 > true 5
90 > 90 > false
E9 > 9 > false
179 > 179 > true 6
262 > 262 > false
3DB > 3 > true 7
63D > 63 > false
Wenn die gefilterte Zahl eine Primzahl ist, nennen wir dies ein Fibohexaprime . Sie können sehen, dass für N = 7
die verwandte Fibonacci-Nummer 987 ist.
Die Aufgabe ist einfach, wenn eine Eingabe mit STDIN oder einer akzeptablen Alternative gegeben wird, ein Programm oder eine Funktion zu schreiben, die das n-te Fibohexaprime mit STDOUT oder einer akzeptablen Alternative ausgibt.
Testfälle
Input - Output
1 - 2
2 - 3
3 - 5
4 - 55
5 - 89
6 - 377
7 - 987
8 - 28657
9 - 75025
10 - 121393
11 - 317811
12 - 5702887
13 - 9227465
14 - 39088169
15 - 102334155
16 - 32951280099
17 - 4052739537881
18 - 806515533049393
19 - 7540113804746346429
Die Regeln:
- Geben Sie bei einer Ganzzahl zwischen
1
und19
(die obigen Werte20
überschreiten den Maximalwert für eine 64-Bit-Ganzzahl mit Vorzeichen) den entsprechenden Wert aus. - Sie können eine Funktion oder ein Programm schreiben.
- Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
Antworten:
Pyth, 27 Bytes
Demonstration
y
berechnet die n-te Fibonacci-Zahl. Eine.f
Schleife findet das Fibohexaprim entsprechend der Eingabe.quelle
MATL , 28 Bytes
Hierfür wird die MATL-Version 1.0.0 verwendet , die am 12. Dezember in Esolangs veröffentlicht wurde .
Beispiel
Erläuterung
Der Code ähnelt dem in Martin Büttners Antwort .
quelle
CJam, 28 Bytes
Teste es hier.
Erläuterung
quelle
Perl 6 , 62 Bytes
Mein erster Versuch, es einfach zum Laufen zu bringen, war:
Durch die Kombination von
grep
undmap
kann ich 10 Bytes entfernenWenn ich
grep
anstelle von verwendemap
, spare ich 5 weitere Bytes:Verwendung:
quelle
Mathematica 111 Bytes
Möglicherweise ist noch Platz für zusätzliches Golfen.
quelle
Julia, 123 Bytes
Dies ist eine anonyme Funktion, die eine Ganzzahl akzeptiert und eine Ganzzahl zurückgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=n->...
.Ungolfed:
quelle
GAP , 204 Bytes
Diese Antwort ist ziemlich unauffällig, außer dass GAP cool genug ist, um die nächsten paar Fibohexaprimes zu finden (und cooler noch, es findet diese in Millisekunden mit dem angegebenen Code).
Beachten Sie, dass f (24) zwischen 2 ^ 216 und 2 ^ 217 liegt.
Hier ist der Code:
Es gibt wahrscheinlich noch etwas Golf, das getan werden könnte. Ich denke, die Implementierung ist ziemlich unkompliziert.
Ungolfed:
quelle
C,
186183 BytesDer Primalitätstest ist sehr ineffizient, daher wird die Berechnung ein wenig
n > 16
schwieriger und schmerzhaft langwierigern = 19
. Trotzdem funktioniert es und liefert die erwarteten Ergebnisse.Der Code geht davon aus, dass
size_t
es sich um einen 64-Bit-Typ handelt, der sowohl für 64-Bit-Linux als auch für Windows gilt.Bonus: Leider müssen wir 64-Bit-Typen verwenden, was zu einem Overhead von 33 Bytes führt. Die folgende Version funktioniert für die
n <= 15
Verwendungint
und ist 150 Byte lang:Testleitung:
quelle
size_t
indem Sie das Include verwenden und löschen? Es ist implementierungsspezifisch, scheint aber 64-Bit sowohl unter 64-Bit-Linux als auch unter Windows zu sein (und seit wann kümmern wir uns um die Portabilität in Codegolf?). (Randnotiz:%ld
ist nicht 64-Bit in 64-Bit-Windows; muss%lld
)size_t
ist kein eingebautes Element, es ist instddef.h
(das wiederum direkt oder indirekt von praktisch jedem anderen Header enthalten ist) definiert. So oder so, ich brauche eine#include
. Ich kann immer noch 2 Bytes sparen, indem ichsize_t
stattdessenuint64_t
:)lld
bisschen, ich habe nicht die Chance bekommen, es unter Windows zu testen (aber Portabilität spielt keine Rolle, oder?)stdio.h
Zeit gekommen sein, als ich getestet habe. Auf jeden Fall - Sie könnten immer noch ein paar sparen, indem Siemath.h
anstelle von einschließenstddef.h
.math.h
macht nicht den Trick für mich (GCC 4.9 mit GNU libc)Python 2, 127 Bytes
Der Algorithmus könnte viel effizienter sein. Insbesondere
(t>1)*all(t%x for x in range(2,t))
prüft die Primalitätsprüfung potenzielle Faktoren bis zu dem Punktt-1
, an dem sie tatsächlich nur bis zum Boden der Quadratwurzel prüfen müsste . Darange
in Python 2 eine ganze Liste im Speicher abgelegt ist, führt dies zu einemMemoryError
atN=17
(auf meinem Computer unter Verwendung der Standardeinstellungen).quelle
Ruby, 160 Bytes
Ungolfed:
Verwendung:
quelle
R, 164 Bytes
Mit neuen Zeilen eingerückt:
Beispiele:
quelle