Entrada:
una lista / matriz de enteros para los que cada elemento está en el rango de 2-36
.
Salida:
La suma de los enteros (como base 10), donde cada entero siguiente está en la base del valor anterior (comenzando con una base regular 10).
Ejemplo:
Digamos que tenemos una entrada como esta: [4, 12, 34, 20, 14, 6, 25, 13, 33]
Luego tenemos una suma como esta:
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
Explicación de la base matemática:
consideré asumir que todos saben cómo funciona la base, pero de todos modos daré un breve ejemplo de cómo funciona, por si acaso. Tomemos34 in base-12
por ejemplo, ¿cómo llegamos40
?
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
Aquí hay quizás una calculadora útil.
Reglas de desafío:
- El tamaño de la matriz estará en un rango razonable (como
1-100
/ ver casos de prueba). - Los casos de prueba nunca contendrán números enteros cuyo valor actual no sea válido para su base anterior (es decir, nunca tendrá algo como
19 in base-6
o6 in base-6
, porque base-6 solo contiene los dígitos0-5
). - Puede tomar la entrada de la forma que desee. Puede ser como una matriz de int, como una cadena separada por comas / espacios, etc. Su llamada. (También se le permite tomar la matriz int invertida, lo que podría ser útil para los lenguajes de programación basados en pila).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los idiomas de código de golf lo desanimen a publicar respuestas con idiomas que no sean de golf. Trate de encontrar una respuesta lo más breve posible para cualquier lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados, programas completos. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
[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
fuente
fuente
Respuestas:
05AB1E ,
765 bytesUtiliza la codificación 05AB1E .
Se guardó 1 byte usando el nuevo incorporado
š
como lo sugiere Kevin CruijssenExplicación
La lista de entrada se invierte, según lo permitido por la especificación de desafío.
Pruébalo en línea!
Conjunto de pruebas modificado
fuente
š
lugar de¸ì
. Además, su explicación dice " agregar " en lugar de " anteponer ". :)Python 3, 40 bytes
Las pruebas están en ideone
map(str, a)
crea un generador,G
que llamastr
a cada valora
, la conversión a cadenasmap(int, G, [10]+a)
crea un generador que llamaint(g, v)
a paresG
y[10]+a
int(g, v)
convierte la cadenag
de la base enterav
(siv
está dentro[2,36]
yg
es válida)sum
hace lo que dice en la latafuente
Python 2, 48 bytes
Las pruebas están en ideone
zip(a,[10]+a)
atraviesa pares de los valores dea
, y el valor anterior o10
para el primeroel
backticks
en elint
convert llamadax
a una cadena,s
int(s, y)
convierte la cadenas
de la base de número enteroy
(siy
es en[2,36]
ys
es válido)sum
hace lo que dice en la latafuente
Perl,
353433 bytesIncluye +2 para
-ap
Ejecute con la lista de números en STDIN:
basemix.pl
:He estado esperando por años la oportunidad de usar este abuso ...
Explicación
Los números de entrada pueden tener como máximo 2 dígitos. Un número
xy
en baseb
es simplementeb*x+y
. Voy a usar la expresión regular/.$/
para que el primer dígito termine$`
y el último dígito$&
, así que la contribución a la suma es$&+$b*$`
.Abuso del hecho de que
for
no localiza correctamente las variables regex (como por ejemplomap
ywhile
do), por lo que los resultados de una coincidencia en el bucle anterior todavía están disponibles en el bucle actual. Entonces, si tengo cuidado con el orden en el que hago las operaciones, la base está disponible"$`$&"
, excepto por el primer bucle donde necesito que la base sea 10. Entonces uso"$`$& 10"
en su lugarLa forma en que funciona el primero también
$&
es un abuso, ya que en realidad se cambia/.$/
mientras ya está en la pila esperando ser agregado.El abuso final es el
}{
final que cambia el bucle implícito-p
dea
Lo que significa
$_
que no estará definido en la impresión, pero aún agrega$\
en el que acumulé la suma. También es un truco de golf estándar para obtener el procesamiento posterior al bucle.fuente
PHP,
5351 bytesItera sobre la entrada, convirtiendo cada entrada a la variante de cadena. Luego toma el valor entero usando el número anterior como base. Para el primer número, no se establecerá la base, PHP comenzará con 10 (inferido del formato de número).
Ejecutar así (
-d
agregado solo por estética):Ajustes
fuente
Jalea , 7 bytes
Pruébalo en línea!
fuente
ṖḌ
conF
Java, 86 bytes
Prueba y sin golf
fuente
JavaScript ES6,
454241 BytesConventiently
parseInt(x,0) === parseInt(x,10)
.editar : guardado 1 byte gracias a @ETHproductions
fuente
&&s
con|s
.const g
con solog
Puro golpe, 38
La lista de entrada se da en la línea de comandos.
for i;
itera automáticamente sobre los parámetros de entrada (equivalente afor i in $@;
).Ideona
fuente
Java 7,
1098986 bytesGolfé 20 bytes gracias a @cliffroot (de los cuales 12 por un estúpido error que cometí).
Ungolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
p
? La suma se puede calcular así, ¿no es asír+=r.valueOf(""+a[i],a[i-1])
?+""
lugar devalueOf
y elimina variables innecesarias -int c(int[]a){for(Integer i=1;i<a.length;a[0]+=i.valueOf(a[i]+"",a[++i-2]));return a[0];}
10
ep
invertido. Me di cuenta del error y lo arreglé, pero como la parte String ahora es regular base-10, de hecho, puedo eliminar eltoString
y simplemente usarlo+""
. Gracias, y también gracias por jugar al golf, -20 bytes. Realmente tengo que responder que no puedes jugar más al golf (¡no es que no lo aprecie!En realidad, 12 bytes
Pruébalo en línea!
Explicación:
fuente
CJam , 15 bytes
Pruébalo en línea!
Explicación
fuente
Haskell,
6559 bytesPruébalo en Ideone .
fuente
Matlab, 68 bytes
No es una solución muy creativa, pero aquí está:
Pruebas:
fuente
function s=r(x);...
JavaScript (ES6),
544840 bytesUsé un enfoque recursivo.
Guardado 6 bytes, gracias a Lmis!
¡Ahorré 8 bytes más, gracias a Neil!
fuente
parseInt(a,b)
lugar de,parseInt(a[0],b)
ya queparseInt
convierte el primer argumento a cadena e ignora todo lo que comienza en el primer carácter no válido (es decir, ',').a[0]?stuff():0
lugar dea.length&&stuff()
f=([b,...a],c)=>b?parseInt(b,c)+f(a,b):0
slice
funciónPerl 6 ,
5250 bytesExplicación:
fuente
Python 2, 52 bytes
Pruébalo en Ideone .
fuente
Julia, 63 bytes
Analiza cada número (excepto el primero) tomando el elemento anterior como base y sumas. Agrega el primer elemento al final
fuente
Ruby, 52 bytes
sin golf
uso
fuente
Scala, 67 bytes
Explicación:
fuente
Mathematica, 59 bytes
Desearía que los nombres de las funciones de Mathematica fueran más cortos. Pero por lo demás estoy feliz.
Por ejemplo,
rendimientos
235
.{##,0}
es una lista de los argumentos de entrada con 0 agregado (que representa los números);{10,##}
es una lista de los argumentos de entrada con 10 antepuestos (que representan las bases). Ese par de listas esTranspose
d para asociar cada una con un número con su base, yFromDigits
(¡sí!) Convierte cada par numeral-base en un entero de base 10, cuyos resultados se suman porTr
.fuente
Lisp común, 83
Detalles
La
loop
construcción acepta construcciones de iteración "v luego w" , donde v es una expresión que se evaluará la primera vez que se calcula la variable de iteración, y w es la expresión que se evaluará para las iteraciones sucesivas. Las declaraciones se evalúan una tras otra, porbase
lo que primero se "10", luego se itera el elemento anteriorstring
de la listalist
. Lasum
palabra clave calcula una suma: el entero leído desde lastring
base b , donde b es el entero analizado desde labase
cadena, en la base 10.#1=
y#1#
son anotaciones para definir y usar variables de lector: el primero afecta una expresión s a una variable, el otro reemplaza la referencia por el mismo objeto. Esto guarda algunos caracteres para nombres largos.Ejemplo
fuente
Japt
-x
, 7 bytesIntentalo
fuente