Hintergrund
Die meisten Leute hier sollten mit mehreren Basissystemen vertraut sein: dezimal, binär, hexadezimal, oktal. ZB im Hexadezimalsystem würde die Zahl 12345 16 darstellen
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
Beachten Sie, dass wir normalerweise nicht erwarten, dass sich die Basis (hier 16
) von Ziffer zu Ziffer ändert.
Eine Verallgemeinerung dieser üblichen Positionssysteme ermöglicht es Ihnen, für jede Ziffer eine andere numerische Basis zu verwenden. Wenn wir beispielsweise zwischen Dezimal- und Binärsystem wechseln würden (beginnend mit der Basis 10 in der niedrigstwertigen Ziffer), würde dies die Zahl 190315 [2,10] darstellen
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
Wir bezeichnen diese Basis als [2,10]
. Die Basis ganz rechts entspricht der niedrigstwertigen Ziffer. Dann gehen Sie durch die Basen (nach links), während Sie durch die Ziffern (nach links) gehen, und wickeln sich um, wenn es mehr Ziffern als Basen gibt.
Weitere Informationen finden Sie in Wikipedia .
Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die anhand einer Liste von Ziffern, D
einer Eingabe- I
und einer Ausgabebasis O
die Ganzzahl, die durch dargestellt wird, D
von Basis I
zu Basis konvertiert O
. Sie können Eingaben über STDIN, ARGV oder Funktionsargumente vornehmen und das Ergebnis entweder zurückgeben oder an STDOUT ausgeben.
Sie können annehmen:
- dass die Zahlen in
I
undO
alle größer sind als1
. - die
I
undO
sind nicht leer. - dass die eingegebene Nummer in der angegebenen Basis gültig ist (dh keine Ziffer größer als die Basis).
D
könnte leer sein (darstellen 0
) oder führende Nullen haben. Ihre Ausgabe sollte keine führenden Nullen enthalten. Insbesondere ein Ergebnis darstellen0
als leere Liste zurückgegeben werden.
Sie dürfen keine integrierten oder Basis-Konvertierungsfunktionen von Drittanbietern verwenden.
Dies ist Codegolf, die kürzeste Antwort (in Bytes) gewinnt.
Beispiele
D I O Result
[1,0,0] [10] [2] [1,1,0,0,1,0,0]
[1,0,0] [2] [10] [4]
[1,9,0,3,1,5] [2,10] [10] [7,6,7,5]
[1,9,0,3,1,5] [2,10] [4,3,2] [2,0,1,1,0,1,3,0,1]
[52,0,0,0,0] [100,7,24,60,60] [10] [3,1,4,4,9,6,0,0]
[0,2,10] [2,4,8,16] [42] [1,0]
[] [123,456] [13] []
[0,0] [123,456] [13] []
quelle
[]
wenn die Eingabe ist[0]
Antworten:
CJam, 45
Endlich fand ich eine gute Verwendung von
j
.Wie es funktioniert
Long ArrayList Block j
Führt den Block aus, der eine Ganzzahl als Parameter verwendet, undLong j
ruft diesen Block im Block rekursiv auf. Außerdem werden die vom Block zurückgegebenen Werte in einem internen Array gespeichert, das vom Array-Parameter initialisiert wird. Der Block wird nicht ausgeführt, wenn sich die Eingabe bereits im Array befindet, und stattdessen wird der Wert im Array zurückgegeben.Wenn ich es also mit einem Array eines leeren Arrays initialisiere, wird das leere Array für die Eingabe 0 zurückgegeben und der Block wird für jede andere Eingabe ausgeführt.
CJam,
4948Eingabe sollte sein
O I D
.Beispiele:
Wie es funktioniert
quelle
_{}?
Trick ist wirklich ordentlich.{}e|
ist das gleiche.j
? :)CJam,
62615957 BytesLiest die Eingabearrays
[O I D]
ab STDIN. Probieren Sie es online aus.Wie es funktioniert
Testfälle
Beachten Sie, dass leere Zeichenfolgen und leere Arrays sind nicht zu unterscheiden CJam, so
[]p
druckt""
.quelle
Python 2 - 318
Ich habe die Reihenfolge der Argumente versehentlich durcheinander gebracht, also musste ich sie umkehren. Ich werde am Slice-Fu arbeiten, damit die Listen später in die andere Richtung funktionieren. Ich habe bereits meine gesamte Mittagspause verschwendet: pFest
quelle
APL, 78
Beispiele:
quelle
{{⍵↓⍨1⍳⍨×⍵}(99⍴⎕)⊤⍵⊥⍨⎕⍴⍨⍴⍵}
Nimmt D als richtiges Argument und fragt dann nach I und O.Python 2 - 122
Sehr unkompliziert, es ist uns nicht gelungen, spezielle Golf-Tricks zu finden.
Ungolfed:
Edit: 116-Byte-Programmversion dank FryAmTheEggman
Diese Version akzeptiert kommagetrennte Eingaben, z
[1,9,0,3,1,5], [2,10], [10]
quelle
k2 -
8374 charFunktion mit einem Argument. Dies war für K viel besser geeignet als für J, weshalb ich J nicht benutze. Es wäre nur eine Ladung Box- / Unbox-Müll, und das will niemand. Dies ist im k2-Dialekt (erfordert möglicherweise einige Anpassungen, um in der Open Source-Implementierung Kona zu funktionieren), aber ich werde dies in k4 ändern, wenn ich es dort kürzer spielen kann.
Ich werde darauf hinweisen, dass ich mich hier für die Wählerisch- keit einsetze und sage, dass eine Artikelliste als solche eingegeben werden muss.
,2
ist eine Liste eines Elements, wobei dieses Element der Skalar ist2
. Oft sind Skalare und Listen mit einem Element austauschbar, aber es gibt eine Logik in diesem Golf, die auf der Annahme von Listenargumenten beruht.Um den Golf zu erklären, werde ich ihn in zwei Teile aufteilen.
F
ist der Golf,L
ist die Hauptschleife, die die Ausgabe berechnet. Der genaue Mechanismus der Schleife besteht darin, dass dieseL
wiederholt auf ihre Argumente angewendet wird, bis das zweite Argument Null ist. Dann wird dieses Ergebnis zurückgegeben. (Dies ist der.[L]/
Teil.)Durch Explosion:
In Aktion:
quelle
Perl 6 , 67 Bytes
Versuch es
Erweitert:
Falls Sie sich nicht sicher sind, was die Dreiecksreduzierung bewirkt:
Wenn ich die Eingänge vertauschen und umgekehrt ausgeben könnte, wären es 47 Bytes.
Versuch es
quelle