Last active
November 18, 2020 11:11
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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