Subcadenas inversas de Champernowne

8

La constante de Champernowne es el número irracional 0.1234567891011 ... que se extiende hasta el infinito.

Hemos hecho una pregunta al respecto antes. Pero esta pregunta es sobre su recíproco, conocido como la constante Champernowne inversa. Esto es aproximadamente 8.10000007.

Dada una cadena de entre uno y tres dígitos (cada cadena de 3 dígitos aparece dentro de los primeros 10,000 lugares decimales) inclusive, proporcione el número de lugares decimales en la porción decimal de la constante de Champernowne inversa que preceden a la primera aparición de esa cadena.

Las construcciones que realizan esto directamente o generan aproximaciones de cualquiera de estas constantes están prohibidas, pero las construcciones para la aritmética de precisión arbitraria aún están permitidas.

Este es el código de golf, por lo que el programa más corto, en bytes, gana.

Casos de prueba:

1 0
2 52
3 13
4 29
5 36
6 7
7 8
8 27
9 23
10 0
100 0
998 187
999 67
01 321
001 689
010 418
SuperJedi224
fuente
1
¿Podría publicar un archivo con los primeros 10.000 dígitos constantes inversos de Champernowne?
orlp
@orlp gist.github.com/SuperJedi224/9c9adad78d872e4d568f a 10,000 decimales (su programa solo debe mirar la parte a la derecha del punto decimal)
SuperJedi224
¿El resultado puede estar basado en 1?
Luis Mendo
@LuisMendo Las especificaciones dictan actualmente basado en 0
SuperJedi224

Respuestas:

3

MATL , 37 bytes

¡Gracias a @AndrasDeak por su ayuda con la vpafunción de Octsympy !

'1/'1e4:"@V]N$h1e4H$Y$t32>)I0h)jXf1)q

EDITAR (11 de junio de 2016): debido a cambios en el idioma, reemplace 0por Jen el código. El siguiente enlace incluye esa modificación

Pruébalo en línea!

Lleva un tiempo en el compilador en línea (menos de 1 minuto).

'1/'        % literal string
1e4:        % array [1,2,...,1e4]
"           % for each number in that array
  @V        % push number and convert to string
]           % end loop
N$h         % concatenate all strings
1e4H$Y$     % compute 1/123456789101112... as a string with 1e4 significant digits
t32>)       % remove unwanted spaces and newlines in the output string
I0h)        % remove the first two characters ('8.')
j           % input string
Xf          % find indices of occurrences of input string within computed string
1)          % take first index
q           % subtract 1
Luis Mendo
fuente
2

Ruby, 69 67 bytes

->x{"#{1/BigDecimal.new(?.+[*1..9999]*'')}".index(x)-3}

Puntuación: 55 bytes de código fuente + 12 para la -rbigdecimalbandera.

Muy claro. La única parte extraña es que to_sla #{}construcción llama implícitamente a los BigDecimalretornos

0.81000000670 [...] 3036E1

entonces es necesario restar 3 para obtener el índice correcto.

Pomo de la puerta
fuente
1

Python 2, 69 bytes

lambda s:str(10**30000/int("".join(map(str,range(3000))))).index(s)-1
orlp
fuente
Esto no funcionará para una entrada de "8".
negativo siete