Rozważ sekwencję opartą na relacjach powtarzalności f(n) = f(n-1)+f(n-2)
, zaczynając od f(1) = x1, f(2) = x2
. Dlax1 = 2, x2 = 1
sekwencja zaczyna się w następujący sposób:
2 1 3 4 7 11 18 29 47 76 123 199 322 521 843
Połączenie tego w ciąg da:
213471118294776123199322521843
Teraz podziel tę listę na możliwie najmniejsze liczby, które daje y(n) > y(n-1)
. Zacznij od pierwszego numeru, potem drugiego itd. Pierwszy numer wyjściowy powinien zawsze składać się z jednej cyfry. Wpisz ostatnią liczbę wymaganą liczbą zer.
2 13 47 111 829 4776 12319 93225 218430
Otrzymasz dwie liczby, (x1, x2)
jako dane wejściowe, w dowolnym dogodnym formacie, a wyzwaniem jest wyświetlenie posortowanej listy.
Zasady:
- Funkcje i programy są OK
- Sekwencja początkowa powinna mieć dokładnie 15 liczb (ostatnia to
f(15)
). x1
ix2
są nieujemne (możliwe jest zero).- Dane wyjściowe mogą być w dowolnym dogodnym formacie
- Wektor wyjściowy
y
należy utworzyć w ten sposóby2 > y1
.- Najpierw najmniejsze z możliwych
y1
, potem najmniejsze z możliwychy2
, potemy3
i tak dalej.
- Najpierw najmniejsze z możliwych
- Jeśli
x1 = x2 = 0
następnie wypisz 15 zer (w tym samym formacie co inne wyjście, tj. Nie000000000000000
).
Przykłady :
Input: 1 1
Output: 1 12 35 81 321 345 589 1442 3337 7610
Input: 3 2
Output: 3 25 71 219 315 0811 3121 23435 55898 145300
|
Optional leading zero
Input: 0 0
Output: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Najkrótszy kod w bajtach wygrywa. Jeśli to możliwe, dołącz link do tłumacza online.
code-golf
math
arithmetic
Stewie Griffin
źródło
źródło
5467
?54 67
?5 46 70
?Odpowiedzi:
Pyth, 56 bajtów
Zestaw testowy
Wyjaśnienie:
Najpierw sprawdzamy, czy dane wejściowe są dokładne
0, 0
. Jeśli tak, wydrukuj 15 zer.W przeciwnym razie tworzymy sekwencję za pomocą
jkhM.u,eNsN14Q
. Jest to podobne do standardowego algorytmu Pyth dla sekwencji Fibonacciego.Następnie redukujemy ten ciąg. Akumulator to lista ciągów znaków, reprezentujących każdą liczbę w podzielonej sekwencji. Na każdym etapie redukcji bierzemy następny znak i sprawdzamy, czy akumulator jest w porządku, za pomocą
y
zdefiniowanej za pomocą funkcji pomocniczejLsgM.:sMb2
, która jest prawdą, jeśli wejście nie działa. Jeśli jest w porządku, dodajemy następny znak do listy jako jego własny numer. Jeśli nie, dodajemy następny znak na końcu ostatniego ciągu. Dokonuje się tego za pomocąu?yGX_1GHaGH ... Y
.Następnie wykonujemy funkcjonalną pętlę while. Pętla trwa do momentu, aż lista bieżąca będzie w porządku, ponownie wykorzystując funkcję pomocnika. Na każdym kroku
0
dodawany jest a na końcu ostatniego ciągu na liście. Dokonuje się tego za pomocą.WyHX_1Z`0
.Na koniec ciągi znaków są konwertowane na liczby całkowite za pomocą
sM
i drukowane.Pyth, 51 bajtów
Wierzę, że to działa, ale jest zbyt wolne do testowania - jest to brutalna siła do podziału struny.
Będę wprowadzał pewne ulepszenia do tej
X
funkcji, ale powyższy kod działa w wersji Pyth'a, która była najnowsza w chwili opublikowania pytania.źródło
JavaScript ES6, 127
135Test
źródło
JavaScript ES6,
187180187184182179175172165160155154 bajtówOtrzymuję podobne wyniki, kiedy go uruchamiam
1,1
i3,2
testuję przypadki.0,0
wziął ponad 26 bajtów ...De-golf + przekonwertowany na wersję demonstracyjną ES5 +:
źródło
n <= 15
.f(n) = f(n-1)+f(n-2)
ma maksymalną wartość dokładnie 15. Liczbę wartości wyjściowych ustala się na podstawie algorytmu, nic więcej.f(1)=x1
if(2)=x2
mogą być wyższe niż 15. Liczba wartości wyjściowych jest określana na podstawie wartości wejściowych. Na3 2
to będzie 10.JavaScript (ES6), 162 bajty
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
Mathematica, 192 bajty
Przypadki testowe:
Długości nazw funkcji zabijają mnie.
źródło
Haskell,
165159152142141 bajtówPrzykład użycia:
3 % 2
->[3,25,71,219,315,811,3121,23435,55898,145300]
.Demo online (z
main
opakowaniem).Jak to działa:
źródło
PowerShell,
167166 bajtówZapisano bajt, eliminując
$s
zmienną i bezpośrednio zasilając pętlę wyjściową.Nie golfił i skomentował:
źródło
Perl 6 , 107 bajtów
Stosowanie:
Wyjaśnienie
tworzy sekwencję podobną do Fibonacciego, zaczynając od argumentów (
@_
) slipped (|
) wbierze pierwsze 15 elementów tej sekwencji
łączy to w pojedynczy łańcuch (
.join
), dzieli go na sekwencję pojedynczych znaków (.comb
) i przechowuje w „domyślnym” skalar ($_
) po wymuszeniu sekwencji na zmienną tablicę, najpierw przechowując ją w tablicy anonimowej (@
)znajduje sumę wartości w domyślnym skalarze, a jeśli to zero, zwraca domyślny skalar, który będzie zawierał tablicę 15 zer
jeśli suma nie jest równa zero, tworzy listę, najpierw przesuwając pierwszy element domyślnego skalara
następnie generuje resztę wartości, porównując ją z poprzednią (
$^b
),jeśli domyślne wartości skalarne kończą się, użyj 0 zamiast (
//0
)zatrzymywanie, gdy w domyślnym skalarie nie pozostały żadne elementy
źródło
until (my$a...
? Czy(
nie jest specjalnym ogranicznikiem?until
, który nie istnieje.