Introducción
En la base 10, la constante Champernowne se define mediante la concatenación de representaciones de enteros sucesivos. En base 10: 0.1234567891011121314151617...
y así sucesivamente.
Puede ver que la primera aparición de 15
comienza en el 20th
decimal:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
15 = position 20
La primera aparición de 45
comienza en el 4th
decimal:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
45 = position 4
Entonces, la tarea es fácil. Dado un entero no negativo, genera la posición del entero en la constante Champernowne.
Reglas
- Puede proporcionar una función o un programa
- Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
Casos de prueba
Input: 20
Output: 30
Input: 333
Output: 56
Input: 0
Output: 11 (note that the 0 before the decimal point is ignored)
Input: 2930
Output: 48
0 <= x <= 99
, pero en teoría debería funcionar para enteros superiores a99
.Respuestas:
Pyth, 10
Concatena los primeros
input + 10
números y luego encuentra el índice basado en 0 más uno. Los diez adicionales solo son necesarios para 0.Banco de pruebas
fuente
2015-12-17 15:01:23Z
o algo así?LabVIEW, 29 primitivas de LabVIEW
Esto usa cadenas por ahora. Coincide con la entrada como un patrón y genera el desplazamiento - (longitud de entrada -1).
fuente
Javascript, 57 bytes
Guardado 1 byte gracias a Conor O'Brien.
fuente
y=
parte a lay=b=" "
; Incrementar un espacio es como incrementar cero. (a=prompt(y=b=" ");...
)Haskell, 62 bytes
Ejemplo de uso:
(#(show=<<[1..])).show $ 2930
->48
.Cómo funciona:
a # b
encuentra la posición dea
insideb
: sia
es el prefijo deb
return1
, de lo contrario, agregue1
a una llamada recursiva cona # tail b
. La función pointfree(#(show=<<[1..])).show
espera un argumento (sin nombre)n
y llamadasshow n # show=<<[1..]
.La función
subIndex
también haría el trabajo de#
, pero lo requeridoimport Data.List.Utils
no vale la pena.fuente
.show
Ruby, 28
Incluye un 0 al principio para que las coincidencias estén indexadas en 1, pero suele
\B
requerir que la coincidencia no esté al principio de la cadena.fuente
Japt, 11 bytes
Originalmente, esto estaba superando a Pyth, pero aparentemente no funcionó como entrada
0
.Pruébalo en línea!
Cómo funciona
fuente
q
en el código y no el símbolo de negación lógica¬
?¬
es un atajo paraq
(que tieneq
un espacio siguiente). Esto a menudo parece ser un punto de confusión, por lo que he alineado la versión más corta con la versión completa.Lua, 54 bytes
Nota:
Actualmente, este programa imprime tanto la primera aparición del primer carácter de la cadena como el punto donde termina. Si esto no está permitido, costará unos pocos bytes más.Me gustaría solicitar una bonificación porque mi programa imprime tanto la primera posición como la última posición del número de entrada.fuente
MATL , 22 bytes
Tome la entrada (
i
), haga que el vector 1 ingrese + 10 (10+:
), convierta el vector en una cadena (Ys
) y elimine los espacios, lo cual es doloroso, (t' '=~)
). Luego, convierta la entrada en una cadena (Ys
), encuentre dónde está la cadena de entrada en la cadena de números (Xf
) y tome la primera ubicación (1)
). Last
'syw
' están manipulando la pila (duplicar e intercambiar, respectivamente).fuente
PowerShell,
3944 bytes[Editar: mi suposición no se cumple, construir una matriz de 1-0 no encuentra 0 en el lugar 11. En cambio, construir desde 1-x + 10 para manejar 0 también, ahora 44 bytes]
Siempre encontrará x cuando construya una cadena de la constante Champernowne en el último punto cuando agregue x al final, por lo que una matriz de 1-x siempre tendrá la respuesta. La pregunta se convierte en "¿ocurre antes de eso?" . Este código
genera un rango de números, lo convierte en una cadena y busca el parámetro dentro de él. Debido a que PowerShell es un shell orientado a objetos, el parámetro es en realidad un
[int]
tipo, por lo que intentar guardar dos caracteres.IndexOf($i)
buscaría un entero en la cadena y no encontraría nada. Es por eso que uso interpolación de cadenas"$i"
.fuente
.IndexOf()
aparentemente tiene mayor preferencia operativa que-join
obligar a los padres y cotizaciones unarias . : - /MATL (versión 1.0.1), 22 bytes
Ejemplo
Explicación
MAT (versión 20.8.0), 16 bytes (es posterior desafío del lenguaje)
Crédito a @Giuseppe para esta versión del programa (ligeramente modificado)
Pruébalo en línea!
Explicación
fuente
G
contiene la entrada (y la entrada implícita), supongo que esta respuesta puede acortarse bastante y toda laYs
necesidad de cambiar deV
todos modos; Se me ocurrieron10+:"@Vv]!GVXf1)
16 bytes.Ys
necesario cambiarloV
para usarlo en la versión más actualizada del intérprete. ¡Siempre me impresiona cuánto ha mejorado el idioma!PowerShell,
5450 bytesGracias a TessellatingHeckler por la idea de cambiar el
while
bucle por unfor
bucle.Se ejecuta a través de un
for
bucle. Al igual que con otros lenguajes, la primera instrucción en el bucle puede construir variables y asignaciones, por lo que esto comienza con$c
una cadena vacía igual para''
que podamos indexar a cero la cadena alineándose con la indexación decimal del desafío. Luego estamos en un bucle que verifica si$c
tiene el entero de entrada ($args
) en algún lugar dentro de él (es decir, dado que.IndexOf()
devuelve-1
si no se encuentra la cadena, agregamos uno a eso (0
) y no ($TRUE
) para continuar el bucle). Si no se encuentra, agregamos nuestra$i
variable de contador previamente incrementada , luego volvemos a verificar la cadena. Una vez que se encuentra la cadena,.IndexOf()
devolverá un valor positivo, cuyo no será$FALSE
, saliendo del bucle. Finalmente, sacamos el índice con$x
.fuente
for
bucle clásico ...for($c='.';($x=$c.IndexOf("$args"))-lt0;$c+=++$i){}$x
y guardar 1 personaje. Como la mayoría de las llamadas IndexOf devolverán -1, agregue una y boolean! lanzarlo, para una prueba más corta. Pero necesitas padres para hacer eso. Vacíe $ c y +1 dentro de parens existentes, el bono es más corto.for($c='';!($x=$c.IndexOf("$args")+1);$c+=++$i){}$x
51 bytes. (pero publiqué mi byte uno de 39 como respuesta propia porque es un enfoque completamente diferente: P).$c
Moví la concatenación en el bucle para jugar al golf un punto y coma. Ahora a los 50.JavaScript (ES6), 40 bytes
Utiliza la función recursiva
f
para evitar bucles. El método de búsqueda funciona igual que,indexOf
excepto que toma un RegExp como parámetro, lo cual es irrelevante para este desafío.Agregar un
" "
para eln=0
caso (cero es falso en JS) obliga+
a realizar la concatenación de cadenas en lugar de la suma, y corrige la indexación basada en cero.fuente
Pitón 3, 54.
fuente
CJam, 11 bytes
Pruébalo aquí.
Estoy encontrando la posición de
N
en la cadena01234...N
para dar cuenta de la indexación basada en 1. Finalmente lo arreglo0
aplicando OR lógico con 11.fuente
En serio, 13 bytes
Toma la entrada como un entero. Contiene no imprimibles, por lo que hexdump:
Pruébalo en línea
Explicación:
fuente
𝔼𝕊𝕄𝕚𝕟, 13 caracteres / 22 bytes
Try it here (Firefox only).
fuente
k4, 21 bytes
Lo mismo que todos los demás: concatenar
[1..10+x]
como cadenas, buscar x como cadena, convertir a indexación basada en uno, devolver el primer hit.Comprobación de los casos de prueba:
fuente
Mathematica, 101 bytes
fuente
Haskell ,
827355 bytesMigrado desde el duplicado
Pruébalo en línea!
Explicación
Primero definimos
!
.x!b
truncab
a la primera aparición dex
. Lo hace comprobando sib
comienza conx
(or$zipWith(==)x b
) regresandox
si lo hace y moviendo uno hacia abajo de la cadena de lo contrario. Luego definimos nuestra función principal. Nuestra función principal es una función sin puntos que toma la constante (show=<<[1..]
) y la trunca a la primera aparición dex
. Esto tomax
como una cadena.fuente
05AB1E , 6 bytes (no competitivos)
Pruébalo en línea!
fuente
JavaScript (ES6),
503938 bytesIntentalo
fuente
Jalea , 5 bytes
Pruébalo en línea!
fuente
Stax , 6 bytes
Ejecutar y depurarlo
fuente
Perl 6 , 26 bytes
Pruébalo en línea!
Encuentra el índice del elemento en el rango concatenado de 0 a ese elemento, o
11
si el número es cerofuente
Perl 5 , 42 + 1 (-p) = 43 bytes
Pruébalo en línea!
Explicación
fuente
Perl 6 / Rakudo 29 bytes
Define una función con una entrada ($ ^ a). Llame así:
Anexar
$
, una variable anónima, que se incrementa$++
hasta que$^a
se encuentra la entrada , y luego cuenta el número de caracteres antes. Requerir al menos 1 carácter antes de él.+
en la expresión regular excluye útilmente el caso 0-> 0fuente
J, 30 bytes
Probablemente podría jugar un poco más, específicamente en la concatenación de los primeros n + 10 enteros.
Explicación:
Tenga en cuenta que esto está indexado a 0. Ejemplos:
fuente
Casco , 6 bytes
Pruébalo en línea!
fuente