Eingabe:
Eine Liste / ein Array von Ganzzahlen, für die sich jedes Element im Bereich von befindet 2-36
.
Ausgabe:
Die Summe der Ganzzahlen (als Basis 10), wobei sich jede nächste Ganzzahl in der Basis des vorherigen Werts befindet (beginnend mit einer regulären Basis 10).
Beispiel:
Nehmen wir an, wir haben eine Eingabe wie diese: [4, 12, 34, 20, 14, 6, 25, 13, 33]
Dann haben wir eine Summe wie diese:
4 (4 in base-10) +
6 (12 in base-4 ) +
40 (34 in base-12) +
68 (20 in base-34) +
24 (14 in base-20) +
6 (6 in base-14) +
17 (25 in base-6 ) +
28 (13 in base-26) +
42 (33 in base-13)
= 235
Erklärung der mathematischen Basis:
Ich dachte darüber nach, dass jeder weiß, wie die Basis funktioniert, aber ich werde trotzdem ein kurzes Beispiel dafür geben, wie es funktioniert, nur für den Fall. Nehmen34 in base-12
wir zum Beispiel, wie sind wir dazu gekommen40
?
1-34 in regular base-10:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
So, from 1 to 34 is 34 steps in base-10
1-34 in base-12:
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 2B, 30, 31, 32, 33, 34
So, from 1 to 34 is 40 steps in base-12
Hier ist vielleicht ein nützlicher Rechner.
Herausforderungsregeln:
- Die Array-Größe wird in einem angemessenen Bereich liegen (
1-100
siehe Testfälle). - Die Testfälle werden niemals ganze Zahlen enthalten, deren aktueller Wert für die vorherige Basis ungültig ist (dh Sie werden niemals so etwas wie
19 in base-6
oder haben6 in base-6
, weil base-6 nur die Ziffern enthält0-5
). - Sie können die Eingabe nach Belieben übernehmen. Kann als Int-Array, als durch Komma / Leerzeichen getrennte Zeichenfolge usw. sein. Ihr Aufruf. (Sie können das Int-Array auch umgekehrt verwenden, was für Stack-basierte Programmiersprachen nützlich sein kann.)
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit anderen Sprachen als Golf zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und vollständige Programme verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
[4, 12, 34, 20, 14, 6, 25, 13, 33] -> 235
4+ 6+ 40+ 68+ 24+ 6+ 17+ 28+ 42
[5, 14, 2, 11, 30, 18] -> 90
5+ 9+ 2+ 3+ 33+ 38
[12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 12, 2, 11, 3, 10, 2, 10] -> 98
12+ 13+ 11+ 9+ 8+ 7+ 6+ 5+ 4+ 3+ 5+ 2+ 3+ 3+ 3+ 2+ 2
[36, 36] -> 150
36+ 114
quelle
Antworten:
05AB1E ,
765 BytesVerwendet die 05AB1E- Codierung.
1 Byte mit dem
š
von Kevin Cruijssen vorgeschlagenen neuen integrierten Speicherplatz eingespartErläuterung
Die Eingabeliste wird umgekehrt verwendet, wie es die Challenge-Spezifikation zulässt.
Probieren Sie es online!
Geänderte Testsuite
quelle
š
statt 5 Bytes sein¸ì
. Außerdem heißt es in Ihrer Erklärung " anhängen " statt " voranstellen ". :)Python 3, 40 Bytes
Tests sind bei ideone
map(str, a)
einen Generator erzeugt,G
, dass Anrufestr
auf jedem Wert ina
, in Strings Umwandlungmap(int, G, [10]+a)
erzeugt , die einen Generator Anrufeint(g, v)
für die Paare überG
und[10]+a
int(g, v)
wandeln die Zeichenfolgeg
aus der ganzzahligen Basisv
(wennv
in[2,36]
undg
gültig ist)sum
tut , was es auf dem Zinn sagtquelle
Python 2, 48 Bytes
Tests sind bei ideone
zip(a,[10]+a)
Durchsucht Paare der Werte ina
und konvertiert der vorherige Wert oder10
beim erstender
backticks
imint
Aufruf enthaltenen Werte inx
einen String,s
int(s, y)
konvertiert den Strings
von der Ganzzahlbasisy
(wenny
in[2,36]
unds
gültig) undsum
macht das, was er sagtquelle
Perl,
353433 BytesBeinhaltet +2 für
-ap
Führen Sie mit der Liste der Zahlen auf STDIN:
basemix.pl
:Ich habe ewig auf eine Chance gewartet, diesen Missbrauch zu nutzen ...
Erläuterung
Die Eingabenummern können maximal 2 Stellen haben. Eine Zahl
xy
in der Basisb
ist einfachb*x+y
. Ich werde den regulären Ausdruck verwenden,/.$/
so dass die erste Ziffer in$`
und die letzte Ziffer in endet$&
, so dass der Beitrag zur Summe ist$&+$b*$`
.Ich missbrauche die Tatsache, dass
for
die regulären Ausdrücke (wie zum Beispielmap
undwhile
) nicht richtig lokalisiert werden, sodass die Ergebnisse einer Übereinstimmung in der vorherigen Schleife weiterhin in der aktuellen Schleife verfügbar sind. Wenn ich also vorsichtig mit der Reihenfolge bin, in der ich die Operationen durchführe, ist die Basis als verfügbar"$`$&"
, mit Ausnahme der allerersten Schleife, in der die Basis 10 sein muss. Also verwende ich"$`$& 10"
stattdessenDie Art und Weise, wie das Erste
$&
funktioniert, ist ebenfalls ein Missbrauch, da es tatsächlich geändert wird,/.$/
während es bereits auf dem Stapel ist, der darauf wartet, hinzugefügt zu werden.Der endgültige Missbrauch ist die
}{
am Ende , die die Schleife ändert implizit-p
auszu
Welches Mittel
$_
im Ausdruck undefiniert ist, addiert sich dennoch,$\
in dem ich die Summe akkumuliert habe. Es ist auch ein Standard-Golf-Trick, um die Post-Loop-Verarbeitung zu erhaltenquelle
PHP,
5351 BytesDurchläuft die Eingabe und konvertiert jede Eingabe in eine Zeichenfolgenvariante. Nimmt dann den ganzzahligen Wert unter Verwendung der vorherigen Zahl als Basis. Für die erste Zahl wird die Basis nicht gesetzt, PHP startet dann mit 10 (abgeleitet aus dem Zahlenformat).
Laufen Sie wie folgt (
-d
nur aus ästhetischen Gründen hinzugefügt):Optimierungen
quelle
Gelee , 7 Bytes
Probieren Sie es online!
quelle
ṖḌ
mitF
Java, 86 Bytes
Testen und ungolfed
quelle
JavaScript ES6,
454241 BytesGünstig
parseInt(x,0) === parseInt(x,10)
.edit : 1 Byte dank @ETHproductions gespeichert
quelle
&&s
mit|s
.const g
mit nur ersetzeng
Pure Bash, 38
Die Eingabeliste wird in der Befehlszeile angezeigt.
for i;
iteriert automatisch über die Eingabeparameter (entsprichtfor i in $@;
).Ideone.
quelle
Java 7,
1098986 Bytes20 Bytes dank @cliffroot (von denen 12 wegen eines blöden Fehlers, den ich selbst gemacht habe).
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
p
? Die Summe kann so berechnet werden, nicht wahrr+=r.valueOf(""+a[i],a[i-1])
?+""
anstelle vonvalueOf
und entfernte unnötige Variablen -int c(int[]a){for(Integer i=1;i<a.length;a[0]+=i.valueOf(a[i]+"",a[++i-2]));return a[0];}
10
undp
umgekehrt. Ich habe den Fehler erkannt und behoben, aber da der String-Teil jetzt die reguläre Basis 10 ist, kann ich ihn in der Tat entfernentoString
und einfach verwenden+""
. Danke, und danke auch für das Golfen der anderen Dinge, -20 Bytes. Ich muss dir wirklich eine Antwort geben, die du nicht mehr kannst (nicht, dass ich es nicht schätze! Je kürzer, desto besser natürlich - beim Code-Golfen ist das; P)Eigentlich 12 Bytes
Probieren Sie es online!
Erläuterung:
quelle
CJam , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
Haskell,
6559 BytesTeste es auf Ideone .
quelle
Matlab, 68 Bytes
Keine sehr kreative Lösung, aber hier ist es:
Tests:
quelle
function s=r(x);...
JavaScript (ES6),
544840 ByteIch habe einen rekursiven Ansatz verwendet.
6 Bytes gespart, dank Lmis!
8 weitere Bytes gespart, danke an Neil!
quelle
parseInt(a,b)
anstattparseInt(a[0],b)
daparseInt
wandelt das erste Argument String und ignoriert alles beim ersten ungültigen Zeichen beginnt (dh ‚‘).a[0]?stuff():0
anstelle vona.length&&stuff()
f=([b,...a],c)=>b?parseInt(b,c)+f(a,b):0
slice
FunktionPerl 6 ,
5250 BytesErläuterung:
quelle
Python 2, 52 Bytes
Teste es auf Ideone .
quelle
Julia, 63 Bytes
Analysiert jede Zahl (mit Ausnahme der ersten), wobei das vorherige Element als Basis und Summe verwendet wird. Fügt das erste Element am Ende hinzu
quelle
Ruby, 52 Bytes
ungolfed
Verwendung
quelle
Scala, 67 Bytes
Erläuterung:
quelle
Mathematica, 59 Bytes
Ich wünschte, die Funktionsnamen von Mathematica wären kürzer. Aber sonst bin ich glücklich.
Beispielsweise,
Ausbeuten
235
.{##,0}
ist eine Liste der Eingabeargumente mit angehängter 0 (die die Ziffern darstellt);{10,##}
ist eine Liste der Eingabeargumente mit 10 vorangestellten (die Basen darstellenden) Argumenten. Dieses Listenpaar istTranspose
d, um jeder Zahl ihre BasisFromDigits
zuzuordnen , und (yay!) Wandelt jedes Zahlen-Basis-Paar in eine ganze Zahl zur Basis 10 um, deren Ergebnisse mit summiert werdenTr
.quelle
Common Lisp, 83
Einzelheiten
Das
loop
Konstrukt akzeptiert "v dann w" -Iterationskonstrukte, wobei v ein Ausdruck ist, der beim ersten Berechnen der Iterationsvariablen ausgewertet wird, und w der Ausdruck ist, der für die aufeinanderfolgenden Iterationen ausgewertet wird. Deklarationen werden nacheinander ausgewertet, alsobase
zuerst "10", dann wird das vorherige Elementstring
der Listelist
iteriert. Dassum
Schlüsselwort berechnet eine Summe: die ganze Zahl von zu lesenstring
mit einer Base b , wobei b die ganze Zahl aus dem geparsten istbase
string, in Basis 10#1=
und#1#
die zu definierenden und zu verwendenden Notationen sind reader Variablen: der erste wirkt sich auf einen s-Ausdruck auf eine Variable aus, der andere ersetzt die Referenz durch dasselbe Objekt. Dadurch werden einige Zeichen für lange Namen gespeichert.Beispiel
quelle
Japt
-x
, 7 BytesVersuch es
quelle