Schauen Sie sich die sieben Multiplikationstabellen von 7 × 0 bis 7 × 9 an:
0, 7, 14, 21, 28, 35, 42, 49, 56, 63
Wenn wir uns nur die Ziffern an der Stelle ansehen, erhalten wir eine Permutation der Ziffern 0 bis 9:
0, 7, 4, 1, 8, 5, 2, 9, 6, 3
Nehmen Sie eine positive Dezimalzahl N und ersetzen Sie jede Ziffer D in N durch die Ziffer anstelle von 7 × D.
Beispielsweise 15209
wird, 75403
weil 1
Maps zu 7
, 5
Maps zu 5
, 2
Maps zu 4
, 0
Maps zu 0
und 9
Maps zu 3
.
Wiederholen wir nun diesen Vorgang mit dieser neuen Dezimalzahl, bis wir einen Zyklus sehen, dh bis eine Ganzzahl auftaucht, die wir bereits gesehen haben.
Zum Beispiel mit 15209
bekommen wir den Zyklus
15209 -> 75403 -> 95801 -> 35607 -> 15209 -> repeats...
^
|
cycle restarts here
Als weiteres Beispiel 505
hat der kurze Zyklus
505 -> 505 -> repeats...
^
|
cycle restarts here
Es stellt sich heraus, dass diese Zyklen für jedes N immer genau 1 oder 4 verschiedene ganze Zahlen enthalten. (Ich überlasse es Ihnen, herauszufinden, warum das so ist.) Interessant ist, dass Sie fast immer eine Dezimalzahl erhalten, die nur aus 2
's und 0
' s besteht, wenn Sie die ganze bestimmte Ganzzahl in einem Zyklus summieren .
Zum Beispiel 15209 + 75403 + 95801 + 35607 = 222020.
N = 505 ist eine der Ausnahmen. Die einzige Ganzzahl im Zyklus ist 505, die Gesamtsumme ist also 505.
Hier sind die Summen der Zyklen für N = 1 bis 60:
N sum
1 20
2 20
3 20
4 20
5 5
6 20
7 20
8 20
9 20
10 200
11 220
12 220
13 220
14 220
15 220
16 220
17 220
18 220
19 220
20 200
21 220
22 220
23 220
24 220
25 220
26 220
27 220
28 220
29 220
30 200
31 220
32 220
33 220
34 220
35 220
36 220
37 220
38 220
39 220
40 200
41 220
42 220
43 220
44 220
45 220
46 220
47 220
48 220
49 220
50 50
51 220
52 220
53 220
54 220
55 55
56 220
57 220
58 220
59 220
60 200
Wir nennen dies die Sieben-Zyklus-Summen-Sequenz.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine positive Dezimalzahl N akzeptiert und den entsprechenden Term der Zyklussummensequenz der Sieben als Dezimalzahl ausgibt oder zurückgibt.
Wenn der Eingang beispielsweise ist 95801
, sollte der Ausgang sein 222020
. Wenn der Eingang ist 505
, sollte der Ausgang sein 505
. Wenn der Eingang ist 54
, sollte der Ausgang sein 220
.
Der kürzeste Code in Bytes gewinnt.
quelle
Antworten:
Pyth, 14 Bytes
Ich bin mir nicht sicher, warum jeder das Ergebnis bestimmt, indem er sich die Muster in den Zahlen ansieht. Einfach den Prozess zu machen, alle Zahlen des Kreises zu berechnen und sie zu summieren, ist kürzer. Zumindest in Pyth ;-)
Probieren Sie es online aus: Demo oder Test Suite
Übrigens, das ist meine 200. Code-Golf-Antwort. Dieser Beitrag bringt mir also das Gold Code-Golf-Abzeichen ein.
Erläuterung:
quelle
.u
Python 2, 69 Bytes
Die Funktion ist einfach zu beschreiben:
Das Golfen kann verbessert werden, ich poste meistens, um die Methode zu teilen. Eine Sprache mit nativem regulären Ausdruck sollte eine kurze Lösung ermöglichen.
Eine alternative Aussage der Funktion ist
quelle
Python 2, 63 Bytes
Es wird erwartet, dass das Eingabeargument eine Zeichenfolge ist.
quelle
strip
verhalten habe.CJam, 16 Bytes
Verwenden Sie den gleichen Algorithmus wie alle anderen:
Testsuite. (Erzeugt alle Ergebnisse von 1 bis zur Eingabe.)
Erläuterung
quelle
JavaScript (ES6),
5451 ByteMit der Methode von xnor :
3 Bytes gespart dank @charlie !
Erläuterung
Prüfung
Code-Snippet anzeigen
Naive Methode, 102 Bytes
Code-Snippet anzeigen
quelle
n=>/[^05]/.test(n)?`${n}0`.replace(/./g,d=>+d&&2):n
n=>n-(s=`${n}`.replace(/[^0]/g,5))?s*4:n
s*4
Trick ist großartig! Ich denke, Sie sollten dies als separate Antwort posten, da die Methode anders ist und so viel kürzer als meine. :)Mathematica,
837760 ZeichenUngolfed
quelle
JavaScript (ES5), 40 Byte
Es ist eine Weiterentwicklung der user81655 ‚s Lösung, den alternativen Ansatz von beschriebenen xnor .
Erläuterung
Die Summe einer Ziffer ungleich Null im 4-Zyklus ist immer 20, da die Ziffer entweder durch 1 → 7 → 9 → 3 oder 2 → 4 → 8 → 6 oder 5 → 5 → 5 → 5 wechselt. Das Ersetzen jeder solchen Ziffer durch 5 ändert also nichts an der Summe.
Diese Ersetzungsaktion wird erneut verwendet, um den 4-Zyklus von dem 1-Zyklus zu unterscheiden. Wenn sich das Ersetzungsergebnis vom Eingang unterscheidet, handelt es sich um einen 4-Zyklus, andernfalls um einen 1-Zyklus.
NB: Der Template-String
`${n}`
dient nur der Lesbarkeit und(n+'')
hat die gleiche Länge.quelle
n=>(s=[...`${n}`].map(d=>+d&&5).join``)^n?s*4:n
sed, 26 bytes
/[^05]/{s/[^0]/2/g;s/$/0/}
(Ein weiterer Ansatz zum "Ersetzen durch 2".)
Beispiele
echo '500' | sed '/[^05]/{s/[^0]/2/g;s/$/0/}'
→500
echo '501' | sed '/[^05]/{s/[^0]/2/g;s/$/0/}'
→2020
quelle
Perl 6 ,
68 55 53 3633 BytesDies ist definitiv der falsche Weg, wenn die Zahl nur aus
5
s und0
s besteht, wird ein Match-Objekt zurückgegeben, andernfalls wird alles außer0
durch a ersetzt2
und ein0
an das Ende angefügt .(Das Match-Objekt verhält sich wie eine Zahl, wenn Sie es als eine Zahl verwenden.)
Da es falsch gemacht wird, ist es einfach, durch Aufrufen der
gist
Methode auf die seltenen Zahlen hinzuweisen .Verwendung:
quelle