Szalony matematyk posiada szeroką kolekcję liczb, dlatego przestrzeń, którą zostawił, jest dość ograniczona. Aby uratować trochę, musi złożyć liczby całkowite, ale niestety jest naprawdę leniwy. Twoim zadaniem, jeśli chcesz mu pomóc, jest stworzenie funkcji / programu, który złoży daną liczbę całkowitą dodatnią dla naszego maniaka liczb.
Jak złożyć liczbę całkowitą?
Jeśli jest równomiernie podzielny przez sumę jego cyfr, podziel go przez sumę jego cyfr. Jeśli nie spełnia tego wymogu, weź jego resztę po podzieleniu przez sumę jego cyfr. Powtarzaj proces aż do osiągnięcia wyniku 1
. Złożona liczba całkowita to liczba operacji, które musiałeś wykonać. Weźmy przykład (powiedzmy 1782
):
Get sumę cyfr:
1 + 7 + 8 + 2 = 18
.1782
jest równomiernie podzielny przez18
, więc następną liczbą jest1782 / 18 = 99
.99
nie jest podzielna przez9 + 9 = 18
, stąd bierzemy resztę:99 % 18 = 9
.9
jest oczywiście podzielny przez9
, więc dzielimy go i otrzymujemy1
.
Rezultat jest taki 3
, ponieważ do osiągnięcia potrzebne były 3 operacje 1
.
Zasady i specyfikacje
Niektóre liczby całkowite mogą mieć sumę cyfr równą
1
, np.10
Lub100
. Twój program nie musi obsługiwać takich przypadków. Oznacza to, że będziesz mieć pewność, że liczba całkowita podana jako dane wejściowe nie ma sumy cyfr równej1
, i żadna operacja z podaną liczbą całkowitą nie spowoduje liczby, której suma cyfr to1
(z wyjątkiem1
samej, która jest „ cel"). Na przykład nigdy nie otrzymasz10
lub20
jako dane wejściowe.Wejście będzie dodatnią liczbą całkowitą wyższą niż
1
.Możesz przyjmować dane wejściowe i dostarczać dane wyjściowe dowolnym standardowym środkiem .
Przypadki testowe
Wejście -> Wyjście 2 -> 1 5 -> 1 9 -> 1 18 -> 2 72 -> 2 152790 -> 2 152 -> 3 666 -> 3 777 -> 3 2010 -> 3 898786854 -> 4
Oto program, który pozwala zwizualizować proces i wypróbować więcej przypadków testowych.
To jest golf golfowy , więc wygrywa najkrótszy kod w każdym języku (oceniany w bajtach)!
8987868546
jest prawidłowym wejściem, spowoduje uszkodzenie narzędzia testowego, a także wielu (jeśli nie wszystkich) odpowiedzi ...898786854
: nie8987868546
(dodałeś6
na końcu)8987868546
nie jest równa 1 ( spełniona reguła 1 ) i8987868546
jest liczbą całkowitą dodatnią wyższą niż 1 ( spełniona reguła 2 ).Odpowiedzi:
05AB1E ,
1312 bajtówWypróbuj online!
Wyjaśnienie
źródło
Python 2 ,
6357 bajtów-1 dzięki totalnie ludzkiemu
-1 dzięki Mr. Xcoder
-4 dzięki reffu
Wypróbuj online!
źródło
Haskell,
8578 bajtówZaoszczędź 7 bajtów dzięki Bruce'owi Forte.
Wypróbuj online.
źródło
divMod
i upuszczającwhere
: Wypróbuj online!where
. Użyję tego w przyszłości. :)sum[read[d]|d<-show n]
zapisuje bajtJavaScript (ES6),
66585149 bajtówPobiera dane wejściowe jako liczbę całkowitą. Powraca
false
do0
lub1
i zgłasza błąd przepełnienia gdy napotka dowolną liczbę którego cyfry dodać maksymalnie1
.Sprawdź to
źródło
eval(array.join`+`)
?Łuska , 12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C # (.NET Core) , 87 bajtów
Wypróbuj online!
Funkcja Lambda, która przyjmuje i zwraca liczbę całkowitą.
źródło
Japt ,
221917 bajtów-3 bajty dzięki @Shaggy.
-2 bajty dzięki @ETHproductions
Wypróbuj online!
źródło
s_¬
abyì
zapisać kolejne dwa bajty :-)Siatkówka , 100 bajtów
Wypróbuj online! Link zawiera tylko mniejsze przypadki testowe, ponieważ większe trwają zbyt długo.
źródło
Mathematica, 73 bajty
źródło
==0
zastąpić<1
?PHP, 68 + 1 bajtów
wyjście jednostkowe:
wyjście dziesiętne, 73 + 1 bajtów:
Uruchom jako potok z
-nR
lub spróbuj online .Operator Elvisa wymaga PHP 5.3 lub nowszego. Dla starszego PHP, wymień
?:
z?$n%$s:
(+5 bajtów).źródło
Rubinowy, 46 bajtów
źródło
Haskell ,
94938988 bajtówTo wydaje się naprawdę długie ...
Wypróbuj online!
Dzięki @Laikoni i @nimi za grę w golfa po 1 bajcie każdy!
źródło
C (gcc) ,
83817673 bajtówWypróbuj online!
źródło
Galaretka , 12 bajtów
Wypróbuj online!
źródło
Pyth,
2014 bajtówWypróbuj tutaj.
źródło
Perl,
71bajtów,64bajtów, 63 bajtyWypróbuj online
EDYCJA: zapisano 7 bajtów, dzięki komentarzowi Xcali
EDYCJA: od 5.14 nieniszczące podstawienie s /// r
źródło
-pl
zamiast tego na wierzchu powinna znajdować się flaga wiersza poleceń?-pl
flagę zgodnie z tym postem .$c
nie trzeba inicjować. Rozpocznie się od wartościundef
0. Średnik po zamknięciu while może przejść. Nie potrzebujesz też-l
. Nie jest wymagane pobieranie wielu danych wejściowych w jednym przebiegu.Dyalog APL, 36 bajtów
Wypróbuj online!
W jaki sposób?
źródło
Gaia , 13 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Matlab, 150 bajtów
Wejściom należy podać funkcję jako ciąg znaków, taki jak X („152”).
Funkcja działa podczas zapętlania i zwiększania wartości d. The
x=y;
Linia była konieczna, aby uniknąć błędu w Matlab próbuje odczytać i nadpisać wartość zmiennej w tym samym czasie, widocznie, który był nowy jeden na mnie.Nie golfowany:
źródło
Haskell , 68 bajtów
Wypróbuj online! Na podstawie odpowiedzi w0lf .
źródło
R , 85 bajtów
Anonimowa funkcja zwracająca wymagane dane wyjściowe.
Sprawdź wszystkie przypadki testowe!
źródło