Compare commits

..

No commits in common. "cb19425b8a84a3d9938b5969f9f77c1b20805e18" and "e6ba434796f7b87c360743fe0f06230f81592eea" have entirely different histories.

2 changed files with 2 additions and 83 deletions

View File

@ -100,18 +100,6 @@ class Counter(BasicRegister):
return any(self.memory)
def negated(memory: deque[bool]) -> deque[bool]:
"""
Returns negated memory chunk.
:param deque[bool] memory: Memory chunk to be negated.
:return: Negated memory chunk.
:rtype: deque[bool]
"""
return deque([not value for value in memory])
def get_memory(variable_name: str) -> deque[bool]:
"""
Reads user input to be used as a memory array.
@ -484,68 +472,3 @@ def binary_division_method_2(first_term: BasicRegister, second_term: BasicRegist
data_table[-1].append(list(map(str, [i, rg3, rg2, rg1, f"RG3 := l(RG3).SM[p]\nRG1 := 0.r(RG1)"])))
return BasicRegister(deque(list(rg3.memory)[1:])), data_table
def binary_square_root(first_term: BasicRegister) \
-> tuple[BasicRegister, list[list[str]]]:
"""
Extracts the square root of first term.
:param: BasicRegister first_term: Register for square root extraction.
:return: Register containing the division result and the state table of a virtual
device that extracted the square root of the given term.
:rtype: tuple[BasicRegister, list[list[str]]]
"""
n: int = len(first_term)
i = 0
rga = BasicRegister(deque([False]*n))
rgb = BasicRegister(deque([False]*(n+2)))
rgc = BasicRegister(first_term.memory)
ct = Counter(n)
data_table = [["iter", "RGA", "RGB", "RGC", "CT", "MicroOperations"]]
data_table.append([])
data_table[-1].append(list(map(str, [i, rga, rgb, rgc, ct, "-"])))
# two initial shifts
rgb.left_shift(rgc.memory[0])
rgc.left_shift()
data_table[-1].append(list(map(str, [i, rga, rgb, rgc, ct, "RGB := l(RGB).RGC[0]\nRGC := l(RGC).0"])))
rgb.left_shift(rgc.memory[0])
rgc.left_shift()
data_table[-1].append(list(map(str, [i, rga, rgb, rgc, ct, "RGB := l(RGB).RGC[0]\nRGC := l(RGC).0"])))
# initial inverted addition
rgb = binary_sum(rgb, BasicRegister(negated(rga.memory) + deque([True, True])))
data_table[-1].append(list(map(str, [i, rga, rgb, rgc, ct, "RGB := RGB + !(RGA).11"])))
while ct.non_zero():
data_table.append([])
i += 1
rga.left_shift(not rgb.memory[0])
rgb.left_shift(rgc.memory[0])
rgc.left_shift()
data_table[-1].append(list(map(str, [i, rga, rgb, rgc, ct, "RGA := l(RGA).!(RGB[0])\nRGB := l(RGB).RGC[0]\nRGC := l(RGC).0"])))
rgb.left_shift(rgc.memory[0])
rgc.left_shift()
data_table[-1].append(list(map(str, [i, rga, rgb, rgc, ct, "RGB := l(RGB).RGC[0]\nRGC := l(RGC).0"])))
if rgb.memory[0]:
rgb = binary_sum(rgb, BasicRegister(rga.memory + deque([True, True])))
data_table[-1].append(list(map(str, [i, rga, rgb, rgc, ct, "RGB := RGB + RGA.11"])))
else:
rgb = binary_sum(rgb, BasicRegister(negated(rga.memory) + deque([True, True])))
data_table[-1].append(list(map(str, [i, rga, rgb, rgc, ct, "RGB := RGB + !(RGA).11"])))
ct.decrement()
data_table[-1].append(list(map(str, [i, rga, rgb, rgc, ct, "CT := CT - 1"])))
return rga, data_table

View File

@ -9,7 +9,7 @@ user_input = []
def process_command(symbol):
global operation, method
if symbol.lower() in "asmdrq":
if symbol.lower() in "asmdq":
operation = symbol
elif operation == "m" and symbol in "1234":
method = symbol
@ -65,10 +65,6 @@ def perform_operation(first_register: bu.BasicRegister, second_register: bu.Basi
operation, method = "", ""
case _:
pass
case "r":
result, data_table = bu.binary_square_root(first_register)
print(f"\nSquare root:\n{bu.format_device_state_table(data_table)}\nResult: {result}")
operation, method = "", ""
case "q":
exit(0)
@ -100,7 +96,7 @@ def input_handler(first_register: bu.BasicRegister, second_register: bu.BasicReg
# print()
if operation == "":
raw_user_input = input("Choose the operation:\n"
"[a]ddition, [s]ubtraction, [m]ultiplication, [d]ivision, [r]oot, [q]uit\n" +
"[a]ddition, [s]ubtraction, [m]ultiplication, [d]ivision, [q]uit\n" +
prompt_text + " > ")
elif operation == "m":
raw_user_input = input("Choose method to use (1-4):\n" + prompt_text + " > ")