Koła zębate przenoszą różne prędkości w zależności od wielkości zazębionego przekładni.
Jack ma maszynę, która obraca przekładnię zębatą. ale nie znasz prędkości ostatniego biegu.
Na szczęście jesteś świetnym golfistą, więc możesz mu pomóc!
Więc co powinienem zrobić?
Każdy bieg jest reprezentowany przez 2 liczby, promień wewnętrznego koła zębatego i promień zewnętrznych kół zębatych.
Jeśli bieg A
jest, [a,b]
a bieg B
jest [c,d]
, wówczas stosunek między prędkością A
i prędkością B
będzie c:b
.
Biorąc pod uwagę listę biegów (listę 2-krotek), wypisz prędkość ostatniego biegu.
Możesz założyć, że prędkość pierwszego biegu jest 1
.
Opracowany przykład
Powiedzmy, że nasz wkład to [[6,12],[3,10],[5,8]]
.
Pierwszy bieg [6,12]
miałby prędkość 1
.
Wtedy drugi bieg [3,10]
miałby prędkość 1*12/3 = 4
.
Wtedy ostatni bieg [5,8]
miałby prędkość 4*10/5 = 8
.
Przypadki testowe
input output
[[1,1],[2,2]] 0.5 (1/2)
[[1,2],[1,2],[1,2]] 4 (2/1*2/1)
[[6,12],[3,10],[5,8]] 8 (12/3*10/5)
Zasady
Obowiązują podstawowe zasady gry w golfa .
[6,12,3,10,5,8]
. po prostu wspomnij o tym, jeśli chcesz go użyć.Odpowiedzi:
Haskell, 19 bajtów
Biorąc pod uwagę listę płaski jak
[a,b,c,d,e,f]
,tail.init
usuwa pierwsze i ostatnie elementy, a następniefoldr1(/)
tworzy kaskadę podziałówb/(c/(d/e))))
, która działa się na przemian*
i/
:b/c*d/e
.źródło
Galaretka , 6 bajtów
Zestaw testowy.
źródło
Galaretka , 7 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
źródło
C,
1151231218380767170 bajtów4 bajty zapisane dzięki @LeakyNun!
Mój pierwszy golf, prawdopodobnie nie najlepszy.
Pobiera tablicę i rozmiar.
Nie golfowany:
źródło
j;float r=1;float f(int a[]){for(;j<sizeof a;)r=r*a[j++]/a[j++];return r;}
(nie testowano)JavaScript (ES6), 44 bajty
37 bajtów dla spłaszczonej tablicy:
W przeciwieństwie do (np.) Haskell,
reduceRight
jest tak długą nazwą, że jest tańszareduce
w niewłaściwy sposób i bierze odwrotność na końcu.źródło
Pyth, 8 bajtów
Zestaw testowy.
źródło
J, 8 bajtów
Wypróbuj online!
Stosowanie
gdzie
>>
jest STDIN i<<
STDOUT.Wyjaśnienie
„Zmniejsz”
J
domyślnie od prawej do lewej, co spowodowało usunięcie kilku bajtów: pźródło
Mathematica, 26 bajtów
Nienazwana funkcja, która pobiera płaską listę wartości parzystych i zwraca dokładny wynik (w razie potrzeby jako ułamek).
Wykorzystuje to to samo podejście, co niektóre inne odpowiedzi składania podziału na odwróconej liście (po usunięciu pierwszego i ostatniego elementu).
źródło
MATL , 9 bajtów
Format wejściowy jest dowolny z następujących:
EDYCJA (30 lipca 2016 r.): Połączony kod zastępuje
9L
się,1L
aby dostosować się do ostatnich zmian w języku.Wypróbuj online!
Wyjaśnienie
źródło
JavaScript, 54 bajty
Stosowanie
Nie golfił
Oczywiście wariant z golfem jest nieco inny. Dzięki
.map()
, zastępuje pierwszą wartość tablicy z prędkością po drugim kole, druga wartość z prędkością trzecim kole, a ostatnią wartością a drugi ostatniej wartości z prędkością ostatnim kole. Więc bierzemy ostatni element z.pop()
.źródło
PHP,
807969 bajtówpobiera dane wejściowe z parametru GET
a
; drukuje wynikinicjuje się
$r
z 1, następnie pętle od drugiej do ostatniej krotki, aby pomnożyć przez pierwszy element poprzedniego i podzielić przez drugi element bieżącej krotki.Dzięki Jörgowi za przypomnienie
$_GET
; co pozwoliło zaoszczędzić 7 bajtów.bardziej elegancka wersja, 88 bajtów:
źródło
<?for($r=$i=1;$i<count($a=$_GET[a]);)$r*=$a[$i-1][1]/$a[$i++][0];echo$r;
72 bajtówJavaScript,
595856 bajtówWyjaśnienie
Zmniejsz tablicę i pomnóż ją przez każdą drugą wartość i podziel przez każdą pierwszą wartość. Tak
[[6,12],[3,10],[5,8]]
się dzieje12/6*10/3*8/5
. Oczywiście, faktyczne obliczenia, których chcieliśmy, były12/3*10/5
takie, że chcemy po prostu zignorować to pierwsze/6
i ostatnie*8
, mnożąc z*6
powrotem i dzieląc z/8
powrotem. Anulowanie odbywa się poprzez ustawienie6/8
jako wartości początkowej redukcji.źródło
*.../...
do wartości początkowej1
.Python 2, 52 bajty
Anonimowa funkcja, która pobiera dane spłaszczonej listy za pomocą argumentu i zwraca dane wyjściowe.
Wykorzystuje to pomysł kaskady podziału, jak w odpowiedzi Xnora .
Wypróbuj na Ideone
źródło
Python 3, 59 bajtów
Anonimowa funkcja, która pobiera dane z nie spłaszczonej listy za pomocą argumentu i zwraca dane wyjściowe.
Jak to działa
Dla każdej pary liczb całkowitych na wejściu
'int1*int2'
tworzony jest ciąg formularza . Połączenie wszystkich tych par/
daje ciąg formy'int1*int2/int3*int4/...'
, który jest pożądanym obliczeniem, ale obejmuje niepożądane pierwsze i ostatnie liczby całkowite. Są one usuwane przez wycięcie pierwszych dwóch i ostatnich dwóch znaków w żądle, pozostawiając pożądane obliczenia. Jest to następnie oceniane i zwracane.Wypróbuj na Ideone
źródło
Pascal, 88 bajtów
Funkcja rekurencyjna (musiała to zrobić ...), która przyjmuje statyczną tablicę 2D i jej długość (liczbę wierszy) jako dane wejściowe. Korzystanie z matematyki wskaźnika na tablicy.
Przykład użycia bez golfa:
źródło
Właściwie 14 bajtów
Wypróbuj online! (obecnie nie działa, ponieważ TIO ma kilka wersji za sobą)
Ten program pobiera spłaszczoną listę jako dane wejściowe.
Wyjaśnienie:
źródło
R, 64 bajty
Okazuje się, że podejście wektoryzowane i
for
pętla są równoważne w tym przypadku:lub
for
pętla:`
źródło