Skip to content

Instantly share code, notes, and snippets.

@horvatha
Last active November 18, 2020 11:11
Show Gist options
  • Save horvatha/7b8d251219d2d5aa9312f606363c6a90 to your computer and use it in GitHub Desktop.
Save horvatha/7b8d251219d2d5aa9312f606363c6a90 to your computer and use it in GitHub Desktop.
IT megmérettetés 2020, Nyelvfüggetlen programozás és adatbáziskezelés (SAP), 4. forduló feladata
import unittest
def clock():
maxdiff_ = 90
for h in range(12):
for m in range(60):
for s in range(60):
current_diffs = diffs(h, m, s)
current_maxdiff = maxdiff(current_diffs)
if current_maxdiff < maxdiff_:
time = (h, m, s)
maxdiff_ = current_maxdiff
diffs_ = current_diffs
print(f"{time[0]}:{time[1]}:{time[2]}-kor max eltérés 120 foktól {maxdiff_:6.3f} fok, bezárt szögek fokban {diffs_}")
return time
def maxdiff(values, base_value=120):
# reldiff = [i-base_value for i in values]
diff = [abs(i-base_value) for i in values]
maxdiff = max(diff)
# if maxdiff < 70 and abs(2*maxdiff - sum(diff)) > 1e-3:
# print(f"max diff: {maxdiff}, double max diff: {2*maxdiff}, sum diff = {sum(diff)}, {reldiff}")
return maxdiff
def diffs(h, m, s):
"""Az óramutatók közötti szögek értékei"""
deg_s = s * 6
deg_m = (m + s / 60) * 6
deg_h = (h + m / 60 + s/3600) * 30
diffs = [abs(deg) for deg in (deg_s - deg_m, deg_s - deg_h, deg_m - deg_h)]
diffs = sorted([deg if deg <= 180 else 360 - deg for deg in diffs])
# print(f"{diffs}, {deg_h}, {deg_m}, {deg_s}")
return diffs
class TestClock(unittest.TestCase):
def test_maxdiff(self):
self.assertEqual(maxdiff((90, 90, 0)), 120)
self.assertEqual(maxdiff((90, 120, 30)), 90)
self.assertEqual(maxdiff((120, 120, 120)), 0)
self.assertEqual(maxdiff((120, 130, 110)), 10)
def test_diffs(self):
self.assertEqual(diffs(3, 0, 0), [0, 90, 90])
self.assertEqual(diffs(0, 0, 0), [0, 0, 0])
self.assertEqual(diffs(6, 0, 0), [0, 180, 180])
self.assertEqual(diffs(9, 0, 0), [0, 90, 90])
# def test_clock(self):
# self.assertEqual(clock(), (7, 56, 16))
if __name__ == '__main__':
clock()
# unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment