Die Lösung CodingBat Herstellung von Ziegeln puzzle in Python
Ich bin Abschluss diese CodingBat problem:
Wollen wir eine Reihe von Ziegeln, die Ziel-Zoll lang. Wir haben ein paar kleine Steine (1 Zoll) und große Steine (5 Zoll jeder). Gibt True zurück, wenn es möglich ist, um das Ziel, indem Sie aus den gegebenen Bausteinen. Dies ist ein wenig schwieriger, als es aussieht und geht auch ohne Schleifen.
make_bricks(3, 1, 8) → True make_bricks(3, 1, 9) → False make_bricks(3, 2, 10) → True
Schrieb ich:
if small + big * 5 >= goal: return True
else: return False
Meine Fehler sind: make_bricks(3, 2, 9)
→ False
(ich wahr, denn (2*5)+3=13, die größer ist als 9.
make_bricks(2, 1000000, 100003) → False
make_bricks(1, 4, 12) → False
Fand ich diese Antwort nicht bestandenen tests:
if goal > small + big * 5:
return False
else:
return goal % 5 <= small
Ich weiss nicht wirklich warum, kann mir bitte jemand erklären?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine kürzere Lösung.
Sind Sie nicht berücksichtigen, dass Sie möglicherweise nicht brauchen alle von der 5 der. Zum Beispiel, wird Ihr code nicht auf:
Kann man wirklich nur ein großes backstein hier. Dies lässt Sie mit 4 und nur zwei kleine Steine, um den Unterschied auszugleichen.
Dass ist der Grund, warum das Beispiel funktioniert. Es berücksichtigt, dass alle 5 s kann nicht verwendet werden.
Die nette Sache über codingbat ist, dass Sie sagen, was Sie erwarteten und was Sie bekamen, während der Prüfungen. Sie können zu Fuß durch den code mit der fehlerhaften Werte, um zu sehen, warum es scheitert. Papier-und-Bleistift ist dein Freund.
ausprobiert und getestet
Unter python-code funktioniert bei mir in Codingbat Seite.
HTML:
Ein-und Ausgänge:
Erwartet Wird Ausgeführt
make_bricks(3, 1, 8) → True True OK
make_bricks(3, 1, 9) → False False OK
make_bricks(3, 2, 10) → True True OK
make_bricks(3, 2, 8) → True True OK
make_bricks(3, 2, 9) → False False OK
make_bricks(6, 1, 11) → True True OK
make_bricks(6, 0, 11) → False False OK
make_bricks(1, 4, 11) → True True OK
make_bricks(0, 3, 10) → True True OK
make_bricks(1, 4, 12) → False False OK
make_bricks(3, 1, 7) → True True OK
make_bricks(1, 1, 7) → False False OK
make_bricks(2, 1, 7) → True True OK
make_bricks(7, 1, 11) → True True OK
make_bricks(7, 1, 8) → True True OK
make_bricks(7, 1, 13) → False False OK
make_bricks(43, 1, 46) → True True OK
make_bricks(40, 1, 46) → False False OK
make_bricks(40, 2, 47) → True True OK
make_bricks(40, 2, 50) → True True OK
make_bricks(40, 2, 52) → False False OK
make_bricks(22, 2, 33) → False False OK
make_bricks(0, 2, 10) → True True OK
make_bricks(1000000, 1000, 1000100) → True True OK
make_bricks(2, 1000000, 100003) → False False OK
make_bricks(20, 0, 19) → True True OK
make_bricks(20, 0, 21) → False False OK
make_bricks(20, 4, 51) → False False OK
make_bricks(20, 4, 39) → True True OK
andere tests
OK
verwenden Sie diesen code:
if(((klein*1)+(groß*5))< Ziel):
elif((5*(Ziel//5))+kleine
anderes:
Können Sie Folgendes versuchen:
Voll funktionierende Lösung in 3 Zeilen code:
Dies ist, was ich kam mit:
Nicht einmal so dicht wie elegant, wie Haasan Razas Antwort:
** in Antwort auf "wenn möglich, könnten Sie bitte erläutern Sie Ihre Antwort ? – N997 Mar-23-3:53"
Alle Möglichkeiten abgedeckt sind, in dieser einen Zeile code. Der code wird False zurückgegeben, wenn beide Fall 1 UND Fall 2 sind nicht Erfüllt:
Fall 1: der Rest des Ziel durch 5 geteilt werden muss weniger als oder gleich zu kleinen Ziegeln. Auf diese Weise haben wir genug kleine Steine, um eventuelle Entfernung von weniger als 5 cm nach Links über nach großen Steine sind gelegt.
Fall 2: Das Ziel minus all der großen Steine ist weniger als oder gleich zu kleinen Ziegeln. In diesem Fall umfaßt das Szenario nicht genug, große und kleine, um das Ziel zu erfüllen, bit auch der Fall, wenn das Ziel erfüllt werden kann, indem nur kleine Steine
Obwohl diese Frage schon beantwortet zu Tode, ich wollte nach meinem one-liner. Die Logik, die wir verwendet wurde, war 1) finden Sie heraus, wie viele große Steine verwendet werden (bis zu der Anzahl zur Verfügung), dann siehe 2), wenn es genug kleine Steine, um den Unterschied auszugleichen.
Den Beispiel-code können Sie code in Steine von unterschiedlicher Länge:
Könnte man diese umschreiben von smashing Sie zusammen aber dann ist es weniger lesbar (wenn zufriedenstellend klein)
Es ist interessant, dass all unsere Ansätze finden Sie die Lösung, mit der maximalen Anzahl großer Steine, und das tut erfüllen Sie die Frage, aber es könnte auch andere Kombinationen von großen und kleinen Steinen, die eine richtige Antwort geben. Das problem ist nicht, dass Sie verwenden sollten, alle die großen Steine. Ich nehme an, Sie würde in einer Schleife durch den Bereich der großen Steine, und bestimmen, für welche, wenn eine beliebige Anzahl < big große Steine das Ergebnis ist auch richtig.
b=big*5
s=small*1
`if b==Ziel oder s==Ziel:
if b==0: #0
falls s==0:
if b<goal:
dann, wenn b>Ziel:
anderes:
Ich glaube, das sollte funktionieren. Aber aus irgendeinem Grund, es funktioniert hier nicht.
http://codingbat.com/prob/p118406
Ich weiß nicht, python noch nicht, aber ich löste es für java.
Ich bin Entsendung der java-code so, dass Sie verstehen, die Logik, die Sie dann verwenden können, zu schreiben, das python-Programm.
Wir haben zu berücksichtigen, alle Kombinationen von 'klein' und 'groß' - Steine, die im Ergebnis das Ziel.
Wir brauchen also zwei geschachtelte for-Schleifen innerhalb einer anderen.
Siehe code:
Edit 1:
Lassen Sie uns einen Blick auf die Lösung die du gepostet hast.
Diese Anweisung stellt sicher, dass, wenn alle Steine genommen werden-sammeln Sie sich kurz, um das 'Ziel', d.h. die Funktion kehrt sofort zurück, als falsch.
Nun der 'else' - Teil:
In diesem wird geprüft, dass, wenn der Rest des Ausdrucks (Ziel % 5) ist weniger als oder gleich der Anzahl der "kleine" Bausteine .
Dies ist, weil die 'kleine' Steine sind 1 Zoll lang. Wenn jeder kleine Stein ist 2 cm lang ist, dann wäre die Bedingung sein
Wenn die kleinen bricks 'n' Zentimeter lang ist dann die Bedingung wäre
Einem sehr einfachen mathematischen Regel, die wir in der Schule lernen, wird hier benutzt, geschickt.
Das problem besagt, dass es gelöst werden kann, ohne zu Schleifen. Diese Lösung funktioniert für mich, aber vielleicht nicht die effizienteste:
b=big*5
s=small*1
`if b==Ziel oder s==Ziel:
if b==0: #0
falls s==0:
if b<goal:
dann, wenn b>Ziel:
anderes:
I don't really get why, can someone please explain?
. Glauben Sie, dass Ihre Antwort ist zu beantworten? Und postest du es 2 mal... In diesem Fall gibt es 16 Antworten mehr, so setzen die Profis oy dein P. O. V.