Zdefiniujmy funkcję na liczbach naturalnych , zapisanych jako 10 cyfr podstawowych , jak następuje:
Dopóki są równe sąsiadujące cyfry , zamień je na ich sumę od lewej do prawej. Jeśli były takie cyfry, powtórz tę samą procedurę.
Innymi słowy, w każdej iteracji łapczywie bierzemy wszystkie pary równych sąsiadujących cyfr i zastępujemy je ich sumą w tym samym czasie (używając pary najbardziej lewej, jeśli się nakładają).
Przykład
Weźmy na przykład :
- Pierwsze sąsiadujące cyfry, które są równe, to dwie
- Zastępujemy je więc co daje nam
- Ponieważ nadal jesteśmy w pierwszej od lewej do prawej i przechodzenie były jeszcze dwie s musimy najpierw wymienić te
- Mamy
- Coś się zmieniło, więc musimy wykonać kolejną iterację
- Ale nie ma takich cyfr, więc przestajemy
W związku z tym liczba w tym ciągu jest .
Wyzwanie
Pierwsze 200 warunków to:
0,1,2,3,4,5,6,7,8,9,10,2,12,13,14,15,16,17,18,19,20,21,4,23,24,25,26,27,28,29,30,31,32,6,34,35,36,37,38,39,40,41,42,43,8,45,46,47,48,49,50,51,52,53,54,10,56,57,58,59,60,61,62,63,64,65,12,67,68,69,70,71,72,73,74,75,76,14,78,79,80,81,82,83,84,85,86,87,16,89,90,91,92,93,94,95,96,97,98,18,10,101,102,103,104,105,106,107,108,109,20,21,4,23,24,25,26,27,28,29,120,121,14,123,124,125,126,127,128,129,130,131,132,16,134,135,136,137,138,139,140,141,142,143,18,145,146,147,148,149,150,151,152,153,154,20,156,157,158,159,160,161,162,163,164,165,4,167,168,169,170,171,172,173,174,175,176,24,178,179,180,181,182,183,184,185,186,187,26,189,190,191,192,193,194,195,196,197,198,28
Twoim zadaniem jest również wygenerowanie tej sekwencji
- podano , należy zwrócić liczbę w tej kolejności,
- Biorąc pod uwagę , zwróć pierwsze liczb w tej sekwencji
- lub wygeneruj sekwencję w nieskończoność.
Możesz wybrać swoje zgłoszenie, aby użyć lub , ale określ, który z nich.
Przypadki testowe
Możesz skorzystać z powyższych warunków, ale oto niektóre z nich:
222 -> 42
1633 -> 4
4488 -> 816
15519 -> 2019
19988 -> 2816
99999 -> 18189
119988 -> 21816
100001 -> 101
999999 -> 181818
Python 2 ,
979693 bajtówWypróbuj online!
Wersja bez wyrażenia regularnego:
Python 2 ,
13313012211298 bajtówWypróbuj online!
źródło
Galaretka , 11 bajtów
Jest to niepotrzebnie wolny, pełny program.
Wypróbuj online!
Alternatywna wersja, 12 bajtów
Jeden bajt dłużej, ale znacznie szybciej. Działa jako program lub funkcja.
Wypróbuj online!
Jak to działa
Wersja 11-bajtowa robi to samo, z tym wyjątkiem, że wywołuje łącze n razy dla wejścia n , zamiast wywoływać je, aż do osiągnięcia stałego punktu.
źródło
Haskell, 70 bajtów
Dane wejściowe są traktowane jako ciąg.
Wypróbuj online!
źródło
|x<-b:c=a:f x
a nawetf(a:c)=a:f c
na wypadek, gdyby jeden lub drugi mógł rzeczywiście doprowadzić do poprawy :)JavaScript,
484746 bajtówDane wejściowe i wyjściowe jako ciągi. Zwraca
nth
termin sekwencji.Wypróbuj online
źródło
x[0]*2
->x/5.5
Perl 6 , 37 bajtów
Wypróbuj online!
Jest to funkcja, która generuje n-ty ciąg sekwencji, podając n jako argument.
($_, { ... } ... * == *)
jest sekwencją kolejnych zmian liczby wejściowej, generowaną przez wyrażenie w nawiasach kwadratowych (proste podstawienie wyrażenia regularnego) i zatrzymuje się, gdy* == *
, to znaczy, gdy dwie ostatnie liczby w sekwencji są równe. Następnie[*-1]
przyjmuje tylko ostatni element tej sekwencji jako wartość zwracaną.źródło
==*
i zastąpienie*-1
z$_
, ponieważ nie zawsze są mniej niżn
zamienniki dla wielun
. 33 bajtySiatkówka , 16 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Powtarzaj, aż sygnał wejściowy przestanie się zmieniać.
Zamień pary sąsiednich cyfr ...
... z podwójną cyfrą. (
$1*
generuje ciąg$1
_
s,2*
powiela to i$.(
przyjmuje długość. W rzeczywistości silnik Retina jest sprytniejszy niż to i po prostu podwaja się$1
).źródło
C # (.NET Core) ,
231,203,200,196, 192 bajtyEDYCJA: Funkcja ma teraz 185 bajtów plus 18 dla
using System.Linq;
Dzięki BMO (dla 1> 0 jest równe true plus usunięcie nowego wiersza) i Mr. XCoder (dla instrukcji f =! F)!
EDYCJA 2: Do 182 bajtów plus 18 za
using System.Linq
podziękowania dla Dany za podzielenie się kilkoma wskazówkami golfowymi!EDYCJA 3: Dzięki Embodiment of Ignorance za int [] -> var, usunięcie zwarcia i& -> i oraz zmianę ToArray -> ToList! (178 bajtów + 18 przy użyciu)
EDYCJA 4: Wcielenie ignorancji zmniejszyło 4 bajty, zmieniając przypisanie. Atrapa mnie powinna się liczyć! Jeszcze raz dziękuję: D
Wypróbuj online!
źródło
Perl 5
-p
, 21 bajtówWypróbuj online!
źródło
Japt v2.0a0
-h
,1514 bajtówZwraca
nth
termin sekwencji.Spróbuj
Powinno to działać przez 10 bajtów, ale wydaje się, że jest błąd w rekurencyjnej metodzie zastępczej Japt.
źródło
Groovy , 63 bajty
Wypróbuj online!
źródło
05AB1E , 11 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Język Wolfram 108 bajtów
Wyjaśnienie
IntegerDigits
przekształca liczbę wejściową w listę jego cyfr.Split
grupuje kolejne powtarzające się cyfry.Partition[#, UpTo@2]&/@
dzieli przebiegi podobnych cyfr na listy o długości co najwyżej 2.Flatten[...,1]
eliminuje sporadycznie nadmiernie zagnieżdżone nawiasy klamrowe - np. {{2,2}} staje się {2,2}Total/@
sumuje sumy sparowanych cyfr. Pojedyncze cyfry nie muszą być sumowane.ToString
konwertuje sumy (i pojedyncze cyfry) na ciągi.""<>
łączy wszystkie ciągi na liście.ToExpression
konwertuje wynik na liczbę całkowitą....~FixedPoint~#&
stosuje tę funkcję, dopóki wynik nie przestanie się zmieniać.źródło
C # (interaktywny kompilator Visual C #) z flagą
/u:System.Text.RegularExpressions.Regex
, 70 bajtówWyjścia poprzez modyfikację wejścia. Pobiera listę zawierającą jeden ciąg wejściowy.
Dzięki @dana za grę w golfa całe 23 bajty!
Wypróbuj online!
źródło
Czysty , 118 bajtów
Wypróbuj online!
Pobiera pierwszą powtarzaną wartość (
limit
) z nieskończonej listy aplikacji (iterate
) lambdy wykonującej pojedynczy krok procesu zwijania. Dane wejściowe traktowane jako[Char]
.źródło
Czerwony ,
848380 bajtówWypróbuj online!
Zwraca
nth
termin sekwencji.Wyjaśnienie:
źródło
Scala , 84 bajtów
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 111 bajtów
Wypróbuj online!
Ogromne uznanie dla @ASCII Tylko za grę w golfa ~ 30;) Na początku oboje publikowaliśmy aktualizacje jednocześnie, ale w pewnym momencie wyraźnie pojechał do miasta!
-2 dzięki @EmbodimentOfIgnorance!
Kod mniej golfowy ...
źródło
(s[i++]-48)*2
=>s[i++]*2-96