Entrada:
Un entero
Salida:
Suma de la entrada en sí + la longitud de la entrada + cada dígito individual de la entrada.
nr + nr-length + {sum of digits} = output
Ejemplos:
Entrada: 99
Salida: 99
(nr) + 2
(nr-length) + (9 + 9)
(dígitos) →119
Entrada: 123
Salida: 123 + 3 + (1 + 2 + 3)
→132
Reglas de desafío:
La entrada también puede contener entrada negativa, que se resuelve especial. El
-
signo / menos también es+1
para la longitud y es parte del primerodigit
.
Por ejemplo:Entrada:
-123
Salida:-123 + 4 + (-1 + 2 + 3)
→-115
- Puede suponer que la entrada o la salida alguna vez estarán fuera del rango de un entero (32 bits).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de código. 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 y programas completos de tipo retorno. 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:
87901 → 87931
123 → 132
99 → 119
5 → 11
1 → 3
0 → 1
-3 → -4
-123 → -115
-900 → -905
-87901 → -87886
Semi-relacionado: Cuenta de suma de todos los dígitos
code-golf
number
arithmetic
integer
Kevin Cruijssen
fuente
fuente
-123
la cadena de suma debería ser en(-1 + 1 + 2 + 3)
lugar de(-1 + 2 + 3)
, ¿verdad?-1 + 2 + 3
. Para este desafío, elijo fusionar el-
signo / menos con el primer dígito como un dígito negativo para hacerlo un poco más interesante.Respuestas:
05AB1E,
2820188 bytesExplicación
Pruébalo en línea
Guardado 10 bytes gracias a @Adnan
fuente
ÐgsS'+ýO
.Python 2, 39 bytes
Banco de pruebas
Usando el mismo truco eval que en mi respuesta Pyth .
fuente
eval
yjoin
el primer dígito negativo para la entrada negativa? Yo esperaría-123
a convertirse en algo así como- + 1 + 2 + 3
en escrito, pero al parecer no lo es .. (o es, y se fusionó de forma automática- + 1
a-1
como segundo paso?)-123
convierte"-+1+2+3"
después de unirte, lo que produce el resultado correcto cuando lo haceseval
. Pruebe,eval("-+1")
por ejemplo, lo que resulta en-1
.- + 1
->- 1
. El operador unario más existe, por lo que- + 1
es esencialmente el mismo que-(+(1))
.+a
es lo mismo quea
para números.Pyth,
1110 bytes¡Gracias a @LeakyNun por un byte!
Banco de pruebas
Explicación
fuente
CJam, 18
Pruébalo en línea
Explicación:
fuente
Brachylog ,
3532 bytesExplicación
fuente
XSLT 1.0 (sin EXSLT), 673 bytes
Ligeramente inflado:
Ejecutar usando xsltproc:
Sí,
ild.xsl
se pasa dos veces: una vez como documento XSLT y luego como documento XML para transformar. Un documento de entrada debe estar presente porque un procesador XSLT generalmente requiere uno para comenzar a ejecutarse. (XSLT está diseñado para definir una transformación de un documento de entrada a un documento de salida; ejecutar una transformación únicamente con parámetros de línea de comandos como lo he hecho aquí es atípico). Para este programa, cualquier documento XML bien formado será suficiente como entrada. y, siendo XSLT una aplicación de XML, cualquier transformación XSLT bien formada es, por definición, un documento XML bien formado.fuente
name="i" select="..."
ejemplo<with-param name="i"select="substring($i,$s+2)"/>
?<p id=hello>
etc. supongo que sixsltproc
se preocupa por espacios en blanco que no va a dejar sin comillas cosas por.MATL, 20 bytes
Pruébalo en línea
Todos los casos de prueba
Explicación
fuente
Clojure, 102 bytes
Función anónima que construye una cadena que se parece a
(+ -123 4 -1 2 3 )
y la evalúa. Todo es bastante detallado como es, construya una cadena a partir del número, su longitud y luego asigne cada símbolo de la representación de cadena del número, excepto menos a sí mismo más espacio y menos sigue siendo el mismoPuede verlo ejecutándose aquí: https://ideone.com/FG4lsB
fuente
Dyalog APL ,
191716 bytesToma una cuerda y regresa
≢
longitud+
más#
en la⍎
evaluación del espacio de nombres raíz de'\d'⎕R'&+'
dígitos regex anexar con un signo más,
seguido de⊢
la cadena no modificada–3 gracias a ngn
fuente
Matlab,
7667 bytes9 bytes guardados gracias a @Luis Mendo
Explicación:
fuente
sum(t+1)+n
es más corto quesum([n numel(t) t])
cc, 57 bytes
Explicado:
¡Esto fue mucho más complicado de lo que esperaba! Buen reto :)
fuente
10~
por unoA~
!Bash + coreutils, 36 bytes
Explicación:
En sed,
\B
también coincide entre dos caracteres consecutivos sin palabras, por lo que para un número negativo coincide entre '^' y '-'. Nota la0$1
truco necesario para\B
dar0-1+2+3
, por ejemplo.Ejecute el ejemplo: 'input.txt' contiene todos los casos de prueba en la declaración de la pregunta
Salida:
fuente
$()
. Hay dos formas alternativas de hacerlo con backticks, pero ambas dan una solución de 36 bytes al final:sed 's:\B:+:g'<<<0$1
ysed s:\\\B:+:g<<<0$1
.PowerShell v4, 48 bytes
Esto debería funcionar en v2 +, pero solo lo probé en v4.
Toma entrada
$n
. Crea una nueva matriz con el,
operador formado por$n
y.length
cuándo$n
se convierte en una cadena. Concatena con eso la cadena$n
emitida como una matriz de caracteres. Luego, toda esa matriz se-join
edita+
antes de ser canalizada aiex
(similar aeval
). El resultado se deja en la tubería y la salida es implícita.Por ejemplo, para la entrada
-123
, la matriz se vería así(-123, 4, -, 1, 2, 3)
, y la cadena después de que la-join
vería así-123+4+-+1+2+3
. EntoncesInvoke-Expression
sucede, y el resultado es el-115
esperado.fuente
Factorizar con
load-all
175 bytesBueno, esto no es muy corto. El manejo especial de unario menos es realmente molesto; Creo que podría hacerlo mejor y lo haré, tal vez.
Usando esta expresión regular de sustitución:
Podemos convertir los casos de prueba del OP en un conjunto de pruebas de Factor.
fuente
C #, 118 bytes
fuente
1+ ++i
es completamente ridículo imos[i]<46
para comprobar si hay menos++i+1
?SpecBAS - 147 bytes
Construye una cadena que luego se ejecuta. Desafortunadamente
EXECUTE
no funciona con la?
taquigrafía paraPRINT
, peroTEXT
salvó 1 personaje.fuente
C #, 106 bytes
Le gané a Java mi byte, mi vida está completa
Ungolfed (un poco)
fuente
(n)=>{....
por una lambda anóniman=>n+(n+"").Length+(n+"").Select((k,j)=>int.Parse((n+"")[k<48?1:j]+"")*(k<48?-2:1)).Sum()
aunque tendrás que agregar +18,using System.Linq;
lo que también olvidaste en tu respuesta actual.Java 8,
1741361221071059378 bytes-14 bytes gracias a @LeakyNun .
-15 bytes gracias a @cliffroot .
Explicación:
Pruébalo en línea.
fuente
int c(int i){char[]c=(i+"").toCharArray();int x=i,l=c.length,s=i+l,j=-1;for(;++j<l;x=1)s+=x>0?c[j]-38:38-c[++j];return s;}
int c(int i){char[]c=(i+"").toCharArray();for(int x=i,j=-1;++j<c.length;i+=1+Integer.parseInt(x<0?"-"+--c[j+=x=1]:c[j]+""));return i;}
finalmente se sintió como jugar golf en Java @LeakyNun ¿funciona tu variante? Al principio da respuestas incorrectas y luego se bloquea.0
.38
a48
.int c(int i){byte[]c=(i+"").getBytes();for(int j=-1;++j<c.length;i+=(c[j]<48?50-c[++j]:c[j]-47));return i;}
yayPerl 6 - 30 bytes
Tan literal como se pone
Úselo como una función anónima
fuente
JavaScript (ES6), 38 bytes
Utiliza el viejo truco de unir y evaluar. Ahorre 4 bytes si puedo insistir en la entrada de cadena:
fuente
C ++, 255 bytes
fuente
Perl 5-37 bytes
La entrada está en $ _
fuente
Javascript (usando una biblioteca externa) (45 bytes)
Usando una biblioteca que escribí para traer LINQ a Javascript, pude escribir lo siguiente:
fuente
C,
13211611380La función
f()
toma la entrada como una cadena y devuelve el resultado como un entero. Versión completa del programa (113 bytes):Requiere un argumento.
fuente
Perl, 27 bytes
Código de 22 bytes + 5 para
-paF
.Explicación
Utiliza la
-a
opción de división automática con un delimitador vacío (-F
) que crea una matriz de los dígitos pasados. Utiliza la variable mágica$"
que controla qué carácter se usa para unir una matriz cuando se interpola en una cadena (usamos"+"
aquí) y el hecho de que una lista usado en contexto escalar devolverá la longitud de la lista (el número de dígitos).Uso
Perl, 27 bytes
Código de 22 bytes + 5 para
-paF
.Solución alternativa, que es mucho más legible para no más bytes. ¡Prefiero el otro ya que parece más críptico!
fuente
cc, 56 bytes
No más corto que el anterior de Joe, pero una implementación algo diferente (y una que toma números negativos como entrada frente a un comando de resta). Probablemente se pueda jugar más al golf, pero el almuerzo solo dura tanto tiempo.
fuente
R, 108 bytes
Un poco tarde para la fiesta nuevamente, pero aquí va:
Para dividir generalmente los dígitos de cualquier número (por ejemplo, para sumarlos), R requiere que primero se convierta en una cadena y luego se divida la cadena en un vector de cadena. Para resumir los elementos, el vector de cadena se debe convertir a numérico o entero. Esto, junto con la excepción con la suma de los dígitos de un número negativo, consume muchos bytes.
La excepción se puede jugar un poco (a 96 bytes) si se permiten mensajes de advertencia.
En este caso, el vector de cadena se convierte a entero directamente usando
as.integer
. Sin embargo, para los números negativos el primer elemento en el vector será un signo menos:"-"
. Esto causa algunos problemas, por ejemplo:as.numeric(c("-",1,2,3))
volveráNA 1 2 3
y aparecerá un mensaje de advertencia. Para evitar esto, elimine el NA y luego multiplique el primer elemento-1
antes de tomar la suma.fuente
RProgN, 30 Bytes
Explicacion
Pruébalo en línea!
fuente
Perl 5 , 22 + 1 (-p) = 23 bytes
Pruébalo en línea!
fuente
AWK ,
64 6361 bytesPruébalo en línea!
El enlace TIO tiene 6 bytes adicionales
s=j=0;
para permitir la entrada de varias líneas. Este es el método más corto que se me ocurrió. Tengo curiosidad si se puede hacer más cortoAWK
.Guardado 2 bytes, gracias Kevin
fuente
$0=n+s+$0
puede jugar golf$0+=n+s
(-2 bytes)?