summaryrefslogtreecommitdiffstats
path: root/šola/p1/dn/7
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2023-12-17 23:17:03 +0100
committerAnton Luka Šijanec <anton@sijanec.eu>2023-12-17 23:17:03 +0100
commitb0324289066876915efb84a133eca039d8e8c8ee (patch)
tree76b06718de422ed0e5aacbd76c611ee4f82ff526 /šola/p1/dn/7
parentaoc11 (diff)
downloadr-b0324289066876915efb84a133eca039d8e8c8ee.tar
r-b0324289066876915efb84a133eca039d8e8c8ee.tar.gz
r-b0324289066876915efb84a133eca039d8e8c8ee.tar.bz2
r-b0324289066876915efb84a133eca039d8e8c8ee.tar.lz
r-b0324289066876915efb84a133eca039d8e8c8ee.tar.xz
r-b0324289066876915efb84a133eca039d8e8c8ee.tar.zst
r-b0324289066876915efb84a133eca039d8e8c8ee.zip
Diffstat (limited to 'šola/p1/dn/7')
-rw-r--r--šola/p1/dn/7/Blok.java33
-rw-r--r--šola/p1/dn/7/Oseba.java17
-rw-r--r--šola/p1/dn/7/Stanovanje.java95
3 files changed, 145 insertions, 0 deletions
diff --git a/šola/p1/dn/7/Blok.java b/šola/p1/dn/7/Blok.java
new file mode 100644
index 0000000..2ac1863
--- /dev/null
+++ b/šola/p1/dn/7/Blok.java
@@ -0,0 +1,33 @@
+import java.util.*;
+public class Blok {
+ private Stanovanje stanovanje;
+ public Blok(Stanovanje stanovanje) {
+ this.stanovanje = stanovanje;
+ }
+ public Oseba starosta() {
+ return this.stanovanje.starostaSosescine();
+ }
+ public int[][] razporeditev() {
+ int minx = Integer.MAX_VALUE;
+ int maxx = Integer.MIN_VALUE;
+ int miny = Integer.MAX_VALUE;
+ int maxy = Integer.MIN_VALUE;
+ for (int[] tuple : stanovanje.pozicije()) {
+ if (tuple[1] > maxx)
+ maxx = tuple[1];
+ if (tuple[2] > maxy)
+ maxy = tuple[2];
+ if (tuple[1] < minx)
+ minx = tuple[1];
+ if (tuple[2] < miny)
+ miny = tuple[2];
+ }
+ int[][] r = new int[maxx-minx+1][maxy-miny+1];
+ for (int i = 0; i < r.length; i++)
+ for (int j = 0; j < r[i].length; j++)
+ r[i][j] = -1;
+ for (int[] tuple : stanovanje.pozicije())
+ r[tuple[1]-minx][tuple[2]-miny] = tuple[0]; // TODO think again
+ return r;
+ }
+}
diff --git a/šola/p1/dn/7/Oseba.java b/šola/p1/dn/7/Oseba.java
new file mode 100644
index 0000000..2477ee9
--- /dev/null
+++ b/šola/p1/dn/7/Oseba.java
@@ -0,0 +1,17 @@
+import java.util.*;
+public class Oseba {
+ private String ip;
+ public char spol;
+ public int starost;
+ public Oseba(String ip, char spol, int starost) {
+ this.ip = ip;
+ this.spol = spol;
+ this.starost = starost;
+ }
+ public String toString() {
+ return String.format("%s, %c, %d", this.ip, this.spol, this.starost);
+ }
+ public boolean jeStarejsaOd(Oseba os) {
+ return this.starost > os.starost;
+ }
+}
diff --git a/šola/p1/dn/7/Stanovanje.java b/šola/p1/dn/7/Stanovanje.java
new file mode 100644
index 0000000..30db09f
--- /dev/null
+++ b/šola/p1/dn/7/Stanovanje.java
@@ -0,0 +1,95 @@
+import java.util.*;
+public class Stanovanje {
+ public Oseba[] stanovalci;
+ private Stanovanje[] sosedje = {null, null, null, null};
+ public Stanovanje(Oseba[] stanovalci) {
+ this.stanovalci = stanovalci;
+ }
+ public int steviloStanovalcev() {
+ return this.stanovalci.length;
+ }
+ public int steviloStarejsihOd(Oseba os) {
+ int r = 0;
+ for (int i = 0; i < this.stanovalci.length; i++)
+ if (this.stanovalci[i].jeStarejsaOd(os))
+ r++;
+ return r;
+ }
+ public int[] mz() {
+ int mž[] = {0, 0};
+ for (int i = 0; i < this.stanovalci.length; i++)
+ if (this.stanovalci[i].spol == 'M')
+ mž[0]++;
+ else
+ mž[1]++;
+ return mž;
+ }
+ public Oseba starosta() {
+ Oseba r = null;
+ for (int i = 0; i < this.stanovalci.length; i++)
+ if (r == null || this.stanovalci[i].jeStarejsaOd(r))
+ r = this.stanovalci[i];
+ return r;
+ }
+ public void nastaviSosede(Stanovanje levi, Stanovanje zgornji,
+ Stanovanje desni, Stanovanje spodnji) {
+ this.sosedje[0] = levi;
+ this.sosedje[1] = zgornji;
+ this.sosedje[2] = desni;
+ this.sosedje[3] = spodnji;
+ }
+ public Oseba starostaSosescine() {
+ Oseba r = this.starosta();
+ for (int i = 0; i < this.sosedje.length; i++) {
+ if (this.sosedje[i] == null)
+ continue;
+ if (this.sosedje[i].starosta() == null)
+ continue;
+ if (this.sosedje[i].starosta().jeStarejsaOd(r))
+ r = this.sosedje[i].starosta();
+ }
+ return r;
+ }
+ public Oseba[] sosedjeSosedov() {
+ List<Oseba> r = new ArrayList<Oseba>();
+ for (Stanovanje stanovanje : this.soseščina())
+ r.addAll(Arrays.asList(stanovanje.stanovalci));
+ return r.toArray(new Oseba[0]);
+ }
+ private Set<Stanovanje> soseščina() {
+ return this.soseščina(new HashSet<Stanovanje>());
+ }
+ private Set<Stanovanje> soseščina(Set<Stanovanje> obiskani) {
+ Set<Stanovanje> r = new HashSet<Stanovanje>();
+ if (obiskani.contains(this))
+ return r;
+ r.addAll(Arrays.asList(this.sosedje));
+ r.remove(null);
+ obiskani.add(this);
+ for (int i = 0; i < this.sosedje.length; i++)
+ if (this.sosedje[i] != null)
+ r.addAll(this.sosedje[i].soseščina(obiskani));
+ obiskani.remove(this);
+ return r;
+ }
+ public Set<int[]> pozicije () {
+ return this.pozicije(new HashSet<Stanovanje>(), 0, 0);
+ }
+ private Set<int[]> pozicije (Set<Stanovanje> obiskani, int x, int y) {
+ Set<int[]> r = new HashSet<int[]>();
+ if (obiskani.contains(this))
+ return r;
+ r.add(new int[]{this.stanovalci.length, x, y});
+ obiskani.add(this);
+ if (this.sosedje[0] != null)
+ r.addAll(this.sosedje[0].pozicije(obiskani, x-1, y));
+ if (this.sosedje[1] != null)
+ r.addAll(this.sosedje[1].pozicije(obiskani, x, y+1));
+ if (this.sosedje[2] != null)
+ r.addAll(this.sosedje[2].pozicije(obiskani, x+1, y));
+ if (this.sosedje[3] != null)
+ r.addAll(this.sosedje[3].pozicije(obiskani, x, y-1));
+ obiskani.remove(this);
+ return r;
+ }
+ }