( Powiązane )
Biorąc pod uwagę liczbę całkowitą n > 1
,
1) Zbuduj zakres liczb n, n-1, n-2, ... 3, 2, 1
i oblicz sumę
2) Weź poszczególne cyfry tej liczby i oblicz produkt
3) Weź poszczególne cyfry tej liczby i oblicz sumę
4) Powtarzaj kroki 2 i 3, aż osiągnąć jedną cyfrę. Ta cyfra jest wynikiem.
Pierwsze dwadzieścia terminów sekwencji znajduje się poniżej:
3, 6, 0, 5, 2, 7, 9, 2, 7, 9, 1, 9, 0, 0, 9, 6, 7, 0, 0, 6
Uwaga: Ta sekwencja NIE jest w OEIS.
I / O i reguły
- Liczby szybko się powiększą, więc rozwiązanie musi być w stanie obsłużyć liczby wejściowe do 100 000 bez awarii (w porządku, jeśli Twój kod da sobie radę z tym przekroczeniem).
- Dane wejściowe i wyjściowe można podać dowolną dogodną metodą .
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je wydrukować.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Przykłady
n output
1234 9
3005 3
5007 5
9854 8
75849 8
100000 0
code-golf
sequence
number-theory
AdmBorkBork
źródło
źródło
n
. Opublikowane rozwiązanie musi działać tylko don = 100000
.Numbers will get very large quickly
nie, nie robiOdpowiedzi:
Python 2 ,
7772716260 bajtówDzięki @xnor za grę w golfa z 2 bajtów!
Wypróbuj online!
źródło
repeat until you reach a single digit
jest236172
; i to jedyny poniżej 1 miliona.05AB1E , 7 bajtów
Wypróbuj online!
Eklpanacja
źródło
Galaretka , 8 bajtów
Wypróbuj online!
Pełny program (zwraca tablicę singletonów zawierającą wynik, ale nawiasy nie są widoczne w STDOUT).
źródło
MATL ,
1513 bajtówW hołdzie dla języka miesiąca :
Wypróbuj online!
Nie sądzę, że istnieje prostszy sposób na uzyskanie cyfr liczby niż konwersja liczby na ciąg
V
, a następnie transpozycja jej!
i przekształcenie tego wektora pionowego z powrotem na numerycznyU
.Zaoszczędź 2 bajty dzięki samemu twórcy 1 ! Zapomniałem niejawnego końca, co oznacza, że mógłbym usunąć
]
, i zamiast porównywać liczbę elementów1
, mogłem po prostu zmniejszyć tę wartość i użyć jej jako wartości logicznej bezpośrednio.Wyjaśnienie wygląda następująco:
1 ... MATL, Luis Mendo.
źródło
JavaScript (ES6), 60 bajtów
Wypróbuj online!
Skomentował
Wersja alternatywna, 59 bajtów (niekonkurująca)
Wersja nierekurencyjna, która działa tylko dla n <236172 . (Obejmuje wymagany zakres, ale nie kwalifikuje się jako prawidłowy algorytm ogólny).
Wypróbuj online!
źródło
Number.MAX_SAFE_INTEGER ** 0.5 ~= 94906265
.Haskell ,
7271 63 bajtówDzięki @BMO za bajt i @nimi za 8 bajtów!
Wypróbuj online!
źródło
Stax ,
141310 bajtówUruchom i debuguj
Było całkiem fajnie. Zastanawiam się, czy istnieje bardziej zwięzły sposób na porównanie na końcu.
Wyjaśnienie
-1 bajty dzięki ovs
-3 bajty dzięki Scrooble
źródło
R ,
152 130109 bajtówWypróbuj online!
@Giuseppe znalazł
2142 bajtów z różnymi R rzeczami, do których jeszcze nie jestem przyzwyczajony, wraz ze sposobem uzyskiwania cyfr liczby bez wymuszania ciągów znaków i wstecz oraz z mniejszą liczbą bajtów!options(scipen=9)
jestwymagane w przypadku 9854 dla starej funkcji, ponieważ pierwszy etap produktu kończy się na 80000, co R drukuje jako 8e + 05.źródło
scipen
: Wypróbuj online ! zwróć uwagę,max(0,log10(x))
że jeślix=0
, tolog10(0)=-Inf
co powoduje błąd.Pyth , 11 bajtów
Wypróbuj tutaj!
źródło
Węgiel drzewny , 18 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Zsumuj liczby całkowite do wartości wejściowej.
Chociaż wynik jest większy niż 9, weź sumę cyfr iloczynu cyfr.
Rzuć wynik na ciąg i niejawnie go wydrukuj.
źródło
Gaia , 8 bajtów
Wypróbuj online!
Stare wyjaśnienie (przed naprawieniem błędu będącego winą Gaii IMO: P):
Oszczędność 1 bajtu dzięki Dennisowi .
źródło
┅⟨ΣΠ⟩°
zapisuje bajt.4
0
wyników[]
:(F #, 175 bajtów
Wypróbuj online!
Jedynym zastrzeżeniem dla tej funkcji jest to, że wartość wejściowa musi być typu
uint64
.Ungolfed to trochę tak:
Funkcja
d n
konwertuje liczbęn
na cyfry składowe. Najpierw konwertuje na ciąg, a następnie pobiera każdy znak w ciągu. Każdy znak należy następnie przekonwertować z powrotem na ciąg, w przeciwnym razie znaki zostaną przekonwertowane na ich wartości ASCII zamiast na „rzeczywiste” wartości.Ta
c n
funkcja jest główną funkcją, którejn
wartością początkową jest. W tej funkcjir
jest nasza bieżąca wartość.while
Pętla ma co następuje:r
na cyfry składowe (d r
).Seq.reduce
które przyjmuje funkcję z wartością skumulowaną (a
) i następną wartością w sekwencji (x
), w tym przypadku zwraca produkt. Wartość początkowa jest pierwszym elementem w sekwencji.d
).r
.źródło
Befunge, 136 bajtów
Możesz spróbować tutaj .
Chociaż nie wszyscy tłumacze mają wystarczająco duży rozmiar komórki, działa z małymi liczbami dla praktycznie każdego. W przypadku większej liczby osób
n
może być potrzebny tłumacz taki jak BefunExec .źródło
Gol> <> ,
3533 bajtówWypróbuj online!
-2 bajty autorstwa Jo Kinga.
Szerokie wykorzystanie funkcji i niejawnych nieskończonych pętli.
Przykład pełnego programu i jak to działa
źródło
Japt,
161413 bajtówSpróbuj
Wyjaśnienie
źródło
Łuska , 7 bajtów
Wypróbuj online!
źródło
PHP 7, 89 bajtów
Uruchom jako potok z
-r
lub spróbuj online .+
metody cast do int,~
aby działała zgodnie z oczekiwaniami.for()
zamiastdo ... while()
.Starsze PHP wymaga jeszcze jednego bajtu:
for($s=str_split,$a=...;$a>9;)$a=array_sum($s(...));
(Brak przypisania
str_split
do zmiennej w ogóle zmarnowałby kolejny bajt).źródło
Perl 6 , 49 bajtów
Wypróbuj online!
źródło
[*](.comb).comb
zamiast([*] .comb).comb
Tcl , 118 bajtów
Wypróbuj online!
źródło
PowerShell Core ,
91 10193 bajtówWypróbuj online!
Ungolfed trochę ...
Pierwszymi krokami było podzielenie liczb całkowitych na cyfry - zrobiono to, dzieląc liczbę całkowitą na tablicę
ciągówznaków. Następnie wstaw operand, a następnie oceń ciąg jako polecenie. Następnie należy wykonać cykl wielokrotnego dodawania, dopóki wprowadzana cyfra nie będzie zawierała jednej cyfry.iex
jest aliasem, dlaInvoke-Command
którego ocenia się ciąg znaków przekazany do pierwszej pozycji parametru.Edycja: Zgodnie z żądaniem @AdmBorkBork dodałem nagłówek funkcji do liczby bajtów. Zrobiłem też małą matematykę i zdałem sobie sprawę, że górna granica liczby iteracji to
< log log 10^6 < log 6 < 2
, więc zaoszczędziłem kolejne sześć bajtów.Edytuj x2: @AdmBorkBork znalazł bardziej zwięzły sposób na przekształcenie liczby całkowitej w wyrażenie matematyczne, a następnie zasugerował przekazanie jej
iex
. To zaoszczędziło 8 bajtów. Dziękuję Ci!źródło
Function F($a){ }
w liczbie bajtów. Jednakże, powinieneś być w stanie zaoszczędzić trochę stosując[char[]]
zamiast-split''-ne''
, jak sądzę.[char[]]1234=Ӓ
, który jest nieprawidłowy; Być może uda mi się sprawić, by działało, ale może to nie być teraz oczywiste. Dzieki za sugestie![char[]]"$o"
i|iex
raczej niżiex( )
.Perl 5
-p
, 61 bajtówWypróbuj online!
źródło
Rubinowy , 57 bajtów
Wypróbuj online!
źródło
Java 8, 129 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
Julia 0.6 , 56 bajtów
Wypróbuj online!
Całkiem proste: oblicz
(n+1)n÷2
sumę od 1..n, sprawdź, czy jest to liczba jednocyfrowa (>9
), jeśli nie, spróbuj ponownie z k ustawionym na sumę cyfr iloczynu k, w przeciwnym razie zwróć k.źródło