Biorąc pod uwagę liczbę całkowitą n> 2 , wydrukuj lub zwróć najmniejszą nieujemną liczbę całkowitą k, tak aby a (n, k) = 9 , gdzie a (n, k) jest zdefiniowane przez:
- a (n, 0) = n
- a (n, k + 1) =
- a (n, k) / 2 + 1, jeśli a (n, k) jest parzyste
- suma cyfr a (n, k) ² (w podstawie 10), jeśli a (n, k) jest nieparzysta
Przykłady
Dla n = 5 oczekiwane wyjście to k = 4 :
a(5, 0) = 5
a(5, 1) = 7 (5² = 25 and 2 + 5 = 7)
a(5, 2) = 13 (7² = 49 and 4 + 9 = 13)
a(5, 3) = 16 (13² = 169 and 1 + 6 + 9 = 16)
a(5, 4) = 9 (16 / 2 + 1)
Dla n = 40 oczekiwanym wynikiem jest k = 2 :
a(40, 0) = 40
a(40, 1) = 21 (40 / 2 + 1)
a(40, 2) = 9 (21² = 441 and 4 + 4 + 1 = 9)
Wyjaśnienia i zasady
- Gwarantowane wejście jest większe niż 2.
- Twój program powinien teoretycznie działać dla dowolnej wartości n . (W praktyce może być ograniczony maksymalnym rozmiarem liczby całkowitej obsługiwanym przez Twój język).
- k może być indeksowane 0 lub indeksowane 1. Proszę podać to w swojej odpowiedzi.
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
Pierwsze wartości
Poniżej znajdują się pierwsze wartości od n = 3 do n = 422 , z k0 indeksowane. (W przypadku indeksowania 1 wystarczy dodać 1
te wartości).
1 2 4 3 3 5 0 4 3 4 2 6 1 1 6 5 5 4 1 5 2 3 3 7 6 2 3 2 2 7
6 6 5 6 6 5 1 2 2 6 6 3 1 4 3 4 4 8 1 7 6 3 5 4 6 3 2 3 3 8
7 7 3 7 4 6 6 7 5 7 6 6 6 2 4 3 3 3 6 7 3 7 2 4 7 2 6 5 6 4
7 5 2 5 6 9 6 2 3 8 2 7 1 4 6 6 6 5 1 7 4 4 3 3 7 4 3 4 2 9
6 8 6 8 6 4 6 8 2 5 3 7 6 7 3 8 2 6 7 8 6 7 5 7 6 7 4 3 3 5
6 4 3 4 4 4 6 7 6 8 3 4 6 8 7 3 6 5 6 8 3 3 2 7 6 6 5 7 6 5
7 8 2 6 3 3 6 6 6 7 4 10 6 7 3 3 6 4 1 9 2 3 3 8 7 2 6 5 2 7
7 7 6 7 3 6 7 2 4 8 3 5 6 5 6 4 2 4 6 8 3 5 6 4 7 5 2 3 6 10
7 7 3 9 2 7 1 9 5 7 6 5 6 7 4 9 6 3 6 6 3 4 2 8 7 7 6 8 6 4
7 9 4 3 3 7 7 8 3 9 4 7 6 8 3 6 6 8 7 7 7 8 6 5 7 4 6 4 2 6
7 7 6 5 3 4 7 5 4 5 3 5 7 7 6 8 2 7 1 9 6 4 6 5 7 7 2 9 6 8
7 4 3 7 4 6 6 7 6 9 3 4 6 4 2 3 3 8 1 7 6 7 2 6 7 8 3 7 5 6
7 8 2 9 3 3 6 7 6 4 4 4 6 7 6 7 6 7 6 8 7 5 6 11 7 7 3 8 4 4
7 4 6 7 3 5 6 2 2 10 6 3 6 4 3 4 4 9 7 8 3 3 6 7 7 6 4 3 6 8
9! ≠ 9
an opinion or conclusion formed on the basis of incomplete information.
Odpowiedzi:
Łuska , 13 bajtów
Jest to indeks 1. Wypróbuj online!
Wyjaśnienie
Nic nadzwyczajnego.
źródło
Lω
rozwiązać.Perl 6 , 41 bajtów (40 znaków)
Wypróbuj online!
Używa 1-indeksowania k, więc daje 1 wyższe odpowiedzi niż przykłady w OP. Jeśli nie to oznacza indeksowanie 1, będę musiał dodać jeszcze 1 bajt.
Objaśnienie : To anonimowa funkcja. Po prostu używamy funkcji Perla 6 do generowania list przy użyciu rekurencji :—). Wygląda to tak:
(first element),(block that takes the previous element and gives the next)...(end condition)
. W tym przypadku pierwszym elementem jest$_
(argument funkcji głównej), a warunek końcowy jest9
(spełniony, gdy wygenerujemy 9). W środkowym bloku używamy$_
odwołania do jego argumentu (= poprzedni element sekwencji). Jest?? !!
to stary operator trójskładnikowy (lepiej znany jako? :
). Na koniec bierzemy długość tej listy, wymuszając kontekst liczbowy przez+(...)
.Ostatnią dziwną rzeczą jest tutaj suma cyfr. Liczby są
Cool
(zachowują się jak ciągi i liczby), więc używamy metody ciągu.comb
na$_²
(podaj listę znaków = cyfry), a następnie dodając znaki do góry (co konwertuje je z powrotem na liczby).źródło
Galaretka , 17 bajtów
Wypróbuj online!
Proste podejście. Wykorzystuje indeksowanie 0.
Wyjaśnienie
źródło
do-while n != 9
zamiastwhile n!= 9
Python 2 ,
129126766867645453 bajty-3 bajty dzięki Jonathanowi Frechowi. -8 bajtów dzięki Maltysen. -7 bajtów dzięki Jonathanowi Allanowi. -1 bajt dzięki Mr. Xcoder.
Wypróbuj online!
Od kogoś, kto prawdopodobnie nie zna wystarczającej matematyki, wydaje się to całkowicie arbitralne. : P
źródło
)%2and sum
z)%2*sum
, oszczędzając trzy bajty.k
całkowicie pozbyć i zaoszczędzić kolejne siedem bajtówMathematica, 58 bajtów
1-indeksowany
Wypróbuj online! (w celu pracy z matematyką
Tr
jest zastąpiony przezTotal
)tutaj jest wersja -1-bajtowa @JungHwanMin (ale nie działa z matematyki, więc zachowałem oba)
Mathematica, 57 bajtów
źródło
2∣#
zamiastOddQ@#
i zamień dwa wyrażeniaIf
.JavaScript (ES6),
5950 bajtów0-indeksowane.
Spróbuj
Wyjaśnienie
Pierwszą rzeczą, którą robimy, jest obliczanie
n-9
. Jeślin==9
tak, to oczywiście daje0
i wszystko się kończy. Jeślin!=9
ton-9
da wartość niezerową, co, zgodnie z prawdą, oznacza, że możemy kontynuować logiczne ORAZ. Ponownie wywołujemy funkcję, przekazującn
do niej nową , obliczoną w następujący sposób:Jeśli
n
modulo2
jest prawdą,n
to znaczy jest dziwne.Pomnóż
n
sam, przekonwertuj go na ciąg i zniszcz strukturę tego ciągu na tablicę pojedynczych znaków (cyfr).Połącz ponownie znaki za pomocą ciągu
+
, co da nam matematyczny wyraz.Oceń to wyrażenie, podając nam sumę cyfr
n*n
.Jeśli
n%2
falsey (tzn.n
Jest parzysty), po prostu dzielimyn
przez2
i dodajemy1
.Do wyniku ponownego wywołania funkcji dodajemy
1
. Tak więc, używając początkowego wejścia5
, proces przebiega następująco:źródło
Galaretka ,
1615 bajtów-1 bajt dzięki milom (użycie trójskładnika, jeśli)
Monadyczny link pobierający i zwracający liczby.
1-indeksowany
Wypróbuj online! lub zobacz zestaw testów (wymusza indeksowanie 0 i formaty takie jak blok kodu OP)
W jaki sposób?
źródło
²DSµH‘$Ḃ?n9$пL
Haskell,
6259 bajtówWypróbuj online!
Edycja: -3 bajty dzięki @ Ørjan Johansen.
źródło
last$x:[y|odd a]
można skrócić docycle[x,y]!!a
.Perl 5 , 56 + 1 (-n) = 57 bajtów
Wypróbuj online!
źródło
9
.05AB1E , 16 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
VB.NET (.NET 4.5.2), 107 + 20 (import) = 117 bajtów
Wymaga
Imports System.Linq
Funkcja, która przyjmuje
n
dane wejściowe jako liczbę całkowitą i zwraca wartość 0k
.Nie golfowany:
źródło
Golfscript, 34 bajty
Wypróbuj online!
Naprawdę potrzebuję lepszego sposobu niż dodawanie cyfr liczby.
źródło
Pyth ,
2322 bajtówNa razie jest to funkcja rekurencyjna,
ale spróbuję przełączyć się na..W
(funkcjonalny podczas), aby zamiast tego zapisać bajtyWypróbuj tutaj! (z dodatkowym kodem do wywołania funkcji - użyj- bez spacji)
y
<your_number>
źródło
Java 8,
11098 bajtów0-indeksowane
Wyjaśnienie:
Wypróbuj tutaj.
źródło
Clojure v1.8,
124113112 bajtów0-indeksowane
Wypróbuj online!
Wyjaśnienie
źródło
Pyth, 18 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
źródło
Japt,
2221 bajtów0-indeksowane.
Spróbuj
Wyjaśnienie
Domniemane wprowadzenie liczby całkowitej
U
.Wygeneruj tablicę liczb całkowitych od
0
doU-1
i przekaż każdą z nich przez funkcję.Ustaw wartość
U
.Jeśli
U
można podzielić przez 2.U
podzielone przez 2 plus 1 (Ä
).W przeciwnym razie:
U
do potęgi 2 (²
), podzielone na tablicę cyfr (ì
) i zmniejszone przez dodanie (x
).Dołącz wynikową tablicę do tablicy danych wejściowych.
Znajdź indeks pierwszego wystąpienia
9
w tablicy. Wynik niejawnie wyprowadza wynik.źródło
@¥9}a@=u ?U²ìx :U/2Ä;°T
Gdyby tylko istniała metoda