Ich lösen die Codierung Probleme auf codingbat in Python. Das make_bricks Problem ist wie folgt definiert:geben Sie einige kleine und große Zahlen, gewünschte Nummer - ohne Schleifen
Wir haben eine Reihe von Ziegeln machen wollen, das Ziel Zoll lang ist. Wir haben eine Nummer von kleinen Ziegeln (1 Zoll) und große Ziegelsteine (jeweils 5 Zoll). Return True, wenn es möglich ist, das Ziel von aus den gegebenen Ziegeln zu wählen. Diese ist etwas härter als es aussieht und kann ohne Schleifen gemacht werden.
make_bricks(3, 1, 8) → True make_bricks(3, 1, 9) → False make_bricks(3, 2, 10) → True
Die erste Lösung kam ich mit war:
from itertools import permutations
def make_bricks(small, big, goal):
l = small*[1]+big*[5]
return any([(goal in i) for i in ([[sum(j) for j in set(permutations(l,i))] \
for i in range(2,len(l)+1)])])
Was ist richtig, aber wurde durch die Beurteilungs Software abgelehnt, da die Einfuhren nicht erlaubt. Also meine nächste Lösung war:
def make_bricks(small, big, goal):
bricks = small*[1]+big*[5]
for step in range(len(bricks)+1,1,-1):
for start in range(len(bricks)):
if len(bricks[start:start+step])==step:
if sum(bricks[start:start+step])==goal:
return True
return False
Welche auch richtig ist, aber mit einem Time-out bei der Eingabe wie make_bricks(1000000, 1000, 1000100)
erstickt.
Also, wie würden Sie dieses Problem in Python lösen, ohne Importe zu verwenden, ohne Schleifen und im Zeitlimit zu verwenden?
Eine Intuition: Wann immer du 'range (len (...)) siehst' 'gibt es mit ziemlicher Sicherheit einen besseren Weg, um das zu tun, was du tust. – katrielalex
Ich dachte, wir sollten keine Hilfe bei der Programmierung von Websites wie "CodingBat" geben?"Was ist, wenn das ein Hausaufgabenproblem ist? Und dein Code ist zu kompliziert. Ich habe das mit 5 Zeilen und viel kürzerem Code gemacht. – Dombey