import random
import timeit
def ThierryLathuille():
digits = set(range(10))
first = random.randint(1, 9)
last_3 = random.sample(digits - {first}, 3)
return first*1000 + last_3[0]*100 + last_3[1]*10 + last_3[2]
def karakfa():
r4=0
while r4 < 1000:
r4=int(''.join(map(str,random.sample(range(10),4))))
return r4
def AustinHastings():
numbers = [0]
while numbers[0] == 0:
numbers = random.sample(range(10), 4)
return numbers[0]*1000 + numbers[1]*100 + numbers[2]*10 + numbers[3]
def MSeifert():
val = 1111 # initial value containing duplicates so the while loop is entered.
while len(set(str(val))) != 4: # check if it's duplicate free
val = random.randint(1023, 9876)
return val
def tevemadar():
digits=[1,2,3,4,5,6,7,8,9]
random.shuffle(digits)
first, digits[0] = digits[0], 0
random.shuffle(digits)
return first*1000 + digits[0]*100 + digits[1]*10 + digits[2]
def foobar():
l = [0,1,2,3,4,5,6,7,8,9]
random.shuffle(l)
if l[0] == 0:
pos = random.choice(range(1, len(l)))
l[0], l[pos] = l[pos], l[0]
return l[0]*1000 + l[1]*100 + l[2]*10 + l[3]
if __name__ == "__main__":
print("Austin Hastings:",
timeit.timeit("AustinHastings()",
number=100000,
setup="from __main__ import AustinHastings"))
print("foobar:",
timeit.timeit("foobar()",
number=100000,
setup="from __main__ import foobar"))
print("MSeifert:",
timeit.timeit("MSeifert()",
number=100000,
setup="from __main__ import MSeifert"))
print("karakfa:",
timeit.timeit("karakfa()",
number=100000,
setup="from __main__ import karakfa"))
print("ThierryLathuille:",
timeit.timeit("ThierryLathuille()",
number=100000,
setup="from __main__ import ThierryLathuille"))
print("tevemadar:",
timeit.timeit("tevemadar()",
number=100000,
setup="from __main__ import tevemadar"))
aW1wb3J0IHJhbmRvbQppbXBvcnQgdGltZWl0CiAKZGVmIFRoaWVycnlMYXRodWlsbGUoKToKICAgIGRpZ2l0cyA9IHNldChyYW5nZSgxMCkpCiAgICBmaXJzdCA9IHJhbmRvbS5yYW5kaW50KDEsIDkpCiAgICBsYXN0XzMgPSByYW5kb20uc2FtcGxlKGRpZ2l0cyAtIHtmaXJzdH0sIDMpCiAgICByZXR1cm4gZmlyc3QqMTAwMCArIGxhc3RfM1swXSoxMDAgKyBsYXN0XzNbMV0qMTAgKyBsYXN0XzNbMl0KIApkZWYga2FyYWtmYSgpOgogICAgcjQ9MAogICAgd2hpbGUgcjQgPCAxMDAwOgogICAgICAgIHI0PWludCgnJy5qb2luKG1hcChzdHIscmFuZG9tLnNhbXBsZShyYW5nZSgxMCksNCkpKSkKICAgIHJldHVybiByNAogCmRlZiBBdXN0aW5IYXN0aW5ncygpOgogICAgbnVtYmVycyA9IFswXSAKICAgIHdoaWxlIG51bWJlcnNbMF0gPT0gMDoKICAgICAgICBudW1iZXJzID0gcmFuZG9tLnNhbXBsZShyYW5nZSgxMCksIDQpCiAgICByZXR1cm4gbnVtYmVyc1swXSoxMDAwICsgbnVtYmVyc1sxXSoxMDAgKyBudW1iZXJzWzJdKjEwICsgbnVtYmVyc1szXQogCmRlZiBNU2VpZmVydCgpOgogICAgdmFsID0gMTExMSAgIyBpbml0aWFsIHZhbHVlIGNvbnRhaW5pbmcgZHVwbGljYXRlcyBzbyB0aGUgd2hpbGUgbG9vcCBpcyBlbnRlcmVkLgogICAgd2hpbGUgbGVuKHNldChzdHIodmFsKSkpICE9IDQ6ICAjIGNoZWNrIGlmIGl0J3MgZHVwbGljYXRlIGZyZWUKICAgICAgICB2YWwgPSByYW5kb20ucmFuZGludCgxMDIzLCA5ODc2KQogICAgcmV0dXJuIHZhbCAKIApkZWYgdGV2ZW1hZGFyKCk6CiAgICBkaWdpdHM9WzEsMiwzLDQsNSw2LDcsOCw5XQogICAgcmFuZG9tLnNodWZmbGUoZGlnaXRzKQogICAgZmlyc3QsIGRpZ2l0c1swXSA9IGRpZ2l0c1swXSwgMAogICAgcmFuZG9tLnNodWZmbGUoZGlnaXRzKQogICAgcmV0dXJuIGZpcnN0KjEwMDAgKyBkaWdpdHNbMF0qMTAwICsgZGlnaXRzWzFdKjEwICsgZGlnaXRzWzJdCiAKZGVmIGZvb2JhcigpOgogICAgbCA9IFswLDEsMiwzLDQsNSw2LDcsOCw5XQogICAgcmFuZG9tLnNodWZmbGUobCkKICAgIGlmIGxbMF0gPT0gMDoKICAgICAgICBwb3MgPSByYW5kb20uY2hvaWNlKHJhbmdlKDEsIGxlbihsKSkpCiAgICAgICAgbFswXSwgbFtwb3NdID0gbFtwb3NdLCBsWzBdCiAgICByZXR1cm4gbFswXSoxMDAwICsgbFsxXSoxMDAgKyBsWzJdKjEwICsgbFszXQogCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwcmludCgiQXVzdGluIEhhc3RpbmdzOiIsCiAgICAgICAgICB0aW1laXQudGltZWl0KCJBdXN0aW5IYXN0aW5ncygpIiwKICAgICAgICAgICAgICBudW1iZXI9MTAwMDAwLAogICAgICAgICAgICAgIHNldHVwPSJmcm9tIF9fbWFpbl9fIGltcG9ydCBBdXN0aW5IYXN0aW5ncyIpKQogICAgcHJpbnQoImZvb2JhcjoiLAogICAgICAgICAgdGltZWl0LnRpbWVpdCgiZm9vYmFyKCkiLAogICAgICAgICAgICAgIG51bWJlcj0xMDAwMDAsCiAgICAgICAgICAgICAgc2V0dXA9ImZyb20gX19tYWluX18gaW1wb3J0IGZvb2JhciIpKQogICAgcHJpbnQoIk1TZWlmZXJ0OiIsCiAgICAgICAgICB0aW1laXQudGltZWl0KCJNU2VpZmVydCgpIiwKICAgICAgICAgICAgICBudW1iZXI9MTAwMDAwLAogICAgICAgICAgICAgIHNldHVwPSJmcm9tIF9fbWFpbl9fIGltcG9ydCBNU2VpZmVydCIpKQogICAgcHJpbnQoImthcmFrZmE6IiwKICAgICAgICAgIHRpbWVpdC50aW1laXQoImthcmFrZmEoKSIsCiAgICAgICAgICAgICAgbnVtYmVyPTEwMDAwMCwKICAgICAgICAgICAgICBzZXR1cD0iZnJvbSBfX21haW5fXyBpbXBvcnQga2FyYWtmYSIpKQogICAgcHJpbnQoIlRoaWVycnlMYXRodWlsbGU6IiwKICAgICAgICAgIHRpbWVpdC50aW1laXQoIlRoaWVycnlMYXRodWlsbGUoKSIsCiAgICAgICAgICAgICAgbnVtYmVyPTEwMDAwMCwKICAgICAgICAgICAgICBzZXR1cD0iZnJvbSBfX21haW5fXyBpbXBvcnQgVGhpZXJyeUxhdGh1aWxsZSIpKQogICAgcHJpbnQoInRldmVtYWRhcjoiLAogICAgICAgICAgdGltZWl0LnRpbWVpdCgidGV2ZW1hZGFyKCkiLAogICAgICAgICAgICAgIG51bWJlcj0xMDAwMDAsCiAgICAgICAgICAgICAgc2V0dXA9ImZyb20gX19tYWluX18gaW1wb3J0IHRldmVtYWRhciIpKQ==