Implementieren Sie diese Wiederholungsrelation als Funktion oder Programm, das eine nicht negative Ganzzahl eingibt und ausgibt:
F (0) = 0
F (N) = die kleinste ganze Zahl, die größer als F (N-1) ist, so dass die Summe und / oder das Produkt seiner 10-stelligen Basis N ist
N ist die Eingabe Ihres Programms und F (N) die Ausgabe.
Um es klar auszudrücken, die Summe der Ziffern in einer Zahl wie 913 ist 9 + 1 + 3 = 13. Das Produkt ist 9 × 1 × 3 = 27. Bei einstelligen Zahlen sind Summe und Produkt gleich. Zahlen, die eine 0 enthalten, haben natürlich das Produkt 0.
Die Ergebnisse bis F (70) sind:
N F(N)
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 19
11 29
12 34
13 49
14 59
15 69
16 79
17 89
18 92
19 199
20 225
21 317
22 499
23 599
24 614
25 799
26 899
27 913
28 1147
29 2999
30 3125
31 4999
32 5999
33 6999
34 7999
35 8999
36 9114
37 19999
38 29999
39 39999
40 41125
41 59999
42 61117
43 79999
44 89999
45 91115
46 199999
47 299999
48 311128
49 499999
50 511125
51 699999
52 799999
53 899999
54 911116
55 1999999
56 2111147
57 3999999
58 4999999
59 5999999
60 6111125
61 7999999
62 8999999
63 9111117
64 11111188
65 29999999
66 39999999
67 49999999
68 59999999
69 69999999
70 71111125
Der kürzeste Code in Bytes gewinnt. Ein dickes Lob, wenn Sie zeigen können, dass Ihr Code eine gewisse Effizienz ausnutzt.
Antworten:
05AB1E ,
2012 Bytes8 Bytes gespart dank Osable !
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
µNSDOsP‚¾>å½
. Es scheint für zufällig ausgewählte Zahlen zu funktionieren.Mathematica, 71 Bytes, 68 Zeichen
Für nur 4 weitere Bytes ist hier eine Version, die die Werte von speichert
±n
:Bei der letztgenannten Version, bevor Sie bewerten
±n
,PlusMinus
werden zwei unten Werte haben:Wenn wir nun auswerten
±20
:Dies beschleunigt zukünftige Berechnungen erheblich, da Mathematica die Werte zwischen
0
und nicht mehr20
rekursiv berechnet . Die Zeitersparnis nimmt dramatischn
zu:quelle
C #,
155159135 BytesSuper ineffizient, dauert halt langeN>=14
. Ich werde versuchen, eine effizientere, aber längere Lösung zu finden.Okay, jetzt viel besser, aber 4 Bytes länger. Na ja, ich kann es jetzt
N<=50
ziemlich schnell machen. Vielen Dank an @milk, dass Sie 24 Bytes gespart haben!quelle
for(;;)
und foreach mitforeach(var c in++i+"")
. -22 Bytes zum Ersetzenint.Parse(c+"")
durchc-48
.Pyth -
1817 BytesEin Byte gespart dank @Jakube!
Verwendet reduzieren, um die rekursive Sache zu tun.
Test Suite .
quelle
sM*FBjT;
Erzeugt auch die Ziffernsumme und das Produkt und ist 1 Byte kürzer.R,
124112 BytesAusfällt bei N = 45 , da R besteht auf dem Schreiben als 10.000 1e + 05, die durch geschätzt isnt
as.numeric()
, ist dies durch die Verwendung fixierbaras.integer()
auf Kosten von 12 BytesAls statistische Programmiersprache hat R ärgerlich wortreiche Möglichkeiten, Zahlen in einen Vektor von Ziffern aufzuteilen. Vor allem, weil alles explizit von Strings auf numerische Werte zurückkonvertiert werden muss.
Dank billywob werden 12 Bytes gespart.
quelle
as.double(el(strsplit(c(x,""),"")))
eine Ganzzahl in einen Vektor ihrer Ziffern aufteilen. Sie haben zwar immer nochas.integer()
sprintf()
stattdessen auch verwenden, um die Ganzzahl direkt in eine Zeichenfolge ohne nachfolgende Nullen zu formatieren:as.double(el(strsplit(sprintf("%1.f",x),"")))
und die Verwendung vonas.integer()
x=x+1
und dies wird garantiert einmal ausgewertet, denn zu Beginny=F(N-1)
ist das definitiv nicht gleichN
.JavaScript (ES6)
1091071059189 Bytesquelle
JavaScript (ES6), 84
86Edit: 2 Bytes gespeichert dank @Arnauld
Test Note über 50 beansprucht zu viel CPU. Klicken Sie auf "Ergebnisse ausblenden", um den Test zu beenden, bevor es zu spät ist
quelle
for(v=n&&f(n-1),p=s=n+1;s&&p-1;)[...++v+''].map(d=>(p/=d,s-=d),p=s=n);v
sollte 2 Bytes sparen. Ich vermute, es kann noch etwas gekürzt werden, aber ich konnte es bisher nicht herausfinden.p /= d
ein genaues Ergebnis erzeugt wird, wennd
tatsächlich ein Teiler von istp
. Sofern ich mich nicht irre, gilt dies für alled <= p <= Number.MAX_SAFE_INTEGER
. Wir werden Gleitkomma-Rundungsfehler bekommenp % d != 0
, aber das sollte sicher sein.eval`1+1`
) (hier ist, warum codegolf.stackexchange.com/a/52204/21348 : Lesen Sie den ersten Kommentar)Mathematica, 67 Bytes
Funktion, benannt
a
. Nimmt eine Zahl als Eingabe und gibt eine Zahl als Ausgabe zurück. Inspiriert von der vorherigen Mathematica-Lösung, verwendet jedoch einen anderen Schleifenmechanismus.quelle
C 240 Bytes
Versuch, einige mathematische Eigenschaften der Sequenz auszunutzen.
quelle
PowerShell v3 +, 114 Byte
Eine iterative Lösung, bei der es nicht einfach ist, eine Zahl in die Summe / das Produkt ihrer Ziffern umzuwandeln. Sie ist also viel länger als die JavaScript-Antworten.
Nimmt Eingaben an
$n
, setzt$i
auf ein Array mit just0
(dies ist die Auflistung vonF()
und setzt$l
gleich1
(dies ist die neuesteF
). Wir schleifen dann von1
bis aufwärts$n
, wobei jede Iteration einefor
Schleife ausführt .Die
for
Bedingung der Schleife nimmt die$l
höchste Zahl in einer Zeichenfolge"$l"
,char
wandelt sie dann in ein -array um und speichert dieses Array in einer temporären Variablen$b
. Wir dann-join
diese Ziffern zusammen mit+
und leiten das zuiex
(kurz fürInvoke-Expression
und ähnlich zueval
). Darüber hinaus machen wir auch ähnlich mit*
. Diese beiden Zahlen werden in Parens eingekapselt und als Array-Argument für den-notin
Operator gegen die aktuelle Nummer$_
der äußeren Schleife behandelt (dh diefor
Schleife läuft so lange wie eine von beiden+
und*
unterscheidet sich von$_
). Der Körper derfor
Schleife wird nur inkrementiert$l++
.Sobald wir diese innere
for
Schleife verlassen haben, fügen wir unser$l
On als neues Element von hinzu$i
. Sobald wir die Bereichsschleife vollständig abgeschlossen haben, platzieren wir sie einfach$i[$n]
in der Pipeline, und die Ausgabe ist implizit.NB - Wird
20
wegen der Schleifenstruktur ziemlich langsam ausgeführt . Zum BeispielN=40
dauert es ungefähr zwei Minuten auf meinem Computer, und ich habe mich nicht einmal um Tests gekümmertN>50
.quelle
Pyke, 17 Bytes
Probieren Sie es hier aus!
Oder 13 Bytes nicht konkurrenzfähig
first_n
Stellt nun die Anzahl der bereits gefundenen Gegenstände plus eins ein,i
falls verwendet.Probieren Sie es hier aus!
quelle
Python 2 , 77 Bytes
Probieren Sie es online!
quelle
Wunder , 49 Bytes
Pattern Matching ftw! Verwendung:
Besser lesbar:
Dies ist im Grunde nur eine wörtliche Umsetzung der Spezifikationen.
quelle
BASH, 107 Bytes
mit fold + paste + bc
quelle
Befunge, 101 Bytes
Probieren Sie es online! Aber beachten Sie, dass es sehr langsam wird, sobald Sie in den hohen Vierzigern sind. Wenn Sie die gesamte Bandbreite testen möchten, müssen Sie einen Befunge-Compiler verwenden.
Erläuterung
quelle
PHP , 110 Bytes
Probieren Sie es online!
quelle