Skip to content

Commit 96adc0b

Browse files
author
shiv
committed
An easy puzzle to crack
1 parent 8a5941f commit 96adc0b

File tree

2 files changed

+37
-12
lines changed

2 files changed

+37
-12
lines changed

easy_crack.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# some puzzle that I'm supposed to crack
2+
3+
s = """aHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZm9ybXMvZC9lLzFGQUlwUUxTZFYwWWtxdkFmTVFCRGxET3BWNW9hbFNxUWczUnJIYnhqbXRMa1Q1TFQ0QW5RZFBnL3ZpZXdmb3JtCg"""
4+
import base64
5+
# add padding
6+
coded_string = s+"=="
7+
print(base64.b64decode(coded_string))

euler86_cuboid.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,36 @@
55
from functools import reduce
66
from itertools import combinations
77

8-
dist = lambda d1, d2: math.sqrt((d1**2)+(d2**2))
8+
# a smarter distance func
9+
dist2 = lambda s: math.sqrt(s)
10+
911
# spider is at start of a
1012
# fly is at the end of c
11-
def shortest_dist(a, b, c):
12-
p1 = dist(a, b+c)
13-
p2 = dist(c, a+b)
14-
p3 = dist(b, a+c)
13+
# square lookup:
14+
square_lookup = {}
15+
familiar_pair = {}
16+
familiar_combinations = {}
17+
seen_results = {}
18+
def shortest_dist2(a, b, c):
19+
if a not in square_lookup:
20+
square_lookup[a] = a**2
21+
if b not in square_lookup:
22+
square_lookup[b] = b**2
23+
if c not in square_lookup:
24+
square_lookup[c] = c**2
25+
base = square_lookup[c]+square_lookup[b]+square_lookup[a]
26+
s1 = base+(2*b*c)
27+
s2 = base+(2*a*c)
28+
s3 = base+(2*a*b)
29+
if s1 not in familiar_pair:
30+
familiar_pair[s1] = dist2(s1)
31+
if s2 not in familiar_pair:
32+
familiar_pair[s2] = dist2(s2)
33+
if s3 not in familiar_pair:
34+
familiar_pair[s3] = dist2(s3)
35+
p1 = familiar_pair[s1]
36+
p2 = familiar_pair[s2]
37+
p3 = familiar_pair[s3]
1538
return min(p1, p2, p3)
1639

1740
def ncr(n, r):
@@ -20,12 +43,6 @@ def ncr(n, r):
2043
denom = reduce(op.mul, range(1, r+1), 1)
2144
return numer // denom
2245

23-
def dim_generator(M):
24-
for i in range(1, M+1):
25-
for j in range(1, M+1):
26-
for k in range(1, M+1):
27-
yield (i, j, k)
28-
2946
def dim_generator2(M):
3047
for i in range(1, M+1):
3148
for j in range(1, M+1):
@@ -38,6 +55,7 @@ def dim_generator2(M):
3855
seen_dims = {}
3956
total_ints = 0
4057
upper_lim = 1000000
58+
upper_lim = 1000
4159
upper_lim = 500
4260
for a,b,c in dim_generator2(upper_lim):
4361
S = [a,b,c]
@@ -46,7 +64,7 @@ def dim_generator2(M):
4664
if dim_set in seen_dims:
4765
continue
4866
seen_dims[dim_set] = True
49-
distance = shortest_dist(a,b,c)
67+
distance = shortest_dist2(a,b,c)
5068
if distance.is_integer():
5169
total_ints+=1
5270
print(total_ints)

0 commit comments

Comments
 (0)