Zdefiniujmy sekwencję: Sekwencja sumowania n cyfr (n-DSS) to sekwencja rozpoczynająca się od n . Jeśli ostatnią liczbą było k , to następną liczbą jest k + cyfra-suma (k) . Oto kilka pierwszych n-DSS:
1-DSS: 1, 2, 4, 8, 16, 23, 28, 38, 49, 62, 70...
2-DSS: 2, 4, 8, 16, 23, 28, 38, 49, 62, 70, 77...
3-DSS: 3, 6, 12, 15, 21, 24, 30, 33, 39, 51, 57...
4-DSS: 4, 8, 16, 23, 28, 38, 49, 62, 70, 77, 91...
5-DSS: 5, 10, 11, 13, 17, 25, 32, 37, 47, 58, 71...
6-DSS: 6, 12, 15, 21, 24, 30, 33, 39, 51, 57, 69...
7-DSS: 7, 14, 19, 29, 40, 44, 52, 59, 73, 83, 94...
8-DSS: 8, 16, 23, 28, 38, 49, 62, 70, 77, 91, 101...
9-DSS: 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99...
Dla 1 jest to A004207 , chociaż kilka pierwszych cyfr jest różnych z powodu nieco innej definicji. Dla 3 jest to A016052 ; dla 9, A016096 .
Dzisiejsze wyzwanie polega na znalezieniu sekwencji o najniższej liczbie cyfr, w której pojawia się dana liczba. Nazywa się to „odwrotną funkcją kolumbijską” i jest to A036233 . Pierwsze dwadzieścia terminów, zaczynając od 1, to:
1, 1, 3, 1, 5, 3, 7, 1, 9, 5, 5, 3, 5, 7, 3, 1, 5, 9, 7, 20
Kilka innych dobrych przypadków testowych:
117: 9
1008: 918
Musisz obsługiwać liczby całkowite większe niż 0 i możesz przyjmować dane wejściowe i wyjściowe w dowolnym standardowym formacie. Jak zwykle jest to gra w golfa , więc wygrywa najkrótsza odpowiedź w każdym języku.
Odpowiedzi:
Haskell ,
1046463 bajtów(-26 dzięki H.PWiz, dodatkowe -14 dzięki Sriotchilism O'Zaic, dodatkowe -1 dzięki Cole)
To jest funkcja.
Wypróbuj online!
Wyjaśnienie:
Sekwencja złożonych funkcji, która zwraca y + cyfrowa suma y. Najpierw konwertuje na ciąg, a następnie wykonuje gimnastykę monad, aby uzyskać sumę znaków i oryginalny numer (dzięki Cole).
<*>
Operator w tym kontekście ma rodzaj i definicjęwięc możemy napisać powyższe jako
To
read . pure
konwertujeChar
na liczbę, więc(+) . read . pure :: Char -> Int -> Int
dodaje cyfrę do skumulowanej wartości. Ta wartość jest inicjalizowana do podanej liczby w zakładce.until
wielokrotnie stosuje funkcję do swojego wyniku (w tym przypadku y + suma cyfrowa y), dopóki nie spełni wymagania określonego przez funkcję w pierwszym argumencie. Daje to najmniejszy element y-DSS, który jest większy lub równy x.Nieskończona leniwa lista y, tak że najmniejszy element y-DSS> = x to w rzeczywistości x. Używa notacji ze zrozumieniem listy Haskella (o której też całkowicie zapomniałem, dziękuję wam wszystkim).
Pierwszy element tej listy, który jest najmniejszy i spełnia wymagania wyzwania.
źródło
fmap
przede wszystkim trochę mnie dezorientujesz.Python 2 ,
7371 bajtów-2 bajty dzięki Erikowi .
Wypróbuj online!
źródło
l
dok>n
.Perl 6 , 44 bajtów
Wypróbuj online!
Naiwne rozwiązanie, które sprawdza każdą sekwencję, dopóki nie znajdzie takiej, która zawiera dane wejściowe
Wyjaśnienie:
źródło
Rubinowy , 51 bajtów
Wypróbuj online!
źródło
Galaretka , 11 bajtów
Wypróbuj online!
Pełny program
źródło
MATL , 18 bajtów
Wypróbuj online! Lub sprawdź pierwsze 20 wartości .
Wyjaśnienie
W przypadku danych wejściowych jest
i
to coraz częstsze,n
dopóki nie zostaną uwzględnione pierwszei
warunkin
-tej sekwencjii
. Wystarczy przetestowaći
warunki dla każdej sekwencji, ponieważ sekwencja rośnie.źródło
Dalej (gforth) , 106 bajtów
Wypróbuj online!
Objaśnienie kodu
źródło
Pyth , 13 bajtów
Wypróbuj tutaj lub sprawdź pakiet testowy .
Jak to działa
źródło
fqQ.W<HQ+sjZ10
na 14. Ciągle zapominam o `i s jako sposobie uzyskiwania cyfr z liczby całkowitej!Galaretka , 9 bajtów
Monadyczny link przyjmujący dodatnią liczbę całkowitą,
n
która daje dodatnią liczbę całkowitą,a(n)
odwrotny kolumbijski zn
.Wypróbuj online! Lub zobacz zestaw testowy .
W jaki sposób
Skutecznie pracujemy wstecz, wielokrotnie szukając wartości, którą dodaliśmy, dopóki jej nie znajdziemy:
Używając
13
jako przykład ...źródło
Python 2 , 85 bajtów
Wypróbuj online!
To z pewnością działa dla wszystkich przypadków testowych, a także dla wszystkich wpisów 1..88 podanych w OEIS; ale nadal nie jestem całkiem pewien, że to provably poprawne. (To jedna z moich skarg na Church of Unit Testing :)).
źródło
a.index(n)
Wolfram Language (Mathematica) , 61 bajtów
Wypróbuj online!
źródło
MathGolf , 13 bajtów
Wypróbuj online!
Świetne wyzwanie! Spowodowało to, że znalazłem kilka błędów w niejawnym popowym zachowaniu MathGolf, który dodał 1-2 bajty do rozwiązania.
Aby udowodnić, że to zawsze zadziała, łatwo to zauważyć
n <= input
, ponieważinput
jest to pierwszy elementinput
sekwencji. Technicznie nie udowodniłem, że to rozwiązanie jest zawsze ważne, ale przechodzi każdy testowany przypadek.źródło
05AB1E , 13 bajtów
Wypróbuj online!
źródło
Czysty , 86 bajtów
Wypróbuj online!
Rozszerzony:
Niepokoi mnie
digitToInt d
to, że jest dłużej niżtoInt d-48
źródło
C (gcc) , 102 bajty
Wypróbuj online!
źródło
JavaScript, 65 bajtów
Wypróbuj online!
Działa również jako C, ale kosztuje jeszcze jeden bajt
C (gcc) , 66 bajtów
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) ,
83, 82 bajtówWypróbuj online!
źródło
Japt ,
1514 bajtówTrójskładnik do obsługi przypadków, które
input=output
mnie denerwują!Spróbuj
źródło
cQuents , 18 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Dalej (gforth) , 99 bajtów
Wypróbuj online!
W dużej mierze podobny do przesłania reffu (106 bajtów) . Części do gry w golfa to:
Jak to działa
źródło
Węgiel drzewny , 26 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wykorzystuje algorytm @ ChasBrown. Jeśli okaże się to nieważne, to dla 29 bajtów:
Wypróbuj online! Link jest do pełnej wersji kodu. Działa poprzez obliczenie pierwszego elementu każdej sekwencji sumowania cyfr nie mniej niż
n
. Wyjaśnienie:Wejście
n
.Pętla, aż znajdziemy cyfrową sekwencję sumującą zawierającą
n
.Następna sekwencja zaczyna się o jedną więcej niż liczba dotychczasowych sekwencji.
Pętla, gdy element sekwencji jest mniejszy niż
n
.Dodaj sumę cyfr, aby uzyskać następny element sekwencji.
Wciśnij ostatniego członka na listę.
Wydrukuj liczbę wyliczonych list, dopóki nie znajdziemy jednej zawierającej
n
.źródło
Czerwony , 103 bajty
Wypróbuj online!
źródło
CJam , 25 bajtów
Wypróbuj online!
źródło
Gaia , 16 bajtów
Wypróbuj online!
Zwraca listę zawierającą najmniejszą liczbę całkowitą.
Gaia , 16 bajtów
Wypróbuj online!
Korzysta z obserwacji poczynionej przez pana Xcodera . Nie jest krótszy od drugiego, ale mimo to jest interesującym podejściem.
Gaia , 16 bajtów
Wypróbuj online!
Trzecie podejście nie wykorzystuje
N-find
,#
ale nadal opiera się na tej samej obserwacji, co podejście środkowe. Zwraca liczbę całkowitą zamiast listy.źródło
Clojure , 106 bajtów
Wypróbuj online!
Jest to 99 bajtów, ale powoduje przepełnienie stosu dla większych danych wejściowych (być może poprawienie JVM pomogłoby):
źródło
C # (interaktywny kompilator Visual C #) , 75 bajtów
Wypróbuj online!
źródło
Łuska ,
1410 bajtów-4 dzięki @ H.PWiz
Wypróbuj online!
źródło
€mΩ≥¹SF+dN
(Nadal uważam, że jest krótszy)V£⁰m¡SF+dN
atrament ,
130127 bajtówWypróbuj online!
-3 bytes
poprzez konwersję do pełnego programu, który pobiera jednoargumentowy wkład.To wydaje się zbyt długie, aby nie można było grać w golfa.
Nie golfił
źródło
C (gcc) ,
807978 bajtówWypróbuj online!
-2 od sufitu
źródło