Die Naismith-Regel hilft dabei, die Zeitspanne für einen Spaziergang oder eine Wanderung zu berechnen, die für die Entfernung und den Aufstieg erforderlich ist.
Bei einer nicht leeren Liste der Höhe an Punkten, die gleichmäßig entlang eines Pfades verteilt sind, und der Gesamtentfernung dieses Pfades in Metern sollten Sie die benötigte Zeit gemäß der Naismith-Regel berechnen.
Naismiths Regel lautet, dass Sie eine Stunde für jeweils fünf Kilometer plus eine zusätzliche Stunde für jeweils 600 Höhenmeter einplanen sollten.
Die Eingabe muss in Metern erfolgen, die garantiert aus nicht negativen ganzen Zahlen bestehen. Die Ausgabe sollte konsistent entweder Stunden oder Minuten (aber nicht beides) sein und gegebenenfalls Dezimalzahlen angeben können (Gleitkommaungenauigkeiten sind in Ordnung). .
Zum Beispiel gegeben:
[100, 200, 400, 200, 700, 400], 5000
Für die ersten beiden Elemente haben [100, 200]
Sie 100 Höhenmeter, das sind 10 Minuten. Wenn [200, 400]
Sie 200 Höhenmeter haben, das sind 20 Minuten, [400, 200]
steigt nicht an, daher wird keine Zeit dafür hinzugefügt. [200, 700]
beträgt 500 Höhenmeter, das sind 50 Minuten, und schließlich [700, 400]
geht es nicht aufwärts. Für die Entfernung von fünf Kilometern kommt eine zusätzliche Stunde hinzu. Dies ergibt 140 Minuten oder 2.333 Stunden.
Testfälle
[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
oder[10, 25, 55], 1000
gültig und müssen behandelt werden?[10, 25, 55], 1000 -> 0.275 OR 16.5
Antworten:
R ,
444342 BytesProbieren Sie es online!
-1 Byte bei Verwendung
pmax
mehrerer anderer AntwortenNimmt Eingaben als
A
Geruch undD
Zustand und gibt die Zeit in Minuten zurück.quelle
JavaScript (ES6), 50 Byte
Dank Giuseppes Antwort 1 Byte gespart (dividiert durch 10 am Ende des Prozesses)
Übernimmt die Eingabe als
([altitudes])(distance)
. Gibt die Zeit in Minuten zurück.Probieren Sie es online!
quelle
05AB1E , 15 Bytes
Probieren Sie es online!
Gibt die Zeit in Minuten zurück.
Erläuterung
quelle
₄12//
stattdessen₄;6//
. Also offensichtlich +1 von mir.Haskell,
4746 BytesGibt die Zeit in Stunden zurück.
Probieren Sie es online!
quelle
Python 2,
6260 Bytes2 Bytes dank ovs gespart.
Probieren Sie es online!
Gibt die Zeit in Minuten zurück.
quelle
Perl 6 ,
453937 Bytes6 Bytes gespart dank Jo King.
2 Bytes gespart dank nwellnhof.
(Dank ihnen beiden sieht das nicht mehr so aus wie meine ursprüngliche Einreichung: -).)
Probieren Sie es online!
Das erste Argument ist die Liste mit den Höhen, das zweite Argument ist die Länge der Wanderung.
Das Ganze ist ein WhateverCode. Wenn ein Ausdruck als solcher erkannt wird, ist jeder
*
ein Argument.In
*.&{sum (.skip Z-$_)Xmax 0}/600
nehmen wir also das erste Argument (das erste Vorkommen von*
) und verwenden einen Block mit einem methodenähnlichen Konstrukt.&{}
. Der Block akzeptiert ein Argument (die Liste), in das er eingeht$_
, und.skip
diese Liste ohne das erste Element. Wir subtrahieren das ursprüngliche Array Element für Element mitZ-
. Das Zippen wird beendet, sobald die kürzere Liste aufgebraucht ist. Dies ist in Ordnung.Wir verwenden dann den produktübergreifenden Operator
X
.list X(op) list
Erstellt alle möglichen Paare, bei denen das erste Element aus der linken und das zweite aus der rechten Liste stammt, und verwendet den Operator(op)
für diese. Das Ergebnis wird als Seq (One-Shot-Liste) zurückgegeben. Die rechte Liste hat jedoch nur ein Element, 0, und tut dies daher* max 0
Element für Element. Das stellt sicher, dass wir nur aufsteigende Teile der Wanderung zählen. Dann addieren wir es und dividieren durch 600.Dann fügen wir hinzu
*/5e3
, wo das*
zum zweiten Mal auftritt, und so ist es das zweite Argument, und dividieren es durch 5000. Die Summe ist dann die Zeit in Stunden. (Dies ist effizienter als die Zeit in Minuten, in der wir multiplizieren*
müssten und die durch ein Leerzeichen vom WhateverStar getrennt werden müssten*
.)quelle
X
X
, danke!X/
indem wir die Summe einfach durch 10 teilen. 39 Bytes.&{}
(gibt Stunden zurück).ok , 21 bytes
Probieren Sie es online! Missbrauch eines Parsing-Fehlers, bei dem
.1.012
es sich um das Gleiche handelt wie.1 .012
.-1 dank streester .
k , 23 Bytes
Probieren Sie es online!
quelle
{y+/0|1_-':x}..1.012*
für 21 Bytes? akku starten mity
.:/
Gelee , 12 Bytes
Probieren Sie es online!
-1 Danke an Herrn Xcoder .
quelle
×.12
funktioniert?Python 2 , 59 Bytes
Probieren Sie es online!
gibt Stunden als Dezimalzahl zurück.
quelle
Pyth , 15 Bytes
Volles Programm, erwartet den Höhensatz als erstes Argument, Abstand als zweites. Gibt die Zeit in Minuten zurück.
Versuchen Sie es online hier , oder prüfen Sie alle Testfälle auf einmal hier .
quelle
APL (Dyalog Unicode) ,
21 2018 BytesProbieren Sie es online!
Herkömmliche Funktion, die Eingaben (von rechts nach links) als
1st ⎕
= Höhen / Tiefen,2nd ⎕
= Abstand vornimmt.Vielen Dank für das @ngn
ist ein Assistent eindrei Bytes.Wie es funktioniert:
quelle
,0
ist unnötig, das⍵
für den problematischen Test,604
nicht sein sollte604
⍺
und⍵
im alten Code durch ersetzt⎕
und war zu faul, um die tradfn Kopf- / Fußzeile zu setzen. Das,0
bisschen obwohl? Gold.Java 8, 89 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
Japt , 39 Bytes
Probieren Sie es online!
Wahrscheinlich kann noch einiges mehr golfen werden.
quelle
Stax , 17 Bytes
Führen Sie es aus und debuggen Sie es unter staxlang.xyz!
Nimmt alle Eingaben als Float, obwohl dies nur in der entpackten Version ein Byte spart. Wahrscheinlich verbesserungsfähig; Ich kehre gerade zum Codegolf zurück und bin etwas verrostet.
Entpackt (20 Bytes) und Erklärung:
0!012*s:-{0>f{A_:m|++
Funktioniert für integrierte Eingänge für 21 Bytes, die entpackt und noch 17 gepackt sind.quelle