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 -lpara 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
mapen 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
0no 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?Zal 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 8fuente
joinlugar deimplodeporque 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
ayb[a..b]es el rango deaaben incrementos de 1 o decrementos de 1, dependiendo de sibes mayora. Entonces, para un positivo,nla primera lista[0..n]++[n..0]es[0,1,2,...,n]y la segunda está vacía. Para negativo,nel segundo rango rinde[0,-1,-2,...,n]y el primero está vacío. Sin embargo, sin=0ambos rangos producen la lista[0], entonces la concatenación[0,0]conduciría a un resultado falso de2. Por eso0se maneja como un caso especial.El
=<<operador de una lista es el mismo queconcatMap, por lo que cada número se convierte en una cadenashowy todas esas cadenas se concatenan en una cadena larga de la quelengthfinalmente se devuelve.Antes de la sugerencia de xnor, usé en
[0,signum n..n]lugar de[0..n]++[n..0].signum nes-1para números negativos,0para cero y1para números positivos y un rango del formulario[a,b..c]construye la lista de números desdeahastaccon incrementob. De este modo[0,signum n..n]construye el rango[0,1,2,...,n]para positivony[0,-1,-2,...,n]negativon. Paran=0ello se construiría la lista infinita,[0,0,0,...]por lo que también debemos manejarlo0como 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 :
0a$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 leernde 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@#&. Las1cuentas iniciales para el dígito de 0, mientras que-#~Min~0explica 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 hacerlo9debido 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 desde0la entrada$args(emitido como una cadena para convertir desde la matriz de entrada). Eso se edita-joinen una cadena (por ejemplo,01234) y luegoLese 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
0al 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
0en 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 econtinuació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
ien una cadena y agrega la longitud de la cadenatantes de imprimirtfuente
Perl 5 , 32 bytes
31 bytes de código +
-pbandera.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
whileparaforguardar 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