Reguła Naismitha pomaga ustalić czas potrzebny na spacer lub wędrówkę, biorąc pod uwagę odległość i wzniesienie.
Biorąc pod uwagę niepustą listę wysokości w punktach równomiernie rozmieszczonych wzdłuż ścieżki i całkowitą odległość tej ścieżki w metrach, należy obliczyć czas potrzebny zgodnie z regułą Naismitha.
Zasadą Naismitha jest to, że należy pozwolić na jedną godzinę na każde pięć kilometrów, plus dodatkową godzinę na każde 600 metrów wejścia.
Dane wejściowe muszą być pobierane w metrach, co gwarantuje, że składać się będzie z nieujemnych liczb całkowitych, a dane wyjściowe powinny konsekwentnie być godzinami lub minutami (ale nie obydwoma) i muszą być w stanie podać liczby dziesiętne w stosownych przypadkach (niedokładności zmiennoprzecinkowe są OK) .
Na przykład biorąc pod uwagę:
[100, 200, 400, 200, 700, 400], 5000
Dla pierwszych dwóch elementów [100, 200]
masz 100 metrów wynurzania, czyli 10 minut. Gdy [200, 400]
masz 200 metrów wznoszenia, czyli 20 minut, [400, 200]
nie rośnie, więc nie dodajesz na to czasu. [200, 700]
ma 500 metrów wejścia, czyli 50 minut i wreszcie [700, 400]
nie wznosi się. Dodano dodatkową godzinę na dystansie pięciu kilometrów. Łącznie wynosi 140 minut lub 2,333 ... godzin.
Przypadki testowe
[0, 600] 2500 -> 1.5 OR 90
[100, 200, 300, 0, 100, 200, 300] 10000 -> 2.8333... OR 170
[40, 5, 35] 1000 -> 0.25 OR 15
[604] 5000 -> 1 OR 60
[10, 10, 10] 2000 -> 0.4 OR 24
[10, 25, 55] 1000 -> 0.275 OR 16.5
[10], 5125
lub[10, 25, 55], 1000
prawidłowe i muszą być obsługiwane?[10, 25, 55], 1000 -> 0.275 OR 16.5
Odpowiedzi:
R ,
444342 bajtówWypróbuj online!
-1 bajt przy użyciu
pmax
wielu innych odpowiedziPobiera dane wejściowe jako
A
zapach iD
istnienie i zwraca czas w minutach.źródło
JavaScript (ES6), 50 bajtów
Zapisano 1 bajt dzięki odpowiedzi Giuseppe (dzielenie przez 10 na końcu procesu)
Pobiera dane wejściowe jako
([altitudes])(distance)
. Zwraca czas w minutach.Wypróbuj online!
źródło
05AB1E , 15 bajtów
Wypróbuj online!
Zwraca czas w minutach.
Wyjaśnienie
źródło
₄12//
zamiast₄;6//
. To oczywiste +1 ode mnie.Haskell,
4746 bajtówZwraca czas w godzinach.
Wypróbuj online!
źródło
Python 2,
6260 bajtówZaoszczędzono 2 bajty dzięki ovs.
Wypróbuj online!
Zwraca czas w minutach.
źródło
Perl 6 ,
453937 bajtów6 bajtów zaoszczędzonych dzięki Jo Kingowi.
2 bajty zapisane dzięki nwellnhof.
(Dzięki obojgu nie wygląda to już tak jak moje oryginalne zgłoszenie :—).)
Wypróbuj online!
Pierwszy argument to lista z wysokościami, drugi argument to długość wędrówki.
Całość jest kodem WhthingCode. Jeśli wyrażenie zostanie uznane za takie, to każdy z nich
*
jest jednym argumentem.Tak więc,
*.&{sum (.skip Z-$_)Xmax 0}/600
bierzemy pierwszy argument (pierwsze wystąpienie*
) i używamy na nim bloku z konstrukcją podobną do metody.&{}
. Blok przyjmuje jeden argument (listę), który wchodzi w skład$_
, podobnie jak.skip
ta lista bez pierwszego elementu. Odejmujemy od tego oryginalną tablicę, element po elemencie, za pomocąZ-
. Kompresowanie zatrzymuje się, gdy tylko krótsza lista zostanie wyczerpana, co jest w porządku.Następnie korzystamy z operatora wielu produktów
X
.list X(op) list
tworzy wszystkie możliwe pary, w których pierwszy element jest z lewej listy, a drugi z prawej i używa(op)
na nich operatora . Wynik jest zwracany jako Seq (lista jednorazowa). Jednak właściwa lista ma tylko jeden element, 0, więc po prostu tak* max 0
, element po elemencie. Dzięki temu liczymy tylko rosnące części wędrówki. Następnie sumujemy i dzielimy przez 600.Następnie dodajemy
*/5e3
, gdzie*
występuje po raz drugi, a więc jest to drugi argument i dzielimy go przez 5000. Suma jest wtedy czasem w godzinach. (Jest to bardziej wydajne niż czas w minutach, ponieważ musielibyśmy się pomnożyć, a*
należałoby je oddzielić spacją od WhthingStar*
.)źródło
X
X
, dzięki!X/
, dzieląc sumę przez 10. 39 bajtów.&{}
(zwraca godziny).ok , 21 bajtów
Wypróbuj online! Nadużywanie błędu analizowania, gdzie
.1.012
jest to samo, co.1 .012
.-1 dzięki streester .
k , 23 bajty
Wypróbuj online!
źródło
{y+/0|1_-':x}..1.012*
na 21 bajtów? uruchom akumulator za pomocąy
.:/
Galaretka , 12 bajtów
Wypróbuj online!
-1 dzięki Mr. Xcoder .
źródło
×.12
działa?Python 2 , 59 bajtów
Wypróbuj online!
zwraca godziny w postaci dziesiętnej.
źródło
Pyth , 15 bajtów
Pełny program oczekuje zestawu wysokości jako pierwszego argumentu, odległości jako drugiego. Zwraca czas w minutach.
Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .
źródło
APL (Dyalog Unicode) ,
21 2018 bajtówWypróbuj online!
Tradycyjna funkcja przyjmująca dane wejściowe (od prawej do lewej) jako
1st ⎕
= Wysokość / Głębokość,2nd ⎕
= Odległość.Dzięki @ngn do
bycia czarodziejem jedentrzy bajty.Jak to działa:
źródło
,0
jest niepotrzebne,⍵
bo problematycznym testem powinno być,604
, nie604
⍺
iw⍵
starym kodzie⎕
i byłem zbyt leniwy, aby umieścić nagłówek / stopkę tradfn.,0
Nieco chociaż? Złoto.Java 8, 89 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
Japt , 39 bajtów
Wypróbuj online!
Prawdopodobnie można grać w golfa nieco więcej.
źródło
Stax , 17 bajtów
Uruchom i debuguj na staxlang.xyz!
Pobiera wszystkie dane wejściowe jako liczby zmiennoprzecinkowe, chociaż oszczędza to bajt tylko w wersji bez rozpakowania. Prawdopodobnie poprawialne; właśnie wracam do golfa z kodem, jestem trochę zardzewiały.
Rozpakowane (20 bajtów) i objaśnienie:
0!012*s:-{0>f{A_:m|++
działa na integralne wejścia dla 21 bajtów rozpakowanych i nadal 17 zapakowanych.źródło