Seite 2 von 2
Re: Parkzeit und Parkgebühren
Verfasst: Freitag 2. November 2018, 18:00
von __blackjack__
Wenn die Ruby-Lösung zu High-Level war, hier mal ein Ansatz in MIPS-Assembler:
Code: Alles auswählen
.data
minutes:
.word 121
.text
lw $a0, minutes
li $t0, 60 # $t0 = commenced hours
div $a0, $t0
mflo $t0
mfhi $t1
sgt $t1, $t1, $zero
add $t0, $t0, $t1
subi $t0, $t0, 2 # $t0 = billable hours
bge $t0, $zero, more_than_two_hours
move $t0, $zero
more_than_two_hours:
li $t1, 2 # $v0 = total parking fee
mul $v0, $t0, $t1
li $t0, 30 # $v0 = capped to max parking fee
ble $v0, $t0, not_over_max
move $v0, $t0
not_over_max:
Re: Parkzeit und Parkgebühren
Verfasst: Freitag 2. November 2018, 18:26
von pixewakb
Die nachfolgende Lösung gefällt mir noch nicht, aber sie funktioniert. Die Integration der Variablen (Gebühr pro Stunde, Freie Parkdauer usw.) könnte man sicher noch machen...
Code: Alles auswählen
def parking_fee(minutes):
if minutes < 2 * 60:
return 0.0
else:
fee = ( ((minutes - 2 * 60) // 60) + (1 if minutes % 60 != 0 else 0) ) * 2
if fee > 30:
return 30.0
else:
return fee
print(parking_fee(60 * 4.0))
Re: Parkzeit und Parkgebühren
Verfasst: Samstag 3. November 2018, 00:17
von __blackjack__
Auf meinem alten HP48 Taschenrechner liesse sich eine Funktion `pfee` so schön knapp ausdrücken:
Re: Parkzeit und Parkgebühren
Verfasst: Montag 5. November 2018, 15:52
von xXSkyWalkerXx1
Ist das Problem dank der Community nun gelöst? :')
Re: Parkzeit und Parkgebühren
Verfasst: Dienstag 6. November 2018, 09:57
von DeaD_EyE
Ja, natürlich..
Hätte auch noch einen Ansatz, der den anderen ähnelt.
Code: Alles auswählen
def calc_parking(duration):
free = 2 * 60
if duration <= free:
return 0.0
elif duration > free:
duration -= free
return min(30, math.ceil(duration / 60) * 2.0)
Jetzt fehlt nur noch ein netter Docstring, der das Beschreibt was die Funktion macht und unit tests ^^
Was mir immer wieder auffällt, dass viele versuchen alles in einer Funktion zu erschlagen. Berechnungen durchführen und formatierten Text ausgeben z.B.
Teilt es auf. Eine Funktion rechnet und eine andere Funktion gibt den berechneten Wert der ersten Funktion formatiert aus. So kann man ggf. die erste
Funktion zur Berechnung der gebühren im Programm an anderer Stelle verwenden.
Re: Parkzeit und Parkgebühren
Verfasst: Dienstag 6. November 2018, 10:50
von Sirius3
@Dead_Eye: wenn in einer elif-Bedingung das genaue Gegenteil der if-Bedingung steht, nimmt man else. Bei Dir fehlt z.B. der else-Block, so dass man beim Lesen gar nicht weiß, was da dann passieren soll, bzw. warum die Funktion in diesem Fall None zurückgibt.
Code: Alles auswählen
def calc_parking_fee(duration, free_fee=4, max_fee=30):
return max(0, min(max_fee, math.ceil(duration / 60.) * 2 - free_fee))
Re: Parkzeit und Parkgebühren
Verfasst: Dienstag 6. November 2018, 11:03
von __blackjack__
Mal Benutzerinteraktion und Berechnungen getrennt. Als Bash-Skript.
Code: Alles auswählen
#!/bin/bash
readonly FreeHours=2
readonly FeePerHour=2
readonly MaxFee=30
MinutesToHours() {
local minutes=$1
local hours
hours=$((minutes / 60))
((minutes % 60)) && ((hours++))
echo "$hours"
}
CalculateParkingFee() {
local hours=$1
local fee=0
[[ hours -gt FreeHours ]] && fee=$(((hours - FreeHours) * FeePerHour))
[[ fee -gt MaxFee ]] && fee=$MaxFee
echo "$fee"
}
Main() {
local minutes
local hours
local fee
read -r -p "Parkzeit in Minuten: " minutes
hours=$(MinutesToHours "$minutes")
fee=$(CalculateParkingFee "$hours")
echo "Die Parkgebühr für $hours Stunde(n) beträgt $fee €."
}
[[ ${BASH_SOURCE[0]} = "$0" ]] && Main "$@"