Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

Eimerproblem

Diskussion: Eimerproblem im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Zitat: Wieso sollte ich das ausprobieren? Wie soll ich denn in einem 15l oder 13l Eimer 20 reinkriegen?^^ Z.B ...

Antwort
Alt 24.05.09, 14:24   #16 (permalink)
CDW
Moderator
Themenstarter
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Anzeige

Zitat:
Wieso sollte ich das ausprobieren? Wie soll ich denn in einem 15l oder 13l Eimer 20 reinkriegen?^^
Z.B wenn man im 15l Eimer 7 Liter hat und den 13L Eimer füllt .

Da ich diese Aufgabe schon zu den Fragen hinzugefügt habe: ein Bsp mit anderen Werten (kannst Du auch gerne einsetzen )

A:15, B:13, gesucht: 17L
fill(a), # nun A:15, B:0
a:15>>b:0, #nun A:2, B:13
empty(b), #nun A:2, B:0
a:2>>b:0, #nun A:0, B:2
fill(a) # nun A: 15, B:2 ==17l

Edit: foxalem war schneller.
@fox: "versauen" ist recht schwer - ich nehme einfach andere Werte. Eine weitere Aufgabe zu generieren ist eine Sache von paar Sekunden
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 24.05.09, 14:24   #17 (permalink)
 
Registriert seit: 04.12.08
xpecs Leistung: Facit NTK
Likes: 0
Standard

So Aufgabe 2 habe ich raus, schade nur das ich son einfach Denkanstoß brauchte^^
Allerdings muss ich gestehen, dass ich irgendwie eine Aktion vergesse zu zählen, aber ich kriege das Endergebnis raus

Zitat:
Jetzt wird B aufgefüllt
EimerA: 1140
EimerB: 1320

EimerA: 910
EimerB: 0

Jetzt wird B aufgefüllt
EimerA: 910
EimerB: 1320

EimerA: 680
EimerB: 0

Fertig
Inhalt der Eimer: 2000
Durchgänge: 46
Angehängte Dateien
Dateityp: txt eimer2.txt (1,2 KB, 5x aufgerufen)
xpecs ist offline   Mit Zitat antworten
Alt 26.05.09, 09:04   #18 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Ich hoffe, mein kleiner Python-Solver ist richtig:
eimer.py   
Code:
a = 1550
b = 1320
wanted = 2000

m = [[0 for y in range(b+1)] for x in range(a+1)]
solutionPath = None

def backtrack(myA, myB, path=[]):
    global solutionPath
    if m[myA][myB] == 0 or m[myA][myB] > len(path):
        m[myA][myB] = len(path)
    else:
        return
    if solutionPath != None and len(path) >= len(solutionPath):
        return
    if myA == wanted or myB == wanted or myA + myB == wanted:
        if solutionPath == None or len(solutionPath) > len(path):
            solutionPath = path
    if myA != a:
        backtrack(a, myB, path + [0]) # a fuellen
    if myB != b:
        backtrack(myA, b, path + [1]) # b fuellen
    if myA != 0 and myB != b:
        nextA = max(0, myA - b + myB)
        nextB = myB + myA - nextA
        backtrack(nextA, nextB, path + [2]) # a > b
    if myB != 0 and myA != a:
        nextB = max(0, myB - a + myA)
        nextA = myA + myB - nextB
        backtrack(nextA, nextB, path + [3]) # b > a
    if myA != 0:
        backtrack(0, myB, path + [4]) # a leeren
    if myB != 0:
        backtrack(myA, 0, path + [5]) # b leeren

backtrack(0, 0, [])
desc = ["fuelle(a)", "fuelle(b)", "a >> b", "b >> a", "leere(a)", "leere(b)"]
for i in solutionPath:
    print desc[i]
print "\nAnzahl Durchgaenge:", len(solutionPath)

Was ich allerdings in der Beispielaufgabe nicht ganz nachvollziehen kann ist, warum man am Ende b leeren muss (soll). Schließlich befindet sich die gewünschte Menge bereits in Behälter a. Der letzte Schritt ist also meiner Meinung nach überflüssig.

Was ist eigentlich die Lösung für Teilaufgabe 4? Mein Ergebnis dafür ist 64, ich bin mir aber nicht ganz sicher, ob das richtig ist.
Eydeet ist offline   Mit Zitat antworten
Alt 26.05.09, 13:57   #19 (permalink)
CDW
Moderator
Themenstarter
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
Original von Eydeet
Was ich allerdings in der Beispielaufgabe nicht ganz nachvollziehen kann ist, warum man am Ende b leeren muss (soll). Schließlich befindet sich die gewünschte Menge bereits in Behälter a. Der letzte Schritt ist also meiner Meinung nach überflüssig.
Ja, also... ähm. Ich habe einfach nicht daran gedacht . Ist im Prinzip eine Definitionssache - ob man nur in einem Eimer den gewünschten Inhalt haben möchte oder insgesamt in den Eimern sich nur X Liter befinden sollen.

Zitat:
Was ist eigentlich die Lösung für Teilaufgabe 4? Mein Ergebnis dafür ist 64, ich bin mir aber nicht ganz sicher, ob das richtig ist.
65 mit Eimerleeren am Ende . 64 sollte also auch korrekt sein.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » Eimerproblem
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61