Liczba trójkątna to liczba, którą można wyrazić jako sumę kolejnych liczb całkowitych dodatnich, zaczynając od 1. Można je również wyrazić wzorem n(n + 1) / 2
, w którym n
jest pewna liczba całkowita dodatnia.
Liczbowy odpowiednik liczby jest obliczany w następujący sposób:
- Podziel liczbę na tablicę jej cyfr, np
613 => [6 1 3]
- Dla każdej liczby w tablicy oblicz
n
trzecią liczbę trójkątną;[6 1 3] => [21 1 6]
- Zsumuj wynikową tablicę;
[21 1 6] => 28
Twoim zadaniem jest, biorąc pod uwagę liczbę całkowitą n
, kilkakrotnie obliczyć n
cyfrowy odpowiednik, aż wynik będzie równy 1, a następnie wypisz wszystkie obliczone wartości. Możesz wyprowadzać wartości w dowolnej kolejności iz opcjonalnym dołączeniem oryginalnego numeru na początku tablicy. To jest golf golfowy, więc wygrywa najkrótszy kod.
Przypadki testowe
23 => 9 45 25 18 37 34 16 22 6 21 4 10 1
72 => 31 7 28 39 51 16 22 6 21 4 10 1
55 => 30 6 21 4 10 1
78 => 64 31 7 28 39 51 16 22 6 21 4 10 1
613 => 28 39 51 16 22 6 21 4 10 1
8392 => 90 45 25 18 37 34 16 22 6 21 4 10 1
11111 => 5 15 16 22 6 21 4 10 1
8592025 => 117 30 6 21 4 10 1
999999999 => 405 25 18 37 34 16 22 6 21 4 10 1
141
i zawieran
cyfry. Wartość maksymalna jego digitangular odpowiednik może mieć to45n
, więcdigi-△(x) ≤ 45n < 45(1+log_10(x))
i dlax > 141
mamy45(1+log_10(x)) < x
, a więcdigi-△(x) ≤ x-1
zax > 141
, a raz mijamy141
granicę, dobrze, my brute wymusić udowodnić poprzez programy.Odpowiedzi:
Łuska , 6 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E ,
65 bajtówWypróbuj online! Edycja: Zapisano 1 bajt dzięki @Emigna. Wyjaśnienie:
źródło
€
sięS
, można pominąć jednegoO
.L
tak się zachowuje?J,
2019 bajtówWypróbuj online!
Wysyła również oryginalny numer.
Wyjaśnienie
źródło
[:+/
->1#.
miau!APL (Dyalog) ,
232017 bajtów3 bajty zapisane dzięki @ngn
Wypróbuj online!
W jaki sposób?
⍵∪⍨
- dołącz bieżącą tablicę do+/
- suma∊
- spłaszczone⍳¨
- zakresy każdego⍎¨⍕
- cyfra⊃⍵
- poprzednia wartość⍣≡
aż do konwergencji. Użycie∪
(union) zapewnia, że po dołączeniu pierwszego 1, następne zostanie wykluczone ze względu na ustawioną unikalność, a tablica się zbiegnie.źródło
1↓
(upuść pierwszy){+/∊⍳¨⍎¨⍕⎕←⍵}⍣≡
bez drukowania ostatniego 1?Haskell,
514746 bajtówWypróbuj online!
Edycja: @ H.PWiz zapisał bajt. Dzięki!
źródło
Python 2 , 62 bajty
Wypróbuj online!
źródło
Wolfram Language (Mathematica) ,
4341 bajtówWypróbuj online!
Jak to działa
Wyrażenie to
#.(#+1)/2&@IntegerDigits@#
daje odpowiednik cyfry#
. MyEcho
dane wejściowe używamy oceny zwarcia z,&&
aby zatrzymać, jeśli osiągnęliśmy1
, i w przeciwnym razie powrócić na cyfrowym odpowiedniku.-2 bajty dzięki Martinowi Enderowi za
.
lewę: nie musimy używaćTr
sumowania cyfr, jeśli zamienimy mnożenie#(#+1)/2
przez iloczyn iloczynu#.(#+1)/2
.źródło
Tr
:Echo@#>1&�[#.(#+1)/2&@IntegerDigits@#]&
FixedPointList
z wyjątkiem tego, w jaki sposób drukuje ten stały punkt dwukrotnie). Wygląda na to, że powinno to być wcześniej.Wolfram Language (Mathematica) ,
494239 bajtówPodziękowania dla Miszy Ławrow za oszczędność 3 bajtów.
Wypróbuj online! (Z
++y
jakiegoś powodu TIO potrzebuje nawiasów wokół . W mojej lokalnej instalacji Mathematica działa bez nich, tak jak powinno).Drukuje każdą wartość w osobnym wierszu, poprzedzonym
>>
i zawiera numer początkowy.źródło
#//.x_:>(y=IntegerDigits@Echo@x).++y/2&
. (... może. Z jakiegoś powodu TIO nie lubi tego, ale Mathematica ma się z tym dobrze?)#//.x_:>(y=IntegerDigits@Echo@x).(++y)/2&
41 bajtów i działa w TIO. Ale moja kopia Mathematiki nie uważa nawiasów za konieczne.Ohm v2 ,
97 bajtówWypróbuj online!
Wyjaśnienie
źródło
u
niepotrzebne?}
nie podzieli cyfrRetina , 21 bajtów
Wypróbuj online! (Wyniki poszczególnych przypadków nie są dobrze rozdzielone, ale każde wyjście kończy się na
1
.)Drukuje każdy numer w osobnej linii, w kolejności, łącznie z numerem początkowym.
Wyjaśnienie
To tylko niektóre konfiguracje programu.
{
tworzy pętlę programu, dopóki nie zmieni wyniku (co się zdarza, kiedy do niej dojdziemy1
),:
drukuje liczbę przed każdą iteracją i;
zapobiega dwukrotnemu drukowaniu końcowego wyniku na końcu programu. ToG
jest po prostu mój zwykły sposób tworzenia sceny bez operacji.Przekształć każdą cyfrę w unarną i umieść ją we własnej linii.
Oblicz trójkątną liczbę w każdej linii, zastępując każdą
1
jej przedrostkiem. Możemy również użyćM!&`1+
tutaj, który daje nam wszystkie sufiksy każdej linii.Policz wszystkie
1
s, które sumują wszystkie liczby trójkątne i przekształcają wynik z powrotem na dziesiętny.źródło
Rubin,
60 4742 bajtów-13 bajtów autorstwa @JustinMariner
-5 bajtów przez @GB
Wypróbuj online!
źródło
[*...]
) i zmienić(k+1)
na,-~k
aby zapisać łącznie 5 bajtów: Wypróbuj online! Dodatkowo możesz zaoszczędzić 8 więcej, przechodząc na anonimową funkcję lambda: Wypróbuj online!.map
nie mogę brać tablic.Befunge-93 , 51 bajtów
Wypróbuj online!
James Holderness sprytnie przekształcił mój progarm w 51-bajtową formę. Dzięki!
źródło
Pushy ,
24222117 bajtówWypróbuj online!
Wyjaśnienie
źródło
Japt ,
1917 bajtówPobiera dane wejściowe jako tablicę jednego elementu.
Spróbuj
źródło
R , 70 bajtów
Wypróbuj online!
Zwraca również oryginalną wartość.
R , 80 bajtów
Wypróbuj online!
Nie zwraca oryginalnej wartości.
źródło
Lua , 91 bajtów
Wypróbuj online!
źródło
05AB1E ,
2012 bajtówZaoszczędzono 2 bajty dzięki Cairney Coheringaahing
Wypróbuj online!
Wyjaśnienie
(stara wersja)
źródło
JavaScript,
6157 bajtówWypróbuj online!
źródło
Python 2 , 69 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 18 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
dc , 62 bajty
Wypróbuj online!
źródło
k , 19 bajtów
Nic dziwnego, że działa podobnie do już opublikowanych rozwiązań APL i J.
źródło
Galaretka , 7 bajtów
Wypróbuj online!
DRFSµÐĿ
: Pełny program / łącze monadyczne.ÐĿ
: Pętla, aż wyniki nie będą już unikalne (jeśli coś innego niż 1 wystąpi dwukrotnie, wówczas dane wejściowe nie mają określonego wyniku, ponieważ nigdy nie osiągną 1).D
: Konwertuj z liczb całkowitych na dziesiętne.R
: Zakres (1-indeksowany). Wektoryzuje.F
: Spłaszcz iS
: Suma (µ
po prostu tworzy nowy łańcuch monadyczny)źródło
dc, 31 bajtów
Funkcja
m
oblicza funkcję cyfrową wejścia;f
powtarza to, aż wynik osiągnie 1.Zauważ, że używamy podstawki wejściowej do wydobywania cyfr - oznacza to, że będzie działać w dowolnym systemie bazowym, nie tylko dziesiętnym.
Próbny
źródło
Python 2 , 76 bajtów
Wypróbuj online!
źródło
Neim , 8 bajtów
Wyjaśnienie:
Wypróbuj online!
Sformatowane wyjście
źródło
D , 140 bajtów
Wypróbuj online!
źródło
PHP, 71+1 bytes
Run as pipe with
-nR
or try it online. (requires PHP 5.3 or later for the Elvis operator)źródło
A?:B
: if A is truthy then A else BAdd++, 32 bytes
Try it online!
Doesn't output the first value
How it works
źródło
Perl 6, 36 bytes
Try it online!
Includes the input number in the output list.
źródło