summaryrefslogtreecommitdiffstats
path: root/šola/p1/dn/7/Stanovanje.java
diff options
context:
space:
mode:
Diffstat (limited to 'šola/p1/dn/7/Stanovanje.java')
-rw-r--r--šola/p1/dn/7/Stanovanje.java95
1 files changed, 95 insertions, 0 deletions
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;
+ }
+ }