Trwałość multiplikatywna
- Pomnóż wszystkie cyfry w liczbie
- Powtarzaj, aż pozostanie Ci jedna cyfra
Jak wyjaśniono w Numberphile :
- Numberphile „Co jest specjalnego w 277777788888899?”
- Numberphile „Multiplicative Persistence (extra footage)”
Przykład
- 277777788888899 → 2x7x7x7x7x7x7x8x8x8x8x8x8x9x9 = 4996238671872
- 4996238671872 → 4x9x9x6x2x3x8x6x7x1x8x7x2 = 438939648
- 438939648 → 4x3x8x9x3x9x6x4x8 = 4478976
- 4478976 → 4x4x7x8x9x7x6 = 338688
- 338688 → 3x3x8x6x8x8 = 27648
- 27648 → 2x7x6x4x8 = 2688
- 2688 → 2x6x8x8 = 768
- 768 → 7x6x8 = 336
- 336 → 3x3x6 = 54
- 54 → 5x4 = 20
- 20 → 2x0 = 0
Nawiasem mówiąc, jest to aktualny rekord: najmniejsza liczba z największą liczbą kroków.
Golf
Program, który przyjmuje dowolną liczbę całkowitą jako dane wejściowe, a następnie wypisuje wynik każdego kroku, zaczynając od samego wejścia, aż trafimy na jedną cyfrę. W przypadku 277777788888899 wyjście powinno wynosić
277777788888899
4996238671872
438939648
4478976
338688
27648
2688
768
336
54
20
0
(Liczenie liczby kroków pozostaje jako ćwiczenie dla użytkownika).
Więcej przykładów
Od A003001 :
25
10
0
Z A003001 również:
68889
27648
2688
768
336
54
20
0
Z filmu Numberphile :
327
42
8
Pojawiło się więc pytanie o trwałość addytywną , ale jest to Multiplikatywna Trwałość. To pytanie wymaga również liczby kroków jako danych wyjściowych, a ja jestem zainteresowany widzeniem wyników pośrednich.
Odpowiedzi:
Galaretka , 4 bajty
Wypróbuj online!
Wyjaśnienie
Jako bonus, oto TIO, które znajdzie liczby o największej liczbie kroków dla danego zakresu liczb. Dobrze skaluje się nawet w TIO.
źródło
TI-BASIC (TI-84),
303231 bajtów-1 bajt dzięki @SolomonUcko!
Wejście jest w
Ans
.Dane wyjściowe są wyświetlane jako żądania wezwania. Końcowe
Ans
jest potrzebne do wydrukowania ostatniego kroku.Przyznaję, że sam nie pomyślałem o tej formule, raczej znalazłem ją tutaj i zmodyfikowałem, aby lepiej pasowała do wyzwania.
EDYCJA: Po ponownym odczytaniu wyzwania zdałem sobie sprawę, że program musi zostać zakończony, jeśli produkt jest jednocyfrowy. W związku z tym należy uwzględnić 2 bajty .
Przykład:
Wyjaśnienie:
Model wizualny:
Ans
zaczyna się jako125673
.Ten model obejmuje tylko logikę mnożenia cyfr; wszystko inne jest łatwiejsze do zrozumienia.
Uwagi:
TI-BASIC jest językiem tokenizowanym. Liczba znaków nie jest równa liczbie bajtów.
10^(
to ten jednobajtowy token .Ten program nie zapewni prawidłowej sekwencji produktów o liczbach całkowitych dłuższych niż 14 cyfr ze względu na ograniczenia precyzji dziesiętnej w kalkulatorach TI.
źródło
10^(
zewnątrzseq(
i pomijając nawias zamykający?K (ngn / k) , 9 bajtów
Wypróbuj online!
{
}\
stosuj funkcję w nawiasach klamrowych, aż sekwencja się zbiegnie$x
sformatuj argument jako ciąg znaków (lista znaków).'
oceń siebie (inne dialekty k wymagają dwukropka.:'
)*/
razy, tj. produktźródło
dzaima / APL ,
1411 bajtówWypróbuj online!
źródło
R , 59 bajtów
Wypróbuj online!
Ponieważ
print
invisibly
zwraca on dane wejściowe, możemy użyćprint(n)
wewnątrzwhile
pętli do symulacjido-while
pętli. To jest inspirowana przez jednego z moich porad dla golfa w R .Nagłówek pomaga zapobiegać drukowaniu dużych liczb w notacji naukowej.
źródło
05AB1E ,
74 bajtówWypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Wolfram Language (Mathematica) , 47 bajtów
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 45 bajtów
Wypróbuj online!
źródło
Echo
.Perl 6 , 23 bajtów
Wypróbuj online!
źródło
Python 2 ,
4643 bajty-3 dzięki xnor (porównanie łańcuchowe)
Wypróbuj online!
źródło
>
zamiastand
.PowerShell , 54 bajty
Wypróbuj online!
Metoda iteracyjna, która najpierw zapisuje argument wejściowy, a następnie przekształca go w ciąg znaków i potokuje w tablicę znaków. Do tej tablicy dołączone są pojedyncze gwiazdki i wykonywane jako polecenie z aliasem wyrażenia invoke. Ponieważ zapisuje to liczbę początkową do ostatniej liczby większej niż 0 (20, w danym scenariuszu testowym), dodaję końcowy
$a
koniec do wyniku.źródło
C # (interaktywny kompilator Visual C #) ,
797468 bajtówStaram się trzymać z dala od rekurencji w języku C # ze względu na długość deklaracji metody, ale w tym przypadku zapisuje się w porównaniu do pętli.
Wypróbuj online!
źródło
PHP , 63 bajty
Wersja iteracyjna, wywołanie z
php -nF
wejściem odSTDIN
.Wypróbuj online!
PHP ,
7271 bajtówWypróbuj online!
Wersja rekurencyjna jako funkcja.
Dane wejściowe: 277777788888899
Wejście: 23
źródło
Python 2 ,
616259 bajtówWypróbuj online!
-3 bajty, dzięki Jonathan Allan
źródło
int.__mul__
jest trzy bajty mniej niżlambda a,b:a*b
f(reduce(int.__mul__,map(int,`n`)))
abyf(eval('*'.join(`n`)))
zapisać 13 bajtów.perl 5 (
-n
-M5.01
),323025 bajtów25 bajtów
30 bajtów
32 bajty
źródło
-lpF//
-lpF//
, aktualizującMathGolf ,
910 bajtówWypróbuj online!
Teraz poprawnie obsługuje dane jednocyfrowe. Nie jest idealny, ale przynajmniej jest poprawny.
Wyjaśnienie
źródło
Julia 0,7 ,
3633 bajtówWypróbuj online!
Dzięki H.PWiz za -3 bajty.
źródło
[n;f(prod(digits(n)))]
JavaScript (ES6), 45 bajtów
Zwraca tablicę liczb całkowitych.
Wypróbuj online!
źródło
PowerShell , 51 bajtów
Wypróbuj online!
źródło
APL (NARS), 19 znaków, 38 bajtów
test:
źródło
Haskell, 45 bajtów
Wypróbuj online!
źródło
J , 16 bajtów
Wypróbuj online!
źródło
Rubin ,
383534 bajtówWypróbuj online!
1 bajt zapisany przez G B.
źródło
Japt
-R
, 9 bajtówStrasznie nieefektywny - nawet nie próbuj uruchamiać pierwszego przypadku testowego!
Spróbuj
źródło
Brachylog , 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (węzeł Babel) , 46 bajtów
Wypróbuj online!
JavaScript (węzeł Babel) , 44 bajty
Jeśli dane wejściowe można przyjąć jako ciąg
Wypróbuj online!
źródło
PowerShell ,
6459 bajtówWypróbuj online!
Metoda iteracyjna. Pobiera dane wejściowe i zapisuje je
$a
, a następnie wchodzi wfor
pętlę, o ile długość$a
wynosi dwa lub więcej (tzn. Jest większa niż9
). Wewnątrz pętli wyprowadzamy dane,$a
a następnie przeliczamy je, konwertująct
oCharArray
, łączącjoin
go razem z*
, a następnieiex
(skrót odInvoke-Expression
i podobny doeval
). Po wyjściu z pętli pozostała nam tylko jedna cyfra do wydrukowania, więc$a
ponownie umieszczamy ją w rurociągu.-5 bajtów dzięki KGlasier.
źródło
9-lt$a
zamiast$a.length-1
zaoszczędzić 5 bajtów. A jeśli przez cały czas nie korzystałeś z łańcucha, możesz odciąć przyzwoity kawałek. Sprawdź moją próbę PowerShell, jeśli chcesz!Węgiel drzewny , 13 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wydrukuj dane wejściowe po raz pierwszy.
Powtarzaj, dopóki długość wejścia nie jest równa 1.
Zastąp dane wejściowe produktem cyfrowym rzutowanym na ciąg.
Wydrukuj dane wejściowe w nowym wierszu.
źródło
Siatkówka , 24 bajty
Wypróbuj online! Wyjaśnienie:
Wydrukuj bieżącą wartość w swoim własnym wierszu na początku każdej pętli, aż przestanie się zmieniać i nie drukuj niezmienionej wartości dwa razy. Oceń bieżącą wartość na końcu każdej pętli.
Dodaj
*
po każdej cyfrze.Zakończ przekształcanie danych wejściowych w wyrażenie wyrażające się w produkcie cyfrowym.
Dla przypomnienia, Retina może to zrobić w jednym wierszu (25 bajtów):
źródło
C (gcc) , 58 bajtów
Wypróbuj online!
Okazuje się, że podejście iteracyjne jest o 1 bajt krótsze.
C (gcc) ,
6159 bajtów (rekurencyjne)Wypróbuj online!
Rekurencja wydaje się być krótsza niż iteracja zarówno dla wydruku, jak i kroku ...źródło