Ich habe mich gefragt, was der schnellste FizzBuzz ist, also habe ich einige codiert.
Messen Sie für die Funktion, die FizzBuzz standardmäßig von 1 bis 100 ausgibt, die Zeit, zu der es 100 Mal ausgeführt wird. Drucken Sie den Ausdruck auch bei Zeitmessung nicht aus.
FizzBuzz Problem
Schreiben Sie ein Programm, das Zahlen von 1 bis 100 druckt. Wenn es sich jedoch um ein Vielfaches von 3 handelt, drucken Sie "Fizz" anstelle einer Zahl. Wenn es sich um ein Vielfaches von 5 handelt, drucken Sie "Buzz". Wenn es sich um ein Vielfaches von 3 und 5 handelt, drucken Sie "Fizz Buzz".
http://d.hatena.ne.jp/keyword/Fizz-Buzz%CC%E4%C2%EA
import time
dict = {}
for func in [main1, main2, main3, main4, main5,main6, main7]:
total = 0
for i in range(100):
s = time.time()
func(1,101)
e = time.time()
total += e - s
dict[func.__name__] = total
Vorerst orthodox.
def main1(start,stop):
for i in range(start,stop):
if (i%15) == 0:
print 'FizzBuzz'
elif (i%5) == 0:
print 'Buzz'
elif (i%3) == 0:
print 'Fizz'
else:
print i
In Bezug auf das Web habe ich versucht, die Anzahl der Ausführungen zu reduzieren, wenn if durch Verschachtelung von if ausgeführt wurde.
def main2(start,stop):
for i in range(start,stop):
if (i%3) == 0:
if (i%5) == 0:
print 'FizzBuzz'
else:
print 'Fizz'
else:
if (i%5) == 0:
print 'Buzz'
else:
print i
Ich machte eine Liste der restlichen 15.
def main3(start,stop):
fizzbuzz_list = []
for i in range(15):
if (i%15) == 0:
fizzbuzz_list.append('FizzBuzz')
elif (i%5) == 0:
fizzbuzz_list.append('Buzz')
elif (i%3) == 0:
fizzbuzz_list.append('Fizz')
else:
fizzbuzz_list.append(0)
for i in range(start,stop):
print fizzbuzz_list[i%15] if fizzbuzz_list[i%15] else i
Ich habe die Liste von main3 im Voraus manuell eingegeben.
def main4(start,stop):
fizzbuzz_list = ['FizzBuzz', 0, 0, 'Fizz', 0, 'Buzz', 'Fizz', 0, 0, 'Fizz', 'Buzz', 0, 'Fizz', 0, 0 ]
for i in range(start,stop):
print fizzbuzz_list[i%15] if fizzbuzz_list[i%15] else i
Ich habe einmal versucht zu drucken.
def main5(start,stop):
fizzbuzz = ''
for i in range(start,stop):
if (i%3) == 0:
if (i%5) == 0:
fizzbuzz += 'FizzBuzz\n'
else:
fizzbuzz += 'Fizz\n'
else:
if (i%5) == 0:
fizzbuzz += 'Buzz\n'
else:
fizzbuzz += str(i) + "\n"
print fizzbuzz
Erstens habe ich alles für und wenn versucht.
def main6(start,stop):
print 1
print 2
print "Fizz"
print 4
print "Buzz"
print "Fizz"
print 7
print 8
print "Fizz"
print "Buzz"
print 11
print "Fizz"
print 13
print 14
print "FizzBuzz"
print 16
print 17
print "Fizz"
print 19
print "Buzz"
print "Fizz"
print 22
print 23
print "Fizz"
print "Buzz"
print 26
print "Fizz"
print 28
print 29
print "FizzBuzz"
print 31
print 32
print "Fizz"
print 34
print "Buzz"
print "Fizz"
print 37
print 38
print "Fizz"
print "Buzz"
print 41
print "Fizz"
print 43
print 44
print "FizzBuzz"
print 46
print 47
print "Fizz"
print 49
print "Buzz"
print "Fizz"
print 52
print 53
print "Fizz"
print "Buzz"
print 56
print "Fizz"
print 58
print 59
print "FizzBuzz"
print 61
print 62
print "Fizz"
print 64
print "Buzz"
print "Fizz"
print 67
print 68
print "Fizz"
print "Buzz"
print 71
print "Fizz"
print 73
print 74
print "FizzBuzz"
print 76
print 77
print "Fizz"
print 79
print "Buzz"
print "Fizz"
print 82
print 83
print "Fizz"
print "Buzz"
print 86
print "Fizz"
print 88
print 89
print "FizzBuzz"
print 91
print 92
print "Fizz"
print 94
print "Buzz"
print "Fizz"
print 97
print 98
print "Fizz"
print "Buzz"
Ich habe versucht, nur eine Zeile der Druckerklärung abzugeben.
def main7(start,stop):
print "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n16\n17\nFizz\n19\nBuzz\nFizz\n22\n23\nFizz\nBuzz\n26\nFizz\n28\n29\nFizzBuzz\n31\n32\nFizz\n34\nBuzz\nFizz\n37\n38\nFizz\nBuzz\n41\nFizz\n43\n44\nFizzBuzz\n46\n47\nFizz\n49\nBuzz\nFizz\n52\n53\nFizz\nBuzz\n56\nFizz\n58\n59\nFizzBuzz\n61\n62\nFizz\n64\nBuzz\nFizz\n67\n68\nFizz\nBuzz\n71\nFizz\n73\n74\nFizzBuzz\n76\n77\nFizz\n79\nBuzz\nFizz\n82\n83\nFizz\nBuzz\n86\nFizz\n88\n89\nFizzBuzz\n91\n92\nFizz\n94\nBuzz\nFizz\n97\n98\nFizz\nBuzz"
main5 wurde der schnellste. Immerhin scheint das Drucken einige Zeit zu dauern.
main1 2.381
main2 1.380
main3 2.006
main4 1.723
main5 0.333
main6 1.124
main7 0.336
Die Funktion, die main6 () erstellt hat.
def sub6(start,stop):
filename = 'fast_fizzbuzz2.py'
fizzbuzz = 'def main1():\n'
for i in range(start,stop):
fizzbuzz += ' print '
if (i%3) == 0:
if (i%5) == 0:
fizzbuzz += '"FizzBuzz"\n'
else:
fizzbuzz += '"Fizz"\n'
else:
if (i%5) == 0:
fizzbuzz += '"Buzz"\n'
else:
fizzbuzz += str(i) + "\n"
f = open(filename,'a' )
f.write(fizzbuzz)
f.close()
Die Funktion, die main7 () erstellt hat
def sub7(start,stop):
filename = 'fast_fizzbuzz2.py'
fizzbuzz = 'def main2():\n'
fizzbuzz += ' print "'
for i in range(start,stop):
if (i%3) == 0:
if (i%5) == 0:
fizzbuzz += r'FizzBuzz\n'
else:
fizzbuzz += r'Fizz\n'
else:
if (i%5) == 0:
fizzbuzz += r'Buzz\n'
else:
fizzbuzz += r'%s\n' % str(i)
fizzbuzz += '"'
f = open(filename,'a')
f.write(fizzbuzz)
f.close()
Recommended Posts