Skip to content

Instantly share code, notes, and snippets.

@jkingsman
Created May 11, 2019 00:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jkingsman/38b9dd2901e8989a484d6ebe4ff98431 to your computer and use it in GitHub Desktop.
Save jkingsman/38b9dd2901e8989a484d6ebe4ff98431 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
def interesting(num):
# palindrome
if num == num[::-1]:
return True
# alternating
if num[0] == num[2] and num[2] == num[4]:
return True
if num[1] == num[3] and num[3] == num[5]:
return True
# first half same as last
if num[0:3] == num[3:6]:
return True
# repeat 3
if num[0] == num[1] == num[2]:
return True
if num[1] == num[2] == num[3]:
return True
if num[2] == num[3] == num[4]:
return True
if num[3] == num[4] == num[5]:
return True
# repeat 4
if num[0] == num[1] == num[2] == num[3]:
return True
if num[1] == num[2] == num[3] == num[4]:
return True
if num[2] == num[3] == num[4] == num[5]:
return True
# repeat 5
if num[0] == num[1] == num[2] == num[3] == num[4]:
return True
if num[1] == num[2] == num[3] == num[4] == num[5]:
return True
# repeat 6
if num[0] == num[1] == num[2] == num[3] == num[4] == num[5]:
return True
# 1/2 match; 4/5 match
if num[1] == num[2] and num[4] == num[5]:
return True
# 0/1 match; 3/4 match
if num[0] == num[1] and num[3] == num[4]:
return True
# sequential run up or down
if int(num[0]) + 1 == int(num[1]) and int(num[1]) + 1 == int(num[2]) and int(num[2]) + 1 == int(num[3]) and \
int(num[3]) + 1 == int(num[4]) and int(num[4]) + 1 == int(num[5]):
return True
if int(num[0]) - 1 == int(num[1]) and int(num[1]) - 1 == int(num[2]) and int(num[2]) - 1 == int(num[3]) and \
int(num[3]) - 1 == int(num[4]) and int(num[4]) - 1 == int(num[5]):
return True
# XXYYZZ
if num[0] == num[1] and num[2] == num[3] and num[4] == num[5]:
return True
# XXnnYY
if num[0] == num[1] and num[4] == num[5]:
return True
# XYX ZYZ
if num[0] == num[2] and num[3] == num[5] and num[1] == num[4]:
return True
# first or last three are sequential runs up or down
if int(num[0]) + 1 == int(num[1]) and int(num[1]) + 1 == int(num[2]) and int(num[2]) + 1 == int(num[3]):
return True
if int(num[0]) - 1 == int(num[1]) and int(num[1]) - 1 == int(num[2]) and int(num[2]) - 1 == int(num[3]):
return True
if int(num[3]) + 1 == int(num[4]) and int(num[4]) + 1 == int(num[5]):
return True
if int(num[3]) - 1 == int(num[4]) and int(num[4]) - 1 == int(num[5]):
return True
# first half and second half are anagrams
if ''.join(sorted(num[0:3])) == ''.join(sorted(num[3:6])):
return True
return False
interesting_list = []
boring_list = []
for i in range(1000000):
num = str(i).zfill(6)
if interesting(num):
interesting_list.append(num)
else:
boring_list.append(num)
if int(num) % 100000 == 0:
print("At %s" % (num))
# print(boring_list)
print("%i interesting entries" % (len(interesting_list)))
print("%f%% interesting" % ((len(interesting_list) / 1000000) * 100))
@jkingsman
Copy link
Author

No sassing the terrible code please -- I wanted answers; not to be clever ;D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment