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"))
# your code goes here
aW1wb3J0IHJhbmRvbQppbXBvcnQgdGltZWl0CgpkZWYgVGhpZXJyeUxhdGh1aWxsZSgpOgogICAgZGlnaXRzID0gc2V0KHJhbmdlKDEwKSkKICAgIGZpcnN0ID0gcmFuZG9tLnJhbmRpbnQoMSwgOSkKICAgIGxhc3RfMyA9IHJhbmRvbS5zYW1wbGUoZGlnaXRzIC0ge2ZpcnN0fSwgMykKICAgIHJldHVybiBmaXJzdCoxMDAwICsgbGFzdF8zWzBdKjEwMCArIGxhc3RfM1sxXSoxMCArIGxhc3RfM1syXQoKZGVmIGthcmFrZmEoKToKICAgIHI0PTAKICAgIHdoaWxlIHI0IDwgMTAwMDoKICAgICAgICByND1pbnQoJycuam9pbihtYXAoc3RyLHJhbmRvbS5zYW1wbGUocmFuZ2UoMTApLDQpKSkpCiAgICByZXR1cm4gcjQKCmRlZiBBdXN0aW5IYXN0aW5ncygpOgogICAgbnVtYmVycyA9IFswXSAKICAgIHdoaWxlIG51bWJlcnNbMF0gPT0gMDoKICAgICAgICBudW1iZXJzID0gcmFuZG9tLnNhbXBsZShyYW5nZSgxMCksIDQpCiAgICByZXR1cm4gbnVtYmVyc1swXSoxMDAwICsgbnVtYmVyc1sxXSoxMDAgKyBudW1iZXJzWzJdKjEwICsgbnVtYmVyc1szXQoKZGVmIE1TZWlmZXJ0KCk6CiAgICB2YWwgPSAxMTExICAjIGluaXRpYWwgdmFsdWUgY29udGFpbmluZyBkdXBsaWNhdGVzIHNvIHRoZSB3aGlsZSBsb29wIGlzIGVudGVyZWQuCiAgICB3aGlsZSBsZW4oc2V0KHN0cih2YWwpKSkgIT0gNDogICMgY2hlY2sgaWYgaXQncyBkdXBsaWNhdGUgZnJlZQogICAgICAgIHZhbCA9IHJhbmRvbS5yYW5kaW50KDEwMjMsIDk4NzYpCiAgICByZXR1cm4gdmFsIAoKZGVmIHRldmVtYWRhcigpOgogICAgZGlnaXRzPVsxLDIsMyw0LDUsNiw3LDgsOV0KICAgIHJhbmRvbS5zaHVmZmxlKGRpZ2l0cykKICAgIGZpcnN0LCBkaWdpdHNbMF0gPSBkaWdpdHNbMF0sIDAKICAgIHJhbmRvbS5zaHVmZmxlKGRpZ2l0cykKICAgIHJldHVybiBmaXJzdCoxMDAwICsgZGlnaXRzWzBdKjEwMCArIGRpZ2l0c1sxXSoxMCArIGRpZ2l0c1syXQoKZGVmIGZvb2JhcigpOgogICAgbCA9IFswLDEsMiwzLDQsNSw2LDcsOCw5XQogICAgcmFuZG9tLnNodWZmbGUobCkKICAgIGlmIGxbMF0gPT0gMDoKICAgICAgICBwb3MgPSByYW5kb20uY2hvaWNlKHJhbmdlKDEsIGxlbihsKSkpCiAgICAgICAgbFswXSwgbFtwb3NdID0gbFtwb3NdLCBsWzBdCiAgICByZXR1cm4gbFswXSoxMDAwICsgbFsxXSoxMDAgKyBsWzJdKjEwICsgbFszXQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHByaW50KCJBdXN0aW4gSGFzdGluZ3M6IiwKICAgICAgICAgIHRpbWVpdC50aW1laXQoIkF1c3Rpbkhhc3RpbmdzKCkiLAogICAgICAgICAgICAgIG51bWJlcj0xMDAwMDAsCiAgICAgICAgICAgICAgc2V0dXA9ImZyb20gX19tYWluX18gaW1wb3J0IEF1c3Rpbkhhc3RpbmdzIikpCiAgICBwcmludCgiZm9vYmFyOiIsCiAgICAgICAgICB0aW1laXQudGltZWl0KCJmb29iYXIoKSIsCiAgICAgICAgICAgICAgbnVtYmVyPTEwMDAwMCwKICAgICAgICAgICAgICBzZXR1cD0iZnJvbSBfX21haW5fXyBpbXBvcnQgZm9vYmFyIikpCiAgICBwcmludCgiTVNlaWZlcnQ6IiwKICAgICAgICAgIHRpbWVpdC50aW1laXQoIk1TZWlmZXJ0KCkiLAogICAgICAgICAgICAgIG51bWJlcj0xMDAwMDAsCiAgICAgICAgICAgICAgc2V0dXA9ImZyb20gX19tYWluX18gaW1wb3J0IE1TZWlmZXJ0IikpCiAgICBwcmludCgia2FyYWtmYToiLAogICAgICAgICAgdGltZWl0LnRpbWVpdCgia2FyYWtmYSgpIiwKICAgICAgICAgICAgICBudW1iZXI9MTAwMDAwLAogICAgICAgICAgICAgIHNldHVwPSJmcm9tIF9fbWFpbl9fIGltcG9ydCBrYXJha2ZhIikpCiAgICBwcmludCgiVGhpZXJyeUxhdGh1aWxsZToiLAogICAgICAgICAgdGltZWl0LnRpbWVpdCgiVGhpZXJyeUxhdGh1aWxsZSgpIiwKICAgICAgICAgICAgICBudW1iZXI9MTAwMDAwLAogICAgICAgICAgICAgIHNldHVwPSJmcm9tIF9fbWFpbl9fIGltcG9ydCBUaGllcnJ5TGF0aHVpbGxlIikpCiAgICBwcmludCgidGV2ZW1hZGFyOiIsCiAgICAgICAgICB0aW1laXQudGltZWl0KCJ0ZXZlbWFkYXIoKSIsCiAgICAgICAgICAgICAgbnVtYmVyPTEwMDAwMCwKICAgICAgICAgICAgICBzZXR1cD0iZnJvbSBfX21haW5fXyBpbXBvcnQgdGV2ZW1hZGFyIikpCiMgeW91ciBjb2RlIGdvZXMgaGVyZQ==