Rozważmy mostek o długości B utworzony z płytek oznaczonych cyframi dodatnich liczb całkowitych połączonych. Na przykład, jeśli B miał 41 lat, wyglądałoby to tak:
----------------------------------------- 12345678910111213141516171819202122232425
Teraz wyobraź sobie pociąg długości T przekraczający most. Najbardziej wysunięty na lewo punkt pociągu rozpoczyna się w pozycji X (indeksowane 1). Aby lepiej zrozumieć problem, zróbmy schemat zdarzenia z B = 41, T = 10, X = 10 . Pociąg jest rysowany za pomocą znaków równości ( =
) i linii:
__________ | ======== | | ======== | ----------------------------------------- 12345678910111213141516171819202122232425
Pociąg może przesuwać się na każdym kroku o sumę unikalnych płytek, na których się znajduje. Na przykład kafelki, na których stoi pociąg, to: [1, 0, 1, 1, 1, 2, 1, 3, 1, 4]
unikatowe (deduplikowane) kafelki to:, [1, 0, 2, 3, 4]
a ich suma wynosi 10
. Dlatego pociąg może posuwać się naprzód za pomocą 10
płytek. Powinniśmy go narysować ponownie i powtarzać proces, aż skrajnie lewy punkt pociągu minie ostatni kafelek:
__________ | ======== | | ======== | ----------------------------------------- 12345678910111213141516171819202122232425 Suma unikalnych płytek: 1 + 5 + 6 + 7 + 8 + 9 = 36. Pociąg przesuwa się o 36 płytek ... __________ | ======== | | ======== | ----------------------------------------- 12345678910111213141516171819202122232425 Pociąg oczywiście całkowicie przeszedł przez most, więc powinniśmy się teraz zatrzymać.
Ponieważ ludzie w środku są znudzeni, liczą kafelki, które pociąg podnosił za każdym razem. W tym konkretnym przypadku 10
i 36
. Podsumowując, pociąg ruszył, 46
zanim minął most.
Zadanie
Biorąc pod uwagę trzy dodatnie liczby całkowite, B (długość mostu), T (długość pociągu) i X (pozycja początkowa, indeks 1 ), Twoim zadaniem jest określenie, ile płytek pociąg przemieścił się, aż przeszedł przez most zgodnie z zasadami powyżej.
- Możesz założyć, że:
- B jest wyższa niż T .
- X jest mniejsze niż B .
- T wynosi co najmniej 2 .
- Pociąg w końcu przejeżdża przez most.
- Obowiązują wszystkie nasze standardowe zasady.
- To jest golf-golf, więc wygrywa najkrótszy kod w bajtach!
Przypadki testowe
Wejście ([B, T, X]) -> Wyjście [41, 10, 10] -> 46 [40, 10, 10] -> 46 [30, 4, 16] -> 24 [50, 6, 11] -> 50
Kolejny sprawdzony przykład ostatniego przypadku testowego:
Most ma długość 50, pociąg 6, a pozycja początkowa to 11. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Unikalne płytki: [0, 1, 2]. Suma: 3. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Unikalne płytki: [1, 2, 3, 4]. Suma: 10. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Unikalne płytki: [1, 7, 8, 9]. Suma: 25. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Unikalne płytki: [9, 3]. Suma: 12. ______ | ==== | | ==== | -------------------------------------------------- 12345678910111213141516171819202122232425262728293 Pociąg istnieje most. Suma całkowita: 3 + 10 + 25 + 12 = 50.
(200, 2, 169)
, pociąg utknie na00
w…9899100101102…
.Odpowiedzi:
Łuska , 20 bajtów
Wypróbuj online!
Przyjmuje trzy argumenty w celu T , B , X .
Wyjaśnienie
źródło
Python 2 ,
1101051041031009796 bajtów[~-x:x+~-t]
w golfa[~-x:][:t]
....range(1,-~b)))[:b]
w golfa...range(b)))[1:-~b]
.[1:-~b][~-x:]
w golfa[:-~b][x:]
.[:-~b][x:]
w golfa[x:-~b]
.while
pętli doexec
instrukcji.Wypróbuj online!
źródło
[~-x:x+~-t]
może zostać zastąpiony przez[x-1:][:t]
exec"x+=sum(set(map(int,''.join(map(str,range(b)))[x:-~b][:t])));"*b
pracuje dla 96. (Pociąg nigdy nie podejmie więcej niżb
kroków, aby opuścić most, a cała operacja będzie sięx+=0
powtarzać raz po raz.)Haskell,
106102 bajtówWypróbuj online!
źródło
R , 123 bajty
Po prostu implementuje opisany algorytm.
R jest dość okropny w strunach.
Wypróbuj online!
źródło
Galaretka ,
2221 bajtówPełny program przyjmujący trzy argumenty - kolejność to B , X , T - który wypisuje wynik.
Wypróbuj online!
W jaki sposób?
źródło
JavaScript (ES6), 117 bajtów
Para funkcji rekurencyjnych:
f()
sumuje ruchy pociągu.g()
tworzy ciąg liczb.Mniej golfa:
Pokaż fragment kodu
źródło
PHP> = 7,1, 153 bajty
Wypróbuj online!
Aby był kompatybilny z niższymi wersjami PHP, zmień
[,$p,$q,$r]=
nalist(,$p,$q,$r)=
(+4 bajty).źródło