Guest User

Less than 4B if statements

a guest
Dec 28th, 2023
539
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.61 KB | Source Code | 0 0
  1. def is_even_like_a_human(number):
  2.     return str(number)[-1] in {"0", "2", "4", "6", "8"}
  3.  
  4.  
  5. def is_even_like_a_computer(number):
  6.     return (number & 1) == 0
  7.  
  8.  
  9. def is_even_like_a_lisp_programmer(number):
  10.     if number == 0:
  11.         return True
  12.     elif number == 1:
  13.         return False
  14.     else:
  15.         return is_even_like_a_lisp_programmer(number - 2)
  16.  
  17.  
  18. def is_even_by_cheating_on_a_modulo_operator(number):
  19.     return (number // 2) * 2 == number
  20.  
  21.  
  22. def is_even_like_its_100BC(number):
  23.     if number == 0:
  24.         raise ValueError("0 non est numerus, smarty braccas")
  25.  
  26.     def int_to_roman(num):
  27.         symbols = [
  28.             "M",
  29.             "CM",
  30.             "D",
  31.             "CD",
  32.             "C",
  33.             "XC",
  34.             "L",
  35.             "XL",
  36.             "X",
  37.             "IX",
  38.             "V",
  39.             "IV",
  40.             "I",
  41.         ]
  42.         values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
  43.         roman = ""
  44.         for i in range(len(symbols)):
  45.             while num >= values[i]:
  46.                 roman += symbols[i]
  47.                 num -= values[i]
  48.         return roman
  49.  
  50.     roman = int_to_roman(number)
  51.  
  52.     if roman.endswith("X") and not roman.endswith("IX"):
  53.         return True
  54.     elif roman.endswith("IX"):
  55.         return False
  56.     elif roman.endswith("VIII"):
  57.         return True
  58.     elif roman.endswith("VII"):
  59.         return False
  60.     elif roman.endswith("VI"):
  61.         return True
  62.     elif roman.endswith("V") and not roman.endswith("IV"):
  63.         return False
  64.     elif roman.endswith("IV"):
  65.         return True
  66.     elif roman.endswith("III"):
  67.         return False
  68.     elif roman.endswith("II"):
  69.         return True
  70.     elif roman.endswith("I"):
  71.         return False
  72.     else:
  73.         return True
  74.  
  75.  
  76. def is_even_like_its_1800(number):
  77.     morse_numerals = [
  78.         "-----",
  79.         ".----",
  80.         "..---",
  81.         "...--",
  82.         "....-",
  83.         ".....",
  84.         "-....",
  85.         "--...",
  86.         "---..",
  87.         "----.",
  88.     ]
  89.     # it is a pity to convert an entire number, but we need to be thorough:
  90.     morse_code = "".join([morse_numerals[int(digit)] for digit in str(number)])
  91.     dots_count = morse_code[-5:].count(".")
  92.     # build on top of the past experience:
  93.     # (also, yes, in 1800 zero is a known number)
  94.     return dots_count == 0 or is_even_like_its_100BC(dots_count)
  95.  
  96.  
  97. def is_even_in_sudoku(number):
  98.     sudoku = [
  99.         [1, 2, 3],
  100.         [4, 5, 6],
  101.         [7, 8, 9]
  102.     ]
  103.     d = str(number)[-1]  # sudokuizes a number
  104.     for i in range(3):
  105.         for j in range(3):
  106.             if sudoku[i][j] == int(d):
  107.                 return not is_even_like_a_human(i + j)
  108.     return True  # digits off the grid get a benefit of the doubt
  109.  
  110.  
  111. #
  112. # Tests:
  113. # TODO: Figure out how to use the A. Karlsson's performance-optimized version for tests
  114. #
  115.  
  116.  
  117. def test_is_even(is_even_fn):
  118.     try:
  119.         assert is_even_fn(0), "0 is even!"
  120.     except ValueError as e:
  121.         print(e)
  122.     assert not is_even_fn(1), "1 is odd!"
  123.     assert is_even_fn(2), "2 is even!"
  124.     assert not is_even_fn(3), "3 is odd!"
  125.     assert is_even_fn(4), "4 is even!"
  126.     assert not is_even_fn(5), "5 is odd!"
  127.     assert is_even_fn(6), "6 is even!"
  128.     assert not is_even_fn(7), "7 is odd!"
  129.     assert is_even_fn(8), "8 is even!"
  130.     assert not is_even_fn(9), "9 is odd!"
  131.     assert is_even_fn(10), "10 is even!"
  132.     assert not is_even_fn(11), "11 is odd!"
  133.     assert is_even_fn(12), "12 is even!"
  134.     assert not is_even_fn(13), "13 is odd!"
  135.     assert is_even_fn(14), "14 is even!"
  136.     assert not is_even_fn(15), "15 is odd!"
  137.     assert is_even_fn(16), "16 is even!"
  138.     assert not is_even_fn(17), "17 is odd!"
  139.     assert is_even_fn(18), "18 is even!"
  140.     assert not is_even_fn(19), "19 is odd!"
  141.     assert is_even_fn(20), "20 is even!"
  142.     assert not is_even_fn(21), "21 is odd!"
  143.     assert is_even_fn(22), "22 is even!"
  144.     assert not is_even_fn(23), "23 is odd!"
  145.     assert is_even_fn(24), "24 is even!"
  146.     assert not is_even_fn(25), "25 is odd!"
  147.     assert is_even_fn(26), "26 is even!"
  148.     assert not is_even_fn(27), "27 is odd!"
  149.     assert is_even_fn(28), "28 is even!"
  150.     assert not is_even_fn(29), "29 is odd!"
  151.     assert is_even_fn(30), "30 is even!"
  152.     assert not is_even_fn(31), "31 is odd!"
  153.     assert is_even_fn(32), "32 is even!"
  154.     assert not is_even_fn(33), "33 is odd!"
  155.     assert is_even_fn(34), "34 is even!"
  156.     assert not is_even_fn(35), "35 is odd!"
  157.     assert is_even_fn(36), "36 is even!"
  158.     assert not is_even_fn(37), "37 is odd!"
  159.     assert is_even_fn(38), "38 is even!"
  160.     assert not is_even_fn(39), "39 is odd!"
  161.     assert is_even_fn(40), "40 is even!"
  162.     assert not is_even_fn(41), "41 is odd!"
  163.     assert is_even_fn(42), "42 is even!"
  164.     assert not is_even_fn(43), "43 is odd!"
  165.     assert is_even_fn(44), "44 is even!"
  166.     assert not is_even_fn(45), "45 is odd!"
  167.     assert is_even_fn(46), "46 is even!"
  168.     assert not is_even_fn(47), "47 is odd!"
  169.     assert is_even_fn(48), "48 is even!"
  170.     assert not is_even_fn(49), "49 is odd!"
  171.     assert is_even_fn(50), "50 is even!"
  172.     assert not is_even_fn(51), "51 is odd!"
  173.     assert is_even_fn(52), "52 is even!"
  174.     assert not is_even_fn(53), "53 is odd!"
  175.     assert is_even_fn(54), "54 is even!"
  176.     assert not is_even_fn(55), "55 is odd!"
  177.     assert is_even_fn(56), "56 is even!"
  178.     assert not is_even_fn(57), "57 is odd!"
  179.     assert is_even_fn(58), "58 is even!"
  180.     assert not is_even_fn(59), "59 is odd!"
  181.     assert is_even_fn(60), "60 is even!"
  182.     assert not is_even_fn(61), "61 is odd!"
  183.     assert is_even_fn(62), "62 is even!"
  184.     assert not is_even_fn(63), "63 is odd!"
  185.     assert is_even_fn(64), "64 is even!"
  186.     assert not is_even_fn(65), "65 is odd!"
  187.     assert is_even_fn(66), "66 is even!"
  188.     assert not is_even_fn(67), "67 is odd!"
  189.     assert is_even_fn(68), "68 is even!"
  190.     assert not is_even_fn(69), "69 is odd!"
  191.     assert is_even_fn(70), "70 is even!"
  192.     assert not is_even_fn(71), "71 is odd!"
  193.     assert is_even_fn(72), "72 is even!"
  194.     assert not is_even_fn(73), "73 is odd!"
  195.     assert is_even_fn(74), "74 is even!"
  196.     assert not is_even_fn(75), "75 is odd!"
  197.     assert is_even_fn(76), "76 is even!"
  198.     assert not is_even_fn(77), "77 is odd!"
  199.     assert is_even_fn(78), "78 is even!"
  200.     assert not is_even_fn(79), "79 is odd!"
  201.     assert is_even_fn(80), "80 is even!"
  202.     assert not is_even_fn(81), "81 is odd!"
  203.     assert is_even_fn(82), "82 is even!"
  204.     assert not is_even_fn(83), "83 is odd!"
  205.     assert is_even_fn(84), "84 is even!"
  206.     assert not is_even_fn(85), "85 is odd!"
  207.     assert is_even_fn(86), "86 is even!"
  208.     assert not is_even_fn(87), "87 is odd!"
  209.     assert is_even_fn(88), "88 is even!"
  210.     assert not is_even_fn(89), "89 is odd!"
  211.     assert is_even_fn(90), "90 is even!"
  212.     assert not is_even_fn(91), "91 is odd!"
  213.     assert is_even_fn(92), "92 is even!"
  214.     assert not is_even_fn(93), "93 is odd!"
  215.     assert is_even_fn(94), "94 is even!"
  216.     assert not is_even_fn(95), "95 is odd!"
  217.     assert is_even_fn(96), "96 is even!"
  218.     assert not is_even_fn(97), "97 is odd!"
  219.     assert is_even_fn(98), "98 is even!"
  220.     assert not is_even_fn(99), "99 is odd!"
  221.     assert is_even_fn(100), "100 is even!"
  222.  
  223.  
  224. def main():
  225.     is_even_or_add_fns = [
  226.         globals()[name] for name in globals() if name.startswith("is_even_")
  227.     ]
  228.  
  229.     for fn in is_even_or_add_fns:
  230.         try:
  231.             test_is_even(fn)
  232.         except AssertionError as e:
  233.             print(f"{fn.__name__} - FAIL ({e})")
  234.         else:
  235.             print(f"{fn.__name__} - OK")
  236.  
  237.  
  238. if __name__ == "__main__":
  239.     main()
  240.  
Advertisement
Add Comment
Please, Sign In to add comment