Entrée:
Une liste / tableau d'entiers pour lesquels chaque élément est dans la plage de 2-36
.
Sortie:
La somme des entiers (en base 10), où chaque entier suivant est dans la base de la valeur précédente (en commençant par une base régulière 10).
Exemple:
Disons que nous avons une entrée comme celle-ci: [4, 12, 34, 20, 14, 6, 25, 13, 33]
Ensuite, nous avons une somme comme celle-ci:
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
Base mathématique expliquée:
J'ai considéré que tout le monde sait comment fonctionne la base, mais je vais quand même donner un bref exemple de la façon dont cela fonctionne, juste au cas où. Prenons l'34 in base-12
exemple, comment avons-nous obtenu40
?
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
Voici peut-être une calculatrice utile.
Règles du défi:
- La taille du tableau sera dans une plage raisonnable (comme
1-100
/ voir les cas de test). - Les cas de test ne contiendront jamais d'entiers dont la valeur actuelle n'est pas valide pour sa base précédente (c'est-à-dire que vous n'aurez jamais quelque chose comme
19 in base-6
ou6 in base-6
, car la base-6 ne contient que les chiffres0-5
). - Vous pouvez prendre l'entrée comme vous le souhaitez. Peut être un tableau int, une chaîne séparée par des virgules / espaces, etc. Votre appel. (Vous pouvez également inverser l'int-array, ce qui pourrait être utile pour les langages de programmation basés sur la pile.)
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf. Essayez de trouver une réponse aussi courte que possible pour n'importe quel langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés, des programmes complets. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test:
[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
code-golf
math
base-conversion
Kevin Cruijssen
la source
la source
Réponses:
05AB1E ,
765 octetsUtilise l' encodage 05AB1E .
1 octet enregistré en utilisant le nouveau intégré
š
comme suggéré par Kevin CruijssenExplication
La liste d'entrée est inversée, comme le permet la spécification de défi.
Essayez-le en ligne!
Suite de tests modifiée
la source
š
au lieu de¸ì
. En outre, votre explication précise « append » au lieu de « précédez ». :)Python 3, 40 octets
Les tests sont à l' idéone
map(str, a)
crée un générateur,G
qui appellestr
chaque valeur dansa
, la conversion en chaînesmap(int, G, [10]+a)
crée un générateur qui appelleint(g, v)
des paires à traversG
et[10]+a
int(g, v)
convertit la chaîne àg
partir de la base entièrev
(si ellev
est[2,36]
etg
est valide)sum
fait ce qu'elle dit sur l'étainla source
Python 2, 48 octets
Les tests sont à l' idéone
zip(a,[10]+a)
traverse des paires de valeurs dansa
, et la valeur précédente ou10
pour la première,l' appel
backticks
dans laint
conversionx
en chaîne,s
int(s, y)
convertit la chaîne às
partir de la base entièrey
(si elley
est dans[2,36]
ets
est valide)sum
fait ce qu'elle dit sur l'étainla source
Perl,
353433 octetsComprend +2 pour
-ap
Exécutez avec la liste des numéros sur STDIN:
basemix.pl
:J'attends depuis des lustres une chance d'utiliser cet abus ...
Explication
Les numéros saisis peuvent avoir au plus 2 chiffres. Un nombre
xy
en baseb
est tout simplementb*x+y
. Je vais utiliser l'expression régulière/.$/
pour que le premier chiffre se termine$`
et le dernier chiffre$&
, donc la contribution à la somme est$&+$b*$`
.J'abuse du fait que
for
ne localise pas correctement les variables regex (comme par exemplemap
etwhile
do) donc les résultats d'une correspondance dans la boucle précédente sont toujours disponibles dans la boucle actuelle. Donc, si je fais attention à l'ordre dans lequel je fais les opérations, la base est disponible"$`$&"
, sauf pour la toute première boucle où j'ai besoin que la base soit de 10. Donc j'utilise à la"$`$& 10"
placeLa façon dont le premier
$&
fonctionne est également un abus car il est en fait modifié/.$/
pendant qu'il est déjà sur la pile en attente d'être ajouté.L'abus final est le
}{
à la fin qui change la boucle impliquée par-p
deà
Ce qui
$_
ne sera pas défini dans l'impression, mais cela ajoute$\
quand même que j'ai accumulé la somme. C'est aussi une astuce de golf standard pour obtenir un traitement post-bouclela source
PHP,
5351 octetsItère sur l'entrée, convertissant chaque entrée en variante de chaîne. Prend ensuite la valeur entière en utilisant le nombre précédent comme base. Pour le premier nombre, la base ne sera pas définie, PHP commencera alors avec 10 (déduit du format numérique).
Courez comme ceci (
-d
ajouté pour l'esthétique uniquement):Tweaks
la source
Gelée , 7 octets
Essayez-le en ligne!
la source
ṖḌ
parF
Java, 86 octets
Test et non golfé
la source
JavaScript ES6,
454241 octetsConvenablement
parseInt(x,0) === parseInt(x,10)
.edit : 1 octet enregistré grâce à @ETHproductions
la source
&&s
par|s
.const g
par justeg
Pure bash, 38
La liste d'entrée est donnée sur la ligne de commande.
for i;
itère automatiquement les paramètres d'entrée (équivalent àfor i in $@;
).Ideone.
la source
Java 7,
1098986 octetsGolfé 20 octets grâce à @cliffroot (dont 12 à cause d'une stupide erreur que j'ai faite moi-même).
Code non testé et testé:
Essayez-le ici.
Sortie:
la source
p
? La somme peut être calculée comme ceci, n'est-ce pasr+=r.valueOf(""+a[i],a[i-1])
:?+""
placevalueOf
et supprimé les variables inutiles -int c(int[]a){for(Integer i=1;i<a.length;a[0]+=i.valueOf(a[i]+"",a[++i-2]));return a[0];}
10
etp
inversée. J'ai réalisé l'erreur et l'ai corrigée, mais comme la partie String est désormais régulière en base-10, je peux en effet supprimertoString
et simplement utiliser+""
.. Merci, et aussi merci d'avoir joué au golf, -20 octets. Je dois vraiment faire une réponse que vous ne pouvez pas jouer au golf plus (pas que je ne l'apprécie pas! Le plus court sera le mieux bien sûr - en code-golf c'est-à-dire; P)En fait, 12 octets
Essayez-le en ligne!
Explication:
la source
CJam , 15 octets
Essayez-le en ligne!
Explication
la source
Haskell,
6559 octetsTestez-le sur Ideone .
la source
Matlab, 68 octets
Pas une solution très créative, mais la voici:
Tests:
la source
function s=r(x);...
JavaScript (ES6),
544840 octetsJ'ai utilisé une approche récursive.
6 octets enregistrés grâce à Lmis!
8 octets de plus enregistrés, grâce à Neil!
la source
parseInt(a,b)
au lieu deparseInt(a[0],b)
puisqueparseInt
convertit le premier argument en chaîne et ignore tout en commençant par le premier caractère invalide (c'est-à-dire ',').a[0]?stuff():0
au lieu dea.length&&stuff()
f=([b,...a],c)=>b?parseInt(b,c)+f(a,b):0
slice
fonctionPerl 6 ,
5250 octetsExplication:
la source
Python 2, 52 octets
Testez-le sur Ideone .
la source
Julia, 63 octets
Analyse chaque nombre (sauf le premier) en prenant l'élément précédent comme base et somme. Ajoute le premier élément à la fin
la source
Rubis, 52 octets
non golfé
usage
la source
Scala, 67 octets
Explication:
la source
Mathematica, 59 octets
Je souhaite que les noms de fonction de Mathematica soient plus courts. Mais sinon je suis content.
Par exemple,
rendements
235
.{##,0}
est une liste des arguments d'entrée avec 0 ajouté (représentant les chiffres);{10,##}
est une liste des arguments d'entrée avec 10 préfixés (représentant les bases). Cette paire de listes estTranspose
d à associer chacune avec un chiffre à sa base, etFromDigits
(ouais!) Convertit chaque paire de base numérique en un entier de base 10, dont les résultats sont additionnés parTr
.la source
Lisp commun, 83
Détails
La
loop
construction accepte les constructions d' itération "v puis w" , où v est une expression à évaluer la première fois que la variable d'itération est calculée et w est l'expression à évaluer pour les itérations successives. Les déclarations sont évaluées les unes après les autres, toutbase
comme "10", puis l'élément précédentstring
de la listelist
est itéré. Lesum
mot clé calcule une somme: l'entier lustring
avec la base b , où b est l'entier analysé à partir de labase
chaîne, en base 10.#1=
et#1#
sont des notations pour définir et utiliser des variables de lecteur: le premier affecte une expression s à une variable, l'autre remplace la référence par le même objet. Cela enregistre certains caractères pour les noms longs.Exemple
la source
Japt
-x
, 7 octetsEssayez-le
la source