Escribir números se encuentra entre los mundos de programación de Hello, a menudo los números 1-10.
¡Quiero escribir muchos números! Muchos, muchos números. ¿Pero cuántos números tengo que escribir?
Tarea
Dada una entrada entera, dar un número como salida que me daría el número de dígitos que estaría en una cadena que contiene todos los números enteros en el rango de 0 a la entrada, inclusive. El identificador de negación ("-") cuenta como un solo carácter.
Ejemplo de E / S
Entrada: 8
Escrito: 0,1,2,3,4,5,6,7,8
Salida: 9
Entrada: 101
escrita: 0,1,2,3 ...., 99,100,101
Salida: 196
Entrada: 102
escrita: 0,1,2,3 ...., 100,101,102
salida: 199
Entrada -10
Escrito: 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10
salida: 22
Este es un código de golf . ¡El número más bajo de bytes gana!
Bash + OS X (BSD) utilidades,
2422 bytesGracias a @seshoumara por guardar 2 bytes.
La prueba se ejecuta en Mac OS X:
Aquí hay una versión de GNU:
Bash + coreutils,
4038 bytesNuevamente, 2 bytes guardados gracias a @seshoumara.
Pruébalo en línea!
fuente
fold -1|wc -l
para hacer el conteo? Es mas corto.Python 2,
83,7864 bytesversión más corta:
Esta versión ahorró 5 bytes, gracias a @numbermaniac:
Pruébalo en línea!
este se me ocurrió después de eso (la misma cantidad de bytes):
Pruébalo en línea!
fuente
map
en la segunda línea de 78 bytes:print len(''.join(map(str,(range(x+1)if x>0 else range(0,x-1,-1)))))
. Usted puede ahorrar aún más por lo que es un lambda.print sum(map(len,map(str,(range(x+1)if x>0 else range(0,x-1,-1)))))
lambda x:sum(map(len,map(str,(range(x+1)if x>0 else range(0,x-1,-1)))))
por 71 bytesJava 7, 74 bytes (recursivo, incluido el segundo parámetro predeterminado)
Explicación (1):
Java 7,
8179 bytes (bucle - parámetro único)Si
0
no se permite tener un segundo parámetro predeterminado para este enfoque recursivo por alguna razón, en su lugar se podría usar un bucle for:Explicación (2)
Código de prueba:
Pruébalo aquí
Salida:
fuente
RProgN 2 , 5 bytes
Explicacion
Solución simple, funciona como un encanto.
Pruébalo en línea!
fuente
Brachylog , 5 bytes
Pruébalo en línea!
Construye el rango [0, entrada], convierte cada número en una cadena, concatena en una sola cadena y devuelve la longitud del resultado
fuente
Z
; ¿Que pasa con eso? ¿Debería estar en el recuento?Z
al intérprete Brachylog le dice que agregue un contenedor apropiado para que la función sea verificable. (Si lo ejecutó como un programa completo, no produciría ningún resultado). Permitimos el envío de programas o funciones aquí, por lo que no debería contar contra el recuento de bytes, ya que en realidad no es parte del envío.PHP,
5960 bytesSuperado por Roberto06 - https://codegolf.stackexchange.com/a/112536/38505
Gracias a roberto06 por notar que la versión anterior no funcionaba para números negativos.
Simplemente construye una matriz de números, lo pone en una cadena, luego cuenta los dígitos (y el signo menos)
Ejecute el ejemplo:
php -f 112504.php 8
fuente
join
lugar deimplode
porque es un alias.[--9]
Haskell ,
3938 bytesPruébalo en línea! Editar: ¡guardado 1 byte gracias a @xnor!
Explicación:
En Haskell para números
a
yb
[a..b]
es el rango dea
ab
en incrementos de 1 o decrementos de 1, dependiendo de sib
es mayora
. Entonces, para un positivo,n
la primera lista[0..n]++[n..0]
es[0,1,2,...,n]
y la segunda está vacía. Para negativo,n
el segundo rango rinde[0,-1,-2,...,n]
y el primero está vacío. Sin embargo, sin=0
ambos rangos producen la lista[0]
, entonces la concatenación[0,0]
conduciría a un resultado falso de2
. Por eso0
se maneja como un caso especial.El
=<<
operador de una lista es el mismo queconcatMap
, por lo que cada número se convierte en una cadenashow
y todas esas cadenas se concatenan en una cadena larga de la quelength
finalmente se devuelve.Antes de la sugerencia de xnor, usé en
[0,signum n..n]
lugar de[0..n]++[n..0]
.signum n
es-1
para números negativos,0
para cero y1
para números positivos y un rango del formulario[a,b..c]
construye la lista de números desdea
hastac
con incrementob
. De este modo[0,signum n..n]
construye el rango[0,1,2,...,n]
para positivon
y[0,-1,-2,...,n]
negativon
. Paran=0
ello se construiría la lista infinita,[0,0,0,...]
por lo que también debemos manejarlo0
como un caso especial.fuente
[0..n]++[n..0]
debería hacerlo[0,signum n..n]
.PHP,
4135 bytesGuardado 6 bytes gracias al usuario59178
Como la respuesta de ʰᵈ era incorrecta para una entrada negativa, me encargué de construir una nueva solución:
Esta función :
0
a$argv[1]
(también conocido como la entrada)Pruébalo aquí!
fuente
preg_match()
:(range()
si no fuera por su solución, supongo que estamos a la par;)join()
lugar deimplode()
. Es un alias para lo mismo. php.net/manual/en/function.join.phpimplode
, pero no sabía que podía omitir el parámetro gue. Gracias !Rubí ,
20 2629 bytesPruébalo en línea!
fuente
R,
2620 bytessum(nchar(0:scan()))
Enfoque muy básico:
Haz un vector 0: x
Cuente los caracteres en cada valor (se convertirá automáticamente en una cadena)
¿No está seguro de si hay algún truco para reducir la definición de la función?6 bytes guardados gracias a Giuseppe, tomando la entrada de stdin en su lugar.fuente
sum(nchar(0:scan()))
lugar y leern
de stdin en su lugar.Mathematica,
484746 bytes-1 byte gracias a Martin Ender !
Función anónima, tomando el número como argumento.
Solución más corta por Greg Martin , 39 bytes
fuente
Sign@#
para#/Abs@#
.1-#~Min~0+Tr@IntegerLength@Range@Abs@#&
. Las1
cuentas iniciales para el dígito de 0, mientras que-#~Min~0
explica todos los signos negativos si la entrada es negativa.Lote, 110 bytes
Computa
sum(min(0,abs(n)+1-10^k),k=0..9)+(n<0?1-n:1)
. (Solo tengo que hacerlo9
debido a las limitaciones de la aritmética de enteros de Batch).fuente
Python 2 , 68 bytes
Pruébalo en línea!
Más largo que pero diferente de otras soluciones de Python. Define una función recursiva llamada como eg
f(10)
fuente
MATL , 11 bytes
Pruébalo en línea!
fuente
PowerShell , 23 bytes
Pruébalo en línea! (vomitará en TIO para entradas muy grandes (absolutas))
Utiliza el
..
operador de rango para construir un rango desde0
la entrada$args
(emitido como una cadena para convertir desde la matriz de entrada). Eso se edita-join
en una cadena (por ejemplo,01234
) y luegoLe
se toma la ngth de la misma. Eso se deja en la tubería y la salida es implícita.fuente
Perl 6 , 18 bytes
Intentalo
Expandido:
fuente
QBIC , 25 bytes
Explicación:
fuente
JavaScript, 50 bytes
Colaborado con @ETHproductions
fuente
Bash + GNU coreutils, 28
Pruébalo en línea .
fuente
Retina , 28 bytes
Pruébalo en línea!
Explicación
Convierta el número a unario, manteniendo intacto el signo.
Cada 1 se reemplaza por todo en sí mismo más una nueva línea. Con esto obtenemos un rango de 1 a n si n fue positivo, de -1 a n con un adicional
-
al inicio si fue negativo. Todos los números están en unario y separados por nuevas líneas.Convierta cada secuencia de unos al número decimal correspondiente.
Pon un
0
al comienzo, reemplazando el extra-
si está allí.Cuente el número de caracteres (no de nueva línea).
fuente
Emacs, 20 bytes
El comando en sí es de 20 pulsaciones de teclas, pero necesito una aclaración sobre cómo se debe contar como bytes. Pensé que contar cada pulsación de tecla como 1 byte sería lo más justo. El comando anterior está escrito convencionalmente para facilitar la lectura.
Explicación
Comience a definir una macro de teclado.
Crea un nuevo macro contador. Escribe
0
en el búfer; el valor del contador ahora es 1.Fin de la definición de macro de teclado.
Después de presionar META, ingrese su número de entrada. La
C-x e
continuación, ejecuta la macro que muchas veces.Establezca la marca al comienzo del búfer (que selecciona todo el texto así generado).
Ejecute el recuento de caracteres en la región seleccionada. El número de caracteres se imprimirá en el minibúfer.
Ejemplo
Disculpas por el terrible color de resaltado. Este es un ejemplo del uso de este comando con la entrada 100. La salida está en el minibúfer en la parte inferior de la pantalla.
fuente
Lua, 52 bytes
Itera a través de un bucle for desde 0 - input, convierte el entero
i
en una cadena y agrega la longitud de la cadenat
antes de imprimirt
fuente
Perl 5 , 32 bytes
31 bytes de código +
-p
bandera.Pruébalo en línea!
fuente
C #,
7773 bytes-4 bytes gracias a @Kevin Cruijssen
Función lambda:
Sin golf y con casos de prueba:
fuente
while
parafor
guardar un par de bytes:(r)=>{var l="";for(int i=0,s=r<0?-1:1;i!=r+s;i+=s)l+=i;return l.Length;};
( 73 bytes )Func<int, int>
puede llamar a las funciones comor=>...
guardar 2 bytes (probablemente puede hacer esto de todos modos).JavaScript, 44 bytes
fuente
REXX, 56 bytes
fuente