Considere un puente de longitud B formado por mosaicos etiquetados con los dígitos de los enteros positivos concatenados. Por ejemplo, si B era 41, entonces se vería así:
----------------------------------------- 12345678910111213141516171819202122232425
Ahora imagine un tren de longitud T cruzando el puente. El punto más a la izquierda del tren comienza en la posición X (1 indexado). Para comprender mejor el problema, hagamos un esquema del evento, con B = 41, T = 10, X = 10 . El tren se dibuja usando signos iguales ( =
) y líneas:
__________ | ======== | | ======== | ----------------------------------------- 12345678910111213141516171819202122232425
El tren puede avanzar, en cada paso, por la suma de las fichas únicas en las que se encuentra. Por ejemplo, los mosaicos en los que se encuentra el tren arriba son:, [1, 0, 1, 1, 1, 2, 1, 3, 1, 4]
los mosaicos únicos (deduplicados) son: [1, 0, 2, 3, 4]
y su suma es 10
. Por lo tanto, el tren puede avanzar por 10
fichas. Deberíamos dibujarlo nuevamente y repetir el proceso hasta que el punto más a la izquierda del tren haya pasado el último mosaico:
__________ | ======== | | ======== | ----------------------------------------- 12345678910111213141516171819202122232425 Suma de fichas únicas: 1 + 5 + 6 + 7 + 8 + 9 = 36. El tren avanza en 36 fichas ... __________ | ======== | | ======== | ----------------------------------------- 12345678910111213141516171819202122232425 El tren obviamente cruzó el puente por completo, así que deberíamos parar ahora.
Como las personas que están dentro están aburridas, cuentan las fichas que el tren ha avanzado cada vez. En este caso específico, 10
y 36
. Resumiendo todo, el tren se movió 46
antes de pasar el puente.
Tarea
Dados tres enteros positivos, B (la longitud del puente), T (la longitud del tren) y X (la posición inicial, indexada en 1 ), su tarea es determinar cuántas fichas ha movido el tren hasta que cruzó el puente siguiendo las reglas encima.
- Puedes asumir que:
- B es mayor que T .
- X es menor que B .
- T es al menos 2 .
- El tren finalmente cruza el puente.
- Se aplican todas nuestras reglas estándar.
- Este es el código de golf , por lo que gana el código más corto en bytes.
Casos de prueba
Entrada ([B, T, X]) -> Salida [41, 10, 10] -> 46 [40, 10, 10] -> 46 [30, 4, 16] -> 24 [50, 6, 11] -> 50
Otro ejemplo trabajado para el último caso de prueba:
El puente tiene una longitud 50, el tren 6 y la posición inicial es 11. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Fichas únicas: [0, 1, 2]. Suma: 3. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Fichas únicas: [1, 2, 3, 4]. Suma: 10. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Fichas únicas: [1, 7, 8, 9]. Suma: 25. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Fichas únicas: [9, 3]. Suma: 12. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 El tren existe el puente. Suma total: 3 + 10 + 25 + 12 = 50.
(200, 2, 169)
, el tren se queda atascado en la00
en…9899100101102…
.Respuestas:
Casco , 20 bytes
Pruébalo en línea!
Toma tres argumentos en orden T , B , X .
Explicación
fuente
Python 2 ,
1101051041031009796 bytes[~-x:x+~-t]
a[~-x:][:t]
....range(1,-~b)))[:b]
a...range(b)))[1:-~b]
.[1:-~b][~-x:]
a[:-~b][x:]
.[:-~b][x:]
a[x:-~b]
.while
bucle a unaexec
declaración.Pruébalo en línea!
fuente
[~-x:x+~-t]
puede ser sustituido por[x-1:][:t]
exec"x+=sum(set(map(int,''.join(map(str,range(b)))[x:-~b][:t])));"*b
funciona para 96. (El tren nunca tomará más queb
pasos para abandonar el puente, y toda la operación ascenderáx+=0
una y otra vez una vez que salga ).Haskell,
106102 bytesPruébalo en línea!
fuente
R , 123 bytes
Solo implementa el algoritmo descrito.
R es bastante terrible en las cuerdas.
Pruébalo en línea!
fuente
Jalea ,
2221 bytesUn programa completo que toma tres argumentos: el orden es B , X , T , que imprime el resultado.
Pruébalo en línea!
¿Cómo?
fuente
JavaScript (ES6), 117 bytes
Un par de funciones recursivas:
f()
suma los movimientos del tren.g()
crea la cadena de números.Menos golfizado:
Mostrar fragmento de código
fuente
PHP> = 7.1, 153 bytes
Pruébalo en línea!
Para hacerlo compatible con versiones anteriores de PHP, cambie
[,$p,$q,$r]=
alist(,$p,$q,$r)=
(+4 bytes).fuente