From 6791f4ff5b94bbdc767099d75dd6f7bd36bea621 Mon Sep 17 00:00:00 2001 From: JasterV <49537445+JasterV@users.noreply.github.com> Date: Sun, 8 Mar 2026 18:57:07 +0100 Subject: [PATCH] first commit --- README.md | 3 + clab/client-server-system/.gitignore | 165 +++++ clab/client-server-system/README.md | 2 + clab/client-server-system/client/client.cfg | 5 + clab/client-server-system/client/client.py | 391 ++++++++++ clab/client-server-system/client/utils.py | 187 +++++ clab/client-server-system/server/bbdd_dev.dat | 3 + clab/client-server-system/server/makefile | 9 + clab/client-server-system/server/server.c | 564 +++++++++++++++ clab/client-server-system/server/server.cfg | 3 + clab/client-server-system/server/utils.h | 380 ++++++++++ .../test/KZ87MKAGB43N.data | 1 + clab/client-server-system/test/bbdd_dev.dat | 8 + clab/client-server-system/test/client | Bin 0 -> 45888 bytes clab/client-server-system/test/client.cfg | 5 + clab/client-server-system/test/client1.cfg | 5 + clab/client-server-system/test/client2.cfg | 5 + clab/client-server-system/test/client3.cfg | 5 + clab/client-server-system/test/client4.cfg | 5 + clab/client-server-system/test/server | Bin 0 -> 45920 bytes clab/client-server-system/test/server.cfg | 5 + clab/prime-calculator/LICENSE | 674 ++++++++++++++++++ clab/prime-calculator/README.md | 2 + clab/prime-calculator/_gitignore | 52 ++ clab/prime-calculator/calculador.c | 66 ++ clab/prime-calculator/common.h | 21 + clab/prime-calculator/controlador.c | 155 ++++ clab/prime-calculator/generador.c | 33 + clab/prime-calculator/makefile | 19 + java-lab/ArraySorter/.gitignore | 1 + .../IntArraySorterCharts.java | 120 ++++ .../AlgorithmAnalysis/LinearChartBuilder.java | 86 +++ ...risons by Array length. REVERSED ARRAY.png | Bin 0 -> 91592 bytes .../Num Comparisons by Array length.png | Bin 0 -> 99159 bytes .../Num Comparisons by Shuffle Grade.png | Bin 0 -> 111831 bytes ... Swaps by Array length. REVERSED ARRAY.png | Bin 0 -> 80663 bytes .../Num Swaps by Array length.png | Bin 0 -> 109999 bytes .../Num Swaps by Shuffle Grade.png | Bin 0 -> 104277 bytes java-lab/ArraySorter/IntArraySorter.iml | 38 + java-lab/ArraySorter/Test/BubbleSortTest.java | 37 + .../ArraySorter/Test/InsertionSortTest.java | 37 + .../ArraySorter/Test/Quick_sort_test.java | 38 + .../ArraySorter/Test/Radix_sort_test.java | 38 + .../ArraySorter/Test/SelectionSortTest.java | 39 + .../IntArraySorter/IntArraySorter.class | Bin 0 -> 4281 bytes .../META-INF/IntArraySorter.kotlin_module | Bin 0 -> 16 bytes .../META-INF/IntArraySorter.kotlin_module | Bin 0 -> 16 bytes java-lab/ArraySorter/src/ArrayBuilder.java | 30 + java-lab/ArraySorter/src/IntArraySorter.java | 198 +++++ java-lab/BankersQueue/.gitignore | 26 + java-lab/BankersQueue/Bankers.iml | 28 + java-lab/BankersQueue/LICENSE | 674 ++++++++++++++++++ java-lab/BankersQueue/README.md | 3 + .../BankersQueue/Test/BankersQueueTest.java | 51 ++ java-lab/BankersQueue/src/BankClient.java | 26 + java-lab/BankersQueue/src/BankSimulator.java | 54 ++ java-lab/BankersQueue/src/BankersQueue.java | 90 +++ java-lab/BankersQueue/src/ChartBuilder.java | 66 ++ java-lab/BankersQueue/src/Queue.java | 7 + java-lab/HeapQueue/.gitignore | 23 + java-lab/HeapQueue/LICENSE | 674 ++++++++++++++++++ java-lab/HeapQueue/README.md | 1 + java-lab/HeapQueue/Test/HeapQueueTest.java | 44 ++ java-lab/HeapQueue/src/HeapQueue.java | 159 +++++ java-lab/HeapQueue/src/PriorityQueue.java | 6 + java-lab/SENKU-GAME/.gitignore | 23 + java-lab/SENKU-GAME/SENKU-GAME.iml | 13 + java-lab/SENKU-GAME/src/Board.java | 85 +++ java-lab/SENKU-GAME/src/Cell.java | 40 ++ java-lab/SENKU-GAME/src/Direction.java | 27 + java-lab/SENKU-GAME/src/Display.java | 151 ++++ java-lab/SENKU-GAME/src/Game.java | 88 +++ java-lab/SENKU-GAME/src/Geometry.java | 87 +++ java-lab/SENKU-GAME/src/Palette.java | 25 + java-lab/SENKU-GAME/src/Position.java | 53 ++ java-lab/SENKU-GAME/src/Senku.java | 125 ++++ java-lab/SENKU-GAME/test/BoardTest.java | 63 ++ java-lab/SENKU-GAME/test/CellTest.java | 49 ++ java-lab/SENKU-GAME/test/DirectionTest.java | 31 + java-lab/SENKU-GAME/test/GameTest.java | 163 +++++ java-lab/SENKU-GAME/test/GeometryTest.java | 78 ++ java-lab/SENKU-GAME/test/PositionTest.java | 53 ++ java-lab/Tree_Traversals/.gitignore | 23 + java-lab/Tree_Traversals/LICENSE | 674 ++++++++++++++++++ java-lab/Tree_Traversals/Laboratori-5.iml | 44 ++ java-lab/Tree_Traversals/docu/Diagram.png | Bin 0 -> 39877 bytes java-lab/Tree_Traversals/docu/Lab_5.pdf | Bin 0 -> 132380 bytes java-lab/Tree_Traversals/docu/Lab_5.tex | 149 ++++ java-lab/Tree_Traversals/src/BinaryTree.java | 6 + .../src/IterativeTraversals.java | 75 ++ .../Tree_Traversals/src/LinkedBinaryTree.java | 132 ++++ java-lab/Tree_Traversals/src/Regenerator.java | 31 + java-lab/Tree_Traversals/src/Traversals.java | 7 + .../test/IterativeTraversalsTest.java | 58 ++ .../test/LinkedBinaryTreeTest.java | 69 ++ .../Tree_Traversals/test/RegeneratorTest.java | 70 ++ 96 files changed, 7859 insertions(+) create mode 100644 README.md create mode 100755 clab/client-server-system/.gitignore create mode 100755 clab/client-server-system/README.md create mode 100755 clab/client-server-system/client/client.cfg create mode 100755 clab/client-server-system/client/client.py create mode 100755 clab/client-server-system/client/utils.py create mode 100755 clab/client-server-system/server/bbdd_dev.dat create mode 100755 clab/client-server-system/server/makefile create mode 100755 clab/client-server-system/server/server.c create mode 100755 clab/client-server-system/server/server.cfg create mode 100755 clab/client-server-system/server/utils.h create mode 100755 clab/client-server-system/test/KZ87MKAGB43N.data create mode 100755 clab/client-server-system/test/bbdd_dev.dat create mode 100755 clab/client-server-system/test/client create mode 100755 clab/client-server-system/test/client.cfg create mode 100755 clab/client-server-system/test/client1.cfg create mode 100755 clab/client-server-system/test/client2.cfg create mode 100755 clab/client-server-system/test/client3.cfg create mode 100755 clab/client-server-system/test/client4.cfg create mode 100755 clab/client-server-system/test/server create mode 100755 clab/client-server-system/test/server.cfg create mode 100755 clab/prime-calculator/LICENSE create mode 100755 clab/prime-calculator/README.md create mode 100755 clab/prime-calculator/_gitignore create mode 100755 clab/prime-calculator/calculador.c create mode 100755 clab/prime-calculator/common.h create mode 100755 clab/prime-calculator/controlador.c create mode 100755 clab/prime-calculator/generador.c create mode 100755 clab/prime-calculator/makefile create mode 100644 java-lab/ArraySorter/.gitignore create mode 100644 java-lab/ArraySorter/AlgorithmAnalysis/IntArraySorterCharts.java create mode 100644 java-lab/ArraySorter/AlgorithmAnalysis/LinearChartBuilder.java create mode 100644 java-lab/ArraySorter/Chart_Images/Num Comparisons by Array length. REVERSED ARRAY.png create mode 100644 java-lab/ArraySorter/Chart_Images/Num Comparisons by Array length.png create mode 100644 java-lab/ArraySorter/Chart_Images/Num Comparisons by Shuffle Grade.png create mode 100644 java-lab/ArraySorter/Chart_Images/Num Swaps by Array length. REVERSED ARRAY.png create mode 100644 java-lab/ArraySorter/Chart_Images/Num Swaps by Array length.png create mode 100644 java-lab/ArraySorter/Chart_Images/Num Swaps by Shuffle Grade.png create mode 100644 java-lab/ArraySorter/IntArraySorter.iml create mode 100644 java-lab/ArraySorter/Test/BubbleSortTest.java create mode 100644 java-lab/ArraySorter/Test/InsertionSortTest.java create mode 100644 java-lab/ArraySorter/Test/Quick_sort_test.java create mode 100644 java-lab/ArraySorter/Test/Radix_sort_test.java create mode 100644 java-lab/ArraySorter/Test/SelectionSortTest.java create mode 100644 java-lab/ArraySorter/out/production/IntArraySorter/IntArraySorter.class create mode 100644 java-lab/ArraySorter/out/production/IntArraySorter/META-INF/IntArraySorter.kotlin_module create mode 100644 java-lab/ArraySorter/out/test/IntArraySorter/META-INF/IntArraySorter.kotlin_module create mode 100644 java-lab/ArraySorter/src/ArrayBuilder.java create mode 100644 java-lab/ArraySorter/src/IntArraySorter.java create mode 100644 java-lab/BankersQueue/.gitignore create mode 100644 java-lab/BankersQueue/Bankers.iml create mode 100644 java-lab/BankersQueue/LICENSE create mode 100644 java-lab/BankersQueue/README.md create mode 100644 java-lab/BankersQueue/Test/BankersQueueTest.java create mode 100644 java-lab/BankersQueue/src/BankClient.java create mode 100644 java-lab/BankersQueue/src/BankSimulator.java create mode 100644 java-lab/BankersQueue/src/BankersQueue.java create mode 100644 java-lab/BankersQueue/src/ChartBuilder.java create mode 100644 java-lab/BankersQueue/src/Queue.java create mode 100644 java-lab/HeapQueue/.gitignore create mode 100644 java-lab/HeapQueue/LICENSE create mode 100644 java-lab/HeapQueue/README.md create mode 100644 java-lab/HeapQueue/Test/HeapQueueTest.java create mode 100644 java-lab/HeapQueue/src/HeapQueue.java create mode 100644 java-lab/HeapQueue/src/PriorityQueue.java create mode 100644 java-lab/SENKU-GAME/.gitignore create mode 100644 java-lab/SENKU-GAME/SENKU-GAME.iml create mode 100644 java-lab/SENKU-GAME/src/Board.java create mode 100644 java-lab/SENKU-GAME/src/Cell.java create mode 100644 java-lab/SENKU-GAME/src/Direction.java create mode 100644 java-lab/SENKU-GAME/src/Display.java create mode 100644 java-lab/SENKU-GAME/src/Game.java create mode 100644 java-lab/SENKU-GAME/src/Geometry.java create mode 100644 java-lab/SENKU-GAME/src/Palette.java create mode 100644 java-lab/SENKU-GAME/src/Position.java create mode 100644 java-lab/SENKU-GAME/src/Senku.java create mode 100644 java-lab/SENKU-GAME/test/BoardTest.java create mode 100644 java-lab/SENKU-GAME/test/CellTest.java create mode 100644 java-lab/SENKU-GAME/test/DirectionTest.java create mode 100644 java-lab/SENKU-GAME/test/GameTest.java create mode 100644 java-lab/SENKU-GAME/test/GeometryTest.java create mode 100644 java-lab/SENKU-GAME/test/PositionTest.java create mode 100644 java-lab/Tree_Traversals/.gitignore create mode 100644 java-lab/Tree_Traversals/LICENSE create mode 100644 java-lab/Tree_Traversals/Laboratori-5.iml create mode 100644 java-lab/Tree_Traversals/docu/Diagram.png create mode 100644 java-lab/Tree_Traversals/docu/Lab_5.pdf create mode 100644 java-lab/Tree_Traversals/docu/Lab_5.tex create mode 100644 java-lab/Tree_Traversals/src/BinaryTree.java create mode 100644 java-lab/Tree_Traversals/src/IterativeTraversals.java create mode 100644 java-lab/Tree_Traversals/src/LinkedBinaryTree.java create mode 100644 java-lab/Tree_Traversals/src/Regenerator.java create mode 100644 java-lab/Tree_Traversals/src/Traversals.java create mode 100644 java-lab/Tree_Traversals/test/IterativeTraversalsTest.java create mode 100644 java-lab/Tree_Traversals/test/LinkedBinaryTreeTest.java create mode 100644 java-lab/Tree_Traversals/test/RegeneratorTest.java diff --git a/README.md b/README.md new file mode 100644 index 0000000..25e3d08 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# University lab projects + +This repo contains a few projects that I completed back when I was learning to code in university around 2018. diff --git a/clab/client-server-system/.gitignore b/clab/client-server-system/.gitignore new file mode 100755 index 0000000..80a7d85 --- /dev/null +++ b/clab/client-server-system/.gitignore @@ -0,0 +1,165 @@ + +# Created by https://www.gitignore.io/api/c,python +# Edit at https://www.gitignore.io/?templates=c,python + +### C ### +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__ +*.py[cod] +*$py.class + +# C extensions + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# End of https://www.gitignore.io/api/c,python + +.data \ No newline at end of file diff --git a/clab/client-server-system/README.md b/clab/client-server-system/README.md new file mode 100755 index 0000000..d85601c --- /dev/null +++ b/clab/client-server-system/README.md @@ -0,0 +1,2 @@ + +# Client-Server-System diff --git a/clab/client-server-system/client/client.cfg b/clab/client-server-system/client/client.cfg new file mode 100755 index 0000000..9c0aa19 --- /dev/null +++ b/clab/client-server-system/client/client.cfg @@ -0,0 +1,5 @@ +Id = KZ87MKAGB43N +Params = LUM-0-O;LUM-0-I;PRE-0-O;TEM-0-O +Local-TCP = 5057 +Server = localhost +Server-UDP = 9002 diff --git a/clab/client-server-system/client/client.py b/clab/client-server-system/client/client.py new file mode 100755 index 0000000..94c8a66 --- /dev/null +++ b/clab/client-server-system/client/client.py @@ -0,0 +1,391 @@ +#!/usr/bin/env python3 +from utils import * + +signal.signal(signal.SIGINT, handler) +signal.signal(signal.SIGTSTP, signal.SIG_IGN) + +# -------------------------------------------------------------- +# --------------------- FASE DE REGISTRE ----------------------- +# -------------------------------------------------------------- + +def register(sock, server_address): + global client + client.register_attemps += 1 + logger.debug_print(f"Registrant el client al servidor. (Intent {client.register_attemps})") + if client.register_attemps > o: + logger.debug_print("S'ha superat el nombre d'intents permesos") + print("No s'ha pogut contactar amb el servidor") + client.current_state = DISCONNECTED + else: + send_reg_req(sock, server_address, 0, t) + + +def send_reg_req(sock, server_address, num_sends, timeout): + global client + if num_sends >= n: + + time.sleep(u) + register(sock, server_address) + elif not client.has_state(REGISTERED): + if num_sends >= p and timeout < q * t: + timeout += t + sendto(sock, server_address, REG_REQ, + client.id, "00000000\0", "") + client.current_state = WAIT_ACK_REG + (inputs, _, _) = select.select([sock], [], [], timeout) + if len(inputs) > 0: + response, addr = recvfrom(sock) + if client.has_state(WAIT_ACK_REG) and addr[0] == server_address[0]: + pck = response[0] + if pck == REG_ACK: + client.set_udp_communication_port(int(response[3])) + client.set_server_credentials( + response[1], response[2], addr[0]) + send_info(sock, server_address, num_sends, timeout) + elif pck == REG_NACK: + client.current_state = NOT_REGISTERED + send_reg_req(sock, server_address, num_sends + 1, timeout) + else: + client.current_state = NOT_REGISTERED + register(sock, server_address) + else: + client.current_state = NOT_REGISTERED + register(sock, server_address) + else: + send_reg_req(sock, server_address, num_sends + 1, timeout) + + +def send_info(sock, server_address, num_reg_sends, reg_timeout): + global client + info_timeout = t * 2 + address = (client.server_ip, client.udp_port) + data = f"{str(client.local_tcp)},{';'.join(list(client.elems))}" + sendto(sock, address, REG_INFO, client.id, client.rand_num, data) + client.current_state = WAIT_ACK_INFO + (inputs, _, _) = select.select([sock], [], [], info_timeout) + if len(inputs) > 0: + response, addr = recvfrom(sock) + pck = response[0] + if client.has_state(WAIT_ACK_INFO) and client.check_server_credentials(server_id=response[1], + rand_num=response[2], + server_ip=addr[0]): + if pck == INFO_ACK: + client.set_tcp_communication_port(int(response[3])) + client.current_state = REGISTERED + elif pck == INFO_NACK: + client.current_state = NOT_REGISTERED + send_reg_req(sock, server_address, + num_reg_sends + 1, reg_timeout) + else: + client.current_state = NOT_REGISTERED + register(sock, server_address) + else: + client.current_state = NOT_REGISTERED + register(sock, server_address) + else: + client.current_state = NOT_REGISTERED + register(sock, server_address) + + +# -------------------------------------------------------------- +# --------------------- FASE DE COMUNICACIÓ -------------------- +# ---------------------------PERIÒDICA-------------------------- +# -------------------------------------------------------------- + + +def recv_first_alive(sock): + global client + timeout = r * v + (inputs, _, _) = select.select([sock], [], [], timeout) + if len(inputs) > 0: + response, server_addr = recvfrom(sock) + pck, client_id = response[0], response[-1] + if client.check_server_credentials(server_id=response[1], rand_num=response[2], + server_ip=server_addr[0]) and client_id == client.id: + if pck == ALIVE: + client.current_state = SEND_ALIVE + else: + client.current_state = NOT_REGISTERED + else: + client.current_state = NOT_REGISTERED + else: + client.current_state = NOT_REGISTERED + + +def recv_alive(sock): + global client + alives_not_received = 0 + max_lost_alive = s + timeout = r * v + while client.has_state(SEND_ALIVE): + (inputs, _, _) = select.select([sock], [], [], timeout) + if len(inputs) > 0: + response, server_addr = recvfrom(sock) + pck, client_id = response[0], response[-1] + if client.check_server_credentials(server_id=response[1], rand_num=response[2], + server_ip=server_addr[0]) and client_id == client.id: + if pck == ALIVE: + alives_not_received = 0 + else: + client.current_state = NOT_REGISTERED + else: + client.current_state = NOT_REGISTERED + else: + alives_not_received += 1 + if alives_not_received >= max_lost_alive: + logger.debug_print( + f"No s'han rebut {max_lost_alive} paquets ALIVE consecutius, estat actual: NOT_REGISTERED") + client.current_state = NOT_REGISTERED + + +def send_alive(sock, server_udp_address): + global client + timeout = v + while client.has_state(REGISTERED, SEND_ALIVE): + sendto(sock, server_udp_address, ALIVE, client.id, client.rand_num, "") + time.sleep(timeout) + + +# -------------------------------------------------------------- +# --------------------- REBUDA DE COMANDES --------------------- +# -------------------------------------------------------------- +def start_cli(): + global client + print("\nBenvingut, introdueix 'help' per veure les comandes acceptades.") + while client.has_state(SEND_ALIVE): + try: + cmd = input().strip().split() + if len(cmd) == 0: + pass + elif cmd[0] == 'help': + help() + elif cmd[0] == 'stat': + run_stat() + elif cmd[0] == 'set': + run_set(cmd) + elif cmd[0] == 'send': + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.connect((client.server_ip, client.tcp_port)) + run_send(sock, cmd) + sock.close() + except ConnectionError as err: + print( + f"Connexió rebutjada, pot ser que el servidor estigui desconnectat.") + pass + elif cmd[0] == 'quit': + client.current_state = DISCONNECTED + else: + print("\tComanda no acceptada.") + except EOFError: + os.kill(os.getpid(), signal.SIGINT) + + +def help(): + print("\tstat") + print("\tset ") + print("\tsend ") + print("\tquit") + + +def run_stat(): + global client + print(" ---ELEMS---|--VALUE---------") + for key, value in client.elems.items(): + print(f"\t{key} : {value}") + + +def run_set(cmd): + if len(cmd) != 3: + print("\tset ") + elif cmd[1] not in client.elems: + print("\tL'element no existeix") + else: + elem_id = cmd[1] + new_value = cmd[2] + client.elems[elem_id] = new_value + + +def run_send(sock, cmd): + if len(cmd) != 2: + print("\tsend ") + elif cmd[1] not in client.elems: + print("\tL'element no existeix") + else: + timeout = m + elem = cmd[1] + value = client.elems[elem] + info = get_actual_date() + send(sock, SEND_DATA, client.id, client.rand_num, elem, value, info) + (inputs, _, _) = select.select([sock], [], [], timeout) + if len(inputs) > 0: + response = recv(sock) + if response is not None: + pck = response[0] + if client.check_server_credentials(server_id=response[1], rand_num=response[2]): + if pck == DATA_ACK: + client_id = response[-1] + if client_id == client.id: + logger.debug_print("\tDades acceptades!") + else: + logger.debug_print("\tDades d'identificació del client rebudes erronees, client passa a l'estat NOT_REGISTERED") + client.current_state = NOT_REGISTERED + elif pck == DATA_NACK: + logger.debug_print( + f"\tDades no acceptades, motiu: {response[-1]}") + else: + logger.debug_print( + f"\tDades rebutjades per part del servidor") + client.current_state = NOT_REGISTERED + else: + logger.debug_print("\tDades d'identificació del servidor rebudes erronees, client passa a l'estat NOT_REGISTERED") + client.current_state = NOT_REGISTERED + else: + logger.debug_print("\tDades d'identificació del servidor rebudes erronees, client passa a l'estat NOT_REGISTERED") + client.current_state = NOT_REGISTERED + else: + logger.debug_print("\tNo ha hagut una resposta per part del servidor") + + +def get_actual_date(): + date = datetime.datetime.now() + info = f'{str(date.year)}-{str(date.month)}-{str(date.day)};{str(date.hour)}:{str(date.minute)}:{str(date.second)}' + return info + + +# -------------------------------------------------------------- +# --------------------- ESPERA DE CONNEXIONS-------------------- +# -------------------------------------------------------------- + +def wait_server_connections(sock): + while client.has_state(SEND_ALIVE): + (inputs, _, _) = select.select([sock], [], [], 0.0) + if len(inputs) > 0: + new_sock, addr = sock.accept() + response = recv(new_sock) + if response is not None: + pck, client_id, elem = response[0], response[-1], response[3] + if client.check_server_credentials(server_id=response[1], rand_num=response[2]) and client_id == client.id: + if elem not in client.elems: + send(new_sock, DATA_NACK, client.id, + client.rand_num, elem, "", "Element no trobat") + if pck == SET_DATA: + value = response[4] + set_data(new_sock, elem, value) + elif pck == GET_DATA: + get_data(new_sock, elem) + else: + send(new_sock, DATA_REJ, client.id, client.rand_num, elem, "", + "Hi ha discrepancies en les dades del servidor i/o del dispositiu") + client.current_state = NOT_REGISTERED + else: + send(new_sock, DATA_REJ, client.id, client.rand_num, elem, "", + "Les dades rebudes estan mal formades") + client.current_state = NOT_REGISTERED + new_sock.close() + sock.close() + + +def set_data(sock, elem, value): + global client + if elem[-1] != 'I': + send(sock, DATA_NACK, client.id, client.rand_num, + elem, "", "Tipus de l'element incorrecte") + else: + client.elems[elem] = value + logger.debug_print( + f"Valor {value} assignat a l'element {elem} per el servidor") + send(sock, DATA_ACK, client.id, + client.rand_num, elem, value, client.id) + + +def get_data(sock, elem): + logger.debug_print( + f"Dades de l'element {elem} demanades per el servidor.") + value = client.elems[elem] + send(sock, DATA_ACK, client.id, + client.rand_num, elem, value, client.id) + + +# --------------------------------------------------------------- +# ------------------------THREADS CREATION----------------------- +# --------------------------------------------------------------- + +def run_send_alive(udp_sock, server_address): + s_alive = threading.Thread(target=send_alive, args=[ + udp_sock, server_address], daemon=True) + s_alive.start() + + +def run_recv_alive(udp_sock): + r_alive = threading.Thread(target=recv_alive, args=[udp_sock], daemon=True) + r_alive.start() + + +def run_cli(): + cli = threading.Thread(target=start_cli, daemon=True) + cli.start() + + +def run_connections(sock): + wait_connections = threading.Thread( + target=wait_server_connections, args=[sock], daemon=True) + wait_connections.start() + + +# --------------------------------------------------------------- +# ------------------------MAIN BLOCK----------------------------- +# --------------------------------------------------------------- +# Creem una instancia de la classe logger +# que ens permetrà printar missatges de debug +logger = Logger() +cfgname = "client.cfg" +# Analitzem els arguments +# introduits per el script +if len(sys.argv) > 1: + option = sys.argv[1] + if option == '-c': + if len(sys.argv) != 3: + print(f"{sys.argv[0]} {sys.argv[1]} ") + cfgname = sys.argv[2] + elif option == '-d': + logger.turn_debug_on() +# Creem una instancia de la classe Client +# que ens ajudarà a gestionar variables com el estat +# del client i la seva configuració +client = Client(cfgname) +try: + server_udp_address = (client.server, client.server_udp) + udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + udp_sock.bind(client.local_address()) + while not client.has_state(DISCONNECTED): + if client.has_state(NOT_REGISTERED): + # Iniciem la fase de registre + register(udp_sock, server_udp_address) + if client.has_state(REGISTERED): + logger.debug_print("Enviant paquets ALIVE al servidor") + # Comencem a enviar paquets ALIVE al servidor + run_send_alive(udp_sock, server_udp_address) + # Esperem el primer paquet alive + recv_first_alive(udp_sock) + if client.has_state(SEND_ALIVE): + logger.debug_print("Primer paquet ALIVE rebut") + logger.debug_print( + "Registre finalitzat, estat actual: SEND_ALIVE") + # Iniciem la rebuda de ALIVEs del servidor + run_recv_alive(udp_sock) + # Obrim el port tcp local per a les connexions amb el servidor + tcp_sock = socket.socket( + socket.AF_INET, socket.SOCK_STREAM) + tcp_sock.bind(('', client.local_tcp)) + tcp_sock.listen() + # Obrim la consola de comandes + run_cli() + # Iniciem la espera de connexions amb el servidor + run_connections(tcp_sock) +except OSError as err: + print(f"OSError: {err}") +finally: + # Realitzem un exit el qual tanca tots els + # descriptors de fitxer relacionats amb el procés + sys.exit(0) diff --git a/clab/client-server-system/client/utils.py b/clab/client-server-system/client/utils.py new file mode 100755 index 0000000..227a4a2 --- /dev/null +++ b/clab/client-server-system/client/utils.py @@ -0,0 +1,187 @@ +import socket +import sys +import struct +import select +import time +import datetime +import threading +import signal +import os + + +# Paquets de la fase de registre +REG_REQ = 0x00 +REG_INFO = 0x01 +REG_ACK = 0x02 +INFO_ACK = 0x03 +REG_NACK = 0x04 +INFO_NACK = 0x05 +REG_REJ = 0x06 + +# Paquets per a la comunicació periòdica +ALIVE = 0x10 +ALIVE_REJ = 0x11 + +# Paquets per a la transferència de dades amb el servidor +SEND_DATA = 0x20 +SET_DATA = 0x21 +GET_DATA = 0x22 +DATA_ACK = 0x23 +DATA_NACK = 0x24 +DATA_REJ = 0x25 + +# Els possibles estats que pot tenir un client +DISCONNECTED = 0xa0 +NOT_REGISTERED = 0xa1 +WAIT_ACK_REG = 0xa2 +WAIT_INFO = 0xa3 +WAIT_ACK_INFO = 0xa4 +REGISTERED = 0xa5 +SEND_ALIVE = 0xa6 + + +# Valors per a les proves de protocol de registre +t = 1.0 +u = 2.0 +n = 7.0 +o = 3.0 +p = 3.0 +q = 3.0 +v = 2.0 +r = 2.0 +s = 3.0 +m = 3.0 + +# ----------------------------------- +# ----------DEBUG UTILITIES---------- +# ----------------------------------- + + +class Logger: + def __init__(self): + self.debug_mode = False + + def turn_debug_on(self): + self.debug_mode = True + + def debug_print(self, message): + now = datetime.datetime.now() + if self.debug_mode: + print("{0}:{1}:{2} => {3}".format( + now.hour, now.minute, now.second, message)) + +def handler(signum, frame): + print('Procés acabat per ctrl+c') + sys.exit(0) + +# -------------------------------------------- +# -------------SOCKETS UTILITIES-------------- +# -------------------------------------------- + + +def unpack_response(fmt, response): + try: + t = struct.unpack(fmt, response) + return tuple(x if isinstance(x, int) else x.split(b'\x00')[0].decode() for x in t) + except: + # Considerem un error en el desenpaquetament si + # el servidor ens ha enviat un paquet mal format i + # retornem null + return None + + +def recvfrom(sock): + response, server_addr = sock.recvfrom(84) + return unpack_response('!B13s9s61s', response), server_addr + + +def sendto(sock, address, pack_type, client_id, rand_num, info): + data = struct.pack('!B13s9s61s', pack_type, client_id.encode(), + rand_num.encode(), info.encode()) + sock.sendto(data, address) + + +def recv(sock): + response = sock.recv(127) + return unpack_response('!B13s9s8s16s80s', response) + + +def send(sock, pack_type, client_id, rand_num, elem_name, elem_value, info): + data = struct.pack('!B13s9s8s16s80s', pack_type, client_id.encode(), rand_num.encode( + ), elem_name.encode(), elem_value.encode(), info.encode()) + sock.send(data) + +# ------------------------------------- +# ------------CLIENT CLASS------------- +# ------------------------------------- + + +class Client(): + """Representa l'estat d'un client amb la seva configuració + """ + + def __init__(self, configfile): + config = read_cfg(configfile) + self.id = config['Id'] + self.elems = config['Params'] + self.local_tcp = config['Local-TCP'] + self.server = config['Server'] + self.server_udp = config['Server-UDP'] + self.current_state = NOT_REGISTERED + self.register_attemps = 0 + + def has_state(self, *states): + for state in states: + if self.current_state == state: + return True + return False + + def set_udp_communication_port(self, udp_port): + self.udp_port = udp_port + + def set_tcp_communication_port(self, tcp_port): + self.tcp_port = tcp_port + + def set_server_credentials(self, server_id, rand_num, server_ip): + self.server_id = server_id + self.rand_num = rand_num + self.server_ip = server_ip + + def check_server_credentials(self, server_id=None, rand_num=None, server_ip=None): + if server_id is not None: + if server_id != self.server_id: + return False + if rand_num is not None: + if rand_num != self.rand_num: + return False + if server_ip is not None: + if server_ip != self.server_ip: + return False + return True + + def local_address(self, port=0): + return ('', port) + + +def read_cfg(filename): + """Llegeix el fitxer de configuració del client + i retorna un diccionari amb les dades llegides + """ + try: + cfg = open(filename) + config = dict() + for line in cfg: + items = line.strip().replace('=', ' ').split() + if len(items) == 2: + key, value = items + config[key] = value + t = config['Params'].strip().split(';') + config['Params'] = dict((key, "") for key in t) + config['Local-TCP'] = int(config['Local-TCP']) + config['Server-UDP'] = int(config['Server-UDP']) + config['Server'] = socket.gethostbyname(config['Server']) + return config + except FileNotFoundError: + print( + f"No s'ha trobat el fitxer {filename}") + sys.exit() diff --git a/clab/client-server-system/server/bbdd_dev.dat b/clab/client-server-system/server/bbdd_dev.dat new file mode 100755 index 0000000..e8e2d19 --- /dev/null +++ b/clab/client-server-system/server/bbdd_dev.dat @@ -0,0 +1,3 @@ +KZ87MKAGB43N +GHX0E32LWQ6C + diff --git a/clab/client-server-system/server/makefile b/clab/client-server-system/server/makefile new file mode 100755 index 0000000..15a9b2d --- /dev/null +++ b/clab/client-server-system/server/makefile @@ -0,0 +1,9 @@ +# +# +LDFLAGS= -ansi -pedantic -Wall -lrt -pthread -std=c99 + +all: server.c + gcc server.c -o server $(LDFLAGS) + +clean: + -rm -rf server diff --git a/clab/client-server-system/server/server.c b/clab/client-server-system/server/server.c new file mode 100755 index 0000000..f9994fe --- /dev/null +++ b/clab/client-server-system/server/server.c @@ -0,0 +1,564 @@ +#include "utils.h" + +void handler(int sig); +/* ATTEND CLIENT FUNCTIONS */ +void attendClients(int socket); +void *handlePdu(void *args); +/* REGISTRATION FUNCTIONS */ +void registerClient(int sock, udp_pdu pdu, struct sockaddr_in address, client_info *client); +void waitInfo(int sock, client_info *client); +void handleClientInfo(int sock, udp_pdu info, struct sockaddr_in clientAddress, client_info *client); +/* ALIVES FUNCTIONS */ +void handleAlive(int sock, udp_pdu pdu, struct sockaddr_in clientAddress, client_info *client); +void controlAlives(); +/* TCP CONNECTIONS FUNCTIONS*/ +void tcpConnections(int tcpSocket); +void *handleTcpConnection(void *args); +/* COMMAND LINE INTERFACE FUNCTIONS */ +void startCli(); +void listClients(); +void runConnection(unsigned char pack, char *clientId, char *elemId, char *newValue); +/* AUXILIAR FUNCTIONS */ +int storeData(const char *pack, const char *clientId, const char *elem, const char *value); +int isInputElem(const char *elemId); +int validElems(char *elems); +int validCredentials(tcp_pdu pdu, client_info *client); +int validAlive(udp_pdu pdu, client_info *client); +int validInfo(const char *id, const char *randNum, int tcpPort, char *elems, client_info *client); + +config cfg; /* Configuració del servidor */ +clients_db cdb; /* Base de dades */ + +int main(int argc, char const *argv[]) +{ + signal(SIGINT, handler); + signal(SIGTSTP, SIG_IGN); + memset(&cfg, 0, sizeof(config)); + memset(&cdb, 0, sizeof(clients_db)); + const char *cfgname = "server.cfg"; + const char *dbname = "bbdd_dev.dat"; + if (argc > 1) + { + const char *option = argv[1]; + if (strcmp(option, "-c") == 0) + { + if (argc != 3) + { + printf("%s -c \n", argv[0]); + exit(EXIT_SUCCESS); + } + cfgname = argv[2]; + } + else if (strcmp(option, "-d") == 0) + DEBUG_ON = 1; + else if (strcmp(option, "-u") == 0) + { + if (argc != 3) + { + printf("%s -u \n", argv[0]); + exit(EXIT_SUCCESS); + } + dbname = argv[2]; + } + } + check(readConfig(&cfg, cfgname), + "Error llegint el fitxer de configuració.\n"); + check(readDb(&cdb, dbname), + "Error llegint el fitxer de dispositius.\n"); + check(shareClientsInfo(&cdb), "Error compartint memoria\n"); + + int udpSocket, tcpSocket; + check((udpSocket = socket(AF_INET, SOCK_DGRAM, 0)), "Error al connectar el socket udp.\n"); + check(bindTo(udpSocket, cfg.udpPort), "Error al bind del udpSocket"); + check((tcpSocket = socket(AF_INET, SOCK_STREAM, 0)), "Error al connectar el socket tcp.\n"); + check(bindTo(tcpSocket, cfg.tcpPort), "Error al bind del tcpSocket"); + pid_t regAtt, alives, waitConn, cli; + if ((regAtt = fork()) == 0) + attendClients(udpSocket); + if ((alives = fork()) == 0) + controlAlives(); + if ((waitConn = fork()) == 0) + tcpConnections(tcpSocket); + if ((cli = fork()) == 0) + startCli(); + if (cli == -1 || waitConn == -1 || alives == -1 || regAtt == -1) + { + perror("Error realitzant un fork al procés principal\n"); + kill(-getpid(), SIGINT); + } + /* Si qualsevol procés fill acaba + envia una señal SIGINT a tots els + processos */ + wait(NULL); + kill(-getpid(), SIGINT); +} + +/*--------------------------------------------------*/ +/*--------------------- CLI ------------------------*/ +/*--------------------------------------------------*/ + +void startCli() +/* Simula l'execució de la consola de comandes */ +{ + while (1) + { + char input[100] = {'\0'}; + char *command; + fgets(input, sizeof(input), stdin); + command = strtok(input, " \n"); + if (command != NULL) + { + if (strcmp(command, "list") == 0) + { + listClients(); + } + else if (strcmp(command, "quit") == 0) + exit(EXIT_SUCCESS); + else if (strcmp(command, "set") == 0) + { + char *clientId = strtok(NULL, " \n"); + char *elemId = strtok(NULL, " \n"); + char *newValue = strtok(NULL, " \n"); + if (clientId == NULL || elemId == NULL || newValue == NULL || strtok(NULL, " \n") != NULL) + printf("set \n"); + else + runConnection(SET_DATA, clientId, elemId, newValue); + } + else if (strcmp(command, "get") == 0) + { + char *clientId = strtok(NULL, " \n"); + char *elemId = strtok(NULL, " \n"); + if (clientId == NULL || elemId == NULL || strtok(NULL, " \n") != NULL) + printf("get \n"); + else + runConnection(GET_DATA, clientId, elemId, ""); + } + else + { + printf("Comanda %s no reconeguda\n", command); + } + } + } +} + +void listClients() +{ + printf("\n-----Id----- --RNDM-- ------ IP ----- ----ESTAT--- --ELEMENTS-------------------------------------------\n"); + for (int i = 0; i < cdb.length; i++) + { + client_info client = cdb.clients[i]; + const char *state = client.state == DISCONNECTED ? "DISCONNECTED" : client.state == WAIT_INFO ? "WAIT_INFO" : client.state == SEND_ALIVE ? "SEND_ALIVE" : "\0"; + printf("%-12s %-8s %-15s %-12s %-50s\n", client.id, client.randNum, client.ip, state, client.elems); + } + printf("\n"); +} + +void runConnection(unsigned char pack, char *clientId, char *elemId, char *value) +{ + int clientIndex, sock; + if ((clientIndex = isAuthorized(&cdb, clientId)) > -1) + { + client_info *client = &(cdb.clients[clientIndex]); + if (client->state == SEND_ALIVE) + { + if (hasElem(elemId, client)) + { + if (pack == SET_DATA && !isInputElem(elemId)) + { + printf("L'element %s no es un element d'entrada (actuador)\n", elemId); + return; + } + check((sock = socket(AF_INET, SOCK_STREAM, 0)), "Error creant un socket\n"); + if (connectTo(sock, client->ip, client->tcpPort) >= 0) + { + check(sendTcp(sock, pack, cfg.id, client->randNum, elemId, value, client->id), "Error en el send\n"); + fd_set inputs; + check(selectIn(sock, &inputs, M), "Error en el select\n"); + if (FD_ISSET(sock, &inputs)) + { + tcp_pdu response; + check(recv(sock, &response, sizeof(tcp_pdu), 0), "Error rebent informació\n"); + if (response.pack == DATA_ACK) + { + debugPrint("Dades acceptades"); + storeData(pack == SET_DATA ? "SET_DATA" : "GET_DATA", client->id, response.elem, response.value); + } + else if (response.pack == DATA_NACK) + debugPrint("Dades no acceptades"); + else if (response.pack == DATA_REJ) + { + debugPrint("Dades rebutjades, client passa a l'estat DISCONNECTED"); + disconnectClient(client); + } + } + else + debugPrint("No s'ha rebut cap resposta del client"); + } + else + { + debugPrint("Ha hagut un error connectant amb el client"); + disconnectClient(client); + } + close(sock); + } + else + printf("\tL'element %s no forma part del client %s\n", elemId, clientId); + } + else + printf("\tEl client %s no es troba connectat\n", clientId); + } + else + printf("\tEl dispositiu introduit no forma part del sistema.\n"); +} + +int isInputElem(const char *elemId) +{ + int len = strlen(elemId); + return elemId[len - 1] == 'I'; +} + +/*--------------------------------------------------*/ +/*-------------- HANDLE TCP CONNECTIONS ------------*/ +/*--------------------------------------------------*/ +void tcpConnections(int tcpSocket) +/* Executa el procés d'espera de connexions tcp */ +{ + check(listen(tcpSocket, SERVER_BACKLOG), "Error escoltant per el port tcp\n"); + while (1) + { + int clientSocket; + pthread_t newThread; + check((clientSocket = accept(tcpSocket, NULL, NULL)), "Ha hagut un error al acceptar un socket, el màxim permes està definit a la llibreria 'utils.h'\n"); + check(pthread_create(&newThread, NULL, handleTcpConnection, &clientSocket), "Error creating a thread"); + check(pthread_detach(newThread), "Error detaching a thread"); + } +} + +void *handleTcpConnection(void *args) +{ + int clientSocket = *((int *)args); + char debugMessage[55] = {'\0'}; + fd_set inputs; + check(selectIn(clientSocket, &inputs, TCP_WAIT_TIME), "Error en el select\n"); + if (FD_ISSET(clientSocket, &inputs)) + { + int clientIndex; + tcp_pdu pdu; + check(recv(clientSocket, &pdu, sizeof(tcp_pdu), 0), "Error rebent informació del client\n"); + if (pdu.pack == SEND_DATA) + { + if ((clientIndex = isAuthorized(&cdb, pdu.id)) != -1) + { + client_info *client = &(cdb.clients[clientIndex]); + sprintf(debugMessage, "El client %s ha enviat un paquet SEND_DATA", client->id); + debugPrint(debugMessage); + if (validCredentials(pdu, client)) + { + if (client->state == SEND_ALIVE) + { + if (hasElem(pdu.elem, client)) + { + int dataStored = storeData("SEND_DATA", client->id, pdu.elem, pdu.value); + if (dataStored == 0) + { + debugPrint("Dades emmagatzemades"); + check(sendTcp(clientSocket, DATA_ACK, cfg.id, client->randNum, pdu.elem, pdu.value, client->id), "Error en l'enviament de DATA_ACK\n"); + } + else + { + debugPrint("No s'han pogut emmagatzemar les dades"); + check(sendTcp(clientSocket, DATA_NACK, cfg.id, client->randNum, pdu.elem, pdu.value, "No s'han pogut emmagatzemar les dades al servidor"), "Error enviant DATA_NACK\n"); + } + } + else + { + debugPrint("L'element especificat en el paquet no forma part del client"); + check(sendTcp(clientSocket, DATA_NACK, cfg.id, client->randNum, pdu.elem, pdu.value, "L'element no es troba en el dispositiu"), "Error enviant DATA_NACK\n"); + } + } + else + { + debugPrint("El client no es troba en l'estat SEND_ALIVE"); + disconnectClient(client); + } + } + else + { + debugPrint("Dades del client incorrectes"); + check(sendTcp(clientSocket, DATA_REJ, cfg.id, pdu.randNum, pdu.elem, pdu.value, ""), "Error enviant DATA_REJ\n"); + disconnectClient(client); + } + } + else + { + debugPrint("Un client no autoritzat ha intentat enviar un paquet SEND_DATA"); + check(sendTcp(clientSocket, DATA_REJ, cfg.id, pdu.randNum, pdu.elem, pdu.value, ""), "Error enviant DATA_REJ\n"); + } + } + } + return NULL; +} + +/*--------------------------------------------------*/ +/*-------------- CONTROL ALIVE CLIENTS -------------*/ +/*--------------------------------------------------*/ +void controlAlives() +/* Comprova que cada client segueix operatiu */ +{ + while (1) + { + time_t now = time(NULL); + for (int i = 0; i < cdb.length; i++) + { + client_info *client = &(cdb.clients[i]); + if (client->lastAlive != -1) + { + time_t diff = difftime(now, client->lastAlive); + if (client->state == REGISTERED) + { + if (diff >= FIRST_ALIVE_TIMEOUT) + { + char debugMessage[60] = {'\0'}; + sprintf(debugMessage, "No s'ha rebut el primer ALIVE del client %s", client->id); + debugPrint(debugMessage); + disconnectClient(client); + } + } + else if (client->state == SEND_ALIVE) + { + if (diff >= ALIVE_TIMEOUT * 3) + { + char debugMessage[60] = {'\0'}; + sprintf(debugMessage, "El client %s no ha enviat 3 ALIVES consecutius", client->id); + debugPrint(debugMessage); + disconnectClient(client); + } + } + } + } + } +} + +/*--------------------------------------------------*/ +/*----------------- ATTEND CLIENTS -----------------*/ +/*--------------------------------------------------*/ +void attendClients(int socket) +/* Espera a rebre paquets UDP dels clients */ +{ + reg_thread_args args; + socklen_t len = sizeof(struct sockaddr_in); + args.socket = socket; + while (1) + { + pthread_t newThread; + check(recvfrom(socket, &(args.pdu), sizeof(udp_pdu), 0, (struct sockaddr *)&(args.clientAddress), &len), "Error rebent informació del socket"); + check(pthread_create(&newThread, NULL, handlePdu, &args), "Error creating a thread"); + check(pthread_detach(newThread), "Error detaching a thread"); + } +} + +void *handlePdu(void *args) +{ + reg_thread_args reg_args = *((reg_thread_args *)args); + udp_pdu pdu = reg_args.pdu; + int attSocket = reg_args.socket; + struct sockaddr_in clientAddress = reg_args.clientAddress; + int clientIndex; + if ((clientIndex = isAuthorized(&cdb, pdu.id)) > -1) + { + client_info *client = &(cdb.clients[clientIndex]); + if (pdu.pack == REG_REQ) + registerClient(attSocket, pdu, clientAddress, client); + else if (pdu.pack == ALIVE) + handleAlive(attSocket, pdu, clientAddress, client); + } + else + check(sendUdp(attSocket, REG_REJ, cfg.id, "00000000", "Dispositiu no autoritzat en el sistema", clientAddress), "Error enviant REG_REJ\n"); + return NULL; +} + +/*--------------------------------------------------*/ +/*----------------- REGISTER CLIENTS ---------------*/ +/*--------------------------------------------------*/ +void registerClient(int sock, udp_pdu pdu, struct sockaddr_in address, client_info *client) +{ + /* COMPROVEM LES DADES DE LA PDU I DEL CLIENT */ + if (strcmp(pdu.randNum, "00000000") != 0 || strcmp(pdu.data, "") != 0) + { + disconnectClient(client); + check(sendUdp(sock, REG_REJ, cfg.id, "00000000", "Dades incorrectes", address), "Error enviant REG_REJ\n"); + return; + } + if (client->state != DISCONNECTED) + { + disconnectClient(client); + return; + } + char randNum[9] = {'\0'}, data[61] = {'\0'}, debugMessage[60] = {'\0'}; + int newSocket, port; + /* GENEREM NOMBRE ALEATORI I OBRIM UN NOU PORT */ + sprintf(randNum, "%d", generateRandNum(10000000, 99999999)); + check((newSocket = socket(AF_INET, SOCK_DGRAM, 0)), "Error al connectar el socket udp.\n"); + check(bindTo(newSocket, 0), "Error al bind del udpSocket"); + check((port = getPort(newSocket)), "Error agafant port\n"); + sprintf(data, "%d", port); + check(sendUdp(newSocket, REG_ACK, cfg.id, randNum, data, address), "Error enviant REG_ACK\n"); + sprintf(debugMessage, "Client %s pasa a l'estat WAIT_INFO", client->id); + debugPrint(debugMessage); + client->state = WAIT_INFO; + strcpy(client->randNum, randNum); + waitInfo(newSocket, client); + close(newSocket); +} + +void waitInfo(int sock, client_info *client) +/* Executem el procés de rebuda d'informació del client */ +{ + fd_set inputs; + check(selectIn(sock, &inputs, INFO_WAIT_TIME), "Error en el select\n"); + if (FD_ISSET(sock, &inputs)) + { + udp_pdu info; + struct sockaddr_in infoAddress; + socklen_t len = sizeof(struct sockaddr_in); + memset(&info, 0, sizeof(udp_pdu)); + check(recvfrom(sock, &info, sizeof(udp_pdu), 0, (struct sockaddr *)&infoAddress, &len), "Error al rebre l'informació"); + if (info.pack == REG_INFO) + handleClientInfo(sock, info, infoAddress, client); + else + disconnectClient(client); + } + else + disconnectClient(client); +} + +void handleClientInfo(int sock, udp_pdu info, struct sockaddr_in clientAddress, client_info *client) +{ + int tcpPort = atoi(strtok(info.data, ",")); + char *elems = strtok(NULL, ","); + if (validInfo(info.id, info.randNum, tcpPort, elems, client)) + { + char data[6], debugMessage[60] = {'\0'}; + sprintf(data, "%d", cfg.tcpPort); + check(sendUdp(sock, INFO_ACK, cfg.id, client->randNum, data, clientAddress), "Error enviant INFO_NACK\n"); + /* Registrem les dades del client */ + strcpy(client->elems, elems); + strcpy(client->ip, inet_ntoa(clientAddress.sin_addr)); + client->tcpPort = tcpPort; + client->lastAlive = time(NULL); + client->state = REGISTERED; + sprintf(debugMessage, "Client %s pasa a l'estat REGISTERED", client->id); + debugPrint(debugMessage); + } + else + { + check(sendUdp(sock, INFO_NACK, cfg.id, client->randNum, "Dades incorrectes\n", clientAddress), "Error enviant INFO_NACK\n"); + disconnectClient(client); + } +} + +/*--------------------------------------------------*/ +/*----------------- SEND ALIVES --------------------*/ +/*--------------------------------------------------*/ +void handleAlive(int sock, udp_pdu pdu, struct sockaddr_in clientAddress, client_info *client) +{ + if (client->state == REGISTERED || client->state == SEND_ALIVE) + { + if (validAlive(pdu, client)) + { + client->lastAlive = time(NULL); + check(sendUdp(sock, ALIVE, cfg.id, client->randNum, client->id, clientAddress), "Error enviant ALIVE\n"); + if (client->state == REGISTERED) + { + char debugMessage[60] = {'\0'}; + sprintf(debugMessage, "Client %s pasa a l'estat SEND_ALIVE", client->id); + debugPrint(debugMessage); + client->state = SEND_ALIVE; + } + } + else + { + check(sendUdp(sock, ALIVE_REJ, cfg.id, client->randNum, "Dades del paquet ALIVE incorrectes\n", clientAddress), "Error enviant ALIVE_REJ\n"); + disconnectClient(client); + } + } + else + disconnectClient(client); +} + +/*-------------------------------------------------*/ +/*-----------------AUXILIAR FUNCTIONS--------------*/ +/*-------------------------------------------------*/ + +void handler(int sig) +{ + while (wait(NULL) > 0) + ; + shmdt(cdb.clients); + exit(EXIT_SUCCESS); +} + +int storeData(const char *pack, const char *clientId, + const char *elem, const char *value) +{ + char filename[17] = {'\0'}; + sprintf(filename, "%s.data", clientId); + FILE *fp = fopen(filename, "a"); + if (fp == NULL) + return -1; + time_t t = time(NULL); + struct tm date = *localtime(&t); + if (fprintf(fp, "%d-%d-%d;%s;%s;%s;%s\n", date.tm_year + 1900, date.tm_mon + 1, date.tm_mday, __TIME__, pack, elem, value) == -1) + return -1; + fflush(fp); + return 0; +} + +int validAlive(udp_pdu pdu, client_info *client) +{ + return strcmp(pdu.id, client->id) == 0 && + strcmp(pdu.randNum, client->randNum) == 0 && + strcmp(pdu.data, "") == 0; +} + +int validInfo(const char *id, const char *randNum, int tcpPort, char *elems, client_info *client) +{ + return strcmp(id, client->id) == 0 && + strcmp(randNum, client->randNum) == 0 && + tcpPort >= 1024 && + tcpPort <= 65535 && + validElems(elems); +} + +int validCredentials(tcp_pdu pdu, client_info *client) +{ + return strcmp(pdu.randNum, client->randNum) == 0; +} + +int validElems(char *elems) +{ + int numElems = 0; + char cpy[50] = {'\0'}; + strcpy(cpy, elems); + char *elem = strtok(cpy, ";"); + while (elem != NULL) + { + numElems++; + if (strlen(elem) != 7) + return 0; + if (!isdigit(elem[4])) + return 0; + if (elem[6] != 'I' && elem[6] != 'O') + return 0; + if (!isalpha(elem[0]) || !isupper(elem[0]) || + !isalpha(elem[1]) || !isupper(elem[1]) || + !isalpha(elem[2]) || !isupper(elem[2])) + { + return 0; + } + elem = strtok(NULL, ";"); + } + if (numElems == 0) + return 0; + return 1; +} \ No newline at end of file diff --git a/clab/client-server-system/server/server.cfg b/clab/client-server-system/server/server.cfg new file mode 100755 index 0000000..08fb329 --- /dev/null +++ b/clab/client-server-system/server/server.cfg @@ -0,0 +1,3 @@ +Id = XERFP345SB2Z +UDP-port = 9002 +TCP-port = 7005 diff --git a/clab/client-server-system/server/utils.h b/clab/client-server-system/server/utils.h new file mode 100755 index 0000000..1b2e3d2 --- /dev/null +++ b/clab/client-server-system/server/utils.h @@ -0,0 +1,380 @@ +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#define SERVER_BACKLOG 100 +#define INFO_WAIT_TIME 2 +#define TCP_WAIT_TIME 3 +#define FIRST_ALIVE_TIMEOUT 3 +#define ALIVE_TIMEOUT 2 +#define M 3 +/*--------------TIPUS DE PAQUETS-------------*/ + +/* Paquets de la fase de registre */ +unsigned char REG_REQ = 0x00; +unsigned char REG_INFO = 0x01; +unsigned char REG_ACK = 0x02; +unsigned char INFO_ACK = 0x03; +unsigned char REG_NACK = 0x04; +unsigned char INFO_NACK = 0x05; +unsigned char REG_REJ = 0x06; + +/* Paquets per a la comunicació periòdica */ +unsigned char ALIVE = 0x10; +unsigned char ALIVE_REJ = 0x11; + +/* Paquets per a la transferència de dades amb el servidor */ +unsigned char SEND_DATA = 0x20; +unsigned char SET_DATA = 0x21; +unsigned char GET_DATA = 0x22; +unsigned char DATA_ACK = 0x23; +unsigned char DATA_NACK = 0x24; +unsigned char DATA_REJ = 0x25; + +/*---------------ESTATS----------------*/ +unsigned char DISCONNECTED = 0xa0; +unsigned char NOT_REGISTERED = 0xa1; +unsigned char WAIT_ACK_REG = 0xa2; +unsigned char WAIT_INFO = 0xa3; +unsigned char WAIT_ACK_INFO = 0xa4; +unsigned char REGISTERED = 0xa5; +unsigned char SEND_ALIVE = 0xa6; + +/*-------------STRUCTS-------------*/ +typedef struct client_info +{ + unsigned char state; + char id[13]; + char randNum[9]; + char elems[50]; + char ip[16]; + unsigned short tcpPort; + time_t lastAlive; +} client_info; + +typedef struct clients_db +{ + client_info *clients; + int length; +} clients_db; + +typedef struct udp_pdu +{ + unsigned char pack; + char id[13]; + char randNum[9]; + char data[61]; +} udp_pdu; + +typedef struct tcp_pdu +{ + unsigned char pack; + char id[13]; + char randNum[9]; + char elem[8]; + char value[16]; + char data[80]; +} tcp_pdu; + +typedef struct config +{ + char *id; + int udpPort; + int tcpPort; +} config; + +typedef struct reg_thread_args +{ + udp_pdu pdu; + int socket; + struct sockaddr_in clientAddress; +} reg_thread_args; + +int generateRandNum(int min, int max) +{ + srand(time(0)); + return rand() % (max + 1 - min) + min; +} + +/*--------------------------------------------*/ +/*---------------DEBUG UTILS------------------*/ +/*--------------------------------------------*/ +int DEBUG_ON = 0; + +void debugPrint(const char *message) +{ + if (DEBUG_ON) + { + printf("%s => %s\n", __TIME__, message); + fflush(stdout); + } +} + +void check(int result, const char *message) +{ + if (result < 0) + { + perror(message); + exit(EXIT_FAILURE); + } +} + +/*--------------------------------------------*/ +/*---------------DATABASE UTILS---------------*/ +/*--------------------------------------------*/ + +int isAuthorized(clients_db *db, const char *id) +{ + for (int i = 0; i < db->length; i++) + if (strcmp(id, db->clients[i].id) == 0) + return i; + return -1; +} + +void disconnectClient(client_info *client) +{ + if (client->state != DISCONNECTED) + { + char debugMessage[60] = {'\0'}; + sprintf(debugMessage, "Client %s pasa a l'estat DISCONNECTED", client->id); + debugPrint(debugMessage); + } + client->state = DISCONNECTED; + memset(client->elems, '\0', sizeof(client->elems)); + memset(client->ip, '\0', sizeof(client->ip)); + memset(client->randNum, '\0', sizeof(client->randNum)); + client->tcpPort = -1; + client->lastAlive = -1; +} + +int shareClientsInfo(clients_db *db) +{ + int shmid; + if ((shmid = shmget(IPC_PRIVATE, db->length * sizeof(client_info), IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR)) == -1) + return -1; + client_info *tmp; + if ((tmp = shmat(shmid, (void *)0, 0)) == (void *)-1) + return -1; + for (int i = 0; i < db->length; i++) + tmp[i] = db->clients[i]; + free(db->clients); + db->clients = tmp; + return 0; +} + +int hasElem(const char *elem, client_info *client) +{ + char cpy[50] = {'\0'}; + strcpy(cpy, client->elems); + char *token = strtok(cpy, ";"); + while (token != NULL) + { + if (strcmp(elem, token) == 0) + return 1; + token = strtok(NULL, ";"); + } + return 0; +} + +/*--------------------------------------------*/ +/*---------------SOCKETS UTILS----------------*/ +/*--------------------------------------------*/ +int sendUdp(int sock, unsigned char pack, char id[13], char randNum[9], char data[61], struct sockaddr_in address) +{ + udp_pdu pdu; + pdu.pack = pack; + strcpy(pdu.id, id); + strcpy(pdu.randNum, randNum); + strcpy(pdu.data, data); + return sendto(sock, &pdu, sizeof(udp_pdu), 0, (struct sockaddr *)&address, sizeof(struct sockaddr_in)); +} + +int sendTcp(int sock, unsigned char pack, char id[13], char randNum[9], char elem[8], char value[16], char info[80]) +{ + tcp_pdu pdu; + pdu.pack = pack; + strcpy(pdu.id, id); + strcpy(pdu.randNum, randNum); + strcpy(pdu.elem, elem); + strcpy(pdu.value, value); + strcpy(pdu.data, info); + return send(sock, &pdu, sizeof(tcp_pdu), 0); +} + +int selectIn(int sock, fd_set *inputs, int timeout) +{ + struct timeval t; + t.tv_sec = timeout; + t.tv_usec = 0; + FD_ZERO(inputs); + FD_SET(sock, inputs); + return select(sock + 1, inputs, NULL, NULL, &t); +} + +int bindTo(int sock, uint16_t port) +{ + struct sockaddr_in address; + address.sin_family = AF_INET; + address.sin_port = htons(port); + address.sin_addr.s_addr = INADDR_ANY; + return bind(sock, (struct sockaddr *)&address, sizeof(struct sockaddr_in)); +} + +int connectTo(int sock, const char *ip, unsigned short port) +{ + struct sockaddr_in address; + address.sin_family = AF_INET; + address.sin_port = htons(port); + address.sin_addr.s_addr = inet_addr(ip); + return connect(sock, (struct sockaddr *)&address, sizeof(struct sockaddr_in)); +} + +int getPort(int fd) +{ + struct sockaddr_in address; + socklen_t len = sizeof(struct sockaddr_in); + int port = 0; + memset(&address, 0, sizeof(struct sockaddr_in)); + if (getsockname(fd, (struct sockaddr *)&address, &len) == -1) + return -1; + port = ntohs(address.sin_port); + return port; +} + +/*----------------------------------------*/ +/*-------------READING UTILS--------------*/ +/*----------------------------------------*/ +char *getLine(FILE *fp) +{ + size_t len = 3; + char *line = (char *)malloc(len * sizeof(char)); + int c = fgetc(fp); + int i = 0; + while (c != '\n' && c != EOF) + { + line[i] = c; + i++; + if (i == len) + { + len++; + line = (char *)realloc(line, len * sizeof(char)); + } + c = fgetc(fp); + } + if (i == 0) + { + free(line); + return NULL; + } + line[i] = '\0'; + return line; +} + +char *trim(char *str) +{ + char *end; + /*left trim*/ + while (isspace((unsigned char)*str)) + str++; + if (*str == 0) /*Es tot espais*/ + return str; + /*Right trim*/ + end = str + strlen(str) - 1; + while (end > str && (isspace((unsigned char)*end) || (unsigned char)*end == '\n')) + end--; + end[1] = '\0'; + return str; +} + +char *getCfgLineInfo(FILE *fp) +{ + char *line = getLine(fp); + if (line == NULL) + return NULL; + char *tmp = strrchr(line, '='); + tmp++; + char *info = trim(tmp); + if (strlen(info) <= 0) + return NULL; + return info; +} + +int readConfig(config *cfg, const char *filename) +{ + char *attrs[3]; + FILE *fp; + if ((fp = fopen(filename, "r")) == NULL) + return -1; + for (int i = 0; i < 3; i++) + { + if ((attrs[i] = getCfgLineInfo(fp)) == NULL) + { + fclose(fp); + return -1; + } + } + cfg->id = attrs[0]; + cfg->udpPort = atoi(attrs[1]); + cfg->tcpPort = atoi(attrs[2]); + fclose(fp); + return 0; +} + +int readDb(clients_db *db, const char *filename) +{ + FILE *fp; + if ((fp = fopen(filename, "r")) == NULL) + return -1; + client_info *clients = (client_info *)malloc(sizeof(client_info)); + char *line; + int len = 1, i = 0; + while ((line = getLine(fp)) != NULL) + { + if (i == len) + { + len++; + clients = (client_info *)realloc(clients, len * sizeof(client_info)); + } + client_info client; + memset(&client, 0, sizeof(client_info)); + client.state = DISCONNECTED; + strcpy(client.id, line); + memset(client.elems, '\0', sizeof(client.elems)); + memset(client.ip, '\0', sizeof(client.ip)); + memset(client.randNum, '\0', sizeof(client.randNum)); + client.tcpPort = -1; + client.lastAlive = -1; + clients[i] = client; + i++; + } + if (i == 0) + { + fclose(fp); + free(clients); + return -1; + } + fclose(fp); + db->clients = clients; + db->length = len; + return 0; +} diff --git a/clab/client-server-system/test/KZ87MKAGB43N.data b/clab/client-server-system/test/KZ87MKAGB43N.data new file mode 100755 index 0000000..ac91ca5 --- /dev/null +++ b/clab/client-server-system/test/KZ87MKAGB43N.data @@ -0,0 +1 @@ +2020-04-14;03:10:34;SET_DATA;LUM-0-I;patata diff --git a/clab/client-server-system/test/bbdd_dev.dat b/clab/client-server-system/test/bbdd_dev.dat new file mode 100755 index 0000000..cc8bd10 --- /dev/null +++ b/clab/client-server-system/test/bbdd_dev.dat @@ -0,0 +1,8 @@ +GHX0E32LWQ6C +J4RTN56AC05R +00RT45JQ23AC +PEG6J2Q98R02 +AE45F3123BAA +AA345FCC23FA +FA345778123A +KZ87MKAGB43N diff --git a/clab/client-server-system/test/client b/clab/client-server-system/test/client new file mode 100755 index 0000000000000000000000000000000000000000..6b23e0f604316d2abacc35e35645d508c91bf2f9 GIT binary patch literal 45888 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 literal 0 HcmV?d00001 diff --git a/clab/client-server-system/test/client.cfg b/clab/client-server-system/test/client.cfg new file mode 100755 index 0000000..1365389 --- /dev/null +++ b/clab/client-server-system/test/client.cfg @@ -0,0 +1,5 @@ +Id = GHX0E32LWQ6C +Params = LUM-0-O;LUM-0-I;PRE-0-O;TEM-0-O +Local-TCP = 6857 +Server = localhost +Server-UDP = 9002 diff --git a/clab/client-server-system/test/client1.cfg b/clab/client-server-system/test/client1.cfg new file mode 100755 index 0000000..a8d63c1 --- /dev/null +++ b/clab/client-server-system/test/client1.cfg @@ -0,0 +1,5 @@ +Id = J4RTN56AC05R +Params = PIC-0-O;HUM-0-I;HUM-0-O;LUM-0-I +Local-TCP = 3927 +Server = localhost +Server-UDP = 2020 diff --git a/clab/client-server-system/test/client2.cfg b/clab/client-server-system/test/client2.cfg new file mode 100755 index 0000000..a0fc660 --- /dev/null +++ b/clab/client-server-system/test/client2.cfg @@ -0,0 +1,5 @@ +Id = 00RT45JQ23AC +Params = STA-O-I;TIM-1-O;TIM-1-I +Local-TCP = 4206 +Server = localhost +Server-UDP = 2020 diff --git a/clab/client-server-system/test/client3.cfg b/clab/client-server-system/test/client3.cfg new file mode 100755 index 0000000..8b45a91 --- /dev/null +++ b/clab/client-server-system/test/client3.cfg @@ -0,0 +1,5 @@ +Id = PEG6J2Q98R02 +Params = VID-O-O;VID-0-I;HUM-0-0;TXT-0-I +Local-TCP = 5391 +Server = localhost +Server-UDP = 2020 diff --git a/clab/client-server-system/test/client4.cfg b/clab/client-server-system/test/client4.cfg new file mode 100755 index 0000000..9705644 --- /dev/null +++ b/clab/client-server-system/test/client4.cfg @@ -0,0 +1,5 @@ +Id = NO87DISP9AUT +Params = PRE-O-O;PRE-0-I;STA-0-0;LEC-0-I +Local-TCP = 7654 +Server = localhost +Server-UDP = 2020 diff --git a/clab/client-server-system/test/server b/clab/client-server-system/test/server new file mode 100755 index 0000000000000000000000000000000000000000..e1ed5ecc351b594845baca9d036f44f83f7fe297 GIT binary patch literal 45920 zcmeIb3w)Ht)j$5^hT)bC3L2&8+Af+{k|rt?l;|$mkX>CMLINltS&|JzLlTn>qE!qg zK_0^@ZN1ReOKjEhs%`O78_+I6AgHw!Y3pl?7o;lB3L+InL~(!L@60^APi}a5`}=?X z@Bh!E*_m@@&Y3f3&YU?j^Xzg{p>J|xLV{*KiP}XPq4d+70wq5+t?V%YD%^N&u;$dh zqm9%C0F#VArzl}6b7s0IQ5KkKs;ZZSlyqxV`PxJ$Ai_>2;4L3BH6>(9y7=Q%S(&EW zBxt5ux`auW!mNU|bSELePLULPM539gSufUJnJm}JoHC=*j&mevrdB%YCjB;9o_?QG zWXyEU5Q$%tBU6)(>L8t6(b*N9nQm8#FjG^X)CvE#D1B~8bOIvmWTLsnXFO$HKE>|_ zE10jlS%65LB4ehnOSERDCf#MAqnuy&G1Wd@wb!3s4ygW_sRFehR97t+cm5BmE3&Jr zY8sbjFC9NFd))as4YfJvihd7=AhfBXsioSd)Be8Z%^%OMwV%20ge$LD`jZ7SXJ19R zDFgYj4jJsUBfLSj4W!IXJ=R^F$Qoq>+f$RBkDhN;Pi3I#d{Pl&O*AJd``>G%4 z2Y;X+d|f~CH1|{A*AG6@51#IzFFCXOY4>~m;GO;8-|vV2U;Dvd*$2Y+in__OYx}_`_QU7Ne(L|F zAN=k8;5pa&>hGF<@J0Q|bACVgi~8YnYCrhT`@xUy2XF5O@9qa*+K-$Q`l)|aKX@)9 zed%p*KlmGgAEsq!osT$?(=>A((covx=~l;S4YlQ02ZCBdu)e(RI;~;R;)Q?$ORIpY ztFNjFR%#9P{+bG{vbHWzqh0G~!J@_fpjKX6Qxhl;YE?CX;QX3ktzT=XT3F++CaW6q zs%s23fUN#%wAK&=aYLY*1P#H8su~T=)KyhzS65XFippTs;s8m5wO7leTB}5z1_ITB zI9SCx_1gUTf%^KI+WFPB<^Et*ZH=~|3i8zl{1s9be?>*Twm7huGE|mV*EWDJ7@?oF zb+V(7zCKXCq_VztG38iP+YnrEU5y_CkY}|JrJ|}*%2cV;Kw-c`RBH&-R0L}^e|dR8 zv0Pk7K_OTz1*CfCHw69l!TF2*=uW71y7mGr`Upz%^eiZw&0^L(*1%?s1#k5y?H2q=7XE83c*bDnv(ADaVIq-sSnwxX@SPU? zDHi(W5F91{3r|lfCYcL1%KFrKf{989&ieXHewe! z`H^bDpJ~CTTkzkt;4>`v?^*D63*KSDXIk)FlguaAf=|qI(9eE(b4bV({_dvIl_xr z7TFcWGy0!|>8c~!1-yfBBH>N}zeqTV@HzoMN0=@-(k|c)gz1VSs|EZ7VY=W*lYk!~ z%xM*=6Ywty)8$6W1pITtbhVLU0sn+BU2McD;9CjPwMKFUd^2IX)QDZc*Au2Ijid{> zo-kc#L=*5;gl&Wmdi=+$qBf@lf5lz7F6Q-++95~AU?6Yz6{>B1uI0^UHFt}C)yz)ujS%ZfA!_z}W%RgpRY|B^6WRHRJ6 zKPODr6e$+)PYBZ`MVtb@l`vgVBv-&U6Q&D_*adt&VY;43x`68m=MdHed==pz5I*ol zH0mnx>K~WtM`w7J@3X_oj5(;Z;a0y>^Xc#DA9_No9O;-0dde+#qi{d$s`+r#*0LQ2 z?+HC6$~HDV>(q>Yftgu*!y1#`c-Ew7wNhx0g5q&2#o8Fft%{=cS4o<-E#+FY%O}SB z(OAtgv*t`uGt|+e=K5I8ac0e-qUMu#$(kFY=vuf8lI2B>>9CHx9eIcJZF(8}z+HT|Q4yWGW)Hd!yKk_<_AEIWM`Hh^%M&>|hDSs1)2H0-j zh!#=hW6TK9wu~WdyB$^OQj9-R2STGGQD9sIMtaIBP_piwkgjcPA{4Ok_hnAa=(KSl z-n&zl?uOXmXVJxtXihVpMAL0!{{hksbQY3g8RoT~(xE8Uk>bxLMcz*1CeTD4M(xTR z+ZioL<)E%cx}F|Ef6b$R`o%%dqisX$z@sg{2A_X~R9fo`A=kzFi#G43O-Ihy^!{lH zuWULzp!w~KJ!`UF@#yb+{<_;U@Qy8H)Ed=~go-Y*dejKWL^tTQ^=+WPlL+}tB zY+L>_sBRoN!eM+XyvVF+skTg1Tf=I9MYXp4Vd!8OYSxT~&uPy$IFgN@ag3I4;q1uk zoHNfgcXN0(2VbatA~=L|zXLFhR3EUh=FS9Liyz}&X{$~7)74b!9gcL2cOE!CB|2uy zYKf)oBrHL5Vf&5X!==J_7oXBhgfMr-*k*xEbAIHfsMMIa_sdG#hn*&OlXqUU7xzP; z7xIQX(1dXdxWnRCqfKEfd51iqXT@AL=Ax#aau@hV-bBAU%BbYu!e-WU$=Q~Y`FpvK z!NfTDVC2WB(v!n!g2NVa@SwOYe=M?LC#dzqKl}7c{T0s|&tKp5v_2-x!`Au)O4{;= zcdHbpjmettd0L-RHU9+UA*nYgct0GKr)|Waegf{??u#x!JH~|1P{8@~5^Jzy#Fk$G zfi?isp|MN9V3*((U^nbY5US{)9}9=fzRH3uj*G7h<3f>)#h4b6Y#KzU+L4?0f-mHA zq;4odkuT(SqN zM9|y^8hvYP=d#(xc~Bz_pEbjsq!#w}66Ua=(LXfSWrFeHSkdDs0(Q`0__3(*Bv|D| z!?QWwccTQTcA&y}l9zKAoqAS9!dD@0-?R>zA#@vo+#d)3V z=~Q;oWq8OZ?(QalkI@3$*iK@fj$xk#Htx+TS2G^W z`@pNea-~P#?P-4JKyit8TW9WUbZpzE&RI;h<(`B%aKsa>n)b1%zd6oeb;sIAP$!?C z!IQ)S!;o^|Mk1oSDpzl=j8|qn85Z@I?-z-Fz_V%p#hy)vlRODso>#sM4vTR(L2>9w zPkEd2kKPVtHJ()J(cd+$hXHh@>;)!a-sWEIvHsp$<1%nP{{nty`M&KiSmTd}F!7sS zLKpND|KmUm`2;hz(hotO7vr(Vqi;glD0o}r04hUEZG$|`&n1VJN5A~?%THf9^ZC(D zc!Cks!(7@9s!fsf|7vPN{Oktml0=Wq{fbY2TkmpeUEy?06;HhBKuUVGn9xW&JsNIL23JXSR%Ul&%DmCy#hVpG%-%$D2UuVG2N~%b&cN_%yl*$ zZMU_&2m(3d^nZqDgC?&NbMFJrJ>yLXBncfL^fYg-gHXXAxouCEmqL<G-Hz&7D+y zz2j==niu&LwUvH4veBKc0-si?7Yywx7=`?3{AJ^BEdKK4uB5xYemq0}T$t=@(6ccJ zIyFu9x4#AA@{js7*{eb*%SYuRZX> zojQ41Y%(diB3Fs=_*VQ}zQXAxJ^C3r?c4L4<(fV8~zmU{7_aOe&|FL(+^z$Mv+fAv*^d9zj^gT z;NAuf^Jia1b2Ksd!{(^1(QABwf^arn9o>We9Q@h);3H!-;W2h1*udKT4zToB+fv@w zWdvqC4%!P-J_HyXh-sMt#|b_eU}hY`YTTCpEQ*ZJQL8Qg_skv;*_>P9J8hVy#%gvM zA?^_4X>dm)HzDbeR(h& zy%XLD{?Mau_O?xY3oE`$f8E%Mrb9Cl;PKydO?Y+L1aDjLEu7KZ;7Bzd*$-cwX41Q! zg&D%rZOL%!yQF(@UFn*SzO_JP%&9iSS6!O6_jODu=+`2jelR?(+=*GYZw-5QE_=r? zZ~>>HzO^v#9UnTIUZ}qd|A0+Ocqyv+^r(>v;Y3XvYWnme{n{)l_v=3NH@VpPvW|4Q zhubt`3wV0`jaNJ8yGWf~)Bwd+?A?|I|1gefNgk1ENji?TzUiKXlF0Y$N~< zetcmQYK$|6Y%XPQ0~QOGFZ9GNgs^C{ame0E zsUL6iR~3#qgv z<8qYk-EFSlrY)y7<^OIaTPyYIM?Lx{c{?G_-eGKj4K)d|G}v)Sz>e) zLeEgm2YV^XmeiQB!cd#Q6@$1XRkj}!OUzGKN!|{Gbw|bae+Eo8QB>ZSZY+RWT056s z$t@iQEZ3!Pv1KJYY^~Hu(~SuTMs7k5dxc~qn*L@7NjIe9!>#YB+|-p?sV6%s^`Ils zqrYdIB!peM5Q3yD=^%h+jD*B(==-DMnoN*Vz2N;5(Om4as-!!ChpYfy|$xQ1=!oL`MBcfj|Fru(M&{JReKudi!BNTwXdeJ{B z>D{C+mh^kWaeqL4u0gNRh2i4Bx99wUy@jFVtMg!Pn$Et)0S)egsr?KlmYvw+_Vk$a)Tq0eZO0(0zt5JyCMj0q4v;!L-rq4 z`szQ>s{e=q`=WnT(z{8&vUmSoC7#gT;xth|j3`|H9Q`YXovs&gB(0>gu2T2h+vWU? z*5&*?{{D!+t@!)1w$1q(MeK6Ej=y&S8WP-x>;Y!CIX`CN+2%Yf(h1Ks{#vXN8?{HB znvo8TU}2yyTEfYH9@@o8(FPu-Lq!a?jW70K_f_z2yNGM)7!cRq+f}fyeOm$67t+5U zE*ACo7@g=Uo$oV+t?vYfKpDm6#0zVc!ds`wNfpO$heogg5sRL204B8e`ECY)^=*$oFmp*u{K1Fd|30b zR>=OA$BqlBBP@_uk6?F+T#~fLM~=k`E8i6TvpyJlLsN(9+YkzEoDN-BS6!Fw>B*(u z&`cjY=W9zA2N(#cw!MdgZgf-h*VZ~5VF`~wo?@GqOr=EdIwa8BxQ^qGZ?8#LUu7;Fi{llp79RS0F9k4j_ zy#-L-p{D$^ZU(Wf<#K>cVJ?SWTkC}acpE^4tu;pgy8&PoI1_+pd6!&*_83<|23YIH z7iiM+0OWOUs6mr^M~HqkcNRBwkS7|bC1q$Gq4fjNq(}engAcoGcW-euy{;A7!tcOv z8~@B23?twe(!kC<-vf9t^r)v?)1+zH3CWt4AN?F$Z}|+I@;aOH%a$YK>bMPUH=Y{d z3v!%K*7j+4*7kikdxP0N*Yr=VWk=)REDhiJPPc};Acvmv1=c@n!<_xDXTg&@Eov46 zWu6~+n!AdnE}^ksV_3qo7jmj`kz0u{w+Dr`p$T0MujMr5LMVOOeDqfwbRp21(UVBp zLHJs97scoIELQ7cI3w2Vu-;YBGVTP=4l}9j$HM4u+%I=*)1&dOlWa@2|`=T zW*l6&gcVN-T|2Z8^CPY4S;q;9sAOxo3srcS{pNJG(IU{E4tsrIA>MbY=hY0Egx8|4 zLUV8-bpv=%^KbGVCL1Gz-++ND9AL|Oi{sZw^Ez41OP)%%{*>c)$QXMt`tpF0zR!3K zF|MntsI=Xyzn1rc^u%37bKAvXrT$^1OD`Jg5*HTYT+ukZn=^t}H7mD*p2wSYSXNS} z=tkJNNQoFf-)wQ<%t#YQoU0tSvB8D0_Bl(8*=T>BYaYByQK@_UuHg4gTDUKDVk7P4 z2cVO=Ml8@m?>sNEwM>Q@H*iHmH*hrK(q|1tZWO`M{K)3VSbpTwmN}H&!fe>d0bxhR zONbI9^>I6C`%$u6pNmbwlW)^AV@uX$%tjU_xk;#Dn{g^q<6{^^_z$oth6v|*%D3Y< zuWE;W;d`ZBxkv7prz?Z-0`KwLMgv0H0Y70&l3uN0pw(?Jk2X&l3jjXMxtZnG|Kf=KLp~NvA zmnETVq8P%m<}VYj9oT$0(RSO_G$xugOqn|#np2{&9BoT!(1m42JwR@J!cL0Q$&EZs zx^mNVskT4tFn)!Gr9J1pAPhxX2uw&AiTkBZ`&PctVc} z8;M&_sc8Z{7*|%4hZd#P3aj}pLfWeg!$3k0jVu6r!W9 zmGf~N_`0o?-&(+48B@>J>O~&A<78tZ$l0J1U2Xmhfx!_fKC{X?i#cmg zn8vY{vl*U);^UCl9t<=D?U~t}$(+A9K6UN1CWi9~M6<&0Mm7suXhD5YD8F$BO5t8g+anL5G`tjU5H4a_40}7V+fC<4KFL(u z&?(<=#;;!oUilB$YZD3w(0^qZ`6vMfx8&&8`uLJ4r?BgC z*AVMgZ)&N-H7M4#dF77~szqG9HQinfTNMlVDeOv$A6+?#`qDo<_@K1Z??+LfEc7D;-a_enSK=5o z{A`(1GnPStTzjxXt5b2Pu>l>#a^dmnogrs5KN>|RS8zaSIvhHvI9v?9slE<3cL6^J zGfPx)Guzu%pr__-+P+M97{XySXuJ^uh37Gric$r5k*79PiW zS`Rh84n+)WKAe2h3|E(X+bBlY341@ZO1h?xj;{e9OUHE))zYvADM=rS{PHLiE$mpV zttUf@wh^m>q9eG<;u33I1~wd^hp=JYR#X96jiZ=k%>E~D-uw-CpBh(*C*H~1v!X?| z7S7}5d@u0Hwibq>&G{1nq%=;Vvre$xJ_fCZ4e(w+3Z>8)%_!1klE;7?XR+gkid3(ugdAl<-b=VkkNxdH}go!Bt9o zT8y}i#Cu^AmMx+>zt)e6OKovX_6fK5&r=~-4j2>|pCSO2VLnF34|S9c@RYx1)cv>c z_)8#u+>^N-HK=f{hA2Y+0f=4e7yD)Kep!*6Bit#`cae2it5I@d?dBrR?=P4}ZW{(h zTm{YsWnL%Z^Hq*tpbqqMFOpbbZ~PGELL($+9ze`b)U=5>k+UJCw8P@o_e?nmjRD-= zl^|yZWd`20Q!q{BewpT!S*U628{u5Ssr621`VL`=LS#%jT6ZNZ?G{J}OVg3S(qM_k zc4#{CIA$=;6-2ejg8^rQz%<8DF7iMJX{TF_DI)(^OvzI?#evJ%X% z{Sor*w$=wQF0ivQs1mnUu*8G5+EtD+VB1<8>yQAx!%-(Q_c)ql=0V45WZ*E0QT&*r z9e{1v5QlA83C^U4&2`vq!zvuPwqex{r*Sc_q?)&sMHW&Pajw?fIR`dz%V>~!VP8XG zNmI%X8F&5-HQPq)hnKyiZOA8l8GxHC&Ihmle0V&p#+<^DlcjQ7s3^H@qVf8T%l=B= zgjc&@$%Y$%9BW@&{wV=O$HjA+um!n==QN_$vyL=mjge>>(ajmAG{zu_;Ay}qsDN!n zs~|ZNF0NHZ!`+wkC&m~|0gKU&LcAVs1eI_D9Q=_5&~ith+FnuBP*+=tE&oqZ%sm7L z9A4;lBn|iilr%0e@{#SIoBD!s!fQ>RmDg!12fBI=o`q4B@R$!lXp0zkVIr{cWs`(W z(a~YEP2-LExCRuNn-&+MsWNCa8kvQL<@u*NO*A{ob!I$FEwV=1qu}=NhKIqpgCCJA zu)M%dO^K{R8z(?IOSEa-6a!YHGv=CO%`rHvnHXGtmh}FFZ z!3RUS*7zkx+@gY?q7l5(iz5OKMY?g`E8>vgo*ndFDf2=!EVpA(TguO`#zJkJfGFeI zJiJeF_$DXpV|RFUU2L$8BCwVoCd8Pa`36TtqV4wgsMKb+qaq<3jM(;1=(r zbojwuynVnE?rn)V75-qQJ}KF_0t4rfw-#4$v1wwxNf3zf6Q&_|;Iuj#IUV8ekg8MC z*iOm_Z09Ur<^_$RQ^@8mi*S0%ms_P@;>#|@@XpFB8zpE}ftVN`a6{93rNIOzfjX6rx=lTPn>rB;`qFu?JeG_Tw43XT6Ut zp^SlmF&LVM?(CMSc^F28Wt#es%e3VML?zQxjsqZuSQ9B0k759ZGnY8=I{rdP^(MJ)mJ?1zASyw6d`65?B+dUmPYHAo#<85}eyQcmELy85$ z*T4_djW(`&NjNr33>=bf(>&;20YNmQKvdh$V?wSl#(99Tq*1LHi$+Wz)ib=2jMbU8 zM;*&|O_v~E<&OGg1avr|3XR!{BF&q%)w}6kgooKRmE7FS$LA1ROF|OY@XE|DaV&!WIU`2UZqZKPZyR>#H)Qr&=~H?Mq$M*5iD;U z1qW_iFX{&8qG&XVCdi`EESfKiTqw#$(dn`%n?-I}bQX%nq9{ogjb%}mEE8 zcn!6+{001)^KSu=W^1`s0M`Ss;axuj1|2*R2+xM?tapJk4l4N7f-d^634RecnIX_z`h#W>nVNjtv`ppEgjp3_%ZU5P+M)v z#gJ=56~f1GDh3p>Atk9ra0oGePccl_QmNnJc#^O=hm{(Y)W%)i8@Yvzq(Mq{eh?br z&^u^2#c=LmzELpm!HktZ7#|;#y$=xcC@_3Ev_r(Rkj<1K+z!K#4iGvd#}0PII>I-B zwi1QgP$)v8ItLnmfsMxoe&-9OeuO)J387rQxcCp++pn81|js6*KfvX zamwBa`CM(wJjRJ{;5uomH#FHt$C29lfvsf^ShbBB2u{tPV>_Lj49@UOdFpI8YSeVm zxh@f|_9CMUQ1j=*Ku0%#tI#62H{OO8p}^CY>}VRV*;<#t^?=!ucFm8pEFl zlkSUI0%j&HC~F)wHF@siGUCZa8zSQ2<%C^*0ju=`cPPM+N32JERU&OI-vJa0FxFu>(c7I{p+v?MbDcisAk!Y%GoWVD)4*><|}Zl1TRwHI0;@1(0CC6B&GX9WFDGjyqh7+e4A0WnU{f`I6LeA4OTfT zy3Ab%W{2fl9P6h+WPP)?xx}Mv>Ubnhd3n^18F#^aS&9 zuZS5{IMZ7I!mBmo1q_L$F~;+eOTk0#FQA!qk(Ai^iu4!8wWcfPVw4Tmcyq$-$V0P& z`-H;jGjqT_Uo)=m&V4Spw~bmc7d!f&s@3w;^Ked)@;mfw^OIQ|!$rt)NYhaOuu6f$ zBzTnqPn6)*03-XU4Y&~a4~EOaUK!|gK4=OP?{(VQcv_)6uq;95~*I-?OzG1x$_nB@dG!06?5}Y)iQU zdW7G=Mt1BhWW^{#V`n4J>c2yEfSCY|fBo6?5=(@Ad=$1{7n`o!BT#IHPwboVd&nA} zb;iSr_^HSQ5Kqx}`SgDyQVQ3_Sr|8WCuvY5Pe%rDaA3Xg?>_w>Fm++Tw`1;yw_E5Z zb*Dd1(RW0;U?*5jIT+DJ{o;Pav@rM`@;P4H0aJ6V7J5rkigIveKsomzM}`hu6t z<#)1ly0f{c%m7?)V-(H?r{{$%!A_0lJ?E$do7T$=(|qVcuGX< z;)oI)o;6P}MfClcsBewF#UcE#ioT=oAsjhVT5A* zL^QPw{30il)mjUyMX0n_7jEvOaJ%U`jLU$=ZJxO0ECeCHnm7eG%WaN$-&wrs%t$B| zvw^=uF-!SC4jtgPO*liA|HFi5OZXMQc#8vG^Ulr9oAEODhsL2lLd05F2!JlUy{{P+ zuo?POuF!|kJ+J<*SAPf9lpn+d#+(1%<}K$MUXvJ0TXu}B@eSM4$&QxJ;Ar7DL&Y1L zj+|<{TryiYfs>HXC(J=5_=MpKoGZZ*0F88plFPSH&E~nuYBZH(YrPFkZA88CyRXhQ0_M6s0peCT~@aJ(Iun1$nQ>aCLCi zuhdhPAP-?@Au;L^QHUklJZ}kKg8>x%MSz_gHp7%lP_Mg$JWtEp8A*Z=cwZOl!4*|w73Hs^VVV=MZnd9${t>#${|7*u(ahJ%XNAf5|%Y@E$ab~gKSS<^)Sja;Qs)1~AYO&vF zkcC57$YYB(6vD;#8~Kkn=u*obqY5maD*oCmVO6x5n}f7?|e6HrtAc zK(Ds}$2DZ_k1#r&GQ_;-S#uOy5H>_=kM>k$K4M*|N-ouXsq(xMt13gN#U8~}`4kW_ zRo(=NpvqaSK~>(Z3WX{c$ifR)n5_kukxHo1D+|tK!B{OAh^a7F7NoKuUkmy+@I?ja z77k~`N9azwSP11ICnG*PdT!dU8|s%jxD{bXq!CqF<-qkg70jR-WRUn8NcR4T8%wHG z@?QUM5V!@w`{6QFi0lEN_5u7pvulbW6@00|6&?N-J(Op{8;$Q{1x>ZwfLc5@+uID$n35-J z5LUF1$~qQX_lL>?P;TP$5&`$v|`e;+`LSvYBZ}}sCg@LviXkU zw5i@~ZAPGeNmWH{y**H4UtC)eFki+G+Q(*T#r|s=13|laOdAa39HajDEDh&j;Cq3P z2A#jq{C|+9PRrapeJj*PU!FaBarWqn3rBk{7(L~J(K9r=R#3ZmF@81KA8*ZX&m7&5 zrDd1n$B65f1nP6jD;H|njoN|*6&3R<0!#QNgO**PW#i|NWrgZmR0wJ_#1AwJ{rSs- zxGYf!Dnud*`K!b1viv<_JAbAa9YqCgdSTK0>4lexl)slDGOmJ4H3IXQVU4LVjL1o% zOGFVhJ6$WCdg;_@v!-e;pLb><7+#`sqWX-&sqXo1#G=}a!V;M&GBZSrW<*9*7df(U zduJ3(n>w|yprp{PO`TQ(zD3>{C56)g&T@H6NJpFmg!D1AfJDPWB%0KG#gC&iZTft& zR$10Fv(smq<;o4^k+DB6}ilau8h`i= z>uVbE>)PBv^H-@kUqzc2*r(Ro0}Yr)L3{0j`l@<+_1XUVrI-XTa2N@a>IN|(>Kp8G zmb>{D8DAG`5DSnj{5aTO%$1bOZ zK%n5}|FW0+>(F{&aiE3X5TP$q7Ce2)~Bl73%?Q`?>uvSv2NMT;0P-jbWR1s$m5}0;23st{;~OR6yl8h zQu<@r^VnYe7?=p#Gp)Fy78WhmXlc=uzK5Zp8=|TH=gl~@Gec+^OEO{yXu%&_`g@o_ zKg`j>*B?)5v1p>)zqk(e%U38sk6=`YF9%&!s;Gcdti?`6cA`f+YAawmk4nE>2d%D6 z$R&bt{BtCWrC;Hw3dp)65KOEQ24WrI^OU`I-!IX%n>!@95NnGJYOtu*2Nu-RcKe(} z=!Yd9fCH?zHP^K@!R|AIqrq{h;g}!9#&G0Zs>C{ zfyDks^If+XUH|@vvjZKC#d>0@$U(FEo(jv7NDl)`JDdMhOuav@8X;zH`>}Gjip-YH zU{f@2@3x!x3OgiqW=*Z~hgEgL8IBRU=2&sNxiC<(d2M}FIrm*T_F}blTv$_EkAS_m zoE(+7Unc*!Tehe|_VO#~DUYby|9t%+<}0ixK3P?KE|;?Y>Bd|ANo+d@M~8qsi10~< zD~RsDCcg<*ets*F&_H*8$9EpSqF;HrR)%t`(oHyQugVc7$P&?8(NI-I+^rtVKj$$( z=;`Pbx0*&;L=|*k>i;Y3h~w040`#^N+23!C)ssmWG8E1el9+xugY=m#* zUQuplK`ZUHvGLg8Wjs*iyoG=P}#OFnyGpEOV@1@aiGOqSa zv2`S6`lVsjvr9wute?jb1 zYZt(2(u0|iDwdDJ7~`n5q{qe3x?ic?x^Di5jXSx=A+=t zNCfd5&ppfi92*98(#9&zR(;2NL3B%48swlHOHM{8-*!TpdhBH<+-OvDcTBT@AhB~q zISFI)FSc0Odj_q2YQJ8bsa93U8EI~@v*PplEBILq?HK$mwUkA>5egt)gHy&yD|Jra z2@dKYAk#u&F<>ZmN-Yk2DXlaZlMnVr*g(`-PM_pd{kn|AeBl1#eyXFS!im%O$d#|>>6G%}KGV?cerziOHImlOt21or zxS8e3ZCOFNXIW4!k1HDjjWT+{I#4Zh7)oKN5S*v}4UK3XUV#VaaEuswT>J#;8~W%c z&v4PCGJtO4pr`UePB01JvY`&!l-PbxMzWX~{IQG0@@OJHFX(+Lt8gk;RZBaQ|I{Zp zQPMFZCaACC*}gb5s4a)aP%B6|W3~x3T&MQ%1>(4`694w6a0&~d4sP(p>EEPDZa0bJ zuDroApT3nGl0TVZ{K!AcK8KCtrE~cdis1-g--oVa|Hms)9^R^@O3-h9(!#)`Gfzyx z_dlf{t84}Sn({z3=G8Y7OU|RO8Asct)94*9W9K^t!zvDD)jcrv;m0vJ(a@x}8k&KlN+n*Zz)3g`~%)76WjfAoDnjjY?^Q^`q zqMwsRt_FH9t(=j6XdUU(+ZY!VFDs}cq51cN` z&9q&?W}2$to@t>|(uFUU>8&a)Rp}9xqG>!CPLXJ-&hBpuSmRT67bkY|99E5PMWE+; z9`~p8d2t^jHp_4^=6QSCSCYCa;M>MT__s0 zCumyd>S**16t~|UjUEPmJ5v74`RX-zU6tiOi$<3sb^an6eF|yrebMLvq`Qy~fk8Ii zj~^{UYJVUaU5j)bQUhu3FQd`(VF31DfgWkugVE^oNSzPiN6_%qy0VAygL_ErYtcT^ zx<{hXT}YizN29?M{5!{Cz({lPC4dZk|KR}MJbw&nI=-%z3wew2wO9jbC(>MgZ4}RN znP>^uPuCKbrYDRXazg5A$eIrPcktJKS2X$q)^VSZPFybjo&^rgh{u6XH~ved}2^q`lPhf z$%7MT$Xvl-{JXEHau4f6r%P1*P@+36V^xwX&AuYpm6q9@;!ev=%1juPmU(HK-IbOB zmf+(XOxoA**Mf2Q5PFqufwnp6(zF9fi8}_RWw=D$O9m%B2zmv1(QXE+4@Z0B?}X&JXAO-i$ek|(8Qu1ayG<*pduN*mvN zf;+7^v3gM2ct{CpQ3Exlh-k{}0gCr**nF?D+e zyVEj@((F*L>>S1n^tA7f!E3+bwJNb7En`KJH_hIhd}&&4;@m-kL=J;{@HJM@1A(ZY zd%&X|b0tsdCzMzelgG>PzZ4q&X%BfOlNb9JlW;QocRv31f#2%(X!O;XOde?yLYxe@ zFbOZ|V|mdR2kd%0=IDt^j#Y`5vM;d1=H#NZy2KZ(!n+0+cL!x(_%F&1$NYXGHrD7% zFT3&3Zi>=66OtD8J=R6$SapD33;cu+ed1WJO1vy>bz;&LAWJXgWLhXQ?!hoYVu}WH zb|K>#JX2<1(a;C}lHo&E!pCeS0=#ZdEbK$J0?IZG^C#)_gtWs+SEe;3&qq3mGpYuL z3FGQv=7ocku4mPms9J;6MdCA(kedrk;$oBf@5p$8saA+Z5MvEw+OjSheSvOR$P}Mv zm&E3oTk5MRG0B#YwlZ-xRNzPIN&_Z|8tg69KQO9Ab(D6Ks?@rksx$#c@yC4194 z@Yjiadoo5K6Xp{$(Mty>`g))y53cQjDHuE#tQLWl53DW$tINSEsU;z;Jtgs1$TmTy z?T~3AzO;7IKmhTvyoCO#kb3jP{8JG}?p^479&|rBZDq1MZFTZgj?t37Rp%L;v?3Ap zIrJr{e+lYe&ia2(NIQ_6*p94LhGt8!=DddQ!%yHM0U4}%fwQ1q)+GxI@1}%;!E<`_ zxM*YR4I8n8)(z8@LPNkDo zI#Z>UDqW(|6)L?;r4Ot0X_a=V^i`F3>ST<9ww4|G%n-OO(A_rqX#Ty-KA)mENdQVT_iKN`I|V{zS&Hp2vF7Ki&_0Q9;24_RONGrCIg~Ip^l&+0V_*n~*#H z+#lLArw1zR9$XR$e0E-z#yvqg8%@x(B9|lKyhY=GI38f~X-;BesTtd=dMOLb%X=`_ z1TR4(c%4%;ZI*UUArR(1MADukwh=Z_5g(%N_i=|*e)atFYJbBbO*^Su**WEv^Ks`G z#7}$Sc3ZV+^b$c@kg(E{rLA@_4=7V3{<8p-;Kj>8VgniX1R(5gd7<0UHmXljeZR|1lm}O?#S6gP8nf6u3?9a$!^vmo| zp^`_-X;_4}G4T$+mLvAlby`jhHu^aWYZ`MFG*(qtWLH%vlxvbVJLq4iiLymJCdjF{ zuBPF-#WD@n%M$#mPyM_E1I|0aRT)l~=CBz`9-Cm2|YPrj6ovRd&K`kcTb zwa;Hv0a_E16!ZP{_5SN5g_#Fq|Kh50v|0;Z_{b3rNM;Kf8nhg|@hrZW7w=k*KNzg9 z!Vg*m8pI&|2R?Y83v<@Q0SnT#iB5bn6^VGKQs(3*>slY4yYSA|q~DV01cY~?6v82( z_=ma%jv>xM&Ps12Iz<`ZFXdwwpYe~L^n6e55bk)*_RV|kR36aaG21uKYG{Yn=OO^q zfk|)Pd*>>8zOTxM=RfSbNuNO^p2_%QRg>PlM^9H3&3kj!<zBQfN}jRI!aAZ|y;E`r+}jWfgPHFbR6fzgp3o`q#>wvTB)3 z>b@&e^Rs9BYf!-coAh-zI|1Rn+M7k9y)Kj3XV3N@Mv0ZaxY;S{7B@?hMdk|`5{!+X z0=0F>q~Xt0v-w_1`faj?Io@V{6E@RlQNVLuliqx9CF5(-KMz{kj!AF6Z(&#T+u1oh zrhS?1ntFT%WvpV-AGqHM2=AibE|Qp?NGNWaf+g~KNpE+oGDZD({5%|`aV*&pW6d( z(vRtZXI(yKdJuW5iLBk{WU=-))&32pq6Jp^8kH3Z`Ixd>@x_lyXrS4UD(nGj{|9lZ B!Ak%D literal 0 HcmV?d00001 diff --git a/clab/client-server-system/test/server.cfg b/clab/client-server-system/test/server.cfg new file mode 100755 index 0000000..9ff979b --- /dev/null +++ b/clab/client-server-system/test/server.cfg @@ -0,0 +1,5 @@ +Id = SRV001GPRX20 +UDP-port = 2028 +TCP-port = 7461 + + diff --git a/clab/prime-calculator/LICENSE b/clab/prime-calculator/LICENSE new file mode 100755 index 0000000..f288702 --- /dev/null +++ b/clab/prime-calculator/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/clab/prime-calculator/README.md b/clab/prime-calculator/README.md new file mode 100755 index 0000000..678f918 --- /dev/null +++ b/clab/prime-calculator/README.md @@ -0,0 +1,2 @@ +# PrimeNumbersCalculation +A C program that check whether a serie of numbers from 2 to N are prime numbers by multiprocessing diff --git a/clab/prime-calculator/_gitignore b/clab/prime-calculator/_gitignore new file mode 100755 index 0000000..c6127b3 --- /dev/null +++ b/clab/prime-calculator/_gitignore @@ -0,0 +1,52 @@ +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf diff --git a/clab/prime-calculator/calculador.c b/clab/prime-calculator/calculador.c new file mode 100755 index 0000000..ac4cf62 --- /dev/null +++ b/clab/prime-calculator/calculador.c @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------- +PRA1: Pralab2 +Codi font: calculador.c + +Víctor Martínez Montané +--------------------------------------------------------------------------*/ + +#include "common.h" + +int isprime(long); +void sighandler(int); +int numprimes = 0; + +/*Reads numbers from the numbers pipe, + calculates if those numbers are primes + and send the result to the response pipe*/ +int main(int argc, char *argv[]) +{ + if(signal(SIGTERM, sighandler) == SIG_ERR) + { + perror("Signal: "); + exit(EXIT_FAILURE); + } + + int number; + t_infoNumber results; + results.pid = getpid(); + /*Reads every number, calculates and write the results*/ + while(read(PIPE_NUMBERS_READ, &number, sizeof(int)) > 0) + { + results.number = number; + if(isprime(number)) + { + ++numprimes; + results.prime = 'Y'; + } + else results.prime = 'N'; + + if(write(PIPE_RESPONSES_WRITE, &results, sizeof(t_infoNumber)) == -1) + { + perror("Error writing into the pipe: "); + exit(EXIT_FAILURE); + } + } + /*Close the pipes and wait for SIGTERM signal*/ + close(PIPE_RESPONSES_WRITE); + close(PIPE_NUMBERS_READ); + pause(); +} + +/*Handles the signal*/ +void sighandler(int signum) +{ + exit(numprimes); +} + +/*Calculates if n is prime*/ +int isprime(long n) +{ + for(int i = 2; i < n; ++i) + { + if(n%i == 0) + return false; + } + return true; +} diff --git a/clab/prime-calculator/common.h b/clab/prime-calculator/common.h new file mode 100755 index 0000000..51099a7 --- /dev/null +++ b/clab/prime-calculator/common.h @@ -0,0 +1,21 @@ +#include +#include +#include +#include +#include +#include + +#define PIPE_NUMBERS_READ 10 +#define PIPE_NUMBERS_WRITE 11 +#define PIPE_RESPONSES_READ 20 +#define PIPE_RESPONSES_WRITE 21 + +#define MAXNUMSIZE 10 + +enum boolean {false, true}; + +typedef struct{ + int pid; + int number; + char prime; +} t_infoNumber; \ No newline at end of file diff --git a/clab/prime-calculator/controlador.c b/clab/prime-calculator/controlador.c new file mode 100755 index 0000000..3e58030 --- /dev/null +++ b/clab/prime-calculator/controlador.c @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------- +PRA1: Pralab2 +Codi font: controlador.c + +Víctor Martínez Montané +--------------------------------------------------------------------------*/ + +#include "common.h" + +/*Creates one generator process and multiple calculator process. + Reads the reponses pipe and print the results*/ +int main(int argc, char *argv[]) +{ + int cp[2], gp[2]; //cp: Responses pipe, gp: Numbers pipe + int num_calculators = atoi(argv[1]); //Num of calculators to create + int prime_numbers_exit = 0, prime_numbers_pipe = 0; + char number[MAXNUMSIZE + 1]; + pid_t genpid, contpids[num_calculators]; + + /* Writing to prompt*/ + if (write(1, "Calculate prime numbers from 2 to: ", 36) == -1) + { + perror("Error writing standard out: "); + exit(EXIT_FAILURE); + } + + /*Reading the number*/ + if (read(0, number, MAXNUMSIZE) == -1) + { + perror("Error reading standard int: "); + exit(EXIT_FAILURE); + } + + /*Print error if the given number is < 2*/ + if (atoi(number) < 2) + { + if (write(1, "Error number < 2\n", 16) == -1) + perror("Error writing standard out: "); + exit(EXIT_FAILURE); + } + + /*Creates the pipes*/ + if (pipe(gp) == -1) + { + perror("Error creating generator pipe:"); + exit(EXIT_FAILURE); + } + + /*Creates the generator*/ + if((genpid = fork()) == 0) + { + dup2(gp[1], PIPE_NUMBERS_WRITE); + close(gp[0]); + close(gp[1]); + execlp("./generador", "generador", number, NULL); + perror("Error running the generator."); + exit(EXIT_FAILURE); + } + else if(genpid == -1) + { + perror("Fork error on generator."); + exit(EXIT_FAILURE); + } + + /*Creates the responses pipe*/ + if (pipe(cp) == -1) + { + perror("Creating numbers pipe:"); + exit(EXIT_FAILURE); + } + + /*Creates the calculators*/ + for (int i = 0; i < num_calculators; ++i) + { + if((contpids[i] = fork()) == 0) + { + dup2(gp[0], PIPE_NUMBERS_READ); + dup2(cp[1], PIPE_RESPONSES_WRITE); + close(gp[1]); + close(gp[0]); + close(cp[1]); + close(cp[0]); + execlp("./calculador", "calculador", NULL); + perror("Error running the calculator"); + exit(EXIT_FAILURE); + } + else if(contpids[i] == -1) + { + perror("Fork error on calculator."); + exit(EXIT_FAILURE); + } + } + + /*Duplicates the numbers pipe entry and closes the remaining descriptors*/ + dup2(cp[0], PIPE_RESPONSES_READ); + close(gp[0]); + close(gp[1]); + close(cp[0]); + close(cp[1]); + + /*Treat the response and print the result*/ + t_infoNumber infon; + char buffer[100]; + while(read(PIPE_RESPONSES_READ, &infon, sizeof(t_infoNumber)) > 0) + { + sprintf(buffer, "Calculator PID: %5d, \t Number: %4d, Is prime? %2c\n", infon.pid, infon.number, infon.prime); + if(write(1, buffer, strlen(buffer)) == -1) + { + perror("Error writing standart out: "); + exit(EXIT_FAILURE); + } + if(infon.prime == 'Y') ++prime_numbers_pipe; + } + + int status = 0; + /*Sends SIGTERM to generator*/ + if(kill(genpid, SIGTERM) == -1) + { + perror("Error closing generator: "); + exit(EXIT_FAILURE); + } + wait(NULL); + + for(int i = 0; i < num_calculators; ++i) + { + /*Sends SIGTERM to calculator*/ + if (kill(contpids[i], SIGTERM) == -1) + { + perror("Error closing calculator: "); + exit(EXIT_FAILURE); + } + wait(&status); + + /*Checks if the child exited normally*/ + if(WIFEXITED(status)) + { + prime_numbers_exit += WEXITSTATUS(status); + } + else + { + perror("Error on calculador exit: "); + exit(EXIT_FAILURE); + } + } + + /*Show the number of primes detected*/ + sprintf(buffer, "\nPrime numbers pipe: %d, \t Prime numbers exit: %d\n", prime_numbers_pipe, prime_numbers_exit); + if(write(1, buffer, strlen(buffer)) == -1) + { + perror("Error writing standart out: "); + exit(EXIT_FAILURE); + } + + exit(EXIT_SUCCESS); +} diff --git a/clab/prime-calculator/generador.c b/clab/prime-calculator/generador.c new file mode 100755 index 0000000..e4c018f --- /dev/null +++ b/clab/prime-calculator/generador.c @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------- +PRA1: Pralab2 +Codi font: generador.c + +Víctor Martínez Montané +--------------------------------------------------------------------------*/ + +#include "common.h" + +/*Writes numbers from 2 to n into the numbers pipe*/ +int main(int argc, char *argv[]) +{ + /*Wait for SIGTERM signal and exit*/ + if(signal(SIGTERM, SIG_DFL) == SIG_ERR) + { + perror("Signal: "); + exit(EXIT_FAILURE); + } + + int number = atoi(argv[1]); + /*Generate and write the numbers*/ + for (int i = 2; i <= number; ++i) + { + if(write(PIPE_NUMBERS_WRITE, &i, sizeof(int)) == -1) + { + perror("Error writing the generator numbers."); + exit(EXIT_FAILURE); + } + } + close(PIPE_NUMBERS_WRITE); + pause(); +} + diff --git a/clab/prime-calculator/makefile b/clab/prime-calculator/makefile new file mode 100755 index 0000000..66cb367 --- /dev/null +++ b/clab/prime-calculator/makefile @@ -0,0 +1,19 @@ +FLAGS = -Wall + +all: controlador.c generador.c calculador.c + gcc controlador.c -o controlador $(FLAGS) + gcc generador.c -o generador $(FLAGS) + gcc calculador.c -o calculador $(FLAGS) + +controlador: controlador.c common.h + gcc -I controlador.c -o controlador -I . $(FLAGS) + +generador: generador.c common.h + gcc generador.c -o generador $(FLAGS) + +calculador: calculador.c common.h + gcc -I calculador.c -o calculador -I . $(FLAGS) + +clean: + rm -f calculador controlador generador + ls diff --git a/java-lab/ArraySorter/.gitignore b/java-lab/ArraySorter/.gitignore new file mode 100644 index 0000000..62c8935 --- /dev/null +++ b/java-lab/ArraySorter/.gitignore @@ -0,0 +1 @@ +.idea/ \ No newline at end of file diff --git a/java-lab/ArraySorter/AlgorithmAnalysis/IntArraySorterCharts.java b/java-lab/ArraySorter/AlgorithmAnalysis/IntArraySorterCharts.java new file mode 100644 index 0000000..fa5b4e9 --- /dev/null +++ b/java-lab/ArraySorter/AlgorithmAnalysis/IntArraySorterCharts.java @@ -0,0 +1,120 @@ +/** + *This class runs the sort algorithms in some ways to check the efficiency and plot the results in charts. + */ +public class IntArraySorterCharts { + private final int xAxisMaxValues = 200; + private int xAxisValue; + private int shuffleGrade; + private int[] array; + private IntArraySorter sorter; + + private double[][] bubbleSortSwaps = new double[2][xAxisMaxValues]; + private double[][] insertionSortSwaps = new double[2][xAxisMaxValues]; + private double[][] selectionSortSwaps = new double[2][xAxisMaxValues]; + private double[][] quickSortSwaps = new double[2][xAxisMaxValues]; + private double[][] radixSortSwaps = new double[2][xAxisMaxValues]; + + private double[][] bubbleSortComps = new double[2][xAxisMaxValues]; + private double[][] insertionSortComps = new double[2][xAxisMaxValues]; + private double[][] selectionSortComps = new double[2][xAxisMaxValues]; + private double[][] quickSortComps = new double[2][xAxisMaxValues]; + private double[][] radixSortComps = new double[2][xAxisMaxValues]; + + /** + * Runs the sort algorithms increasing the array shuffle grade from 0 to array.length (XAxisMaxValues). + * Set the array length constant. + * Creates the charts from the results. + */ + private void shuffleGradeChart() { + array = ArrayBuilder.buildArray(xAxisMaxValues); + for (shuffleGrade = 0; shuffleGrade < xAxisMaxValues; ++shuffleGrade) { + xAxisValue = shuffleGrade; + testBubbleSortAndStoreResults(shuffleGrade, array.length, xAxisValue); + testInsertionSortAndStoreResults(shuffleGrade, array.length, xAxisValue); + testSelectionSortAndStoreResults(shuffleGrade, array.length, xAxisValue); + testQuickSortAndStoreResults(shuffleGrade, array.length, xAxisValue); + testRadixSortAndStoreResults(shuffleGrade, array.length, xAxisValue); + } + buildLinealCharts("Shuffle Grade"); + } + + /** + * Runs the sort algorithms increasing the array length from 0 to XAxisMaxValues . + * Set the shuffle grade constant. + * Creates the charts from the results. + */ + private void lengthGradeChart(){ + for (int arrayLength = 0; arrayLength < xAxisMaxValues; ++arrayLength) { + xAxisValue = arrayLength; + shuffleGrade = arrayLength; + testBubbleSortAndStoreResults(shuffleGrade, arrayLength, xAxisValue); + testInsertionSortAndStoreResults(shuffleGrade, arrayLength, xAxisValue); + testSelectionSortAndStoreResults(shuffleGrade, arrayLength, xAxisValue); + testQuickSortAndStoreResults(shuffleGrade, arrayLength, xAxisValue); + testRadixSortAndStoreResults(shuffleGrade, arrayLength, xAxisValue); + } + buildLinealCharts("Array length"); + } + + private void testBubbleSortAndStoreResults(int shuffleGrade, int arrayLength, int XAxisData){ + buildSorterAndShuffle(shuffleGrade, arrayLength); + sorter.bubbleSort(); + addValues(bubbleSortSwaps, XAxisData, sorter.getNumSwaps()); + addValues(bubbleSortComps, XAxisData, sorter.getNumComparisons()); + } + + private void testInsertionSortAndStoreResults(int shuffleGrade, int arrayLength, int XAxisData){ + buildSorterAndShuffle(shuffleGrade, arrayLength); + sorter.insertionSort(); + addValues(insertionSortSwaps, XAxisData, sorter.getNumSwaps()); + addValues(insertionSortComps, XAxisData, sorter.getNumComparisons()); + } + private void testSelectionSortAndStoreResults(int shuffleGrade, int arrayLength, int XAxisData){ + buildSorterAndShuffle(shuffleGrade, arrayLength); + sorter.selectionSort(); + addValues(selectionSortSwaps, XAxisData, sorter.getNumSwaps()); + addValues(selectionSortComps, XAxisData, sorter.getNumComparisons()); + } + + private void testQuickSortAndStoreResults(int shuffleGrade, int arrayLength, int XAxisData) { + buildSorterAndShuffle(shuffleGrade, arrayLength); + sorter.quickSort(); + addValues(quickSortSwaps, XAxisData, sorter.getNumSwaps()); + addValues(quickSortComps, XAxisData, sorter.getNumComparisons()); + } + + private void testRadixSortAndStoreResults(int shuffleGrade, int arrayLength, int XAxisData) { + buildSorterAndShuffle(shuffleGrade, arrayLength); + sorter.radixSort(); + addValues(radixSortSwaps, XAxisData, sorter.getNumSwaps()); + addValues(radixSortComps, XAxisData, sorter.getNumComparisons()); + } + + private void buildLinealCharts(String xAxisName){ + LinearChartBuilder chart = new LinearChartBuilder("Num Swaps by " + xAxisName, "Swaps", xAxisName); + chart.buildLinearChart(bubbleSortSwaps, insertionSortSwaps, selectionSortSwaps, quickSortSwaps, radixSortSwaps); + chart = new LinearChartBuilder("Num Comparisons by " + xAxisName, "Comparisons", xAxisName); + chart.buildLinearChart(bubbleSortComps, insertionSortComps, selectionSortComps, quickSortComps, radixSortComps); + } + + private void addValues(double[][] array, int x, int y) { + array[0][x] = x; + array[1][x] = y; + } + + private void buildSorterAndShuffle(int shuffleLevel, int arrayLength) { + array = ArrayBuilder.buildArray(arrayLength); + sorter = new IntArraySorter(array); + sorter.fisherYatesShuffle(shuffleLevel); + } + + public static void main(String[] args) { + IntArraySorterCharts test = new IntArraySorterCharts(); + test.run(); + } + + public void run() { + shuffleGradeChart(); + lengthGradeChart(); + } +} \ No newline at end of file diff --git a/java-lab/ArraySorter/AlgorithmAnalysis/LinearChartBuilder.java b/java-lab/ArraySorter/AlgorithmAnalysis/LinearChartBuilder.java new file mode 100644 index 0000000..b73842a --- /dev/null +++ b/java-lab/ArraySorter/AlgorithmAnalysis/LinearChartBuilder.java @@ -0,0 +1,86 @@ +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; +import org.jfree.data.xy.DefaultXYDataset; +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +/** This class allows us to build linear charts from a set of 2D double arrays. */ +public class LinearChartBuilder { + private String chartTitle; + private String YAxis; + private String XAxis; + + /** + * Creates a LinearChartBuilder with the specified title, YAxis and XAxis name. + * @param chartTitle The chart title. + * @param YAxis The YAxis name. + * @param XAxis The XAxis name. + */ + public LinearChartBuilder(String chartTitle, String YAxis, String XAxis){ + this.chartTitle = chartTitle; + this.YAxis = YAxis; + this.XAxis = XAxis; + } + + /** + * Creates the linear chart and creates a .png image that contains it. + * @param bubbleSortData Contains the data to plot the bubble sort results. + * @param insertionSortData Contains the data to plot the insertion sort results. + * @param selectionSortData Contains the data to plot the selection sort results. + * @param qsData Contains the data to plot the quick sort results. + */ + public void buildLinearChart(double[][] bubbleSortData, + double[][] insertionSortData, + double[][] selectionSortData, + double[][] qsData, + double[][] rsData) { + + DefaultXYDataset dataset = new DefaultXYDataset(); + dataset.addSeries("Bubble sort", bubbleSortData); + dataset.addSeries("Insertion sort", insertionSortData); + dataset.addSeries("Selection sort", selectionSortData); + dataset.addSeries("Quick sort", qsData); + dataset.addSeries("Radix sort", rsData); + + XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, false); + setRenderSettings(renderer); + JFreeChart chart = ChartFactory.createXYLineChart(chartTitle, XAxis, YAxis, dataset); + chart.getXYPlot().setRenderer(renderer); + + BufferedImage image = chart.createBufferedImage(1200, 700); + buildImage(image, chartTitle); + } + + private void buildImage(BufferedImage image, String chartTitle){ + try { + ImageIO.write(image, "png", new File(chartTitle +".png")); + } catch (IOException exc) { + System.out.println("Error creating image."); + } + } + + private void setRenderSettings(XYLineAndShapeRenderer renderer){ + setSeriesPaint(renderer); + setSeriesStroke(renderer); + } + + private void setSeriesPaint(XYLineAndShapeRenderer renderer){ + renderer.setSeriesPaint(0, Color.ORANGE); + renderer.setSeriesPaint(1, Color.BLUE); + renderer.setSeriesPaint(2, Color.GREEN); + renderer.setSeriesPaint(3, Color.RED); + renderer.setSeriesPaint(4, Color.CYAN); + } + + private void setSeriesStroke(XYLineAndShapeRenderer renderer){ + renderer.setSeriesStroke(0, new BasicStroke(2)); + renderer.setSeriesStroke(1, new BasicStroke(2)); + renderer.setSeriesStroke(2, new BasicStroke(2)); + renderer.setSeriesStroke(3, new BasicStroke(2)); + renderer.setSeriesStroke(4, new BasicStroke(2)); + } +} diff --git a/java-lab/ArraySorter/Chart_Images/Num Comparisons by Array length. REVERSED ARRAY.png b/java-lab/ArraySorter/Chart_Images/Num Comparisons by Array length. REVERSED ARRAY.png new file mode 100644 index 0000000000000000000000000000000000000000..bf845bcc8e1daec09b0da691de9370ea9a1f04cb GIT binary patch literal 91592 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

