Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Commit 0ff9e51

Browse files
authored
Merge pull request #677 from Timmmmofey/features/lab31-32
Лабораторные 31 и 32
2 parents c0841a4 + 6efe5cb commit 0ff9e51

File tree

8 files changed

+335
-0
lines changed

8 files changed

+335
-0
lines changed

students/23K1302/23K1302-p31/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<artifactId>23K1302</artifactId>
7+
<groupId>ru.mirea.practice</groupId>
8+
<version>2024.1</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>23K1302-p31</artifactId>
12+
<description>Задание 31</description>
13+
</project>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2, Intel Pentium 4, 2.0, 256, 0.400, 664, 734
2+
5, Intel Itanium, 0.800, 96, 0.266, 365, 701
3+
6, AMD Athlon XP, 1.6, 256, 0.266, 701, 634
4+
1, IBM Power 4, 1.3, 16384, 0.400, 814, 1169
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package ru.mirea.practice.s0000001;
2+
3+
class Processor {
4+
int key;
5+
String name;
6+
double clockSpeed;
7+
int cacheSize;
8+
double busSpeed;
9+
int specInt;
10+
int specFp;
11+
12+
public Processor(int key, String name, double clockSpeed, int cacheSize, double busSpeed, int specInt, int specFp) {
13+
this.key = key;
14+
this.name = name;
15+
this.clockSpeed = clockSpeed;
16+
this.cacheSize = cacheSize;
17+
this.busSpeed = busSpeed;
18+
this.specInt = specInt;
19+
this.specFp = specFp;
20+
}
21+
22+
@Override
23+
public String toString() {
24+
return key + "," + name + "," + clockSpeed + "," + cacheSize + "," + busSpeed + "," + specInt + "," + specFp;
25+
}
26+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package ru.mirea.practice.s0000001;
2+
3+
import java.io.BufferedReader;
4+
import java.io.BufferedWriter;
5+
import java.io.FileReader;
6+
import java.io.FileWriter;
7+
import java.io.IOException;
8+
import java.util.Scanner;
9+
10+
public class ProcessorTreeManager {
11+
private static final String FILE_NAME = "PROCS.TXT";
12+
private TwoThreeTree tree = new TwoThreeTree();
13+
14+
public void loadFromFile() throws IOException {
15+
try (BufferedReader br = new BufferedReader(new FileReader(FILE_NAME))) {
16+
String line;
17+
while ((line = br.readLine()) != null) {
18+
String[] parts = line.split(",");
19+
int key = Integer.parseInt(parts[0]);
20+
String name = parts[1];
21+
double clockSpeed = Double.parseDouble(parts[2]);
22+
int cacheSize = Integer.parseInt(parts[3]);
23+
double busSpeed = Double.parseDouble(parts[4]);
24+
int specInt = Integer.parseInt(parts[5]);
25+
int specFp = Integer.parseInt(parts[6]);
26+
tree.insert(new Processor(key, name, clockSpeed, cacheSize, busSpeed, specInt, specFp));
27+
}
28+
}
29+
}
30+
31+
32+
public void saveToFile() throws IOException {
33+
try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILE_NAME))) {
34+
for (Processor p : tree.getAllRecords()) {
35+
bw.write(p.toString());
36+
bw.newLine();
37+
}
38+
}
39+
}
40+
41+
public void run() throws IOException {
42+
try (Scanner scanner = new Scanner(System.in)) { // Используем try-with-resources
43+
while (true) {
44+
System.out.print("Enter command: ");
45+
String command = scanner.nextLine();
46+
switch (command.charAt(0)) {
47+
case 'L':
48+
tree.printTree();
49+
break;
50+
case 'D':
51+
int deleteKey = Integer.parseInt(command.substring(2));
52+
tree.delete(deleteKey);
53+
break;
54+
case 'A':
55+
int addKey = Integer.parseInt(command.substring(2));
56+
Processor newProcessor = new Processor(addKey, "Default Name", 3.5, 8, 1600, 1000, 2000);
57+
tree.insert(newProcessor);
58+
break;
59+
case 'S':
60+
saveToFile();
61+
break;
62+
case 'E':
63+
return; // Автоматически закроет Scanner
64+
default:
65+
System.out.println("Invalid command");
66+
break;
67+
}
68+
}
69+
}
70+
}
71+
72+
73+
public static void main(String[] args) throws IOException {
74+
ProcessorTreeManager manager = new ProcessorTreeManager();
75+
manager.loadFromFile();
76+
manager.run();
77+
}
78+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package ru.mirea.practice.s0000001;
2+
3+
import java.util.ArrayList;
4+
import java.util.Comparator;
5+
import java.util.LinkedList;
6+
import java.util.List;
7+
import java.util.Queue;
8+
9+
class TwoThreeTree {
10+
private class Node {
11+
boolean isLeaf;
12+
List<Processor> keys = new ArrayList<>();
13+
List<Node> children = new ArrayList<>();
14+
15+
Node(boolean isLeaf) {
16+
this.isLeaf = isLeaf;
17+
}
18+
}
19+
20+
private Node root = new Node(true);
21+
22+
public void insert(Processor p) {
23+
if (root.isLeaf && root.keys.size() < 2) {
24+
root.keys.add(p);
25+
root.keys.sort(Comparator.comparingInt(a -> a.key));
26+
} else {
27+
Node newRoot = insert(root, p);
28+
if (newRoot != null) {
29+
Node oldRoot = root;
30+
root = new Node(false);
31+
root.keys.add(newRoot.keys.get(0));
32+
root.children.add(oldRoot);
33+
root.children.add(newRoot);
34+
}
35+
}
36+
}
37+
38+
private Node insert(Node node, Processor p) {
39+
if (node.isLeaf) {
40+
node.keys.add(p);
41+
node.keys.sort(Comparator.comparingInt(a -> a.key));
42+
if (node.keys.size() > 2) {
43+
return split(node);
44+
}
45+
return null;
46+
}
47+
48+
int idx = 0;
49+
while (idx < node.keys.size() && p.key > node.keys.get(idx).key) {
50+
idx++;
51+
}
52+
Node newChild = insert(node.children.get(idx), p);
53+
if (newChild != null) {
54+
node.keys.add(idx, newChild.keys.get(0));
55+
node.children.add(idx + 1, newChild);
56+
if (node.keys.size() > 2) {
57+
return split(node);
58+
}
59+
}
60+
return null;
61+
}
62+
63+
private Node split(Node node) {
64+
Node sibling = new Node(node.isLeaf);
65+
sibling.keys.add(node.keys.remove(2));
66+
if (!node.isLeaf) {
67+
sibling.children.add(node.children.remove(2));
68+
sibling.children.add(node.children.remove(2));
69+
}
70+
return sibling;
71+
}
72+
73+
public void delete(int key) {
74+
// пустота
75+
}
76+
77+
public void printTree() {
78+
Queue<Node> queue = new LinkedList<>();
79+
queue.add(root);
80+
while (!queue.isEmpty()) {
81+
int size = queue.size();
82+
for (int i = 0; i < size; i++) {
83+
Node node = queue.poll();
84+
if (node.isLeaf) {
85+
for (Processor p : node.keys) {
86+
System.out.print(p.key + " ");
87+
}
88+
} else {
89+
for (int j = 0; j < node.keys.size(); j++) {
90+
System.out.print(node.keys.get(j).key + "-");
91+
}
92+
for (Node child : node.children) {
93+
queue.add(child);
94+
}
95+
}
96+
System.out.print(" | ");
97+
}
98+
System.out.println();
99+
}
100+
}
101+
102+
public List<Processor> getAllRecords() {
103+
List<Processor> records = new ArrayList<>();
104+
collectRecords(root, records);
105+
return records;
106+
}
107+
108+
private void collectRecords(Node node, List<Processor> records) {
109+
if (node.isLeaf) {
110+
records.addAll(node.keys);
111+
} else {
112+
for (Node child : node.children) {
113+
collectRecords(child, records);
114+
}
115+
}
116+
}
117+
}

