Przy dodatniej liczbie całkowitej n ≤ 500 :
Znajdź najmniejszą dodatnią liczbę całkowitą k, tak aby wszystkie cyfry w reprezentacji dziesiętnej n * k miały wartość 0 lub d , przy czym 1 ≤ d ≤ 9 .
Wydrukuj lub zwróć d w mniej niż 30 sekund (czytaj więcej na ten temat w Wyjaśnienia i zasady ).
Proste przykłady
Oto pierwsze 30 wartości d .
+----+-------+---------+---+ +----+-------+---------+---+
| n | k | n * k | d | | n | k | n * k | d |
+----+-------+---------+---+ +----+-------+---------+---+
| 1 | 1 | 1 | 1 | | 16 | 5 | 80 | 8 |
| 2 | 1 | 2 | 2 | | 17 | 653 | 11101 | 1 |
| 3 | 1 | 3 | 3 | | 18 | 5 | 90 | 9 |
| 4 | 1 | 4 | 4 | | 19 | 579 | 11001 | 1 |
| 5 | 1 | 5 | 5 | | 20 | 1 | 20 | 2 |
| 6 | 1 | 6 | 6 | | 21 | 37 | 777 | 7 |
| 7 | 1 | 7 | 7 | | 22 | 1 | 22 | 2 |
| 8 | 1 | 8 | 8 | | 23 | 4787 | 110101 | 1 |
| 9 | 1 | 9 | 9 | | 24 | 25 | 600 | 6 |
| 10 | 1 | 10 | 1 | | 25 | 2 | 50 | 5 |
| 11 | 1 | 11 | 1 | | 26 | 77 | 2002 | 2 |
| 12 | 5 | 60 | 6 | | 27 | 37 | 999 | 9 |
| 13 | 77 | 1001 | 1 | | 28 | 25 | 700 | 7 |
| 14 | 5 | 70 | 7 | | 29 | 37969 | 1101101 | 1 |
| 15 | 2 | 30 | 3 | | 30 | 1 | 30 | 3 |
+----+-------+---------+---+ +----+-------+---------+---+
Niezbyt łatwe przykłady
Jedną ze szczególnych cech tego wyzwania jest to, że niektóre wartości są znacznie trudniejsze do znalezienia niż inne - przynajmniej przy zastosowaniu podejścia wyłącznie brutalnego. Poniżej znajduje się kilka przykładów n, które prowadzą do wysokiej wartości k .
+-----+------------+---------------+---+ +-----+------------+---------------+---+
| n | k | n * k | d | | n | k | n * k | d |
+-----+------------+---------------+---+ +-----+------------+---------------+---+
| 81 | 12345679 | 999999999 | 9 | | 324 | 13717421 | 4444444404 | 4 |
| 157 | 64338223 | 10101101011 | 1 | | 353 | 28615017 | 10101101001 | 1 |
| 162 | 13717421 | 2222222202 | 2 | | 391 | 281613811 | 110111000101 | 1 |
| 229 | 43668559 | 10000100011 | 1 | | 405 | 13717421 | 5555555505 | 5 |
| 243 | 13717421 | 3333333303 | 3 | | 439 | 22781549 | 10001100011 | 1 |
| 283 | 35371417 | 10010111011 | 1 | | 458 | 43668559 | 20000200022 | 2 |
| 299 | 33478599 | 10010101101 | 1 | | 471 | 64338223 | 30303303033 | 3 |
| 307 | 32576873 | 10001100011 | 1 | | 486 | 13717421 | 6666666606 | 6 |
| 314 | 64338223 | 20202202022 | 2 | | 491 | 203871711 | 100101010101 | 1 |
| 317 | 3154574483 | 1000000111111 | 1 | | 499 | 22244489 | 11100000011 | 1 |
+-----+------------+---------------+---+ +-----+------------+---------------+---+
Wyjaśnienia i zasady
- n * k zawsze będzie zawierać co najmniej jedną cyfrę d , ale może w ogóle nie zawierać zera.
- To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach. Jednak twój program lub funkcja musi mieć możliwość zwrócenia wyniku dla dowolnego 1 ≤ n ≤ 500 in mniej niż 30 sekund na sprzęcie średniego zasięgu.
- Pamiętaj, że niektóre wartości są trudniejsze do znalezienia niż inne. Program, który spróbowałby brutalnie wymusić wartość k, prawdopodobnie nie będzie zgodny z ograniczeniem czasowym (dobrym przypadkiem testowym jest n = 317 ). Istnieją znacznie szybsze metody znalezienia d .
Tabela referencyjna
Wszystkie wartości d dla 1 ≤ n ≤ 500 wymieniono poniżej.
n | d
--------+--------------------------------------------------
001-025 | 1 2 3 4 5 6 7 8 9 1 1 6 1 7 3 8 1 9 1 2 7 2 1 6 5
026-050 | 2 9 7 1 3 1 8 3 2 7 9 1 2 3 4 1 6 1 4 9 2 1 6 7 5
051-075 | 3 4 1 9 5 7 1 2 1 6 1 2 9 8 5 6 1 4 3 7 1 9 1 2 3
076-100 | 4 7 6 1 8 9 2 1 4 5 2 3 8 1 9 1 4 3 2 5 6 1 7 9 1
101-125 | 1 6 1 8 7 2 1 9 1 1 1 7 1 2 5 4 9 2 7 6 1 2 3 4 5
126-150 | 6 1 8 3 1 1 6 7 2 9 8 1 6 1 7 1 2 1 9 5 2 7 4 1 3
151-175 | 1 8 9 7 5 4 1 2 1 8 7 2 1 4 3 2 1 8 1 1 3 4 1 6 7
176-200 | 8 3 2 1 9 1 2 1 8 5 6 1 4 9 1 1 6 1 2 3 7 1 9 1 2
201-225 | 3 2 7 4 5 2 9 8 1 7 1 4 1 2 5 9 7 2 3 2 1 2 1 7 9
226-250 | 2 1 4 1 1 3 8 1 6 5 4 3 7 1 6 1 2 3 4 7 6 1 8 3 5
251-275 | 1 6 1 2 3 8 1 6 7 2 9 2 1 6 5 7 3 4 1 9 1 8 3 2 5
276-300 | 6 1 2 9 7 1 2 1 4 5 2 7 9 1 1 3 4 1 7 5 8 9 2 1 3
301-325 | 7 2 3 8 5 6 1 4 3 1 1 8 1 2 9 4 1 2 1 8 1 7 1 4 5
326-350 | 2 1 8 7 3 1 4 3 2 5 8 1 2 3 2 1 6 1 8 3 2 1 4 1 7
351-375 | 9 8 1 6 5 4 7 2 1 9 1 2 3 4 5 2 1 8 9 1 7 6 1 2 3
376-400 | 8 1 9 1 2 3 2 1 6 7 2 9 4 1 3 1 7 1 2 5 9 1 2 7 4
401-425 | 1 6 1 4 5 2 1 8 1 1 3 4 7 9 5 8 1 2 1 6 1 2 3 8 5
426-450 | 2 7 4 3 1 1 9 1 7 3 4 1 6 1 4 3 2 1 4 5 2 3 7 1 9
451-475 | 1 4 3 2 5 8 1 2 9 2 1 6 1 8 3 2 1 6 7 1 3 8 1 6 5
476-500 | 7 3 2 1 6 1 2 3 4 5 6 1 8 3 7 1 6 1 2 9 8 7 6 1 5
code-golf
arithmetic
Arnauld
źródło
źródło
Odpowiedzi:
Galaretka ,
161514 bajtówKwadratowy czas pracy (poniżej 25 sekund w TIO).
Wypróbuj online!
Alternatywna wersja, 15 bajtów
Stały czas działania (około 1 sekundy w TIO).
Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6), 83 bajty
Teraz wraca
6
pon=252
! Wypróbowałem podejście rekurencyjne, ale ma on również 83 bajty i zawiesza się dla mnie w przypadku trudniejszych liczb:źródło
Mathematica,
10310097 bajtówznajduje 317 w 0,39 sek
Wypróbuj online skopiuj / wklej kod, dodaj [317] na końcu i naciśnij shift + enter, aby uruchomić
-3 bajty od @JungHwan Min
-3 bajty od @Keyu Gan
źródło
*
się w hotelu*#
, iTuples[{0,i},13]
to{0,i}~Tuples~13
[[1]]
na końcu jest to samo, co stawianie#&@@
na początkuJoin@@
zamiastFlatten@
Python 2/3,
129128127 bajtów-1 bajt:
count(0)
→count()
-1 bajt:
==0
→<1
ponieważ nie może być ujemnyźródło
Galaretka , 21 bajtów
Łącze monadyczne zwracające numer LUB pełny program go drukujący.
Brute-forcer o ograniczonym zasięgu, który zajmuje mniej niż 20 sekund 1 ≤ n najwyżej 500 (mniej niż 3 sekundy i koszt bajtów kodu 1 - wymienić
⁴
z13
).Wypróbuj online!
W jaki sposób?
źródło
PHP , 87 bajtów
Wypróbuj online!
PHP , 89 bajtów
Wypróbuj online!
źródło