From 6efe5cbcdabd724f81bd06678b529b6532b75e8c Mon Sep 17 00:00:00 2001 From: Timmmmofey <153191260+Timmmmofey@users.noreply.github.com> Date: Fri, 13 Dec 2024 01:11:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D1=8B=D0=B5=2031=20=D0=B8=2032?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- students/23K1302/23K1302-p31/pom.xml | 13 ++ .../java/ru/mirea/practice/s0000001/PROCS.txt | 4 + .../ru/mirea/practice/s0000001/Processor.java | 26 ++++ .../s0000001/ProcessorTreeManager.java | 78 ++++++++++++ .../mirea/practice/s0000001/TwoThreeTree.java | 117 ++++++++++++++++++ students/23K1302/23K1302-p32/pom.xml | 13 ++ .../practice/s0000001/JohnsonTrotter.java | 82 ++++++++++++ students/23K1302/pom.xml | 2 + 8 files changed, 335 insertions(+) create mode 100644 students/23K1302/23K1302-p31/pom.xml create mode 100644 students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/PROCS.txt create mode 100644 students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/Processor.java create mode 100644 students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/ProcessorTreeManager.java create mode 100644 students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/TwoThreeTree.java create mode 100644 students/23K1302/23K1302-p32/pom.xml create mode 100644 students/23K1302/23K1302-p32/src/main/java/ru/mirea/practice/s0000001/JohnsonTrotter.java diff --git a/students/23K1302/23K1302-p31/pom.xml b/students/23K1302/23K1302-p31/pom.xml new file mode 100644 index 000000000..90d8d8b04 --- /dev/null +++ b/students/23K1302/23K1302-p31/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K1302 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K1302-p31 + Задание 31 + diff --git a/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/PROCS.txt b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/PROCS.txt new file mode 100644 index 000000000..436134baa --- /dev/null +++ b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/PROCS.txt @@ -0,0 +1,4 @@ +2, Intel Pentium 4, 2.0, 256, 0.400, 664, 734 +5, Intel Itanium, 0.800, 96, 0.266, 365, 701 +6, AMD Athlon XP, 1.6, 256, 0.266, 701, 634 +1, IBM Power 4, 1.3, 16384, 0.400, 814, 1169 diff --git a/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/Processor.java b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/Processor.java new file mode 100644 index 000000000..e32353b35 --- /dev/null +++ b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/Processor.java @@ -0,0 +1,26 @@ +package ru.mirea.practice.s0000001; + +class Processor { + int key; + String name; + double clockSpeed; + int cacheSize; + double busSpeed; + int specInt; + int specFp; + + public Processor(int key, String name, double clockSpeed, int cacheSize, double busSpeed, int specInt, int specFp) { + this.key = key; + this.name = name; + this.clockSpeed = clockSpeed; + this.cacheSize = cacheSize; + this.busSpeed = busSpeed; + this.specInt = specInt; + this.specFp = specFp; + } + + @Override + public String toString() { + return key + "," + name + "," + clockSpeed + "," + cacheSize + "," + busSpeed + "," + specInt + "," + specFp; + } +} diff --git a/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/ProcessorTreeManager.java b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/ProcessorTreeManager.java new file mode 100644 index 000000000..48d5b99b3 --- /dev/null +++ b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/ProcessorTreeManager.java @@ -0,0 +1,78 @@ +package ru.mirea.practice.s0000001; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Scanner; + +public class ProcessorTreeManager { + private static final String FILE_NAME = "PROCS.TXT"; + private TwoThreeTree tree = new TwoThreeTree(); + + public void loadFromFile() throws IOException { + try (BufferedReader br = new BufferedReader(new FileReader(FILE_NAME))) { + String line; + while ((line = br.readLine()) != null) { + String[] parts = line.split(","); + int key = Integer.parseInt(parts[0]); + String name = parts[1]; + double clockSpeed = Double.parseDouble(parts[2]); + int cacheSize = Integer.parseInt(parts[3]); + double busSpeed = Double.parseDouble(parts[4]); + int specInt = Integer.parseInt(parts[5]); + int specFp = Integer.parseInt(parts[6]); + tree.insert(new Processor(key, name, clockSpeed, cacheSize, busSpeed, specInt, specFp)); + } + } + } + + + public void saveToFile() throws IOException { + try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILE_NAME))) { + for (Processor p : tree.getAllRecords()) { + bw.write(p.toString()); + bw.newLine(); + } + } + } + + public void run() throws IOException { + try (Scanner scanner = new Scanner(System.in)) { // Используем try-with-resources + while (true) { + System.out.print("Enter command: "); + String command = scanner.nextLine(); + switch (command.charAt(0)) { + case 'L': + tree.printTree(); + break; + case 'D': + int deleteKey = Integer.parseInt(command.substring(2)); + tree.delete(deleteKey); + break; + case 'A': + int addKey = Integer.parseInt(command.substring(2)); + Processor newProcessor = new Processor(addKey, "Default Name", 3.5, 8, 1600, 1000, 2000); + tree.insert(newProcessor); + break; + case 'S': + saveToFile(); + break; + case 'E': + return; // Автоматически закроет Scanner + default: + System.out.println("Invalid command"); + break; + } + } + } + } + + + public static void main(String[] args) throws IOException { + ProcessorTreeManager manager = new ProcessorTreeManager(); + manager.loadFromFile(); + manager.run(); + } +} diff --git a/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/TwoThreeTree.java b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/TwoThreeTree.java new file mode 100644 index 000000000..162d78a98 --- /dev/null +++ b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/TwoThreeTree.java @@ -0,0 +1,117 @@ +package ru.mirea.practice.s0000001; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +class TwoThreeTree { + private class Node { + boolean isLeaf; + List keys = new ArrayList<>(); + List children = new ArrayList<>(); + + Node(boolean isLeaf) { + this.isLeaf = isLeaf; + } + } + + private Node root = new Node(true); + + public void insert(Processor p) { + if (root.isLeaf && root.keys.size() < 2) { + root.keys.add(p); + root.keys.sort(Comparator.comparingInt(a -> a.key)); + } else { + Node newRoot = insert(root, p); + if (newRoot != null) { + Node oldRoot = root; + root = new Node(false); + root.keys.add(newRoot.keys.get(0)); + root.children.add(oldRoot); + root.children.add(newRoot); + } + } + } + + private Node insert(Node node, Processor p) { + if (node.isLeaf) { + node.keys.add(p); + node.keys.sort(Comparator.comparingInt(a -> a.key)); + if (node.keys.size() > 2) { + return split(node); + } + return null; + } + + int idx = 0; + while (idx < node.keys.size() && p.key > node.keys.get(idx).key) { + idx++; + } + Node newChild = insert(node.children.get(idx), p); + if (newChild != null) { + node.keys.add(idx, newChild.keys.get(0)); + node.children.add(idx + 1, newChild); + if (node.keys.size() > 2) { + return split(node); + } + } + return null; + } + + private Node split(Node node) { + Node sibling = new Node(node.isLeaf); + sibling.keys.add(node.keys.remove(2)); + if (!node.isLeaf) { + sibling.children.add(node.children.remove(2)); + sibling.children.add(node.children.remove(2)); + } + return sibling; + } + + public void delete(int key) { + // пустота + } + + public void printTree() { + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + for (int i = 0; i < size; i++) { + Node node = queue.poll(); + if (node.isLeaf) { + for (Processor p : node.keys) { + System.out.print(p.key + " "); + } + } else { + for (int j = 0; j < node.keys.size(); j++) { + System.out.print(node.keys.get(j).key + "-"); + } + for (Node child : node.children) { + queue.add(child); + } + } + System.out.print(" | "); + } + System.out.println(); + } + } + + public List getAllRecords() { + List records = new ArrayList<>(); + collectRecords(root, records); + return records; + } + + private void collectRecords(Node node, List records) { + if (node.isLeaf) { + records.addAll(node.keys); + } else { + for (Node child : node.children) { + collectRecords(child, records); + } + } + } +} diff --git a/students/23K1302/23K1302-p32/pom.xml b/students/23K1302/23K1302-p32/pom.xml new file mode 100644 index 000000000..fb09eb900 --- /dev/null +++ b/students/23K1302/23K1302-p32/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K1302 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K1302-p32 + Задание 32 + diff --git a/students/23K1302/23K1302-p32/src/main/java/ru/mirea/practice/s0000001/JohnsonTrotter.java b/students/23K1302/23K1302-p32/src/main/java/ru/mirea/practice/s0000001/JohnsonTrotter.java new file mode 100644 index 000000000..0172f578e --- /dev/null +++ b/students/23K1302/23K1302-p32/src/main/java/ru/mirea/practice/s0000001/JohnsonTrotter.java @@ -0,0 +1,82 @@ +package ru.mirea.practice.s0000001; + +import java.util.ArrayList; +import java.util.List; + +public final class JohnsonTrotter { + + private JohnsonTrotter() { + // dhtnsb + } + + static class Element { + int value; + boolean direction; + + Element(int value) { + this.value = value; + this.direction = false; + } + } + + public static void main(String[] args) { + int n = 4; + generatePermutations(n); + } + + public static void generatePermutations(int n) { + List elements = new ArrayList<>(); + for (int i = 1; i <= n; i++) { + elements.add(new Element(i)); + } + + printPermutation(elements); + + while (true) { + int largestMovableIndex = getLargestMovableIndex(elements); + if (largestMovableIndex == -1) { + break; + } + + Element largestMovable = elements.get(largestMovableIndex); + int swapIndex = largestMovable.direction ? largestMovableIndex + 1 : largestMovableIndex - 1; + swap(elements, largestMovableIndex, swapIndex); + + for (Element e : elements) { + if (e.value > largestMovable.value) { + e.direction = !e.direction; + } + } + + printPermutation(elements); + } + } + + private static int getLargestMovableIndex(List elements) { + int largestMovableIndex = -1; + for (int i = 0; i < elements.size(); i++) { + Element current = elements.get(i); + int neighborIndex = current.direction ? i + 1 : i - 1; + + if (neighborIndex >= 0 && neighborIndex < elements.size() && current.value > elements.get(neighborIndex).value) { + if (largestMovableIndex == -1 || current.value > elements.get(largestMovableIndex).value) { + largestMovableIndex = i; + } + } + } + return largestMovableIndex; + } + + private static void swap(List elements, int i, int j) { + Element temp = elements.get(i); + elements.set(i, elements.get(j)); + elements.set(j, temp); + } + + private static void printPermutation(List elements) { + for (Element e : elements) { + System.out.print(e.value + " "); + } + System.out.println(); + } +} diff --git a/students/23K1302/pom.xml b/students/23K1302/pom.xml index 7ecc7ec7c..3e4b24b64 100644 --- a/students/23K1302/pom.xml +++ b/students/23K1302/pom.xml @@ -45,5 +45,7 @@ 23K1302-p29 23K1302-p30.1 23K1302-p30.2 + 23K1302-p31 + 23K1302-p32