Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from random import randint
- DEBUG = False
- def to_sbin(n, target_length = 0):
- b = str(bin(n)).replace("0b", '')
- if len(b) < target_length: b = "0"*(target_length-len(b)) + b
- return b
- def sbin_to_element(n):
- if "1" not in n: return "1"
- return "".join(["x{}".format(i+1) for i in range(len(n)) if n[i] == "1"])
- def pascal_triangle_iteration(arr): # actual zhegalkin functions:
- return [arr[i]^arr[i+1] for i in range(len(arr)-1)]
- def pascal_triangle(arr):
- global DEBUG
- res = [arr[0]]
- if DEBUG: print("\nтреугольник паскаля:\n", arr, sep="")
- for i in range(len(arr)-1):
- arr = pascal_triangle_iteration(arr)
- if DEBUG: print(arr)
- res.append(arr[0])
- if DEBUG: print("g:",res)
- return res
- def worker(arr, base):
- global DEBUG
- p_arr = pascal_triangle(arr)
- if DEBUG:
- print("\nтаблица слагаемых:")
- print("g\tслагаемое")
- for i in range(len(p_arr)):
- if p_arr[i]==1: print("{}\t{}\t".format(p_arr[i], sbin_to_element(to_sbin(i, base))), sep='')
- else: print("{}\t{}\t".format(p_arr[i], sbin_to_element(to_sbin(i, base))))
- return " (+) ".join([sbin_to_element(to_sbin(i, base)) for i in range(len(p_arr)) if p_arr[i] == 1])
- # end of the actual code
- def input_test(inp):
- for i in inp:
- if i not in ["0", "1"]:
- print("введено значение, не равное 0 или 1\n")
- return False
- for i in range(2, 100):
- if len(inp)==2**i: return True
- print("длинна последовательности должна быть 2^n\n")
- return False
- def get_inputs_amount(inp):
- for i in range(1, 100):
- if len(inp)==2**i: return i
- else: return False
- def main():
- global DEBUG
- while True:
- temp_input = input("введите значения таблицы или команду\n>").lower()
- if temp_input in ["выход", "выйти", "exit", "quit", "закрыть"]: break
- elif temp_input in ["debug", "подробно", "расписать", "дебаг"]:
- DEBUG = False if DEBUG==True else True
- if DEBUG==True: print("промежуточный вывод включен\n")
- else: print("промежуточный вывод выключен\n")
- elif len(temp_input)!=0 and input_test(temp_input):
- truth_table = [int(i) for i in temp_input]
- res = worker(truth_table, get_inputs_amount(truth_table))
- print("\nполученный полином:", res,'\n')
- else:
- print("ошибка ввода\nвозможные команды:\n - ввод таблицы - последовательность из 0 и 1, пример: 11101100\n - выход, exit (и т.п.) - для выхода из программы\n - подробно, debug - включает вывод промежуточных данный и действий программы,\n повторное введение отключает данную опцию\n", sep="")
- if __name__ == "__main__": main()
Advertisement
Add Comment
Please, Sign In to add comment