🎉 Finishing rows of cake
This commit is contained in:
parent
f6539aedaa
commit
8d993a5bcd
83
Storage/cakes-rows.py
Normal file
83
Storage/cakes-rows.py
Normal file
@ -0,0 +1,83 @@
|
||||
def define_epsilon():
|
||||
eps = 1.0
|
||||
while eps + 1 > 1:
|
||||
eps /= 2
|
||||
eps *= 2
|
||||
return eps
|
||||
|
||||
|
||||
def is_between(a, b, c):
|
||||
epsilon = define_epsilon()
|
||||
cross_product = (c[1] - a[1]) * (b[0] - a[0]) - (c[0] - a[0]) * (b[1] - a[1])
|
||||
|
||||
# compare versus epsilon for floating point values, or != 0 if using integers
|
||||
if abs(cross_product) > epsilon:
|
||||
return False
|
||||
|
||||
dot_product = (c[0] - a[0]) * (b[0] - a[0]) + (c[1] - a[1]) * (b[1] - a[1])
|
||||
if dot_product < 0:
|
||||
return False
|
||||
|
||||
squared_length_b_a = (b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1])
|
||||
if dot_product > squared_length_b_a:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def checkio(cakes):
|
||||
lines = []
|
||||
count_cakes = len(cakes)
|
||||
i = 0
|
||||
while i <= count_cakes - 1:
|
||||
first_cake = cakes[i]
|
||||
j = 0
|
||||
while j <= count_cakes - 1:
|
||||
if j <= i:
|
||||
j += 1
|
||||
continue
|
||||
second_cake = cakes[j]
|
||||
k = 0
|
||||
while k <= count_cakes - 1:
|
||||
if k == i or k == j:
|
||||
k += 1
|
||||
continue
|
||||
third_cake = cakes[k]
|
||||
if is_between(first_cake, second_cake, third_cake):
|
||||
line_to_add = [first_cake, second_cake, third_cake]
|
||||
for line in lines:
|
||||
count = 0
|
||||
to_add = []
|
||||
if first_cake in line:
|
||||
count += 1
|
||||
else:
|
||||
to_add.append(first_cake)
|
||||
if second_cake in line:
|
||||
count += 1
|
||||
else:
|
||||
to_add.append(second_cake)
|
||||
if third_cake in line:
|
||||
count += 1
|
||||
else:
|
||||
to_add.append(third_cake)
|
||||
if count >= 2:
|
||||
line_to_add = None
|
||||
for t in to_add:
|
||||
line.append(t)
|
||||
|
||||
if line_to_add is not None:
|
||||
lines.append(line_to_add)
|
||||
k += 1
|
||||
j += 1
|
||||
i += 1
|
||||
|
||||
print(lines)
|
||||
return len(lines)
|
||||
|
||||
|
||||
# These "asserts" using only for self-checking and not necessary for auto-testing
|
||||
if __name__ == '__main__':
|
||||
assert checkio([[3, 3], [5, 5], [8, 8], [2, 8], [8, 2]]) == 2
|
||||
assert checkio(
|
||||
[[2, 2], [2, 5], [2, 8], [5, 2], [7, 2], [8, 2],
|
||||
[9, 2], [4, 5], [4, 8], [7, 5], [5, 8], [9, 8]]) == 6
|
Loading…
Reference in New Issue
Block a user