AI9+Tux;`6X%ob3&YCVt4%w`V4SXC~Rku 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⪋3W*LKm(zf)moLF&tnso@$$884VL#zelTkEVS8 zVma3x$>ljtd*w7Q@TuYrg5pH_`F!2S`k=s(gJ(Jx7e9)*tY>+ye22;3I&VTm&VI~# z?aaI=KHvY0M)y)_Fk8ByW1(rnY*F~F?-HDk=beyG7Va$xsjz}e6lo@yML%a}d0BOR zf}zm+hEI*p8nLGro{p)WT$9ZgfOW1h1_U`K@17lg}kbZoN

The value priority whose type has to be comparable + */ +public class HeapQueue> implements PriorityQueue { + + private final ArrayList> pairs = new ArrayList<>(); + private long nextTimeStamp = 0L; + + /** + * Adds a value with his priority into the queue. + * @param value The value that TSPair will store + * @param priority The value priority + */ + @Override + public void add(V value, P priority) { + TSPair pair = new TSPair<>(value, priority, nextTimeStamp); + pairs.add(pair); + toMaxHeapFromBottom(); + nextTimeStamp += 1; + } + + /** + * Removes the value with the highest priority + * @return the value removed. + */ + @Override + public V remove() { + V value = element(); + Collections.swap(pairs, 0, size() - 1); + pairs.remove(size() - 1); + toMaxHeapFromTop(); + return value; + } + + /** + * Returns the value with the highest priority + * @return the value with the highest priority + */ + @Override + public V element() { + if (size() == 0) + throw new NoSuchElementException("Empty queue!"); + return pairs.get(0).value; + } + + /** + * Returns the heapQueue size. + * @return the heapQueue size + */ + @Override + public int size() { + return pairs.size(); + } + + + /** ------------ AUXILIARY METHODS ------------- */ + + private void toMaxHeapFromBottom() { + int lastPairIndex = size() - 1; + toMaxHeapFromBottom(lastPairIndex); + } + + private void toMaxHeapFromBottom(int index) { + if (hasParent(index)) { + TSPair parent = pairs.get(parent(index)); + TSPair child = pairs.get(index); + if (child.compareTo(parent) > 0) { + Collections.swap(pairs, index, parent(index)); + toMaxHeapFromBottom(parent(index)); + } + } + } + + private void toMaxHeapFromTop() { + int parentIndex = 0; + toMaxHeapFromTop(parentIndex); + } + + private void toMaxHeapFromTop(int index) { + int left = left(index); + int right = right(index); + if (hasLeft(index) && hasRight(index)) { + int maxPairIndex = (pairs.get(left).compareTo(pairs.get(right)) > 0) ? left : right; + checkMaxPair(maxPairIndex, index); + } else if (hasLeft(index)) { + checkMaxPair(left, index); + } + } + + private void checkMaxPair(int child, int parent) { + if (pairs.get(child).compareTo(pairs.get(parent)) > 0) { + Collections.swap(pairs, child, parent); + toMaxHeapFromTop(child); + } + } + + boolean hasParent(int index) { + return index > 0; + } + + boolean hasLeft(int index) { + return isValid(left(index)); + } + + boolean hasRight(int index) { + return isValid(right(index)); + } + + private static int parent(int index) { + if (index % 2 != 0) + return (index + 1) / 2 - 1; + else + return index / 2 - 1; + } + + private static int left(int index) { + return 2 * (index + 1) - 1; + } + + private static int right(int index) { + return 2 * (index + 1); + } + + private boolean isValid(int index) { + return 0 <= index && index < size(); + } + + private static class TSPair> implements Comparable> { + private final V value; + private final P priority; + private final long timeStamp; + + TSPair(V value, P priority, long timeStamp) { + this.value = value; + this.priority = priority; + this.timeStamp = timeStamp; + } + + @Override + public int compareTo(TSPair tsPair) { + if (tsPair.priority == null && this.priority == null) + return 0; + else if (tsPair.priority == null) + return 1; + else if (this.priority == null) + return -1; + else + return priority.compareTo(tsPair.priority) > 0 ? 1 + : priority.compareTo((tsPair.priority)) < 0 ? -1 + : Long.compare(tsPair.timeStamp, timeStamp); + } + } +} diff --git a/java-lab/HeapQueue/src/PriorityQueue.java b/java-lab/HeapQueue/src/PriorityQueue.java new file mode 100644 index 0000000..9229af8 --- /dev/null +++ b/java-lab/HeapQueue/src/PriorityQueue.java @@ -0,0 +1,6 @@ +public interface PriorityQueue> { + void add(V value, P priority); + V remove(); + V element(); + int size(); +} diff --git a/java-lab/SENKU-GAME/.gitignore b/java-lab/SENKU-GAME/.gitignore new file mode 100644 index 0000000..a1c2a23 --- /dev/null +++ b/java-lab/SENKU-GAME/.gitignore @@ -0,0 +1,23 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* diff --git a/java-lab/SENKU-GAME/SENKU-GAME.iml b/java-lab/SENKU-GAME/SENKU-GAME.iml new file mode 100644 index 0000000..457063d --- /dev/null +++ b/java-lab/SENKU-GAME/SENKU-GAME.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/java-lab/SENKU-GAME/src/Board.java b/java-lab/SENKU-GAME/src/Board.java new file mode 100644 index 0000000..8c2c895 --- /dev/null +++ b/java-lab/SENKU-GAME/src/Board.java @@ -0,0 +1,85 @@ +import java.util.StringTokenizer; + +// Only a rectangle of cells. Do not know game rules. + +public class Board { + + private final int width; + private final int height; + private final Cell[][] cells; + + public Board(int width, int height, String board) { + this.width = width; + this.height = height; + cells = new Cell[height][width]; + initializeCells(board); + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public boolean isForbidden(Position pos) { + return outOfBounds(pos) || + cells[pos.getY()][pos.getX()].isForbidden(); + } + + public boolean isFilled(Position pos) { + return !outOfBounds(pos) && + cells[pos.getY()][pos.getX()].isFilled(); + } + + public boolean isEmpty(Position pos) { + return !outOfBounds(pos) && + cells[pos.getY()][pos.getX()].isEmpty(); + } + + public void fillPosition(Position pos) { + if (!isFilled(pos)) { + cells[pos.getY()][pos.getX()] = Cell.FILLED; + } + } + + public void emptyPosition(Position pos) { + if (!isEmpty(pos)) { + cells[pos.getY()][pos.getX()] = Cell.EMPTY; + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + for (int y = 0; y < height; ++y) { + for (int x = 0; x < width; ++x) { + sb.append(cells[y][x].toString()); + } + if (y != height - 1) { + sb.append("\n"); + } + } + return sb.toString(); + } + + private void initializeCells(String board) { + StringTokenizer boardLine = new StringTokenizer(board, "\n"); + for (int row = 0; boardLine.hasMoreTokens() && row < cells.length; ++row) { + addCells(boardLine.nextToken(), row); + } + } + + private void addCells(String token, int row) { + for (int col = 0; col < token.length() && col < cells[row].length; ++col) { + char cellType = token.charAt(col); + cells[row][col] = Cell.fromChar(cellType); + } + } + + private boolean outOfBounds(Position pos) { + return pos.getX() < 0 || pos.getX() >= width || + pos.getY() < 0 || pos.getY() >= height; + } +} diff --git a/java-lab/SENKU-GAME/src/Cell.java b/java-lab/SENKU-GAME/src/Cell.java new file mode 100644 index 0000000..ed4866c --- /dev/null +++ b/java-lab/SENKU-GAME/src/Cell.java @@ -0,0 +1,40 @@ +public class Cell { + + private static final char C_FORBIDDEN = '#'; + private static final char C_FILLED = 'o'; + private static final char C_EMPTY = '·'; + + public static final Cell FORBIDDEN = new Cell(C_FORBIDDEN); + public static final Cell FILLED = new Cell(C_FILLED); + public static final Cell EMPTY = new Cell(C_EMPTY); + + private final char status; + + private Cell(char status) { + this.status = status; + } + + public static Cell fromChar(char status) { + if(status == C_EMPTY || status == C_FILLED || status == C_FORBIDDEN){ + return new Cell(status); + } + return null; + } + + public boolean isForbidden(){ + return status == C_FORBIDDEN; + } + + public boolean isFilled() { + return status == C_FILLED; + } + + public boolean isEmpty() { + return status == C_EMPTY; + } + + @Override + public String toString() { + return String.valueOf(status); + } +} diff --git a/java-lab/SENKU-GAME/src/Direction.java b/java-lab/SENKU-GAME/src/Direction.java new file mode 100644 index 0000000..fba8a6e --- /dev/null +++ b/java-lab/SENKU-GAME/src/Direction.java @@ -0,0 +1,27 @@ +public class Direction { + + public static final Direction UP = new Direction(0, -1); + public static final Direction RIGHT = new Direction(1, 0); + public static final Direction DOWN = new Direction(0, 1); + public static final Direction LEFT = new Direction(-1, 0); + + public static final Direction[] ALL = new Direction[]{UP, RIGHT, DOWN, LEFT}; + + private final int dx; + private final int dy; + + private Direction(int dx, int dy) { + this.dx = dx; + this.dy = dy; + } + + public Position apply(Position from) { + return new Position(from.getX() + dx, + from.getY() + dy); + } + + public Position apply2Times(Position from) { + return new Position(from.getX() + dx * 2, + from.getY() + dy * 2); + } +} diff --git a/java-lab/SENKU-GAME/src/Display.java b/java-lab/SENKU-GAME/src/Display.java new file mode 100644 index 0000000..68c0eb1 --- /dev/null +++ b/java-lab/SENKU-GAME/src/Display.java @@ -0,0 +1,151 @@ +import acm.graphics.*; + +import java.awt.*; +import java.util.StringTokenizer; + +public class Display { + + private final String board; + private final GCanvas gCanvas; + private final Geometry geometry; + + private GObject highlighted; + private GObject selected; + + public Display(Geometry geometry, String board, GCanvas gCanvas) { + this.board = board; + this.gCanvas = gCanvas; + this.geometry = geometry; + } + + public void initializeDisplay() { + gCanvas.setBackground(Palette.BACKGROUND); + // We assume the string corresponds to a valid map of given dimensions + StringTokenizer st = new StringTokenizer(board, "\n"); + for (int y = 0; y < geometry.getRows(); y++) { + initializeRow(y, st.nextToken()); + } + } + + private void initializeRow(int y, String row) { + for (int x = 0; x < geometry.getColumns(); x++) { + initializePosition(row.charAt(x), new Position(x, y)); + } + } + + private void initializePosition(char status, Position pos) { + if (status == 'o') { + paintFilled(pos); + } else if (status == '·') { + paintEmpty(pos); + } + } + + private void paintEmpty(Position pos) { + GOval oval = createOval(pos); + oval.setColor(Palette.EMPTY); + gCanvas.add(oval); + } + + private void paintFilled(Position pos) { + GOval oval = createOval(pos); + oval.setColor(Palette.FILLED); + gCanvas.add(oval); + } + + private GOval createOval(Position pos) { + GDimension dimension = geometry.tokenDimension(); + GPoint topLeft = geometry.tokenTopLeft(pos.getX(), pos.getY()); + GOval oval = createOval(topLeft, dimension); + oval.setFilled(true); + return oval; + } + + private GOval createOval(GPoint topLeft, GDimension dimension) { + return new GOval( + topLeft.getX(), + topLeft.getY(), + dimension.getWidth(), + dimension.getHeight()); + } + + public void highlight(double x, double y) { + GObject gObject = gCanvas.getElementAt(x, y); + if (ignoreHighlight(gObject)) return; + if (gObject != highlighted) clearHighlight(); + highlighted = gObject; + Color highlightColor = Palette.highlightColor(gObject.getColor()); + highlighted.setColor(highlightColor); + } + + private boolean ignoreHighlight(GObject gObject) { + return !(gObject instanceof GOval) || gObject == highlighted; + } + + public void clearHighlight() { + if (highlighted == null) return; + Color normalColor = Palette.normalColor(highlighted.getColor()); + highlighted.setColor(normalColor); + highlighted = null; + } + + public void select(double x, double y) { + GObject gObject = gCanvas.getElementAt(x, y); + if (ignoreSelection(gObject)) return; + selected = gObject; + highlighted = null; + selected.setColor(Palette.SELECTED_FILLED); + } + + private boolean ignoreSelection(GObject gObject) { + return !(gObject instanceof GOval); + } + + public void clearSelect() { + if (selected == null) return; + selected.setColor(Palette.FILLED); + selected = null; + } + + public void setEmpty(Position position) { + setColor(position, Palette.EMPTY); + } + + public void setFilled(Position position) { + setColor(position, Palette.FILLED); + } + + private void setColor(Position position, Color color) { + GPoint center = geometry.centerAt(position.getX(), position.getY()); + GObject gObject = gCanvas.getElementAt(center); + if (gObject == selected) selected = null; + if (gObject == highlighted) highlighted = null; + gObject.setColor(color); + } + + public static String getStatusMessage(int validMoves, int movesCounter) { + return validMovesMessage(validMoves) + " / " + movesCounterMessage(movesCounter); + } + + private static String validMovesMessage(int validMoves) { + if (validMoves == 0) { + return "No hi ha cap moviment vàlid. GAME OVER."; + } else if (validMoves == 1) { + return "Hi ha un moviment vàlid"; + } else { + return String.format("Hi ha %d moviments vàlids", validMoves); + } + } + + private static String movesCounterMessage(int movesCounter) { + if (movesCounter == 0) { + return "No has fet cap moviment"; + } else if (movesCounter == 1) { + return "Has fet un moviment"; + } else { + return String.format("Has fet %d moviments", movesCounter); + } + } + +} + diff --git a/java-lab/SENKU-GAME/src/Game.java b/java-lab/SENKU-GAME/src/Game.java new file mode 100644 index 0000000..c3a1142 --- /dev/null +++ b/java-lab/SENKU-GAME/src/Game.java @@ -0,0 +1,88 @@ +// It knows the game rules + +public class Game { + + private final Board board; + + public Game(Board board) { + this.board = board; + } + + public boolean isValidFrom(Position from) { + if (board.isFilled(from)) { + boolean[] possibleMoves = possibleDirectionsTo(from); // To Up, Down, Right, Left + for (int i = 0; i < possibleMoves.length; ++i) { + if (possibleMoves[i]) { + return true; + } + } + } + return false; + } + + // Assumes validFrom is a valid starting position + public boolean isValidTo(Position validFrom, Position to) { + if (board.isEmpty(to)) { + return validFrom.colinear(to) && validFrom.distance(to) == 2; + } + return false; + } + + // Assumes both positions are valid + public Position move(Position validFrom, Position validTo) { + board.emptyPosition(validFrom); + board.fillPosition(validTo); + board.emptyPosition(validFrom.middle(validTo)); + return validFrom.middle(validTo); + } + + public boolean hasValidMovesFrom() { + for (int i = 0; i < board.getHeight(); ++i) { + for (int j = 0; j < board.getWidth(); ++j) { + if (isValidFrom(new Position(j, i))) { + return true; + } + } + } + return false; + } + + public int countValidMovesFrom() { + int validMovesFrom = 0; + for (int i = 0; i < board.getHeight(); ++i) { + for (int j = 0; j < board.getWidth(); ++j) { + if (isValidFrom(new Position(j, i))) { + validMovesFrom += 1; + } + } + } + return validMovesFrom; + } + + // Assumes validFrom is a valid starting position + public int countValidMovesTo(Position validFrom) { + int validMovesTo = 0; + for (int i = 0; i < Direction.ALL.length; ++i) { + Position validTo = Direction.ALL[i].apply2Times(validFrom); + if (isValidTo(validFrom, validTo)) { + validMovesTo += 1; + } + } + return validMovesTo; + } + + private boolean[] possibleDirectionsTo(Position pos) { + boolean[] directions = new boolean[Direction.ALL.length]; + for (int i = 0; i < Direction.ALL.length; i++) { + setValidDirections(directions, i, pos); + } + return directions; + } + + private void setValidDirections(boolean[] directions, int index, Position pos) { + Position posToKill = Direction.ALL[index].apply(pos); + Position posToJump = Direction.ALL[index].apply2Times(pos); + directions[index] = board.isFilled(posToKill) && + board.isEmpty(posToJump); + } +} diff --git a/java-lab/SENKU-GAME/src/Geometry.java b/java-lab/SENKU-GAME/src/Geometry.java new file mode 100644 index 0000000..234900e --- /dev/null +++ b/java-lab/SENKU-GAME/src/Geometry.java @@ -0,0 +1,87 @@ +import acm.graphics.GDimension; +import acm.graphics.GPoint; + +public class Geometry { + + private final int windowWidth; + private final int windowHeight; + private final int numCols; + private final int numRows; + private final double boardPadding; + private final double cellPadding; + + public Geometry(int windowWidth, int windowHeight, int numCols, int numRows, double boardPadding, double cellPadding) { + this.windowWidth = windowWidth; + this.windowHeight = windowHeight; + this.numCols = numCols; + this.numRows = numRows; + this.boardPadding = boardPadding; + this.cellPadding = cellPadding; + } + + public int getRows() { + return numRows; + } + + public int getColumns() { + return numCols; + } + + public GDimension boardDimension() { + return new GDimension( + windowWidth * (1 - boardPadding * 2), + windowHeight * (1 - boardPadding * 2)); + } + + public GPoint boardTopLeft() { + return new GPoint( + windowWidth * boardPadding, + windowHeight * boardPadding); + } + + public GDimension cellDimension() { + GDimension boardDimension = boardDimension(); + return new GDimension( + boardDimension.getWidth() / numCols, + boardDimension.getHeight() / numRows); + } + + public GPoint cellTopLeft(int x, int y) { + GPoint boardTopLeft = boardTopLeft(); + GDimension cellDimension = cellDimension(); + return new GPoint( + boardTopLeft.getX() + cellDimension.getWidth() * x, + boardTopLeft.getY() + cellDimension.getHeight() * y); + } + + public GDimension tokenDimension() { + GDimension cellDimension = cellDimension(); + return new GDimension( + cellDimension.getWidth() * (1 - cellPadding * 2), + cellDimension.getHeight() * (1 - cellPadding * 2)); + } + + public GPoint tokenTopLeft(int x, int y) { + GPoint cellTopLeft = cellTopLeft(x, y); + GDimension cellDimension = cellDimension(); + return new GPoint( + cellTopLeft.getX() + cellDimension.getWidth() * cellPadding, + cellTopLeft.getY() + cellDimension.getHeight() * cellPadding); + } + + public GPoint centerAt(int x, int y) { + GDimension tokenDimension = tokenDimension(); + GPoint tokenTopLeft = tokenTopLeft(x, y); + return new GPoint( + tokenTopLeft.getX() + tokenDimension.getWidth() / 2, + tokenTopLeft.getY() + tokenDimension.getHeight() / 2); + } + + public Position xyToCell(double x, double y) { + GPoint boardTopLeft = boardTopLeft(); + GDimension cellDimension = cellDimension(); + return new Position( + (int) ((x - boardTopLeft.getX()) / cellDimension.getWidth()), + (int) ((y - boardTopLeft.getY()) / cellDimension.getHeight())); + } +} diff --git a/java-lab/SENKU-GAME/src/Palette.java b/java-lab/SENKU-GAME/src/Palette.java new file mode 100644 index 0000000..146b482 --- /dev/null +++ b/java-lab/SENKU-GAME/src/Palette.java @@ -0,0 +1,25 @@ +import java.awt.*; + +public class Palette { + + public static final Color BACKGROUND = new Color(155, 78, 44); // 100 + + public static final Color EMPTY = new Color(135, 68, 43); // 120 + public static final Color HIGHLIGHT_EMPTY = new Color(115, 55, 43); // 140 + + public static final Color FILLED = new Color(120, 138, 155); // 100 + public static final Color HIGHLIGHT_FILLED = new Color(100, 118, 135); // 120 + public static final Color SELECTED_FILLED = new Color(80, 98, 115); // 140 + + private static boolean isFilled(Color color) { + return color == FILLED || color == HIGHLIGHT_FILLED || color == SELECTED_FILLED; + } + + public static Color highlightColor(Color color) { + return isFilled(color) ? HIGHLIGHT_FILLED : HIGHLIGHT_EMPTY; + } + + public static Color normalColor(Color color) { + return isFilled(color) ? FILLED : EMPTY; + } +} diff --git a/java-lab/SENKU-GAME/src/Position.java b/java-lab/SENKU-GAME/src/Position.java new file mode 100644 index 0000000..09e86ad --- /dev/null +++ b/java-lab/SENKU-GAME/src/Position.java @@ -0,0 +1,53 @@ +public class Position { + + private final int x; + private final int y; + + public Position(int x, int y) { + this.x = x; + this.y = y; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + public boolean colinear(Position other) { + return x == other.x || + y == other.y; + } + + public int distance(Position other) { + return Math.abs(x - other.x) + + Math.abs(y - other.y); + } + + public Position middle(Position other) { + + return new Position((x + other.x) / 2, + (y + other.y) / 2); + } + + // Needed for testing + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Position position = (Position) o; + return x == position.x && + y == position.y; + } + + @Override + public String toString() { + return "Position{" + + "x=" + x + + ", y=" + y + + '}'; + } +} diff --git a/java-lab/SENKU-GAME/src/Senku.java b/java-lab/SENKU-GAME/src/Senku.java new file mode 100644 index 0000000..1ecddef --- /dev/null +++ b/java-lab/SENKU-GAME/src/Senku.java @@ -0,0 +1,125 @@ +import acm.program.GraphicsProgram; + +import java.awt.event.MouseEvent; + +public class Senku extends GraphicsProgram { + + public static final int APPLICATION_WIDTH = 600; + public static final int APPLICATION_HEIGHT = 600; + + private static final double OUTER = 0.05; + private static final double INNER = 0.03; + + private static final int ROWS = 7; + private static final int COLUMNS = 7; + private static final String BOARD = "" + + "##ooo##\n" + + "#ooooo#\n" + + "ooooooo\n" + + "ooo·ooo\n" + + "ooooooo\n" + + "#ooooo#\n" + + "##ooo##"; + + private Geometry geometry; + private Display display; + private Board board; + private Game game; + + private Position selectedFrom; + + private int movesCounter; + + @Override + public void mouseMoved(MouseEvent e) { + double x = e.getX(); + double y = e.getY(); + if (selectedFrom == null) { + highlightOrClearFrom(x, y); + } else { + highlightOrClearTo(x, y); + } + } + + private void highlightOrClearFrom(double x, double y) { + Position position = geometry.xyToCell(x, y); + if (game.isValidFrom(position)) { + display.highlight(x, y); + } else { + display.clearHighlight(); + } + } + + private void highlightOrClearTo(double x, double y) { + Position position = geometry.xyToCell(x, y); + if (game.isValidTo(selectedFrom, position)) { + display.highlight(x, y); + } else if (!position.equals(selectedFrom)) { + display.clearHighlight(); + } + } + + @Override + public void mouseClicked(MouseEvent e) { + double x = e.getX(); + double y = e.getY(); + Position position = geometry.xyToCell(x, y); + if (selectedFrom == null) { + selectIfValid(x, y); + } else if (position.equals(selectedFrom)) { + unselect(); + } else if (game.isValidTo(selectedFrom, position)) { + move(position); + } + } + + private void selectIfValid(double x, double y) { + Position position = geometry.xyToCell(x, y); + if (game.isValidFrom(position)) { + selectedFrom = position; + display.select(x, y); + updateTitle(game.countValidMovesTo(selectedFrom)); + } + } + + private void unselect() { + selectedFrom = null; + display.clearSelect(); + updateTitle(game.countValidMovesFrom()); + } + + private void move(Position position) { + Position middle = game.move(selectedFrom, position); + display.setEmpty(selectedFrom); + selectedFrom = null; + display.setEmpty(middle); + display.setFilled(position); + movesCounter += 1; + updateTitle(game.countValidMovesFrom()); + } + + private void updateTitle(int validMoves) { + setTitle(Display.getStatusMessage(validMoves, movesCounter)); + } + + @Override + public void run() { + addMouseListeners(); + runGame(); + } + + private void runGame() { + geometry = new Geometry(APPLICATION_WIDTH, APPLICATION_HEIGHT, COLUMNS, ROWS, OUTER, INNER); + display = new Display(geometry, BOARD, getGCanvas()); + board = new Board(COLUMNS, ROWS, BOARD); + game = new Game(board); + display.initializeDisplay(); + movesCounter = 0; + updateTitle(game.countValidMovesFrom()); + } + + public static void main(String[] args) { + new Senku().start(args); + } + +} diff --git a/java-lab/SENKU-GAME/test/BoardTest.java b/java-lab/SENKU-GAME/test/BoardTest.java new file mode 100644 index 0000000..a0fea87 --- /dev/null +++ b/java-lab/SENKU-GAME/test/BoardTest.java @@ -0,0 +1,63 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class BoardTest { + + private static final String BOARD = "" + + "##ooo##\n" + + "#ooooo#\n" + + "ooooooo\n" + + "ooo·ooo\n" + + "ooooooo\n" + + "#ooooo#\n" + + "##ooo##"; + + private final Board board = new Board(7, 7, BOARD); + + private final Position outOfBounds = new Position(4, 9); + private final Position forbidden = new Position(0, 1); + private final Position filled = new Position(2, 4); + private final Position empty = new Position(3, 3); + + @Test + void is_forbidden() { + assertTrue(board.isForbidden(outOfBounds)); + assertTrue(board.isForbidden(forbidden)); + assertFalse(board.isForbidden(filled)); + assertFalse(board.isForbidden(empty)); + } + + @Test + void is_filled() { + assertFalse(board.isFilled(outOfBounds)); + assertFalse(board.isFilled(forbidden)); + assertTrue(board.isFilled(filled)); + assertFalse(board.isFilled(empty)); + } + + @Test + void is_empty() { + assertFalse(board.isEmpty(outOfBounds)); + assertFalse(board.isEmpty(forbidden)); + assertFalse(board.isEmpty(filled)); + assertTrue(board.isEmpty(empty)); + } + + @Test + void fill_position() { + board.fillPosition(empty); + assertTrue(board.isFilled(empty)); + } + + @Test + void empty_position() { + board.emptyPosition(filled); + assertTrue(board.isEmpty(filled)); + } + + @Test + void roundtrip() { + assertEquals(BOARD, board.toString()); + } +} \ No newline at end of file diff --git a/java-lab/SENKU-GAME/test/CellTest.java b/java-lab/SENKU-GAME/test/CellTest.java new file mode 100644 index 0000000..1c97893 --- /dev/null +++ b/java-lab/SENKU-GAME/test/CellTest.java @@ -0,0 +1,49 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CellTest { + + @Test + void forbidden_cell() { + Cell forbidden = Cell.FORBIDDEN; + assertTrue(forbidden.isForbidden()); + assertFalse(forbidden.isEmpty()); + assertFalse(forbidden.isFilled()); + } + + @Test + void empty_cell() { + Cell empty = Cell.EMPTY; + assertTrue(empty.isEmpty()); + assertFalse(empty.isForbidden()); + assertFalse(empty.isFilled()); + } + + @Test + void filled_cell() { + Cell filled = Cell.FILLED; + assertTrue(filled.isFilled()); + assertFalse(filled.isForbidden()); + assertFalse(filled.isEmpty()); + } + + @Test + void cell_from_char() { + Cell forbidden = Cell.fromChar('#'); + assertTrue(forbidden.isForbidden()); + Cell empty = Cell.fromChar('·'); + assertTrue(empty.isEmpty()); + Cell filled = Cell.fromChar('o'); + assertTrue(filled.isFilled()); + Cell invalid = Cell.fromChar('?'); + assertNull(invalid); + } + + @Test + void cell_to_string() { + assertEquals("#", Cell.FORBIDDEN.toString()); + assertEquals("o", Cell.FILLED.toString()); + assertEquals("·", Cell.EMPTY.toString()); + } +} \ No newline at end of file diff --git a/java-lab/SENKU-GAME/test/DirectionTest.java b/java-lab/SENKU-GAME/test/DirectionTest.java new file mode 100644 index 0000000..545b58e --- /dev/null +++ b/java-lab/SENKU-GAME/test/DirectionTest.java @@ -0,0 +1,31 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class DirectionTest { + + @Test + void up() { + Position from = new Position(4, 3); + assertEquals(new Position(4, 2), Direction.UP.apply(from)); + } + + @Test + void right() { + Position from = new Position(4, 3); + assertEquals(new Position(5, 3), Direction.RIGHT.apply(from)); + } + + @Test + void down() { + Position from = new Position(4, 3); + assertEquals(new Position(4, 4), Direction.DOWN.apply(from)); + } + + @Test + void left() { + Position from = new Position(4, 3); + assertEquals(new Position(3, 3), Direction.LEFT.apply(from)); + } + +} diff --git a/java-lab/SENKU-GAME/test/GameTest.java b/java-lab/SENKU-GAME/test/GameTest.java new file mode 100644 index 0000000..a164c5c --- /dev/null +++ b/java-lab/SENKU-GAME/test/GameTest.java @@ -0,0 +1,163 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class GameTest { + + private static final String BOARD = "" + + "##ooo##\n" + + "#ooooo#\n" + + "ooooooo\n" + + "o·o·ooo\n" + + "ooooooo\n" + + "#o·ooo#\n" + + "##ooo##"; + + private final Board board = new Board(7, 7, BOARD); + private final Game game = new Game(board); + + private final int[][] validFromXY = new int[][]{{1, 1}, {3, 1}, {2, 3}, {5, 3}, {1, 5}, {3, 5}, {4, 5}}; + private final int[] validToCount = new int[] {1, 1, 1, 1, 1, 1, 1}; + + private boolean inValidFromXY(int x, int y) { + for (int[] xy : validFromXY) { + if (xy[0] == x && xy[1] == y) { + return true; + } + } + return false; + } + + @Test + void valid_from() { + for (int i = 0; i < validFromXY.length; i++) { + int[] xy = validFromXY[i]; + Position valid = new Position(xy[0], xy[1]); + assertTrue(game.isValidFrom(valid)); + assertEquals(validToCount[i], game.countValidMovesTo(valid)); + } + assertEquals(validFromXY.length, game.countValidMovesFrom()); + } + + @Test + void not_is_valid_from() { + for (int x = 0; x < 7; x++) { + for (int y = 0; y < 7; y++) { + if (!inValidFromXY(x, y)) { + assertFalse(game.isValidFrom(new Position(x, y))); + } + } + } + } + + @Test + void is_valid_to() { + assertTrue(game.isValidTo(new Position(1, 1), new Position(1, 3))); + assertTrue(game.isValidTo(new Position(3, 1), new Position(3, 3))); + assertTrue(game.isValidTo(new Position(2, 3), new Position(2, 5))); + assertTrue(game.isValidTo(new Position(5, 3), new Position(3, 3))); + assertTrue(game.isValidTo(new Position(1, 5), new Position(1, 3))); + assertTrue(game.isValidTo(new Position(3, 5), new Position(3, 3))); + assertTrue(game.isValidTo(new Position(4, 5), new Position(2, 5))); + } + + @Test + void not_is_valid_to() { + assertFalse(game.isValidTo(new Position(1, 1), new Position(1, -1))); + assertFalse(game.isValidTo(new Position(1, 1), new Position(3, 1))); + assertFalse(game.isValidTo(new Position(1, 1), new Position(1, 4))); + assertFalse(game.isValidTo(new Position(1, 1), new Position(2, 2))); + } + + @Test + void has_valid_moves() { + assertTrue(game.hasValidMovesFrom()); + } + + @Test + void one_move() { + String EXPECTED = "" + + "##ooo##\n" + + "#·oooo#\n" + + "o·ooooo\n" + + "ooo·ooo\n" + + "ooooooo\n" + + "#o·ooo#\n" + + "##ooo##"; + Position middle = game.move(new Position(1, 1), new Position(1, 3)); + assertEquals(new Position(1, 2), middle); + assertEquals(EXPECTED, board.toString()); + } + + @Test + void two_moves() { + String EXPECTED = "" + + "##ooo##\n" + + "#·oooo#\n" + + "o·ooooo\n" + + "o··oooo\n" + + "ooooooo\n" + + "#o·ooo#\n" + + "##ooo##"; + game.move(new Position(1, 1), new Position(1, 3)); + Position middle = game.move(new Position(1, 3), new Position(3, 3)); + assertEquals(new Position(2, 3), middle); + assertEquals(EXPECTED, board.toString()); + } + + @Test + void three_moves() { + String EXPECTED = "" + + "##ooo##\n" + + "#·oooo#\n" + + "o·ooooo\n" + + "o··oooo\n" + + "ooooooo\n" + + "#oo··o#\n" + + "##ooo##"; + game.move(new Position(1, 1), new Position(1, 3)); + game.move(new Position(1, 3), new Position(3, 3)); + Position middle = game.move(new Position(4, 5), new Position(2, 5)); + assertEquals(new Position(3, 5), middle); + assertEquals(EXPECTED, board.toString()); + } + + @Test + void no_more_moves() { + String EXPECTED = "" + + "##··o##\n" + + "#o····#\n" + + "····o·o\n" + + "··o····\n" + + "o······\n" + + "#····o#\n" + + "##ooo##"; + game.move(new Position(1, 1), new Position(1, 3)); + game.move(new Position(1, 3), new Position(3, 3)); + game.move(new Position(4, 5), new Position(2, 5)); + game.move(new Position(3, 1), new Position(1, 1)); + game.move(new Position(3, 3), new Position(3, 1)); + game.move(new Position(3, 0), new Position(3, 2)); + game.move(new Position(2, 5), new Position(2, 3)); + game.move(new Position(2, 3), new Position(2, 1)); + game.move(new Position(2, 0), new Position(2, 2)); + game.move(new Position(3, 2), new Position(1, 2)); + game.move(new Position(1, 5), new Position(1, 3)); + game.move(new Position(0, 2), new Position(2, 2)); + game.move(new Position(5, 1), new Position(3, 1)); + game.move(new Position(4, 4), new Position(2, 4)); + game.move(new Position(0, 3), new Position(2, 3)); + game.move(new Position(2, 3), new Position(2, 1)); + game.move(new Position(5, 2), new Position(3, 2)); + game.move(new Position(3, 1), new Position(3, 3)); + game.move(new Position(4, 3), new Position(2, 3)); + game.move(new Position(2, 4), new Position(2, 2)); + game.move(new Position(2, 1), new Position(2, 3)); + game.move(new Position(5, 4), new Position(5, 2)); + game.move(new Position(6, 2), new Position(4, 2)); + game.move(new Position(6, 4), new Position(6, 2)); + assertEquals(EXPECTED, board.toString()); + assertFalse(game.hasValidMovesFrom()); + assertEquals(0, game.countValidMovesFrom()); + } +} \ No newline at end of file diff --git a/java-lab/SENKU-GAME/test/GeometryTest.java b/java-lab/SENKU-GAME/test/GeometryTest.java new file mode 100644 index 0000000..5d53f40 --- /dev/null +++ b/java-lab/SENKU-GAME/test/GeometryTest.java @@ -0,0 +1,78 @@ +import acm.graphics.GDimension; +import acm.graphics.GPoint; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class GeometryTest { + + Geometry geometry = new Geometry( + 800, + 300, + 4, + 3, + 0.05, + 0.10); + + @Test + void getters() { + assertEquals(3, geometry.getRows()); + assertEquals(4, geometry.getColumns()); + } + + @Test + void board_dimension() { + assertEquals( + new GDimension(720.0, 270.0), + geometry.boardDimension()); + } + + @Test + void board_top_left() { + assertEquals( + new GPoint(40.0, 15.0), + geometry.boardTopLeft()); + } + + @Test + void cell_dimension() { + assertEquals( + new GDimension(180.0, 90.0), + geometry.cellDimension()); + } + + @Test + void cell_top_left() { + assertEquals( + new GPoint(400.0, 105.0), + geometry.cellTopLeft(2, 1)); + } + + @Test + void token_dimension() { + assertEquals( + new GDimension(144.0, 72.0), + geometry.tokenDimension()); + } + + @Test + void token_top_left() { + assertEquals( + new GPoint(418.0, 114.0), + geometry.tokenTopLeft(2, 1)); + } + + @Test + void xy_to_cell() { + assertEquals( + new Position(3, 1), + geometry.xyToCell(600.0, 110.0)); + } + + @Test + void center_at() { + assertEquals( + new GPoint(310.0, 240.0), + geometry.centerAt(1, 2)); + } +} \ No newline at end of file diff --git a/java-lab/SENKU-GAME/test/PositionTest.java b/java-lab/SENKU-GAME/test/PositionTest.java new file mode 100644 index 0000000..86de6b4 --- /dev/null +++ b/java-lab/SENKU-GAME/test/PositionTest.java @@ -0,0 +1,53 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PositionTest { + + @Test + void getter_and_constructor() { + Position pos = new Position(4, 3); + assertEquals(4, pos.getX()); + assertEquals(3, pos.getY()); + } + + @Test + void colinear_horizontal() { + Position pos1 = new Position(3, 8); + Position pos2 = new Position(6, 8); + assertTrue(pos1.colinear(pos2)); + assertTrue(pos2.colinear(pos1)); + } + + @Test + void colinear_vertical() { + Position pos1 = new Position(6, 4); + Position pos2 = new Position(6, 8); + assertTrue(pos1.colinear(pos2)); + assertTrue(pos2.colinear(pos1)); + } + + @Test + void not_colinear() { + Position pos1 = new Position(3, 8); + Position pos2 = new Position(6, 4); + assertFalse(pos1.colinear(pos2)); + assertFalse(pos2.colinear(pos1)); + } + + @Test + void distance() { + Position pos1 = new Position(3, -2); + Position pos2 = new Position(6, 4); + assertEquals(9, pos1.distance(pos2)); + assertEquals(9, pos2.distance(pos1)); + } + + @Test + void middle() { + Position pos1 = new Position(3, -2); + Position pos2 = new Position(6, 4); + assertEquals(new Position(4, 1), pos1.middle(pos2)); + assertEquals(new Position(4, 1), pos2.middle(pos1)); + } +} \ No newline at end of file diff --git a/java-lab/Tree_Traversals/.gitignore b/java-lab/Tree_Traversals/.gitignore new file mode 100644 index 0000000..a1c2a23 --- /dev/null +++ b/java-lab/Tree_Traversals/.gitignore @@ -0,0 +1,23 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* diff --git a/java-lab/Tree_Traversals/LICENSE b/java-lab/Tree_Traversals/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/java-lab/Tree_Traversals/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/java-lab/Tree_Traversals/Laboratori-5.iml b/java-lab/Tree_Traversals/Laboratori-5.iml new file mode 100644 index 0000000..222cc3a --- /dev/null +++ b/java-lab/Tree_Traversals/Laboratori-5.iml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java-lab/Tree_Traversals/docu/Diagram.png b/java-lab/Tree_Traversals/docu/Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..142594f2cfeea6b39bb5548f0bfb1df4884333a3 GIT binary patch literal 39877 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 z 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%0A-r9o!rskR-o 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 node = (Node) obj; +\end{verbatim} +\newline +Y en su lugar debemos utilizar comodines: +\begin{verbatim} +Node node = (Node) obj; +\end{verbatim} +De esta manera,evitamos un posible error de ejecución. + +En la implementación del método \textit{postAndIn} estubimos debatiendo sobre si implementarlo utilizando índices o sublistas.\newline +En el primer caso, la idea se basaba en utilizar 4 índices (2 índices indicando el principio y el final del segmento que queríamos tratar sobre la lista postOrder y 2 índices indicando los mismos parámetros sobre la lista inOrder).\newline +En el segundo caso simplemente vamos reduciendo los segmentos a tratar generando sublistas, por lo que nos parecía que era más ineficiente que el primer caso.\newline +En cambio, después de adentrarnos en el codigo fuente de la clase ArrayList vimos que el método sublist no genera una lista nueva, sino que devuelve una vista sobre la lista original, por lo que siempre trabajamos sobre el mismo objeto y de una manera muy parecida al primer caso que hemos comentado en el que trabajamos siempre sobre las mismas listas acotando segmentos mediante índices.\newline +El método sublist de la clase LinkedList (heredado de la clase AbstractList) se +basa en la misma idea, pero el coste de realizar la operación get va a ser +mayor, ya que cuando lo hagamos sobre una sublista, realmente se va a realizar +sobre la lista original por lo que el coste de realizar dicho get siempre va a +ser O(n). + +\end{document} diff --git a/java-lab/Tree_Traversals/src/BinaryTree.java b/java-lab/Tree_Traversals/src/BinaryTree.java new file mode 100644 index 0000000..19e699b --- /dev/null +++ b/java-lab/Tree_Traversals/src/BinaryTree.java @@ -0,0 +1,6 @@ +public interface BinaryTree { + E elem(); + BinaryTree left(); + BinaryTree right(); + boolean isEmpty(); +} diff --git a/java-lab/Tree_Traversals/src/IterativeTraversals.java b/java-lab/Tree_Traversals/src/IterativeTraversals.java new file mode 100644 index 0000000..81fa9aa --- /dev/null +++ b/java-lab/Tree_Traversals/src/IterativeTraversals.java @@ -0,0 +1,75 @@ +import java.util.LinkedList; +import java.util.List; +import java.util.Stack; + +public class IterativeTraversals implements Traversals { + + /** + * This method traverses a binary tree in a pre-order way + * @param tree the tree its going to be traversed + * @param Generic type + * @return A list with the pre-order traversal elements of the tree + */ + @Override + public List preOrder(BinaryTree tree) { + List list = new LinkedList<>(); + Stack> stack = new Stack<>(); + stack.push(tree); + while (!stack.isEmpty()) { + BinaryTree actualTree = stack.pop(); + if (!actualTree.isEmpty()) { + list.add(actualTree.elem()); + stack.push(actualTree.right()); + stack.push(actualTree.left()); + } + } + return list; + } + + /** + * This method traverses a binary tree in a post-order way + * @param tree the tree its going to be traversed + * @param Generic type + * @return A list with the post-order traversal elements of the tree + */ + @Override + public List postOrder(BinaryTree tree) { + List list = new LinkedList<>(); + Stack> stack = new Stack<>(); + stack.push(tree); + while (!stack.isEmpty()) { + BinaryTree current = stack.pop(); + if (!current.isEmpty()) { + stack.push(current.left()); + stack.push(current.right()); + list.add(0, current.elem()); + } + } + return list; + } + + /** + * This method traverses a binary tree in a in-order way + * @param tree the tree its going to be traversed + * @param Generic type + * @return A list with the in-order traversal elements of the tree + */ + @Override + public List inOrder(BinaryTree tree) { + List list = new LinkedList<>(); + Stack> stack = new Stack<>(); + stack.push(tree); + BinaryTree current = tree.left(); + while (!stack.isEmpty() || !current.isEmpty()) { + if (!current.isEmpty()) { + stack.push(current); + current = current.left(); + } else { + current = stack.pop(); + list.add(current.elem()); + current = current.right(); + } + } + return list; + } +} diff --git a/java-lab/Tree_Traversals/src/LinkedBinaryTree.java b/java-lab/Tree_Traversals/src/LinkedBinaryTree.java new file mode 100644 index 0000000..069ae74 --- /dev/null +++ b/java-lab/Tree_Traversals/src/LinkedBinaryTree.java @@ -0,0 +1,132 @@ +import java.util.NoSuchElementException; + +public class LinkedBinaryTree implements BinaryTree { + private Node root; + + /** + * This class represents the internal linked nodes that every LinkedBinaryTree will contains as root + */ + private static class Node { + E elem; + Node left; + Node right; + + Node(E elem, Node left, Node right) { + this.elem = elem; + this.left = left; + this.right = right; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof Node)) return false; + Node other = (Node) obj; + return recEquals(this, other); + } + + /** + * This method recursively checks if two nodes and all his child's are equals + * @param root1 The first Node + * @param root2 The second Node + * @return True if equals, otherwise false + */ + private static boolean recEquals(Node root1, Node root2) { + if (root1 == null || root2 == null) return root1 == root2; + return root1.elem.equals(root2.elem) + && recEquals(root1.left, root2.left) + && recEquals(root1.right, root2.right); + } + } + + + /** + * Empty LinkedBinaryTree constructor + */ + public LinkedBinaryTree() { + root = null; + } + + /** + * A constructor that initialize an instance + * from the element that will be stored into the root + * @param elem The element of the root + */ + public LinkedBinaryTree(E elem) { + root = new Node(elem, null, null); + } + + /** + * A constructor that initialize an instance from an element, left tree and right tree + * @param elem The element to store into the root + * @param left The left binary tree + * @param right The right binary tree + */ + public LinkedBinaryTree(E elem, LinkedBinaryTree left, LinkedBinaryTree right) { + Node leftNode = (left == null) ? null : left.root; + Node rightNode = (right == null) ? null : right.root; + root = new Node<>(elem, leftNode, rightNode); + } + + /** + * A private constructor to initialize an instance from the root Node + * @param root the root node + */ + private LinkedBinaryTree(Node root) { + this.root = root; + } + + /** + * A getter for the element stored into the root. + * @return An object of type E + */ + @Override + public E elem() { + if (isEmpty()) + throw new NoSuchElementException(); + return root.elem; + } + + /** + * A getter for the left binary tree + * @return A BinaryTree + */ + @Override + public BinaryTree left() { + if (isEmpty()) + throw new NoSuchElementException(); + return new LinkedBinaryTree<>(root.left); + } + + /** + * A getter for the right binary tree + * @return A BinaryTree + */ + @Override + public BinaryTree right() { + if (isEmpty()) + throw new NoSuchElementException(); + return new LinkedBinaryTree<>(root.right); + } + + /** + * Checks if the tree is empty + * @return True if empty, otherwise false + */ + @Override + public boolean isEmpty() { + return root == null; + } + + /** + * Checks if two LinkedBinaryTrees are equals + * @param obj The object to compare + * @return True if equals, otherwise false + */ + @Override + public boolean equals(Object obj) { + if (!(obj instanceof LinkedBinaryTree)) + return false; + LinkedBinaryTree lb = (LinkedBinaryTree) obj; + return Node.recEquals(root, lb.root); + } +} diff --git a/java-lab/Tree_Traversals/src/Regenerator.java b/java-lab/Tree_Traversals/src/Regenerator.java new file mode 100644 index 0000000..a5effa4 --- /dev/null +++ b/java-lab/Tree_Traversals/src/Regenerator.java @@ -0,0 +1,31 @@ +import java.util.List; + +public class Regenerator { + /** + *This function reconstructs a LinkedBinaryTree from its post-order and in-order sequences. + * @param postOrder The post-order sequence of the tree + * @param inOrder The in-order sequence of the tree + * @param Generic type + * @return the reconstructed binary tree + */ + public static LinkedBinaryTree postAndIn(List postOrder, List inOrder) { + int treeSize = postOrder.size(); + if (treeSize == 0) + return new LinkedBinaryTree<>(); + else if (treeSize == 1) { + E root = postOrder.get(treeSize - 1); + return new LinkedBinaryTree<>(root); + } else { + E root = postOrder.get(treeSize - 1); + int indexOfRoot = inOrder.indexOf(root); + List inOrderLeft = inOrder.subList(0, indexOfRoot); + List inOrderRight = inOrder.subList(indexOfRoot + 1, treeSize); + List postOrderLeft = postOrder.subList(0, indexOfRoot); + List postOrderRight = postOrder.subList(indexOfRoot, treeSize - 1); + + return new LinkedBinaryTree<>(root, + postAndIn(postOrderLeft, inOrderLeft), + postAndIn(postOrderRight, inOrderRight)); + } + } +} diff --git a/java-lab/Tree_Traversals/src/Traversals.java b/java-lab/Tree_Traversals/src/Traversals.java new file mode 100644 index 0000000..7b75c31 --- /dev/null +++ b/java-lab/Tree_Traversals/src/Traversals.java @@ -0,0 +1,7 @@ +import java.util.List; + +public interface Traversals { + List preOrder(BinaryTree tree); + List inOrder(BinaryTree tree); + List postOrder(BinaryTree tree); +} diff --git a/java-lab/Tree_Traversals/test/IterativeTraversalsTest.java b/java-lab/Tree_Traversals/test/IterativeTraversalsTest.java new file mode 100644 index 0000000..481ac7f --- /dev/null +++ b/java-lab/Tree_Traversals/test/IterativeTraversalsTest.java @@ -0,0 +1,58 @@ +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.LinkedList; +import java.util.List; + +class IterativeTraversalsTest { + private final LinkedBinaryTree bt = new LinkedBinaryTree<>(3, + new LinkedBinaryTree<>(4, + null, + new LinkedBinaryTree<>(43)), + new LinkedBinaryTree<>(5, + new LinkedBinaryTree<>(25), + new LinkedBinaryTree<>(53, + new LinkedBinaryTree<>(2), + null) + ) + ); + + private final LinkedBinaryTree bt2 = new LinkedBinaryTree<>("Hi!", + new LinkedBinaryTree<>("Bye!", + new LinkedBinaryTree<>("Stre!"), + new LinkedBinaryTree<>("Oui!", + null, + new LinkedBinaryTree<>("Uala!"))), + new LinkedBinaryTree<>("Ecs!", + new LinkedBinaryTree<>("Lolo"), + new LinkedBinaryTree<>("lala", + new LinkedBinaryTree<>("Ei!", + new LinkedBinaryTree<>("Prra!"), + null), + new LinkedBinaryTree<>()) + ) + ); + + @Test + void test_traversals_integer_tree() { + List preOrder = new LinkedList<>(List.of(3, 4, 43, 5, 25, 53, 2)); + List inOrder = new LinkedList<>(List.of(4, 43, 3, 25, 5, 2, 53)); + List postOrder = new LinkedList<>(List.of(43, 4, 25, 2, 53, 5, 3)); + IterativeTraversals it = new IterativeTraversals(); + assertEquals(preOrder, it.preOrder(bt)); + assertEquals(inOrder, it.inOrder(bt)); + assertEquals(postOrder, it.postOrder(bt)); + } + + @Test + void test_traversals_string_tree(){ + List preOrder = new LinkedList<>(List.of("Hi!", "Bye!", "Stre!", "Oui!", "Uala!", "Ecs!", "Lolo", "lala", "Ei!", "Prra!")); + List inOrder = new LinkedList<>(List.of("Stre!", "Bye!", "Oui!", "Uala!", "Hi!", "Lolo", "Ecs!", "Prra!", "Ei!", "lala")); + List postOrder = new LinkedList<>(List.of("Stre!", "Uala!", "Oui!", "Bye!", "Lolo", "Prra!", "Ei!", "lala", "Ecs!", "Hi!")); + IterativeTraversals it = new IterativeTraversals(); + assertEquals(preOrder, it.preOrder(bt2)); + assertEquals(inOrder, it.inOrder(bt2)); + assertEquals(postOrder, it.postOrder(bt2)); + } + +} \ No newline at end of file diff --git a/java-lab/Tree_Traversals/test/LinkedBinaryTreeTest.java b/java-lab/Tree_Traversals/test/LinkedBinaryTreeTest.java new file mode 100644 index 0000000..d06115a --- /dev/null +++ b/java-lab/Tree_Traversals/test/LinkedBinaryTreeTest.java @@ -0,0 +1,69 @@ +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +class LinkedBinaryTreeTest { + + private final LinkedBinaryTree bt = new LinkedBinaryTree<>(3, + new LinkedBinaryTree<>(4, + new LinkedBinaryTree<>(34), + new LinkedBinaryTree<>()), + new LinkedBinaryTree<>(5, + new LinkedBinaryTree<>(25), + new LinkedBinaryTree<>(53) + ) + ); + + private final LinkedBinaryTree bt2 = new LinkedBinaryTree<>(3, + new LinkedBinaryTree<>(4, + new LinkedBinaryTree<>(34), + new LinkedBinaryTree<>()), + new LinkedBinaryTree<>(5, + new LinkedBinaryTree<>(25), + new LinkedBinaryTree<>(53) + ) + ); + + private final LinkedBinaryTree bt3 = new LinkedBinaryTree<>("Hi!", + new LinkedBinaryTree<>("Bye!", + new LinkedBinaryTree<>("Stre!"), + new LinkedBinaryTree<>("Oui!", + null, + new LinkedBinaryTree<>("Uala!"))), + new LinkedBinaryTree<>("Ecs!", + new LinkedBinaryTree<>("Lolo"), + new LinkedBinaryTree<>("lala", + new LinkedBinaryTree<>("Ei!", + new LinkedBinaryTree<>("Prra!"), + null), + new LinkedBinaryTree<>()) + ) + ); + + private final LinkedBinaryTree emptyBt = new LinkedBinaryTree<>(); + + @Test + void test_equals() { + assertEquals(bt, bt2); + assertNotEquals(bt, bt3); + assertEquals(bt.left(), bt2.left()); + assertEquals(bt.right(), bt2.right()); + } + + @Test + void test_elem(){ + assertEquals(3, bt.elem()); + assertEquals(4, bt.left().elem()); + assertEquals(5, bt.right().elem()); + assertEquals("Hi!", bt3.elem()); + assertEquals("Bye!", bt3.left().elem()); + assertEquals("Ecs!", bt3.right().elem()); + } + + @Test + void test_empty(){ + assertFalse(bt.isEmpty()); + assertFalse(bt3.isEmpty()); + assertFalse(bt.right().isEmpty()); + assertTrue(emptyBt.isEmpty()); + } +} \ No newline at end of file diff --git a/java-lab/Tree_Traversals/test/RegeneratorTest.java b/java-lab/Tree_Traversals/test/RegeneratorTest.java new file mode 100644 index 0000000..2792828 --- /dev/null +++ b/java-lab/Tree_Traversals/test/RegeneratorTest.java @@ -0,0 +1,70 @@ +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class RegeneratorTest { + private final LinkedBinaryTree bt = new LinkedBinaryTree<>(3, + new LinkedBinaryTree<>(4, + new LinkedBinaryTree<>(34), + null), + new LinkedBinaryTree<>(5, + new LinkedBinaryTree<>(25), + new LinkedBinaryTree<>(53, + new LinkedBinaryTree<>(2), + new LinkedBinaryTree<>()) + ) + ); + + private final IterativeTraversals it = new IterativeTraversals(); + + @Test + void test_regenerator_integer_tree() { + List postOrder = it.postOrder(bt); + List inOrder = it.inOrder(bt); + LinkedBinaryTree regeneratedTree = Regenerator.postAndIn(postOrder, inOrder); + assertEquals(postOrder, it.postOrder(regeneratedTree)); + assertEquals(inOrder, it.inOrder(regeneratedTree)); + } + + private final LinkedBinaryTree bt2 = new LinkedBinaryTree<>("Hi!", + new LinkedBinaryTree<>("Bye!", + new LinkedBinaryTree<>("Stre!"), + new LinkedBinaryTree<>("Oui!", + null, + new LinkedBinaryTree<>("Uala!"))), + new LinkedBinaryTree<>("Ecs!", + new LinkedBinaryTree<>("Lolo"), + new LinkedBinaryTree<>("lala", + new LinkedBinaryTree<>("Ei!", + new LinkedBinaryTree<>("Prra!"), + null), + new LinkedBinaryTree<>()) + ) + ); + + @Test + void test_regenerator_string_tree(){ + List postOrder = it.postOrder(bt2); + List inOrder = it.inOrder(bt2); + LinkedBinaryTree regeneratedTree = Regenerator.postAndIn(postOrder, inOrder); + assertEquals(postOrder, it.postOrder(regeneratedTree)); + assertEquals(inOrder, it.inOrder(regeneratedTree)); + } + + private final LinkedBinaryTree bt3 = new LinkedBinaryTree<>(3.5465423, + new LinkedBinaryTree<>(4.5465), + new LinkedBinaryTree<>(2.5431) + ); + + @Test + void test_regenerator_double_tree(){ + List postOrder = it.postOrder(bt3); + List inOrder = it.inOrder(bt3); + LinkedBinaryTree regeneratedTree = Regenerator.postAndIn(postOrder, inOrder); + assertEquals(postOrder, it.postOrder(regeneratedTree)); + assertEquals(inOrder, it.inOrder(regeneratedTree)); + } + +} \ No newline at end of file

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 B$E^SW literal 0 HcmV?d00001 diff --git a/java-lab/ArraySorter/Chart_Images/Num Comparisons by Array length.png b/java-lab/ArraySorter/Chart_Images/Num Comparisons by Array length.png new file mode 100644 index 0000000000000000000000000000000000000000..d9757a736927052350ed42d36fb0a0caa03dbc9e GIT binary patch literal 99159 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 literal 0 HcmV?d00001 diff --git a/java-lab/ArraySorter/Chart_Images/Num Swaps by Array length. REVERSED ARRAY.png b/java-lab/ArraySorter/Chart_Images/Num Swaps by Array length. REVERSED ARRAY.png new file mode 100644 index 0000000000000000000000000000000000000000..ca90960bfb60627de783312aec3beb29a5fa139c GIT binary patch literal 80663 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 LD_9{^$LD_lTh*$< literal 0 HcmV?d00001 diff --git a/java-lab/ArraySorter/IntArraySorter.iml b/java-lab/ArraySorter/IntArraySorter.iml new file mode 100644 index 0000000..aec85db --- /dev/null +++ b/java-lab/ArraySorter/IntArraySorter.iml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java-lab/ArraySorter/Test/BubbleSortTest.java b/java-lab/ArraySorter/Test/BubbleSortTest.java new file mode 100644 index 0000000..3f9fec6 --- /dev/null +++ b/java-lab/ArraySorter/Test/BubbleSortTest.java @@ -0,0 +1,37 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class BubbleSortTest { + static final int length = 50; + + @Test + void array_ordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.bubbleSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_del_reves() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildReversedArray(length)); + sorter.bubbleSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_poco_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.fisherYatesShuffle(length/3); + sorter.bubbleSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_muy_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.fisherYatesShuffle(length); + sorter.bubbleSort(); + assertTrue(sorter.isSorted()); + } +} \ No newline at end of file diff --git a/java-lab/ArraySorter/Test/InsertionSortTest.java b/java-lab/ArraySorter/Test/InsertionSortTest.java new file mode 100644 index 0000000..94dd5d6 --- /dev/null +++ b/java-lab/ArraySorter/Test/InsertionSortTest.java @@ -0,0 +1,37 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class InsertionSortTest { + static final int length = 50; + + @Test + void array_ordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.insertionSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_del_reves() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildReversedArray(length)); + sorter.insertionSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_poco_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.fisherYatesShuffle(length/3); + sorter.insertionSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_muy_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.fisherYatesShuffle(length); + sorter.insertionSort(); + assertTrue(sorter.isSorted()); + } +} \ No newline at end of file diff --git a/java-lab/ArraySorter/Test/Quick_sort_test.java b/java-lab/ArraySorter/Test/Quick_sort_test.java new file mode 100644 index 0000000..6c9d87a --- /dev/null +++ b/java-lab/ArraySorter/Test/Quick_sort_test.java @@ -0,0 +1,38 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class Quick_sort_test { + static final int length = 50; + + @Test + void array_ordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.quickSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_ordenado_al_reves() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildReversedArray(length)); + sorter.quickSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_poco_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.fisherYatesShuffle(length/3); + sorter.quickSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_muy_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.fisherYatesShuffle(length); + sorter.quickSort(); + assertTrue(sorter.isSorted()); + } + +} \ No newline at end of file diff --git a/java-lab/ArraySorter/Test/Radix_sort_test.java b/java-lab/ArraySorter/Test/Radix_sort_test.java new file mode 100644 index 0000000..98562c7 --- /dev/null +++ b/java-lab/ArraySorter/Test/Radix_sort_test.java @@ -0,0 +1,38 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + + +class Radix_sort_test { + static final int length = 50; + + @Test + void array_ordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.radixSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_ordenado_del_reves() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildReversedArray(length)); + sorter.radixSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_poco_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildReversedArray(length)); + sorter.fisherYatesShuffle(length/3); + sorter.radixSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_muy_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildReversedArray(length)); + sorter.fisherYatesShuffle(length); + sorter.radixSort(); + assertTrue(sorter.isSorted()); + } +} \ No newline at end of file diff --git a/java-lab/ArraySorter/Test/SelectionSortTest.java b/java-lab/ArraySorter/Test/SelectionSortTest.java new file mode 100644 index 0000000..508faa7 --- /dev/null +++ b/java-lab/ArraySorter/Test/SelectionSortTest.java @@ -0,0 +1,39 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SelectionSortTest { + static final int length = 50; + + @Test + void array_ordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.selectionSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_del_reves() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildReversedArray(length)); + sorter.selectionSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_poco_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.fisherYatesShuffle(length/3); + sorter.selectionSort(); + assertTrue(sorter.isSorted()); + } + + @Test + void array_muy_desordenado() { + IntArraySorter sorter = new IntArraySorter(ArrayBuilder.buildArray(length)); + sorter.fisherYatesShuffle(length); + sorter.selectionSort(); + assertTrue(sorter.isSorted()); + } + + +} \ No newline at end of file diff --git a/java-lab/ArraySorter/out/production/IntArraySorter/IntArraySorter.class b/java-lab/ArraySorter/out/production/IntArraySorter/IntArraySorter.class new file mode 100644 index 0000000000000000000000000000000000000000..a141b858f06ab03d58f0beada8a61baf501885fb GIT binary patch literal 4281 zcmZu!T}&L;6+ZK`yX<;_1w1BZXI)%aiU(L~o8rWV#la3`Q|xtsxWzaL3p=o5mR-C* zuB#+cRgp@4=u_1sj-@0fPLV37X)2p2sq6GdRh9N3d95m?4^`BcN_}nJHuO994zn0p zvhU2^x%Zs!J3rsO{PBwq?-9{4Dh6pU&G2v`L z)?sq$+nH7TG*&WKPdiIaWx_5jRdSPdW+7*1vFw6EO-pv=?5^!v_aPY2PZhJaLX8tn z!N!VtyEL7d&ts-}qPURBpNBX8?M~{IoC8;piBzHTIAfbCmMV7XghG3y2N#Qf$SF9L zBp7thrVgD4PNyuE0uTHGk>V&+KUK*rET74&Zd)&d3GYdXJ<264uB>3DF>ja4)45C` zU3%hjHN%nNH87((hj};xV@{!Lmnu%Nz>b6)`1Q+K_yg?Fe03gNf$2DSnrlZv9Qsp*eheD;>rX(3CliV8NuHEGRe-xr-p@G zu~@dxc_>6U;3ZhfWSy%Lb8w+pEmY)tpk$Y;`3k@V=Bo?KcBLGkR`3x^80D-Cx$lZ3 z;>&U&foPeF24;Y@EW%ocrS9U;RIyrGu*V#x((+(MBravHWWw|a?GIBM4{;g@QAGVo($9DG#aKc9>!@DyxBy5wc_OaCo_d?aV1PER0z`qoetAE zdMZrQ)D@88H8D)uv|c2rVjj4sPmzl)!m!xAG$eC zT`<9((?F==*=W5_nx)+#-RikRzV|StQai?GkRgg-{1FAIi5f7&c=pL{E*=;Vgqg-y zsM|IE0(PPrJ3IC>vXU)fv1dyzV0(-VKP^KJaYC zoB_yfo@W*O4#chI5 zgmoH-4oCHDGIpIhEoL7R*)S8Er=N--GDZ zBfbX6c7tX@Q0%2ad>f*#c_C^-n{uW!tUiQ!4vb32u})@hct`e{NayVRj~W!^-_$9S zc+6w+XP3$3b~&w63h>oo=78Et#-cZ=OES{4f>TU#+GEA^Yz(Xfr@!zf^G)(^P*Bjj zU883q;6#st-eV~G72=5Tyj?+mRfsCA_Z{Yh=bjqXn2m&A}MzH!(mtxwZIJtwO zL4HZmP?Uopc%MR&=3^esPhFa+ZJOLQNlw{ZGA5|5(}CT2yM`GJ#`WwWl7& zE~1DY^w^#7*gXwHT>g#Pkl->bkk-|Du0edBraH)Q1D)Sd{EecjVw=Dh@*x33T%KRpe002vIi@nG4V%$* zI{ZtjpLw4eqMOtxqHS`tSz>vJNu7-udU{Pom3~?)N|slmRg9M*vL&48Wt<@u6y_>| zctxNcfTtD&oP|}xioHTu8Picwh>Uj7<1$E32ri5}NGdnneRQ$PHvt#?k70(vcbJ2^ zp~u!KDmu#06TlA@^c(uEH61`dkJU6;9tY3E<_kF1Uj&Zlf$qB=LJfk?Lck|Yhli#E z%_bw;;YGG%M`XpBr75kf11ef?8{#W2#5lBzL7F!n1bNK`36=ib+zoOK3icAttM5a> z)&S-Q9!TE~kZ})W+yfc+K*o22^lgL0-O7#QS&-#+jzrz`n^AOE;~e9W7YKQY`JwPH z53z{nHR9EN#I1b=>biY$6lv6Q75TMWGyrL^NtA!_Nf8ssBT2%^`K@;9JnZ{kvQ10}VN#(E2S zdlQH2+t8Gspxrj0%Wu;Z{nX1~!aY*C%%;6qPP@cd+s~lQRoEPbp0^@D+z5@NenE)< zrST8#(1``O@w%ix0cn=Z5zRYd2AM}JVdj}zB(ypRQm=!txFdR3mmb4+F`>_;#nJPJ z8b5hWcn4MZGlcwIwC>M=|2kXbG@(#3l${{MM~@%oZMWt{3AL4w1 AasU7T literal 0 HcmV?d00001 diff --git a/java-lab/ArraySorter/out/production/IntArraySorter/META-INF/IntArraySorter.kotlin_module b/java-lab/ArraySorter/out/production/IntArraySorter/META-INF/IntArraySorter.kotlin_module new file mode 100644 index 0000000000000000000000000000000000000000..2983af70661ad375cc499ebc4da5a68ca46c532e GIT binary patch literal 16 RcmZQzU|?ooU|@t|egFVe02KfL literal 0 HcmV?d00001 diff --git a/java-lab/ArraySorter/out/test/IntArraySorter/META-INF/IntArraySorter.kotlin_module b/java-lab/ArraySorter/out/test/IntArraySorter/META-INF/IntArraySorter.kotlin_module new file mode 100644 index 0000000000000000000000000000000000000000..2983af70661ad375cc499ebc4da5a68ca46c532e GIT binary patch literal 16 RcmZQzU|?ooU|@t|egFVe02KfL literal 0 HcmV?d00001 diff --git a/java-lab/ArraySorter/src/ArrayBuilder.java b/java-lab/ArraySorter/src/ArrayBuilder.java new file mode 100644 index 0000000..0fe5121 --- /dev/null +++ b/java-lab/ArraySorter/src/ArrayBuilder.java @@ -0,0 +1,30 @@ +/** + * This class helps us to build and copy arrays. + */ +public class ArrayBuilder { + /** + * Builds a sorted array of integers from 0 to length. + * @param length the array length + * @return the array created. + */ + public static int[] buildArray(int length) { + int[] array = new int[length]; + for (int j = 0; j < array.length; ++j) { + array[j] = j; + } + return array; + } + + /** + * Builds a sorted array of integers from length to 0. + * @param length the array length + * @return the array created. + */ + public static int[] buildReversedArray(int length) { + int[] array = new int[length]; + for (int i = array.length - 1; i >= 0; --i) { + array[array.length - 1 - i] = i; + } + return array; + } +} diff --git a/java-lab/ArraySorter/src/IntArraySorter.java b/java-lab/ArraySorter/src/IntArraySorter.java new file mode 100644 index 0000000..debff78 --- /dev/null +++ b/java-lab/ArraySorter/src/IntArraySorter.java @@ -0,0 +1,198 @@ +import java.util.Random; + +public class IntArraySorter { + private final int[] array; + private int numComparisons; + private int numSwaps; + + public int getNumComparisons() { + return numComparisons; + } + + public int getNumSwaps() { + return numSwaps; + } + + public IntArraySorter(int[] array) { + this.array = array; + } + + public boolean isSorted() { + for (int i = 0; i < array.length - 1; i++) { + if (array[i] > array[i + 1]) { + return false; + } + } + return true; + } + + public void swap(int i, int j) { + int tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + numSwaps += 1; + } + + public boolean lessThanOrEqual(int i1, int i2) { + numComparisons += 1; + return i1 <= i2; + } + + public void insertionSort() { + for (int s = 1; s < array.length; ++s) { + int insert = s; + for (int i = s - 1; i >= 0; i--) { + if (!lessThanOrEqual(array[i], array[insert])) { + swap(i, insert); + insert = i; + } else { + break; + } + } + } + } + + public void bubbleSort() { + for (int s = 0; s < array.length; s++) { + int swaps = numSwaps; + for (int i = array.length - 1; i > s; i--) { + if (!lessThanOrEqual(array[i - 1], array[i])) { + swap(i - 1, i); + } + } + if (numSwaps == swaps) { + break; + } + } + } + + public void selectionSort() { + for (int i = 0; i < array.length - 1; ++i) { + int lesser = i; + for (int s = i + 1; s < array.length; ++s) { + if (lessThanOrEqual(array[s], array[lesser])) { + lesser = s; + } + } + if (lesser != i) { + swap(i, lesser); + } + } + } + + public void quickSort() { + int left = 0, right = array.length; + quickSort(left, right); + } + + private void quickSort(int left, int right) { + if (left < right) { + int pivotPos = choosePivotPos(left, right); + int pivotValue = array[pivotPos]; + swap(pivotPos, right - 1); + int pos = partition(pivotValue, left, right - 1); + swap(pos, right - 1); + quickSort(left, pos); + quickSort(pos + 1, right); + } + } + + private int partition(int pivotValue, int left, int right) { + while (true) { + left = itemFromLeftPos(pivotValue, left, right); + right = itemFromRightPos(pivotValue, left, right); + if (left >= right) { + return left; + } + swap(left, right); + } + } + + public void fisherYatesShuffle(int n) { + for (int i = 0; i < n; ++i) { + int j = new Random().nextInt(n); + int tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } + } + + /*-----------------------AUXILIARY METHODS------------------------------*/ + + private int itemFromLeftPos(int pivot, int left, int right) { + for (int i = left; i < right; ++i) { + if (!lessThanOrEqual(array[i], pivot)) { + return i; + } + } + return right; + } + + private int itemFromRightPos(int pivot, int left, int right) { + for (int i = right - 1; i >= left; --i) { + if (lessThanOrEqual(array[i], pivot)) { + return i; + } + } + return left; + } + + private int choosePivotPos(int left, int right) { + return left + new Random().nextInt(right - left); + } + + + /*--------------------------RADIX SORT------------------------------*/ + + private boolean maxDigitLengthReached = false; + + public void radixSort() { + int n = 1; + while (!maxDigitLengthReached) { + countSort(n); + n *= 10; + } + } + + private void countSort(int n) { + maxDigitLengthReached = true; + int[] results = new int[array.length]; + int[] buckets = new int[10]; + count(buckets, n); + if (!maxDigitLengthReached) { + sumCount(buckets); + sort(buckets, results, n); + for (int i = 0; i < array.length; ++i) { + array[i] = results[i]; + numSwaps += 1; + } + } + } + + private void count(int[] buckets, int n) { + for (int i = 0; i < array.length; ++i) { + int value = array[i] / n; + int digit = value % 10; + if (value > 0) { + maxDigitLengthReached = false; + numComparisons += 1; + } + buckets[digit] += 1; + } + } + + private void sumCount(int[] buckets) { + for (int i = 1; i < buckets.length; ++i) { + buckets[i] += buckets[i - 1]; + } + } + + private void sort(int[] buckets, int[] results, int n) { + for (int i = array.length - 1; i >= 0; --i) { + int digit = (array[i] / n) % 10; + int pos = buckets[digit] - 1; + results[pos] = array[i]; + buckets[digit] -= 1; + } + } +} diff --git a/java-lab/BankersQueue/.gitignore b/java-lab/BankersQueue/.gitignore new file mode 100644 index 0000000..76f55d4 --- /dev/null +++ b/java-lab/BankersQueue/.gitignore @@ -0,0 +1,26 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +#out +out diff --git a/java-lab/BankersQueue/Bankers.iml b/java-lab/BankersQueue/Bankers.iml new file mode 100644 index 0000000..77ddee1 --- /dev/null +++ b/java-lab/BankersQueue/Bankers.iml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java-lab/BankersQueue/LICENSE b/java-lab/BankersQueue/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/java-lab/BankersQueue/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/java-lab/BankersQueue/README.md b/java-lab/BankersQueue/README.md new file mode 100644 index 0000000..9ba2b78 --- /dev/null +++ b/java-lab/BankersQueue/README.md @@ -0,0 +1,3 @@ +# BankersQueue +## Requisites +Import [**Jfreechart**](http://repo1.maven.org/maven2/org/jfree/jfreechart/1.5.0/jfreechart-1.5.0.jar) library to run the chart builder class. diff --git a/java-lab/BankersQueue/Test/BankersQueueTest.java b/java-lab/BankersQueue/Test/BankersQueueTest.java new file mode 100644 index 0000000..b9d3515 --- /dev/null +++ b/java-lab/BankersQueue/Test/BankersQueueTest.java @@ -0,0 +1,51 @@ +import org.junit.jupiter.api.Test; + +import java.util.Iterator; + +import static org.junit.jupiter.api.Assertions.*; + +class BankersQueueTest { + + @Test + void test_add_and_remove(){ + BankersQueue bq = new BankersQueue<>(); + assertTrue(bq.isEmpty()); + assertEquals(bq.size(), 0); + bq.add(3); + bq.add(4); + bq.add(43); + assertEquals(bq.size(), 3); + bq.remove(); + assertEquals(bq.size(), 2); + assertFalse(bq.isEmpty()); + } + + @Test + void test_element(){ + BankersQueue bq = new BankersQueue<>(); + bq.add(3); + bq.add(4); + bq.add(6); + assertEquals(bq.element(), 3); + bq.remove(); + assertEquals(bq.element(), 4); + } + + @Test + void test_iterator(){ + BankersQueue bq = new BankersQueue<>(); + bq.add(3); + bq.add(4); + bq.element(); + bq.add(54); + + Iterator it = bq.iterator(); + assertEquals(it.next(), 3); + assertTrue(it.hasNext()); + assertEquals(it.next(), 4); + assertTrue(it.hasNext()); + assertEquals(it.next(), 54); + assertFalse(it.hasNext()); + } + +} \ No newline at end of file diff --git a/java-lab/BankersQueue/src/BankClient.java b/java-lab/BankersQueue/src/BankClient.java new file mode 100644 index 0000000..04a2a07 --- /dev/null +++ b/java-lab/BankersQueue/src/BankClient.java @@ -0,0 +1,26 @@ +public class BankClient { + private int arrivalTime; + private int exitTime; + + public BankClient(int arrivalTime, int exitTime) { + this.arrivalTime = arrivalTime; + this.exitTime = exitTime; + } + + + public int getExitTime() { + return exitTime; + } + + public void setExitTime(int exitTime) { + this.exitTime = exitTime; + } + + public int getArrivalTime() { + return arrivalTime; + } + + public void setArrivalTime(int arrivalTime) { + this.arrivalTime = arrivalTime; + } +} diff --git a/java-lab/BankersQueue/src/BankSimulator.java b/java-lab/BankersQueue/src/BankSimulator.java new file mode 100644 index 0000000..7c6412f --- /dev/null +++ b/java-lab/BankersQueue/src/BankSimulator.java @@ -0,0 +1,54 @@ +public class BankSimulator { + private BankersQueue bank = new BankersQueue<>(); + private static final int numMaximumClients = 100; + private static final int clientTime = 15; + private static final int serviceTime = 120; + private static final int numMaxBankers = 10; + private float mean = 0; + private static float[] meanDataSet = new float[numMaxBankers]; + + void run() { + for (int numBankers = 1; numBankers <= numMaxBankers; ++numBankers) { + simulation(numBankers); + meanDataSet[numBankers - 1] = mean; + System.out.println(String.format("Simulació amb %d caixers: %.1f", numBankers, mean)); + mean = 0; + } + } + + private void simulation(int numBankers) { + for (int numCurrentClients = 0, time = 0; numCurrentClients < numMaximumClients; numCurrentClients++, time += clientTime) { + int exitTime = checkPreviousClients(numCurrentClients, time, numBankers); + bank.add(new BankClient(time, exitTime)); + mean += exitTime - time; + } + removeRemainingClients(); + mean = mean / numMaximumClients; + } + + private int checkPreviousClients(int numCurrentClients, int time, int numBankers) { + if (numCurrentClients < numBankers) + return time + serviceTime; + else { + BankClient firstClientOnQueue = bank.element(); + bank.remove(); + return (time >= firstClientOnQueue.getExitTime()) ? time + serviceTime : firstClientOnQueue.getExitTime() + serviceTime; + } + } + + private void removeRemainingClients() { + while (!bank.isEmpty()) { + bank.remove(); + } + } + + public float getMean(int i) { + return meanDataSet[i]; + + } + + public static void main(String[] args) { + BankSimulator main = new BankSimulator(); + main.run(); + } +} diff --git a/java-lab/BankersQueue/src/BankersQueue.java b/java-lab/BankersQueue/src/BankersQueue.java new file mode 100644 index 0000000..bfde7cd --- /dev/null +++ b/java-lab/BankersQueue/src/BankersQueue.java @@ -0,0 +1,90 @@ +import java.util.*; + +public class BankersQueue implements Queue, Iterable { + private ArrayList front; + private ArrayList back; + private int modCount = 0; + + public BankersQueue() { + front = new ArrayList<>(); + back = new ArrayList<>(); + } + + @Override + public void add(E e) { + back.add(e); + ++modCount; + } + + @Override + public void remove() { + checkIfEmpty(); + front.remove(front.size() - 1); + ++modCount; + } + + @Override + public E element() { + checkIfEmpty(); + return front.get(front.size() - 1); + } + + @Override + public boolean isEmpty() { + return front.isEmpty() && back.isEmpty(); + } + + @Override + public int size() { + return front.size() + back.size(); + } + + private void checkIfEmpty(){ + if(isEmpty()) + throw new NoSuchElementException(); + if (front.isEmpty()) + backToFront(); + } + + private void backToFront() { + ListIterator it = back.listIterator(back.size()); + while (it.hasPrevious()) { + front.add(it.previous()); + it.remove(); + } + } + + + @Override + public Iterator iterator() { + return new BankersIterator(); + } + + private class BankersIterator implements Iterator{ + private int expectedModCount = modCount; + ListIterator frontIt = front.listIterator(front.size()); + ListIterator backIt = back.listIterator(); + + @Override + public boolean hasNext() { + return frontIt.hasPrevious() || backIt.hasNext(); + } + + @Override + public E next() { + if(expectedModCount != modCount) + throw new ConcurrentModificationException(); + if(frontIt.hasPrevious()) + return frontIt.previous(); + else if(backIt.hasNext()) + return backIt.next(); + else + throw new NoSuchElementException(); + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + } +} diff --git a/java-lab/BankersQueue/src/ChartBuilder.java b/java-lab/BankersQueue/src/ChartBuilder.java new file mode 100644 index 0000000..53d3c44 --- /dev/null +++ b/java-lab/BankersQueue/src/ChartBuilder.java @@ -0,0 +1,66 @@ +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.data.category.CategoryDataset; +import org.jfree.data.category.DefaultCategoryDataset; + +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +public class ChartBuilder extends JFrame { + private BankSimulator bank = new BankSimulator(); + + private ChartBuilder() { + builder(); + } + + private void builder() { + CategoryDataset dataset = createDataset(); + JFreeChart chart = createChart(dataset); + BufferedImage image = chart.createBufferedImage(1200, 700); + buildImage(image); + } + + private JFreeChart createChart(CategoryDataset dataset) { + return ChartFactory.createBarChart( + "BankersQueue", + "Num Bankers", + "Minutes", + dataset, + PlotOrientation.VERTICAL, + false, true, false); + } + + private CategoryDataset createDataset() { + DefaultCategoryDataset dataset = new DefaultCategoryDataset(); + bank.run(); + dataset.setValue(bank.getMean(0) / 60, "Minutes", "1 banker"); + dataset.setValue(bank.getMean(1) / 60, "Minutes", "2 bankers"); + dataset.setValue(bank.getMean(2) / 60, "Minutes", "3 bankers"); + dataset.setValue(bank.getMean(3) / 60, "Minutes", "4 bankers"); + dataset.setValue(bank.getMean(4) / 60, "Minutes", "5 bankers"); + dataset.setValue(bank.getMean(5) / 60, "Minutes", "6 bankers"); + dataset.setValue(bank.getMean(6) / 60, "Minutes", "7 bankers"); + dataset.setValue(bank.getMean(7) / 60, "Minutes", "8 bankers"); + dataset.setValue(bank.getMean(8) / 60, "Minutes", "9 bankers"); + dataset.setValue(bank.getMean(9) / 60, "Minutes", "10 bankers"); + return dataset; + } + + private void buildImage(BufferedImage image) { + try { + ImageIO.write(image, "png", new File("queue.png")); + } catch (IOException exc) { + System.out.println("Error creating image."); + } + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + ChartBuilder ex = new ChartBuilder(); + }); + } +} diff --git a/java-lab/BankersQueue/src/Queue.java b/java-lab/BankersQueue/src/Queue.java new file mode 100644 index 0000000..6a713bb --- /dev/null +++ b/java-lab/BankersQueue/src/Queue.java @@ -0,0 +1,7 @@ +public interface Queue { + void add(E e); + void remove(); + E element(); + boolean isEmpty(); + int size(); +} diff --git a/java-lab/HeapQueue/.gitignore b/java-lab/HeapQueue/.gitignore new file mode 100644 index 0000000..a1c2a23 --- /dev/null +++ b/java-lab/HeapQueue/.gitignore @@ -0,0 +1,23 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* diff --git a/java-lab/HeapQueue/LICENSE b/java-lab/HeapQueue/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/java-lab/HeapQueue/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/java-lab/HeapQueue/README.md b/java-lab/HeapQueue/README.md new file mode 100644 index 0000000..c144494 --- /dev/null +++ b/java-lab/HeapQueue/README.md @@ -0,0 +1 @@ +# HeapQueue \ No newline at end of file diff --git a/java-lab/HeapQueue/Test/HeapQueueTest.java b/java-lab/HeapQueue/Test/HeapQueueTest.java new file mode 100644 index 0000000..c82d36e --- /dev/null +++ b/java-lab/HeapQueue/Test/HeapQueueTest.java @@ -0,0 +1,44 @@ +import org.junit.jupiter.api.Test; + +import java.util.NoSuchElementException; + +import static org.junit.jupiter.api.Assertions.*; + +class HeapQueueTest { + private HeapQueue heapQueue = new HeapQueue<>(); + + @Test + void test_add_remove(){ + heapQueue = new HeapQueue<>(); + heapQueue.add("Victor", 2); + heapQueue.add("Jordi", 6); + heapQueue.add("Manel", 6); + heapQueue.add("Fran", 10); + heapQueue.add("Albert", 13); + heapQueue.add("Pedro", null); + test_add(); + test_remove(); + } + + void test_add(){ + assertFalse(heapQueue.hasLeft(5) || heapQueue.hasRight(5)); + assertTrue(heapQueue.hasLeft(1) && heapQueue.hasRight(1)); + assertTrue(heapQueue.hasLeft(2) && !heapQueue.hasRight(2)); + assertTrue(heapQueue.hasParent(1)); + assertTrue(heapQueue.hasParent(3)); + } + + void test_remove(){ + assertEquals(heapQueue.remove(), "Albert"); + assertEquals(heapQueue.remove(), "Fran"); + assertEquals(heapQueue.remove(), "Jordi"); + assertEquals(heapQueue.remove(), "Manel"); + assertEquals(heapQueue.remove(), "Victor"); + assertEquals(heapQueue.remove(), "Pedro"); + try{ + heapQueue.remove(); + }catch (NoSuchElementException e){ + assertEquals(e.getMessage(), "Empty queue!"); + } + } +} \ No newline at end of file diff --git a/java-lab/HeapQueue/src/HeapQueue.java b/java-lab/HeapQueue/src/HeapQueue.java new file mode 100644 index 0000000..57150cc --- /dev/null +++ b/java-lab/HeapQueue/src/HeapQueue.java @@ -0,0 +1,159 @@ +import java.util.ArrayList; +import java.util.Collections; +import java.util.NoSuchElementException; + +/** + * This class represents a queue based on a heap structure. + * @param The value we want to store into the heapQueue its type can be anything + * @param