Vertraute Zahlen
Sei x
eine ganze Zahl einer beliebigen Basis, also D
ein Array ihrer Ziffern. x
ist eine vertrauliche Zahl, wenn für alle n
zwischen 1
und die Länge von D
:
D[n+1] = D[n] + D[n-1] + ... + D[1] + n
Nehmen 349
wir zum Beispiel die Zahl in der Basis 10. Wenn wir die Indizes für diese Zahl beschriften, haben wir Folgendes.
Index Digit
----- -----
1 3
2 4
3 9
Ausgehend von der ersten Ziffer 1 + 3 = 4
ergibt sich die nächste Ziffer. Dann haben wir mit der zweiten Ziffer 3 + 4 + 2 = 9
die nächste Ziffer. Somit ist diese Nummer eine Vertrauensperson.
Berechnen Sie bei einer Ganzzahl mit einer Basis zwischen 1 und 62 alle Vertrauenspersonen für diese Basis und geben Sie eine durch Zeilenumbrüche getrennte Liste aus. Sie können davon ausgehen, dass es für eine bestimmte Basis eine begrenzte Anzahl von vertraulichen Zahlen gibt.
Verwenden Sie für Ziffern größer als 9 die Buchstaben A-Z
und für Ziffern größer als Z
die Buchstaben a-z
. Sie müssen sich keine Gedanken mehr über Ziffern machen z
.
Sie müssen nicht in einer bestimmten Reihenfolge ausgegeben werden.
Beispiel Input:
16
Beispielausgabe:
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
12
23
34
45
56
67
78
89
9A
AB
BC
CD
DE
EF
125
237
349
45B
56D
67F
125B
237F
Dies ist Codegolf, also gewinnt der kürzeste Code. Viel Glück!
(Vielen Dank an Zach, der bei der Formatierung geholfen und auf einige Probleme hingewiesen hat.)
CD
nicht in der Liste? Da alle anderen Kombinationen, bei denen die zweite Ziffer eine mehr als die erste Ziffer ist, aufgelistet sind, verstehe ich nicht, warumCD
sie nicht qualifiziert sind.Antworten:
Pyth, 38 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
Python 2, 104 Bytes
Hierbei wird die folgende Beobachtung verwendet: In einer vertrauten Zahl
i
folgt die Ziffer2*i+1
, außeri+1
für die zweite Ziffer. Indem wir alle möglichen ersten Ziffern ausprobieren und weitere Ziffern hinzufügen, bis sie zu groß werden, können wir alle vertrauten Zahlen generieren.Wir berechnen das der Zahl entsprechende Zeichen
i
alschr(48+i+(i>9)*7+i/36*6)
, wodurch es für die Intervalle in die Zahl, den Großbuchstaben oder den Großbuchstabenbereich verschoben wird0-9, 10-35, 36-61
.Dann erhöhen wir
i
durchi+=i+1
mit zwei Anpassungen. Um dies stattdesseni+=1
nach der ersten Ziffer zu machen, fügen wir diei
Bedingung hinzu ,s
dass mehr als1
Zeichen vorhanden sind. Außerdem müssen wir vermeiden, dass Zahlen, die mit 0 beginnen, gedruckt werden, und dies gleichzeitig zulassen0
. Dazu machen wir einen Hack, der bewirkti=0
, dass die Bedingungi<n
in der nächsten Schleife fehlschlägt, indem er hinzugefügtn
wird. Dies geschieht durch Ersetzen1
durchn**0**i
, welches Recht mitn**(0**i)
welchem gleichn**(i==0)
oder gleichgesetzt wirdn if i==0 else 1
.quelle
Python 3,
201200 BytesErläuterung
Die wichtigste Erkenntnis hier ist, dass Sie bei einer gegebenen Sequenz
x
(wie zum Beispiel[1,2,5]
) den nächsten Term in der Sequenz mit erhalten könnensum(x)+len(x)
, der11
in diesem Fall (B
) ergibt . Überprüfen Sie, ob dies kleiner ist alsn
und fügen Sie die erweiterte Sequenz zur Liste aller solcher Sequenzen hinzu (durch alle einzelnen Ziffern gesät).So ordne ich Sequenzelemente Zeichen zu. Diese werden
''.join
zusammengefügt und dann durch Zeilenumbrüche getrennt gedruckt.quelle
print('\n'.join(''.join(map(lambda x:[str(x),chr(x+55),chr(x+61)][(x>9)+(x>35)],x))for x in X))
. Derzeit sind es 201 Bytes. nicht 200.GS2, 44 Bytes
Es erzeugt die Zahlen in einer anderen Reihenfolge, aber die Problembeschreibung gibt nichts an, also mache ich es! Hier ist der Ausgang für den Eingang von 16.
Hier sind die mnemonischen Entsprechungen für die Bytes:
quelle
CJam,
464240 BytesProbieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
Am Ende sind noch 0 und ein paar leere Arrays auf dem Stapel, sodass der Interpreter druckt
0
.quelle
Gawk, 111 Bytes
Für jede Startziffer von
1
bisbase-1
werden die nächsten Ziffern berechnet, und obwohl diese niedriger als die Basis sind, haben wir immer noch eine vertraute Zahl. Berechnung der nächsten Ziffer beim Drucken. Endlich druckt0
.quelle