Różni się to od Mojego Słowa, które może pokonać Twoje Słowo, ponieważ jest mniej złożone i wymaga jedynie obliczenia go, a nie porównania.
Aby znaleźć cyfrowy pierwiastek, weź wszystkie cyfry liczby, dodaj je i powtarzaj, aż otrzymasz liczbę jednocyfrową. Na przykład, jeśli numer był 12345
, należy dodać 1
, 2
, 3
, 4
, i 5
, coraz 15
. Następnie dodajesz 1
i 5
, dając ci 6
.
Twoje zadanie
Biorąc pod uwagę całkowitą N (0 < N <= 10000) za pomocą standardowego wejścia , drukowanie cyfrowe pierwiastek N .
Przypadki testowe
1 -> 1
45 -> 9
341 -> 8
6801 -> 6
59613 -> 6
495106 -> 7
Pamiętaj, że to jest golf golfowy , więc wygrywa kod z najmniejszą liczbą bajtów.
code-golf
number
arithmetic
Oliver Ni
źródło
źródło
number
. W szczególności. czy dane wejściowe muszą0
być obsługiwane?STALEMATE
. Lepiej byłoby zamknąć drugą jako duplikat tego.Odpowiedzi:
Pyke, 1 bajt
Wypróbuj tutaj!
Pobiera cyfrowy pierwiastek wejściowy
źródło
Galaretka ,
7 5 43 bajtówTryItOnline! lub wszystkie przypadki testowe
W jaki sposób?
Korzeń cyfrowych jest znane przestrzegać wzorze (N-1) + 1% 9.
To jest taka sama jak w ostatniej cyfry bijective podstawą 9
(i w związku z realizacją tego
0ḃ9=[]
i[]Ṫ=0
tego uchwyty krawędziowe przypadku zero).źródło
JavaScript (ES6),
1610 bajtówPrzypadki testowe
Pokaż fragment kodu
źródło
MATL , 3 bajty
Wypróbuj online!
Wiele (teraz usuniętych odpowiedzi) próbowało użyć modulo 9, aby uzyskać wynik. Jest to świetny skrót, ale niestety nie działa w przypadku wielokrotności 9. MATL ma funkcję modulo w interwale
[1, n]
. Korzystając z tego modulo, mamy1 % 3 == 1, 2 % 3 == 2, 3 % 3 == 3, 4 % 3 == 1
itd. Ta odpowiedź po prostu pobiera wejściowy modulo dziewięć za pomocą tego niestandardowego modulo.źródło
Mathematica,
2711 bajtówMathematica
Mod
przyjmuje trzeci parametr jako przesunięcie wynikowego zakresu modułu. Pozwala to uniknąć zmniejszenia wartości wejściowej i zwiększenia wartości wyjściowej.źródło
Python,
1620 bajtów+4 bajty, aby obsłużyć zerowy przypadek krawędzi.
repl.it
źródło
~-input()%9+1
print
?0
wynik9
zamiast zamiast0
, co jest pokrywane przezn and
część kodu), a ponadto byłby liczony jako 19 bajtów, a nie 13 ( ponieważprint
należy liczyć i).Julia, 12 bajtów
lub
mod1
jest alternatywą dlamod
której mapy zakresu[1, n]
zamiast[0, n)
.źródło
PHP, 15 bajtów
Poprzednia wersja PHP, 55 bajtów
źródło
<?=--$argv[1]%9+1?>
Haskell,
3534 bajtówWypróbuj na Ideone.
Wyjaśnienie:
źródło
Perl, 15 bajtów
Obejmuje +2 za
-lp
Podaj dane na STDIN
root.pl
Jest to rozwiązanie nudny, że już zostały dostarczone w wielu językach, ale przynajmniej ta wersja obsługuje
0
teżBardziej interesujące wykonywanie powtarzających się dodatków (choć w innej kolejności) jest w rzeczywistości tylko 1 bajt dłuższy:
źródło
R
72 7229 bajtówEdycja: Podziękowania dla @rturnbull za zgolenie dwóch bajtów.
źródło
ifelse
można go zastąpić`if`
identycznym zachowaniem, co pozwala zaoszczędzić kilka bajtów.if
działa. Czy możesz podać przykład lub dodać go do Porady dotyczące gry w golfa?ifelse
. W takim przypadku`if`(n%%9|!n,n%%9,9)
zapewnia identyczne zachowanie do opublikowanego kodu. O ile wiem, takie zachowanie jest nieudokumentowane! Dodam komentarz do wątku ze wskazówkami.Siatkówka , 7 bajtów
Wypróbuj online!
Widzę wiele rozwiązań matematycznych, ale w Retinie proste podejście wydaje się najlepsze.
Wyjaśnienie
{`
sprawia, że cały program działa w pętli, dopóki łańcuch się nie zmieni. Pętla składa się z dwóch etapów:Konwertuj każdą cyfrę na unarną.
Policz liczbę znaków (= przekonwertuj liczbę jednostkową na dziesiętną).
Działa to, ponieważ konwersja każdej cyfry na unarską bez separatora między cyframi tworzy pojedynczą liczbę jednoargumentową, która jest równa sumie wszystkich cyfr.
źródło
Brachylog , 9 bajtów
Wypróbuj online!
Wyjaśnienie
Alternatywne podejście, 11 bajtów
Ten używa meta-predykatu
i - Iterate
do wywoływaniaI
razy predykatu{@e+}
na wejściu. Spowoduje to wypróbowanie wartościI
od0
do nieskończoności, dopóki nie sprawi, że wyniki
będzie pojedynczą cyfrą, co będzie#0
prawdziwe.źródło
JavaScript (ES6),
4138 bajtówZaoszczędzono 3 bajty, dzięki Bassdrop Cumberwubwubwub
Bierze i zwraca ciąg znaków.
Przypadki testowe
Pokaż fragment kodu
źródło
s.split``
na[...s]
CJam ,
1913 bajtówInterpretator
Wyjaśnienie:
Podziękowania dla 8478 (Martin Ender) za -6 bajtów.
CJam, 6 bajtów
Sugerowany przez 8478 (Martin Ender). Interpretator
Myślałem o tym, ale Martin właśnie to zrozumiał. Wyjaśnienie:
źródło
:
, więc możesz to zrobić:~:+
. Nie przeszkadza również uruchomienie bloku co najmniej raz, dzięki czemu można użyćg
pętli zamiastw
pętli.r{_,1>}{:~:+`}w
działa, ale nie wiem, jak, u licha, mam gog
tutaj użyć .r{:~:+_s\9>}g
(oczywiście rozwiązanie w formie zamkniętejri(9%)
jest znacznie krótsze.Java 7, 63 bajty
Funkcja rekurencyjna, która po prostu pobiera cyfry za pomocą mod / div. Nic fajnego.
Tani port
z Jonathana Allana miałby marne 28 bajtów:
źródło
Python 2,
5451 bajtówPodziękowania dla Olivera i Karla Napfa za pomoc w oszczędzeniu 3 bajtów
źródło
while len(i)>1
, abywhile~-len(i)
zapisać jeden bajt.input()
i zmusić wejście do umieszczenia w cudzysłowie, aby zaoszczędzić 2 bajty.Python, 45 bajtów
Traktuje argument jako ciąg.
źródło
05AB1E , 6 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C,
6429 bajtówPort C z odpowiedzi Jonathana Allana (ze specjalnym przypadkiem 0).
Poprzedni 64-bajtowy kod:
q
pobiera sumę krzyżową if
powtarza przyjmowanie sumy krzyżowej do jednej cyfry.źródło
Siatkówka , 15 bajtów
Wypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
Wyjaśnienie
Konwertuj dane wejściowe na jednoargumentowe.
Weź modulo oparte na 1, usuwając dziewiątki, które mają za sobą co najmniej jeszcze jedną postać.
Policz pozostałą liczbę 1, aby przekonwertować z powrotem na dziesiętne.
źródło
Perl 6 , 29 bajtów
Rozszerzony:
źródło
Współczynnik , 24
Sprytna , matematyczna odpowiedź.
63 dla głupiego rozwiązania iteracyjnego:
źródło
Labirynt , 8 bajtów
używając równania
(n-1)%9+1
:?
odczytuje dane wejściowe jako dziesiętne i wypycha je na stos(
zmniejsza górną część stosu_
przesuwa zero na górę stosu9
popchnij stos stosu razy 10 cyfr (w tym przypadku 9)%
wyskakuje y, wyskakuje x, przesuwa x% y)
zwiększa górę stosu!
wyskakuje na górze stosu i wyrzuca go jako ciąg dziesiętny@
kończy programźródło
Pyth -
7467 bajtówNie najlepsza, ale wciąż przewyższa przyzwoitą liczbę odpowiedzi:
Podobnie jak poprzednia wersja, ale obsługuje również przypadki wielokrotności 9, używając logicznego lub.
Ta wersja nie spełnia 45 testów :
Wyjaśnienie:
Wypróbuj tutaj
Wypróbuj poprzednią wersję tutaj!
Poprzednie rozwiązania:
Objaśnienie :
Zapraszam do wypróbowania tutaj !
źródło
jQ9
nie zachowuje się jak Jellyḃ9
:-PAPL (Dyalog) ,
159 bajtówWypróbuj online!
źródło
Sześciokąt,
1915 bajtówBardziej czytelny:
Wypróbuj online!
-3 bajty, przyjmując inne podejście, dzięki czemu wielkość 0 krawędzi jest banalna.
-1 bajt poprzez naprawienie błędu 0 krawędzi
Korzystając ze wzoru ((n-1) mod 9) + 1, podobnie jak wiele innych rozwiązań.
źródło
K (oK) , 9 bajtów
Rozwiązanie:
Wypróbuj online!
Wyjaśnienie:
Super proste. Podziel liczbę na cyfry i zsumuj - rób to, dopóki wynik nie zbiegnie się:
źródło
x\y
kodowaniay
w baziex
z tyloma cyframi, ile potrzeba, więc jest nieco krótszy:(+/10\)/
10\:
... ale nie w ok - i.:'$
ma taką samą liczbę bajtów - więc poszedłem z tym :)\:
w kdb + (3.4+), ale dla OK musiałbym wiedzieć, ile dziesiątek należy umieścić na mojej liście.Beczka , 6 bajtów (SBCS na wiki Keg)
Wyjaśnienie:
źródło
Ruby, 12 bajtów
źródło
19
? Nie powinno tak być9
?