Haskell ma tę zgrabną (wyglądającą) funkcję, w której możesz nadać jej trzy liczby i może wywnioskować z nich sekwencję arytmetyczną. Na przykład [1, 3..27]
jest równoważne z [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]
.
To fajne, a wszystkie sekwencje arytmetyczne są dość ograniczone. Dodawanie, pfft . Mnożenie jest tam, gdzie jest. Czy nie byłoby fajniej, gdyby sekwencje geometryczne przypominały [1, 3..27]
powrót [1, 3, 9, 27]
?
Wyzwanie
Napisz program / funkcję, która przyjmuje trzy dodatnie liczby całkowite a , b i c, i wyprowadza, gdzie x jest największą liczbą całkowitą ≤ c, którą można przedstawić jako gdzie n jest liczbą całkowitą dodatnią.[a, b, b × (b ÷ a), b × (b ÷ a)2, ..., x]
b × (b ÷ a)n
Oznacza to, że wynik powinien mieć wartość r , tak aby:
r0 = a
r1 = b
rn = b × (b ÷ a)n-1
rlast = greatest integer ≤ c that can be represented as b × (b ÷ a)n
where n is a positive integer
Dane techniczne
- Zasady Standard I / O zastosowania .
- Standardowe luki są zabronione .
- b zawsze będzie podzielne przez a .
- a < b ≤ c
- Wyzwanie to nie polega na znalezieniu najkrótszego podejścia we wszystkich językach, chodzi raczej o znalezienie najkrótszego podejścia w każdym języku .
- Twój kod będzie oceniany w bajtach , zwykle w kodowaniu UTF-8, chyba że określono inaczej.
- Wbudowane funkcje (Mathematica może mieć jeden: P), które obliczają tę sekwencję są dozwolone, ale zalecane jest uwzględnienie rozwiązania, które nie opiera się na wbudowanej.
- Zachęca się do wyjaśnień, nawet w przypadku „praktycznych” języków .
Przypadki testowe
a b c r
1 2 11 [1, 2, 4, 8]
2 6 100 [2, 6, 18, 54]
3 12 57 [3, 12, 48]
4 20 253 [4, 20, 100]
5 25 625 [5, 25, 125, 625]
6 42 42 [6, 42]
W kilku lepszych formatach:
1 2 11
2 6 100
3 12 57
4 20 253
5 25 625
6 42 42
1, 2, 11
2, 6, 100
3, 12, 57
4, 20, 253
5, 25, 625
6, 42, 42