56 lines
1.1 KiB
Python
56 lines
1.1 KiB
Python
# https://www.youtube.com/watch?v=HyRjuPP9S3o
|
|
|
|
from collections import Counter
|
|
|
|
max_val = 1300
|
|
|
|
possibilities = list(range(13, max_val+1))
|
|
|
|
# exclusions = {64, 729}
|
|
|
|
|
|
perfect_squares = {x*x for x in range(100)}
|
|
perfect_cubes = {x*x*x for x in range(100) if x*x*x <= max_val}
|
|
|
|
|
|
|
|
def less_than_500(x):
|
|
return x < 500
|
|
|
|
def is_perfect_square(x):
|
|
return x in perfect_squares
|
|
|
|
def is_perfect_cube(x):
|
|
return x in perfect_cubes
|
|
|
|
def second_digit_1(x):
|
|
return str(x)[1] == "1"
|
|
|
|
|
|
# print([x for x in possibilities if is_perfect_cube(x) and is_perfect_square(x)])
|
|
|
|
# invert invert second digit is a 1
|
|
conditions = [less_than_500, is_perfect_square, is_perfect_cube]
|
|
for mask in range(2**3):
|
|
pos = set(possibilities)
|
|
for x in possibilities:
|
|
for i, condition in enumerate(conditions):
|
|
if not (condition(x) ^ (mask & (1 << i))):
|
|
pos.remove(x)
|
|
break
|
|
|
|
if 1 in Counter(second_digit_1(x) for x in pos).values():
|
|
print(mask, pos)
|
|
|
|
# print(mask, pos)
|
|
|
|
|
|
# What was said
|
|
# it is >500 (lie)
|
|
# it
|
|
|
|
# truth
|
|
# less than 500
|
|
# perfect square
|
|
# perfect
|