Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:java:aoc:aco2023:day6:start [06.12.2023 09:09] – angelegt Marco Kuemmel | faecher:informatik:oberstufe:java:aoc:aco2023:day6:start [06.12.2023 19:13] (aktuell) – [Aufgabe] Frank Schiebel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ~~NOTOC~~ | ||
+ | ====== Tag 6: Wait For It ====== | ||
+ | |||
+ | ===== Aufgabe ===== | ||
+ | |||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * Beispiel d6e.txt | ||
+ | * Input d6i.txt. | ||
+ | |||
+ | |||
+ | ++++ Kontrollergebnisse | | ||
+ | * Eingabedatei d6e.txt: | ||
+ | * Teil 1 - '' | ||
+ | * Teil 2 - '' | ||
+ | * Eingabedatei d6i.txt: | ||
+ | * Teil 1 - '' | ||
+ | * Teil 2 - '' | ||
+ | ++++ | ||
+ | |||
+ | ===== Hinweise ===== | ||
+ | |||
+ | |||
< | < | ||
* [[# | * [[# | ||
+ | * [[# | ||
<pane id=" | <pane id=" | ||
Zeile 45: | Zeile 69: | ||
</ | </ | ||
++++ | ++++ | ||
+ | |||
+ | ==== Hilfestellung Teil 2 ==== | ||
+ | * Teil 2 ist tatsächlich noch einiges einfacher als Teil 1. Dadurch, dass die erste und zweite Zahl jeweils als eine Zahl interpretiert wird, kann das Array wegfallen und damit kann auch eine Schleife wegfallen. | ||
+ | * Wichtig ist nun allerdings, dass man beide Zahlen als '' | ||
+ | * Um aus den ersten Zahlen einer Zeile eine gemeinsame Zahl zu machen bevor man sie parsed, kann man alle Leerzeichen zwischen den Ziffern entfernen mit '' | ||
+ | |||
+ | ++++ Lösungsvorschlag | | ||
+ | <code java> | ||
+ | public long partTwo() { | ||
+ | long time = Long.parseLong(inputLines.get(0).split(":" | ||
+ | long distance = Long.parseLong(inputLines.get(1).split(":" | ||
+ | |||
+ | long numberOfWaysToBeat = 0; | ||
+ | for (long buttonTime = 0; buttonTime < time; buttonTime++) { | ||
+ | if ((buttonTime * (time-buttonTime)) > distance) { | ||
+ | numberOfWaysToBeat++; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return numberOfWaysToBeat; | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ | </ | ||
+ | |||
+ | <pane id=" | ||
+ | ==== Variante 2: Mitternachtsformel ==== | ||
+ | |||
+ | Wenn man unter der Dusche etwas nachdenkt, stellt man fest, dass das eigentlich eine Matheaufgabe ist: Man kann berechnen, wie weit man kommt, je nach dem wie lang man den Knopf drückt und wenn man weiß, welche Zeit insgesamt zur Verfügung steht. | ||
+ | |||
+ | **Fragen: | ||
+ | |||
+ | * Wie weit kommt man in der Zeit 17ms, wenn man den Knopf 3ms drückt? | ||
+ | * Wie sieht es bei 37ms und 13ms gedrücktem Knopf aus? | ||
+ | * Wie bei '' | ||
+ | |||
+ | ++++ Tipp 1: | | ||
+ | Wenn man '' | ||
+ | |||
+ | d_t(p) = (t-p)*p | ||
+ | |||
+ | Millimeter weit. Für jedes gegebene '' | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | |||
+ | Multipliziere deine Formel aus, was erhältst du dann? | ||
+ | ++++ Tipp 2: | | ||
+ | d_t(p) = (t-p)*p = -p² + tp | ||
+ | | ||
+ | Eine nach unten geöffnete Parabel. | ||
+ | ++++ | ||
+ | |||
+ | Für das zweite Wertepaar '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Nun kann man die Aufgabe mit der Mitternachtsformel und den beiden Methoden '' | ||
+ | |||
+ | Aufpassen muss man noch bei Fällen wie dem dritten Beispiel, wenn die Mitternachtsformel direkt die Ränder des Bereichs liefert - die gehören nämlich nicht dazu, weil das Boot echt weiter als das bisherige Maximum fahren soll. Hier muss man den Fall, dass die MNF " | ||
+ | |||
+ | [[https:// | ||
+ | |||
</ | </ | ||
</ | </ |