Considere uma ponte de comprimento B formada por blocos rotulados com os dígitos dos números inteiros positivos concatenados. Por exemplo, se B tivesse 41 anos, seria assim:
----------------------------------------- 12345678910111213141516171819202122232425
Agora imagine um trem de comprimento T atravessando a ponte. O ponto mais à esquerda do trem começa na posição X (indexada 1). Para entender melhor o problema, vamos fazer um esquema do evento, com B = 41, T = 10, X = 10 . O trem é desenhado usando sinais de igual ( =
) e linhas:
__________ | ======== | | ======== | ----------------------------------------- 12345678910111213141516171819202122232425
O trem pode avançar, a cada passo, pela soma das peças únicas em que está localizado. Por exemplo, os blocos em que o trem está acima são [1, 0, 1, 1, 1, 2, 1, 3, 1, 4]
:, os blocos únicos (deduplicados) são: [1, 0, 2, 3, 4]
e sua soma é 10
. Portanto, o trem pode avançar por 10
ladrilhos. Devemos desenhá-lo novamente e repetir o processo até que o ponto mais à esquerda do trem tenha passado o último ladrilho:
__________ | ======== | | ======== | ----------------------------------------- 12345678910111213141516171819202122232425 Soma de peças únicas: 1 + 5 + 6 + 7 + 8 + 9 = 36. O trem avança em 36 peças ... __________ | ======== | | ======== | ----------------------------------------- 12345678910111213141516171819202122232425 O trem obviamente atravessou a ponte completamente, então devemos parar agora.
Como as pessoas estão entediadas, elas contam as peças que o trem avançou a cada vez. Nesse caso específico, 10
e 36
. Resumindo tudo, o trem mudou 46
antes de passar pela ponte.
Tarefa
Dado três números inteiros positivos, B (o comprimento da ponte), T (o comprimento do trem) e X (a posição inicial, indexada em 1 ), sua tarefa é determinar quantos ladrilhos o trem moveu até cruzar a ponte seguindo as regras acima.
- Você pode assumir que:
- B é maior do que o t .
- X é menor do que B .
- T é pelo menos 2 .
- O trem finalmente atravessa a ponte.
- Todas as nossas regras padrão se aplicam.
- Isso é código-golfe , então o código mais curto em bytes vence!
Casos de teste
Entrada ([B, T, X]) -> Saída [41, 10, 10] -> 46 [40, 10, 10] -> 46 [30, 4, 16] -> 24 [50, 6, 11] -> 50
Outro exemplo funcionado para o último caso de teste:
A ponte é de comprimento 50, o trem 6 e a posição inicial é 11. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Ladrilhos exclusivos: [0, 1, 2]. Soma: 3. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Ladrilhos exclusivos: [1, 2, 3, 4]. Soma: 10. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Ladrilhos exclusivos: [1, 7, 8, 9]. Soma: 25. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Ladrilhos exclusivos: [9, 3]. Soma: 12. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Trem existe a ponte. Soma total: 3 + 10 + 25 + 12 = 50.
(200, 2, 169)
, o trem fica preso00
na entrada…9899100101102…
.Respostas:
Casca , 20 bytes
Experimente online!
Recebe três argumentos a fim T , B , X .
Explicação
fonte
Python 2 ,
1101051041031009796 bytes[~-x:x+~-t]
para[~-x:][:t]
....range(1,-~b)))[:b]
para...range(b)))[1:-~b]
.[1:-~b][~-x:]
para[:-~b][x:]
.[:-~b][x:]
para[x:-~b]
.while
loop em umaexec
declaração.Experimente online!
fonte
[~-x:x+~-t]
pode ser substituído por[x-1:][:t]
exec"x+=sum(set(map(int,''.join(map(str,range(b)))[x:-~b][:t])));"*b
obras para 96. (O trem nunca vai demorar mais do queb
passos para deixar a ponte, e que toda a operação será dex+=0
uma e outra vez que é esquerda.)Haskell,
106102 bytesExperimente online!
fonte
R , 123 bytes
Apenas implementa o algoritmo descrito.
R é terrível nas cordas.
Experimente online!
fonte
Geléia ,
2221 bytesUm programa completo com três argumentos - a ordem é B , X , T - que imprime o resultado.
Experimente online!
Como?
fonte
JavaScript (ES6), 117 bytes
Um par de funções recursivas:
f()
soma os movimentos do trem.g()
cria a sequência de números.Menos golfe:
Mostrar snippet de código
fonte
PHP> = 7.1, 153 bytes
Experimente online!
Para torná-lo compatível com versões inferiores do PHP, altere
[,$p,$q,$r]=
paralist(,$p,$q,$r)=
(+4 bytes).fonte