Es bastante simple, dado un número n
, crear un rango de 0
a n-1
. De hecho, muchos idiomas proporcionan esta operación como una función integrada.
El siguiente programa CJam lee un número entero y luego imprime dicho rango (¡ Pruébelo en línea! ):
ri,
Observe que imprime números sin un separador.
El reto
Su tarea es revertir este proceso. Debería escribir un programa que, dada una cadena que representa un rango, devuelva el número utilizado para producir ese rango.
Presupuesto
- Los números se dan sin ningún separador.
- Puede suponer que la cadena forma un rango válido.
- Puede usar indexación basada en 0 o 1 para su rango.
- Puede suponer que una salida correcta nunca superará los 32.767 (por lo que una entrada válida nunca tendrá una longitud superior a 152.725).
- Puede suponer que una salida correcta siempre será positiva (por lo que no tiene que manejar 0 o negativo).
Este es el código de golf , por lo que gana la respuesta competitiva más corta (medida en bytes).
Casos de prueba
0 indexado:
0123 -> 4
0 -> 1
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 101
1 indexado:
1234 -> 4
1 -> 1
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 100
Respuestas:
Prólogo (SWI) ,
9180 bytes0 indexado.
Se agregaron nuevas líneas para facilitar la lectura.
Pruébalo en línea!
fuente
Casco , 5 bytes
Pruébalo en línea!
¡Solo cartas!
Toma la entrada como una cadena, el resultado es 1 indexado.
Explicación
fuente
05AB1E ,
76 bytes1 indexado.
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
0
sin importar la entrada: tio.run/##MzBNTDJM/f8/3efcdi/PbLv//5UMjYxNTM3MLSwNDZQA[NÝJQ#]N
fue idea mía, pero esto es mejor porque funciona""
.Java 8,
6659 bytes0 indexado
-7 bytes gracias a @ PunPun1000 .
Tengo la sensación de que esto se puede acortar solo verificando la longitud de la entrada de alguna manera, ya que podemos suponer que la entrada siempre es válida. Todavía estoy resolviendo esto.No se puede resolver esto, y probablemente costará demasiados bytes en Java para ser útil de todos modos (lo mismo se aplica a devolver una subcadena del final de una entrada indexada 1).Explicación:
Pruébalo aquí
fuente
Brachylog ,
97 bytesPruébalo en línea!
0 indexado.
Explicación
Aquí pasamos la entrada a través de la variable Salida y accedemos al resultado a través de la variable Entrada.
fuente
Ly , 29 bytes
Pruébalo en línea!
No puedo creer que esto funcionó tan bien como lo hizo ...
fuente
Japt , 8 bytes
Comenzando a familiarizarse con los métodos de función en Japt.
0 indexado. Puede tomar la entrada como una cadena, un entero o una matriz que contiene 0 o 1 elementos.
Pruébalo
Explicación
Entrada implícita de cadena
U
.Obtenga el primer entero
>=0
que devuelve verdadero cuando se pasa a través de una función que ...Genera una matriz de enteros de
0
a 1 menos que el entero actual ...Lo une a una cadena ...
Comprueba esa cadena para la igualdad con
U
.Salida implícita del entero resultante.
Alternativa, 8 bytes
Pruébalo
fuente
Carbón , 13 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Haskell,
4037 bytesFunción que invierte los rangos basados en cero.
¡Gracias a Laikoni por guardar 3 bytes!
Pruébalo en línea.
fuente
f s=[n|n<-[0..],(show=<<[0..n])>s]!!0
.|m<-n+1=s!m
.Retina , 30 bytes
Agrega recursivamente un punto y coma después de cada número y luego cuenta el número de punto y coma
Pruébalo en línea!
fuente
JavaScript (ES6),
3231 bytesGuardado 1 byte gracias a Challenger5
Casos de prueba
Mostrar fragmento de código
fuente
f(payload_param)()
o inclusof(payload_param)(some_constant)
. (Por cierto, no estoy seguro de que funcione en este caso en particular porque necesito ambosr
yn
ser inicializado.)Mathematica, 46 bytes
1 indexado
entrada
fuente
Ruby ,
515046 bytes(Este es mi primer programa Ruby, por lo que debe ser fácil jugarlo más)
-4 bytes gracias a @Nnnes
fuente
.index(gets)
=>.index gets
. Puede usar en4e4
lugar de8**5
, aunque esto hará que funcione aún más lento. En general, está bien, y a menudo ahorra algunos bytes, usar lambdas anónimas para las respuestas de Ruby: ¡ Pruébelo en línea! (Cambié el límite a 100 para que no se agote el tiempo).Python 2 , 43 bytes
Pruébalo en línea!
Python 2 , 43 bytes
Pruébalo en línea!
Python , 46 bytes
Pruébalo en línea!
Una estrategia diferente Toma una cantidad de caracteres del final igual a la longitud de la mayor serie de
0
's en s.Python , 46 bytes
Pruébalo en línea!
Versión recursiva de lo anterior.
fuente
... i*'0'in s[1:] for ...
o algo así?R , 47 bytes
Pruébalo en línea!
1 indexado
fuente
"if"
lugar deifelse
nchar
funciona como es de esperar en los números. Sin embargo, debe manejar la impresión de su salida, ya que esto no lo haría cuando se ejecute como un programa completo.n=nchar(scan());cat(which(cumsum(nchar(1:n))==n))
APL (Dyalog) ,
1711 bytes-6 bytes gracias a ngn .
Pruébalo en línea!
⍳⊂
encuentre el índice of de todo el argumento en{
...}
el resultado de esta función anónima:≢
longitud del argumento⍳
te dedos hasta eso⍕¨
formatear (stringify) cada,\
concatenación acumulativa de aquellosfuente
{,\⍕¨⍳≢⍵}⍳⊂
(11 caracteres)Perl 5 , 19 bytes
Código de 18 bytes + 1 para
-p
.Utiliza indexación basada en 1. -7 bytes gracias a @ nwellnhof Es por tanto un mejor enfoque!
Pruébalo en línea!
Explicación
$\
es una variable especial que seprint
edita automáticamente después de cada instrucción, por lo que al usarla para almacenar nuestro número no necesitamos actualizar$_
(que se imprime automáticamente como parte de la funcionalidad de la-p
bandera) para contener la salida deseada. Luego, mientras la entrada comienza con$\
, retírela yredo
el programa, que nuevamente la incrementa$\
y la reemplaza. Cuando ya no encuentra el número al comienzo de la cadena, ¡hemos terminado! Finalmente, decremente$\
para tener el último número en el rango.fuente
$i++while s/$i\B//
(18 + 1 bytes)?Python 2 , 46 bytes
0 indexado
Pruébalo en línea!
fuente
CJam , 16 bytes
Pruébalo en línea!
Alternativa 16 bytes
Pruébalo en línea!
fuente
CJam , 13 bytes
Tantas comas ...
Pruébalo en línea!
Explicación
fuente
Perl 6 ,
30 2827 bytesPruébalo
Pruébalo
Pruébalo
Expandido:
'',0...*
produce una secuencia infinita de valores''
,0
,1
,2
,3
...[\~] '',0...*
produce una secuencia infinita de todas las entradas posiblesTenga en cuenta que este código nunca se detendrá si le da una entrada no válida.
fuente
Pyth ,
1110 bytes1 indexado.
Pruébalo aquí
Si se puede ignorar la cadena vacía, esto se puede acortar a 6 bytes :
-1 byte gracias a @Mnemonic
fuente
?QfqQjkUT)1
también puedo hacerlo en 11, pero siento que algunos reordenamientos pueden jugar golf en un byte. ¿Algunas ideas?jk
lugar de s`m.CJam,
141211 bytesPruébalo en línea
fuente
Dyvil ,
4238 bytesEl mismo algoritmo que esta respuesta de Java , excepto que (ab) usa algunas de las especialidades sintácticas de Dyvil.
Explicación:
4
Bytes guardados utilizando una expresión de acceso de llaves en lugar de una variable para el acumuladorfuente
MATL , 14 bytes
1 indexado.
Pruébalo en línea!
Explicación
fuente
C # , 72 bytes
Datos
String
i
La matriz int que se descifraráInt32
El número utilizado para hacer la matriz.Golfed
Sin golf
Legible sin golf
Código completo
Lanzamientos
72 bytes
- Solución inicial.Notas
fuente
i=>{int c,p=c=0;for(;p<i.Length;)p+=(c+++"").Length;return c;}
62 bytesSOGL V0.12 ,
11109 bytes1 indexado.
Pruébalo aquí!
Explicación:
..o 7 bytes sin la caja vacía
Pruébalo aquí!
fuente
Aceto ,
2725 bytesÍndice basado en 1.
Nos
r
EAD la entrada yM
emorize ella (y directamenteL
OAD de nuevo), entonces negamos que (!
; conduce a un valor Truthy sólo para una cadena vacía). Si este valor es verdadero (`
), saltamos al final (;
), dondep
borramos el cero implícito.De lo contrario, incrementamos el valor actual de la pila (inicialmente un cero), lo duplicamos y colocamos una copia en la pila a la derecha, mientras también nos movemos allí (
Id]
). Luego construimos un rango decreciente (z
), unimos la pila como una cadena (¥
) y movemos el valor (y nosotros) en la pila original nuevamente ([
). NosL
OAD el valor memorizamos anterior (la entrada) y lo comparamos con esta cadena. Si es igual, saltamos al final nuevamente, donde imprimimos el valor actual de "contador" (=`;
).De lo contrario, se atraviesa un montón de espacio vacío hasta que la curva de Hilbert finalmente alcanza la
<
que coloca la IP encimaI
, incrementa el contador y vuelve a probar.fuente
Apilado , 23 bytes
Pruébalo en línea!
Básicamente, se incrementa
0
hasta que el rango desde0
el número se parece a la entrada, verificando primero la igualdad.fuente
Jalea , 8 bytes
Pruébalo en línea!
fuente