students/23K1302/23K1302-p32/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<artifactId>23K1302</artifactId>
7+
<groupId>ru.mirea.practice</groupId>
8+
<version>2024.1</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>23K1302-p32</artifactId>
12+
<description>Задание 32</description>
13+
</project>
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package ru.mirea.practice.s0000001;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public final class JohnsonTrotter {
7+
8+
private JohnsonTrotter() {
9+
// dhtnsb
10+
}
11+
12+
static class Element {
13+
int value;
14+
boolean direction;
15+
16+
Element(int value) {
17+
this.value = value;
18+
this.direction = false;
19+
}
20+
}
21+
22+
public static void main(String[] args) {
23+
int n = 4;
24+
generatePermutations(n);
25+
}
26+
27+
public static void generatePermutations(int n) {
28+
List<Element> elements = new ArrayList<>();
29+
for (int i = 1; i <= n; i++) {
30+
elements.add(new Element(i));
31+
}
32+
33+
printPermutation(elements);
34+
35+
while (true) {
36+
int largestMovableIndex = getLargestMovableIndex(elements);
37+
if (largestMovableIndex == -1) {
38+
break;
39+
}
40+
41+
Element largestMovable = elements.get(largestMovableIndex);
42+
int swapIndex = largestMovable.direction ? largestMovableIndex + 1 : largestMovableIndex - 1;
43+
swap(elements, largestMovableIndex, swapIndex);
44+
45+
for (Element e : elements) {
46+
if (e.value > largestMovable.value) {
47+
e.direction = !e.direction;
48+
}
49+
}
50+
51+
printPermutation(elements);
52+
}
53+
}
54+
55+
private static int getLargestMovableIndex(List<Element> elements) {
56+
int largestMovableIndex = -1;
57+
for (int i = 0; i < elements.size(); i++) {
58+
Element current = elements.get(i);
59+
int neighborIndex = current.direction ? i + 1 : i - 1;
60+
61+
if (neighborIndex >= 0 && neighborIndex < elements.size() && current.value > elements.get(neighborIndex).value) {
62+
if (largestMovableIndex == -1 || current.value > elements.get(largestMovableIndex).value) {
63+
largestMovableIndex = i;
64+
}
65+
}
66+
}
67+
return largestMovableIndex;
68+
}
69+
70+
private static void swap(List<Element> elements, int i, int j) {
71+
Element temp = elements.get(i);
72+
elements.set(i, elements.get(j));
73+
elements.set(j, temp);
74+
}
75+
76+
private static void printPermutation(List<Element> elements) {
77+
for (Element e : elements) {
78+
System.out.print(e.value + " ");
79+
}
80+
System.out.println();
81+
}
82+
}

students/23K1302/pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,7 @@
4545
<module>23K1302-p29</module>
4646
<module>23K1302-p30.1</module>
4747
<module>23K1302-p30.2</module>
48+
<module>23K1302-p31</module>
49+
<module>23K1302-p32</module>
4850
</modules>
4951
</project>

0 commit comments

Comments
 (0)