From 8fe0d0e323f3baed06c66a5582d51c0fe06302d6 Mon Sep 17 00:00:00 2001 From: L3o15 Date: Mon, 12 May 2025 19:12:33 +0200 Subject: [PATCH] World building --- .../it/arnaldo/unibs/tamagolem/Edge.class | Bin 449 -> 0 bytes .../it/arnaldo/unibs/tamagolem/Element.class | Bin 1512 -> 1512 bytes .../unibs/tamagolem/ElementGraph.class | Bin 2901 -> 2959 bytes .../arnaldo/unibs/tamagolem/ElementLink.class | Bin 687 -> 687 bytes .../it/arnaldo/unibs/tamagolem/Game.class | Bin 291 -> 2285 bytes .../it/arnaldo/unibs/tamagolem/Graph.class | Bin 3054 -> 0 bytes .../unibs/tamagolem/GraphElement.class | Bin 1647 -> 1647 bytes .../it/arnaldo/unibs/tamagolem/Player.class | Bin 297 -> 845 bytes .../arnaldo/unibs/tamagolem/TamaGolem.class | Bin 306 -> 1391 bytes .../unibs/tamagolem/TamaGolemMain.class | Bin 1295 -> 716 bytes .../unibs/tamagolem/WorldBuilder.class | Bin 5381 -> 5561 bytes src/LinearSystem.java | 140 ++++++++++++++ src/TamaGolemMain.java | 3 + src/WorldBuilder.java | 182 ++++++++++-------- 14 files changed, 245 insertions(+), 80 deletions(-) delete mode 100644 out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Edge.class delete mode 100644 out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Graph.class create mode 100644 src/LinearSystem.java diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Edge.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Edge.class deleted file mode 100644 index 8f2be2a44c818b2b7b9bf36a64a6d9e3fd739b68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449 zcmah_%TB^T6g^WaNU4B`Pc-Tdy09PMV`J1bL0w4LPob6}Z6_&3zsm(Nap4E}QN}aX zy_w9tb8hC`d+z!A{`drNiJk)sl^SdpYp4pe=ki7RiOgdEF`P$}LZEt~GF4m&RQiK) z9qXvq;J9eO6*yLfFY`<$Q|&J^6)yZjrZUz^l=?T*I1;d*bDau^z%ZLGT83s7+Q3a0 z9RsVck&0(#R6huU!I-RTJtes{R9W<}Ov5N2$uME1Gt?8AjAgD2{wvzWOf3XXhySQK z7jT~RGM_}Zs%$o**gGTkUaIWOtd0}vvS>|(mn$;DXf89wGIJSvwZ+&aO8DDm?t1SK zUT=k(ceuiaceFzLjdcs#j5}liwAt9l(}cqg4b}ngmyccS5wTM_SClU^*{JCnqo_$> IpUA?&4_47numAu6 diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Element.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Element.class index 3904ea8402d0e1464fb7b2b749decbba595d5b01..e92c92b099ad3e1c16557dc9262f8be20aab52d1 100644 GIT binary patch delta 29 lcmaFC{eoNI)W2Q(7#JAr8G_gum>3z9CL1y3z9CL1ysycutX81>aK2V*)_@2{%&zgPcX{W)-dzVq?-tGB>L#wVR| zz1ktnT8niq>)D`@+Zh{()g)rc_L}DY-i~CuhBXjNT!`;!(d9UH7Q>$q0DgjiBAYahDUE^m5Ie z{svm4;qw;riJo)aVTc<8XuYrzs#*(!Y-*fBl|fRGTWGBF&l@ttX#=}T-s=tsBxB#H0QNl zxLR=>siv~BnU&5DWY#nJ>ZFq{VQ8X0k!I#(Z68w1fb>_Di90_dZmFYCk071%f?bSXI2H@ar)5W@mx#nxIjNDA%Jx;hzP*d0!^rhGn_N%bB&Jt$c0pA<+s1fuxN6mTGOAa-s zICgmA&wDvcacbhv*rZ&;5Dic*rbD58MU=8g3@j0oONp|W7RtE75(cSYgb<@FO-tP% zLZXt_!(g|-77Dn)0G1F#T;!6xNhz_k$A%Pc%o(?TQ)^LXQ6Q-$w8h0i86(`5l_O}BJKQ7q7h*J`1ONa4 delta 964 zcmYk4%X17-6o<^XbuKc4#6yE>R|%OlLESP5wF~;@6o=OX6&^>G0Uj4n?^?Yn1zk z%}B7zqnn-noLOV-Qbhdkf!glgiS(pPg4KH1!Wm0t2a{9NDTNtr>~ZK@OoeP{tGfGp8nZQt~C3GCEi+U@3F?qT}En=alj>tMxtew}`tR_8`8|s0($aUn2u^rJC32*BPOH2lB*zgHRf;EMBnT@$QQx;F zPh{^aHmrTmX2{bniOxcG%&N5J>thn-iXDkqpfZrBCl=Jx?lxO`%k~C7U<{j;!GU3G znf;c119=9Ap8xqQKl2=U{^x))zm=+oPsbi3Ox%&n#6OktqS78--|E9&J m-lkdD|D@xGP%@d83WFKhUOzL%75Q$73H@9Yv)r|~N9A9YNt-bM diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/ElementLink.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/ElementLink.class index c17b9eb56915cad73d0db8780c35ce931c9c4ea1..65a9cef228e158830c8375bbb7c7bfe69e068c3a 100644 GIT binary patch delta 17 ZcmZ3_x}KHe)W2Q(7#JArH*zdz0sua$22ub3 delta 17 ZcmZ3_x}KHe)W2Q(7#J9AH*zdz0suas22cP1 diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Game.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Game.class index 6e31fa2b1cdf77d1aa2b60d70e0380b20b7ef6c6..c74285db7c9e65cc6c9dcedfbd1a723f63800b0c 100644 GIT binary patch literal 2285 zcmbtVT~|{_6x{WFQxA?q%IfbkQHs zzIFAnKcjY4YJKPr=uhfHSNGf-7KyOZhmu9+%*i=>&e`Y8nZN#d{U?Br;3Uz3P75&` zaU=x#cjPmfb)~nRUD@1GB`uJcbv#GU33N`S*SgV#ZVO2pr(g?=Iyx%@Pr7A4TlbvJ zT2{-d-1c2n%`VBR60r7Mxvzp-0$1~Gj0>Sv&cOHD=rh<2&uODOZDRm~0`_x1aLeEUa{eW872_5rY)s;sK<^RdkEE^$!~?(X zmFYXRm|ix7ovltdf}bFk|6;8@KU+z~wf?L^WbzNXg@{xI>3@gbhPP$J@>gFsz)7S=l4mNuL%TG?Ruxtj{no7xs!6{(Aa`sW;gWZ9Zx;3S2tC#DmPtf2J(JMx@$6U%)X(F z>54<9F1L%qT(X=%k|l{^=0%%eRsOS#El$&ni3sa0m+N|an3m+&v@C4EF6;NgyjHf3 zE{#}blOL*!+V>Q*8aPy}a$qc(fkEY<_O)~)W>&TiP0t;gMv8(88raM`bSU`GRltqw zY^j3J!V@Z4^y@)MEjotYZbQ>e(eF=P(#Mk)7!ndYvHw4Cy zuB78V^LJG?>g}kL7iCHN!M?!H&Artyj6fgqqPnU!p7;IT`d;pMV>fA999Q@E)CuNK zo9v^xoNK-s4TuHlxJQj?!h%Q^A5OYc*A~ zK$a$sWqndI7PbX0wKwIciZaJ#4(|>Qgig+Hz8I7S%ybV|PIRtuuz7Hw-w(KRX&vJ_ zl=&SZbNwZ(%#D}m$-MOv{V%BRz#_lT(gQ?}p_`v1dWk(q)Fo;&kv|?{nL8qd=Za7= zC!1)7%xl7!1U|+mjgzxnja5AJ8?0X_L`Nk;WnTzwM+OaOf&7WiJ#RV>p6L7tj|pdT zZa%sHP3PegomXJuGR}W9UGuK&Fzo&V4E=!%0<)>u#t%an^M87UE3u6`saQD`FIVCt z7595;=HeGCBb8Jrrz$hCGqIFA6Yrc!yu#EFZtVWpwJ~G;ikpUs1H8+nhs$ex2pnMU zs0@=NAAJ9MFv8D8+~6CS!zk|I3JZD_1&qVtBWKF;B#N@ZT@UYD0iQC55z_F4QU|@~ zP^8pJj4W0u#fX%~XOv8XOk#~vf_@jUPRXL>=S1$n7x9esja4<5+PiAD4W^qrk_XIY1=74g9wP%E JkYr-u2LMZA4k!Qs diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Graph.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Graph.class deleted file mode 100644 index a801d79d73b645926a559953ecdf72940325c296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3054 zcmai0OKcn06+Mrn_=eQTmSv4&$(GH?mMiMVSaRf6lvRIfyL2cikrc_al*S`*M2$=i z6>{WX(+EY&*6) zA`tA1Pe-63A`#V54_zQ;y9u-8nE7lmvFh0K<%DY%%v>>V6%yx5=E{=4-P zIbU_{eBxB8WZp>IWjBfj1eMoaI-0Ospw7zXtTHo6KisW0CM67kgO3S#mWEL@;|Yaj zFB9)frBd7E1zq zI^#9jr7HSlJr1Ko;)sqfpi`jfVWjF70l8$B$E@qDE6Yj$htZ{@8$ALc$5S^~eb;6Z zA*?kHP3YZo02qXJJjv8;8~idp5dRkC7k z$&3xetl04=E?`{I>e>HcN+p~4bd(gHP&+1hLIgc6@qD%F9^)rWCtEB;F{Rq=BC9_; z%dWWO373?5PR9$1HuZ`Jr;F?%leM10i#jgDWKor#CHDQNqF6vy!qTybT$R>dkw;CJ zeHSd)?7TYmK%9Fu*gBR~S4h%bb&5b_(#|=iyIP_=P{U`{ZNusR(`d;Nk}7njn5FT~ zwCz}9tA%;1G-b}`scA|V7tH*$S+do-q71o9HXFPBajw0gLC;aUeA*Z8l@1pLMebeSxF{flGg$? z&m-vVHM%w+y7s*X*|mv=%m#M8hsIxeCXVMKRJrbknk~&RP^4y$Z;TbZ#1*JjK?z#% zs}jOQ7|Pn{dKZnGXwK~0-?o80_t6r-%)=1s;ZZOYNxXzp(7>uKw|jk@5SwV+tv{v>pV(SlHA>Oz#){g8aU?7#u^ z;2@GblM8%njG`SgID~oLm(by1JjP6WxUUSCS&tL>s)vW!S8z*q_ElUXwjG$`^u9*i z*BPS)b)R9c#0~Fv_){F)f)GugddGW{759(#hm?ZcuBza}Pj^?~Cn@;wM}LLErs42! z5Xc03ScZETnaqSJ4R}%=rKgm17hjoK-~Lb?nGd(gJEAzjc5!xh;~9dfvZ9S^1xp=j zx&lTeUXQ>Qq7qE`B&qauyzHkMoMY;&o_Mo0{9{B~8|6>Xu!#$qrt}8Je!B@R)4GA@ z(wmqfJEuomTYrz4z*y`1(V>u%Gl8MH;9%GYx4w>r4S5?+S1bo^p{u7cdKX`#Z>`t!W@zIr zAtOB3XK0s|B$bpM_uPKqx&3)a<#Y=#(|y%(LGA4O5nc=qYKF!frwwUnw~_Mm(imxk zTeQ9(V9?v@E!=yUAB^;>%r%CIJO~)cs?Zf3!>wtA^D{4p@2zjYUX6OR8m-;;!33JR zRp83i@v!A7KI?a~l1HFSoyP8vT=AK4G8y zo3F(NWJDX^igC<}0nCXLctM=Rj5x=)={PKL5sSj)`|b*s#7)YtQuhX@nxfzx>|(@D ze1rWYncI-pSz+eThHp}*;Wd7C_)l*#w(7euqaDI4lp^>SGTu`SeQz>TIwaP*h z6Rd)#Q+%z=*#lykXkQ|mkBE7E3*RR7duj6;F0x(v#WdDfkr0N&7+%LEvi)Oh;0=6- zEvg!04lVVOZGJ6EA)!f3Nz8c7o#D*eLcQ3lvAg-(LO^UWiILi6l&VJYA58d4_L#rv OfWKx|Z!$&zZ~YfqU6D-y diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/GraphElement.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/GraphElement.class index 7eaeb70b345426f0e60eacf6cdaec15679011b96..d5133d592bb81c0e55351b6b3d8fe4358bac6fb0 100644 GIT binary patch delta 17 ZcmaFQ^PY#})W2Q(7#JArH*%!20RTq;2BZK0 delta 17 ZcmaFQ^PY#})W2Q(7#J9AH*%!20RTq!2BH7} diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Player.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Player.class index cd28b1125fc26303ef58b601162fd7bbf1ee98fa..d7be542c418bbef8348e29acc9f5da375a12a5fb 100644 GIT binary patch literal 845 zcmb7?+e#xr5QhKGY0P9|Vh-vaJVbAj2+jk z-~;$jvei9tcijYGZ>qbitG>UgtDj#Uo&X$S*G39y3mFGlvFSpgFX1+xu!k4-t^iJaOz>{Zu5SaF&ArJao3VohA zGwMQ6!MpG2CeK8YmhY((^HjBFYhIn9NCCgAB<$L2*xXATEx!4W{_S2A%c1vO=-vuR zjr)31XwXPrzqW{ zd}~tH$ySgdnjhTc?E2Fz?`wrF(ZBo$4oN<;6 g#z_KZ7=}%3QIxLl@8t5o$<+nPNt@dQY#6DXU)egkkpKVy delta 118 zcmX@hwvvhK)W2Q(7#J9A83ZPB>9esja4<3`PA*_noNUe*J6VxQCV-uR2`JCNzzBq_ z3~WG>6UfsC^BEXewYD=bZUhQ2F>nD%kTe4WGXpn}o;fiy3W$H>43B$*ia0XJz2 A+W-In diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/TamaGolem.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/TamaGolem.class index a1269ae4b7350323d63c2c5915d42994822a09c6..acce0351e69549c3aefac02e1dab7ad518a22e08 100644 GIT binary patch literal 1391 zcma)5T~E_c7=BK-QMYxlA!Fi1K1A4tQom705EL{d^CKC~z}?w)oW-uit|j5GnCPuH zUSJ|2XkxtfM;YJKHe-PVxjA1w&&T`pJ%9fG_yyn*$_XflsEBHap^qWG#do-Fa;v4k ztZ#{i%h0!AScbdE5GfREahyY3MM6Uo8pD*~>fEuo*|c@fGU^@Ol_{A-ZjwCV4ItPjaZZ!Z3MC5UW864DqVbvbgIxf?@u684H#FQb^55yy??Kx<8CWG89?pJB*%Trf?cM zyj_;wVjcOjs6EaCATh5aj*CrG)Mp5UAysvGt?v8-@a@bJM<+{wLPaHo*FX8{%#&~vZF9TZK=?sQK&PiH$mn3yQ_3UkAc>G zbQZ%jjWe`+jfj6gTRH$M<@ceMej>GTfPsCazxmJtjf05Nn4mFe8s?z;j5lyIWUTpn zATJpYagpI8(!u&N!*5LPu{|PbLg$+@R$6?58vTN3MA8N3g6hX8+3}w0 zbKUB5nD=F*#Tb9esja4<5cO#a2FGWj55!ent~`2cnXCZIe610xW! zGOz(jP9RSo%x7R=)!NR$xDhD8#J~k4LDCEi%naN>k_XIY1=74g9wP%EkYr-u2LP`y B4Iuyk diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/TamaGolemMain.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/TamaGolemMain.class index a8e8a94879c860f407a2ce539ad4bd4d4f7770ce..4b32820cf2d8c44f1eef46b0b388fda9b02b8271 100644 GIT binary patch delta 232 zcmeC@I>X9!>ff$?3=9nR3>p);E-?6a(=XfTHq1k_XCG0P102;ABu@PzI?5vhBfo85npsF|Z5qZe!rz!5|vG m5h%gL05XJ+ff-1$GjISQ4+9sHVZ00~45~mmMg}#oYIOjLOC*>8 literal 1295 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 LX!S>X^r!y;%xA}o literal 5381 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 0) { + int[] lambdaValues = new int[indipendentVariables]; + for (int i = 0; i < indipendentVariables; i++) { + lambdaValues[i] = (rand.nextInt(n) + 1); // valori tra 1 e 9 + } + + solutions = constructSolution(extendedMatrix, lambdaValues, rank); + if (validNumbers(solutions)) return solutions; + } + + throw new IllegalStateException("Impossibile trovare una solutions intera senza zeri"); + } + + private boolean validNumbers(int[] x) { + boolean positive = false; + boolean negative = false; + for (int xi : x) { + if (xi > 0) positive = true; + else if (xi < 0) negative = true; + if (xi == 0) return false; + } + return positive && negative; + } + + private int[] constructSolution(int[][] extendedMatrix, int[] parameters, int rank) { + int[] x = new int[m]; + Arrays.fill(x, 0); + + List pivotCol = new ArrayList<>(); + boolean[] isFree = new boolean[m]; + Arrays.fill(isFree, true); + + for (int i = 0; i < rank; i++) { + int col = 0; + while (col < m && extendedMatrix[i][col] == 0) col++; + pivotCol.add(col); + isFree[col] = false; + } + + int paramIndex = 0; + for (int i = 0; i < m; i++) { + if (isFree[i]) { + x[i] = parameters[paramIndex++]; + } + } + + for (int i = rank - 1; i >= 0; i--) { + int pivot = pivotCol.get(i); + int val = extendedMatrix[i][m]; + for (int j = pivot + 1; j < m; j++) { + val -= extendedMatrix[i][j] * x[j]; + } + + if (val % extendedMatrix[i][pivot] != 0) { + return new int[m]; // soluzione non intera -> rifiutiamo + } + + x[pivot] = val / extendedMatrix[i][pivot]; + } + + return x; + } + + private int gauss(int[][] mat) { + int row = 0; + for (int col = 0; col < m && row < n; col++) { + int pivot = row; + for (int i = row + 1; i < n; i++) { + if (Math.abs(mat[i][col]) > Math.abs(mat[pivot][col])) { + pivot = i; + } + } + + if (mat[pivot][col] == 0) continue; + + int[] temp = mat[row]; + mat[row] = mat[pivot]; + mat[pivot] = temp; + + for (int i = row + 1; i < n; i++) { + int a = mat[i][col]; + int b = mat[row][col]; + if (a == 0) continue; + + int lcm = lcm(Math.abs(a), Math.abs(b)); + int f1 = lcm / Math.abs(a); + int f2 = lcm / Math.abs(b); + if (a * b < 0) f2 = -f2; + + for (int j = col; j <= m; j++) { + mat[i][j] = mat[i][j] * f1 - mat[row][j] * f2; + } + } + + row++; + } + return row; + } + + private int gcd(int a, int b) { + return b == 0 ? a : gcd(b, a % b); + } + + private int lcm(int a, int b) { + return a / gcd(a, b) * b; + } +} diff --git a/src/TamaGolemMain.java b/src/TamaGolemMain.java index 6cd5764..8df206c 100644 --- a/src/TamaGolemMain.java +++ b/src/TamaGolemMain.java @@ -1,8 +1,11 @@ package it.arnaldo.unibs.tamagolem; + import java.util.*; + public class TamaGolemMain { public static void main(String[] args) { System.out.println("TamaGolem"); WorldBuilder.buildWorld(); + } } \ No newline at end of file diff --git a/src/WorldBuilder.java b/src/WorldBuilder.java index 5811e32..94f44ed 100644 --- a/src/WorldBuilder.java +++ b/src/WorldBuilder.java @@ -7,104 +7,126 @@ public class WorldBuilder { Element[] allElements = Element.values(); Random rand = new Random(); // da cambiare il numero a 8 - int numElements = 3 + rand.nextInt(3); + //int numElements = 3 + rand.nextInt(8); + int numElements = 5; List selectedElements = new ArrayList<>(Arrays.asList(allElements)); Collections.shuffle(selectedElements); selectedElements = selectedElements.subList(0, numElements); ElementGraph world = new ElementGraph(); - HashMap elementStrengthNumber = new HashMap<>(); - HashMap elementStrengthSum = new HashMap<>(); - HashMap elementWeaknessPointToAssign = new HashMap<>(); - HashMap elementWeaknessPoint = new HashMap<>(); - - int numMaxOfPossibleStrength = (numElements * (numElements - 1) / 2) - numElements; - System.out.println(numMaxOfPossibleStrength); - int index = 0; + HashMap> linkDirections = new HashMap<>(); for (Element element : selectedElements) { - index++; - int randomNumber = rand.nextInt(numElements - 2); - if (numMaxOfPossibleStrength - randomNumber < 0) { - randomNumber = numMaxOfPossibleStrength; - numMaxOfPossibleStrength = 0; - } else { - numMaxOfPossibleStrength -= randomNumber; - } - - if (index == numElements) { - randomNumber = numMaxOfPossibleStrength; - } - int strengthNumber = 1 + randomNumber; - int weaknessNumber = numElements - 1 - strengthNumber; - // int strengthSum = Math.max(strengthNumber, weaknessNumber) + rand.nextInt(10); - elementStrengthNumber.put(element, strengthNumber); - elementWeaknessPoint.put(element, weaknessNumber); - } - - - Map graphElementMap = new HashMap<>(); - for (Element el : selectedElements) { - GraphElement ge = new GraphElement(el); - world.addElement(ge); - graphElementMap.put(el, ge); - } - - // Pairing e bilanciamento - List possibleInteractions = new ArrayList<>(); - for (Element attacker : selectedElements) { - for (Element defender : selectedElements) { - if (!attacker.equals(defender)) { - possibleInteractions.add(new Element[]{attacker, defender}); + HashMap links = new HashMap<>(); + Element followingElement = selectedElements.get((selectedElements.indexOf(element) + 1) % selectedElements.size()); + for (Element el : selectedElements) { + if (el == followingElement) { + links.put(el, 1); + } else if (el != element) { + links.put(el, 1); } } + + linkDirections.put(element, links); } - Collections.shuffle(possibleInteractions); + for (Element element : selectedElements) { + HashMap elementLinks = linkDirections.get(element); + for (Element el : selectedElements) { + if (el == element) { + continue; + } - Set alreadyUsed = new HashSet<>(); - - for (Element[] pair : possibleInteractions) { - Element attacker = pair[0]; - Element defender = pair[1]; - - String key = attacker.name() + "-" + defender.name(); - String reverseKey = defender.name() + "-" + attacker.name(); - if (alreadyUsed.contains(key) || alreadyUsed.contains(reverseKey)) continue; - - int attackerRemaining = elementStrengthNumber.get(attacker); - int defenderRemaining = elementWeaknessPoint.get(defender); - - int attackerPoints = elementStrengthSum.get(attacker); - int defenderPoints = elementWeaknessPointToAssign.get(defender); - - if (attackerRemaining <= 0 || defenderRemaining <= 0) continue; - - // Calcolo potenza massima assegnabile - int maxPower = Math.min(attackerPoints - (attackerRemaining - 1), defenderPoints - (defenderRemaining - 1)); - if (maxPower < 1) continue; - - int power = 1 + rand.nextInt(maxPower); - - // Assegna collegamenti - graphElementMap.get(attacker).addLink(new ElementLink(power, defender)); - graphElementMap.get(defender).addLink(new ElementLink(-power, attacker)); - alreadyUsed.add(key); - alreadyUsed.add(reverseKey); - - // Aggiorna contatori - elementStrengthNumber.put(attacker, attackerRemaining - 1); - elementStrengthSum.put(attacker, attackerPoints - power); - - elementWeaknessPoint.put(defender, defenderRemaining - 1); - elementWeaknessPointToAssign.put(defender, defenderPoints - power); +// // controllo anche prima per evitare che magari da un estrazione si vada a togliere +// if (elementLinks.get(el) == 1){ +// linkDirections.get(el).put(element, -1); +// } +// +// if (elementLinks.get(el) == 0) { +// if (Math.random() < 0.5) { +// linkDirections.get(el).put(element, 1); +// } else { +// linkDirections.get(el).put(element, -1); +// } +// } +// +// if (elementLinks.get(el) == 1){ +// linkDirections.get(el).put(element, -1); +// } else { +// linkDirections.get(el).put(element, 1); +// } + } } - System.out.println(numElements); + System.out.println(linkDirections); + + HashMap, Integer> pairIndex = new HashMap<>(); + + int index = 0; + for (int i = 0; i < selectedElements.size(); i++) { + for (int j = i + 1; j < selectedElements.size(); j++) { + Set pair = Set.of(selectedElements.get(i), selectedElements.get(j)); + + pairIndex.put(pair, index++); + } + } + + System.out.println(pairIndex); + + int[][] A = new int[numElements][numElements * (numElements - 1) / 2]; + int[] b = new int[numElements]; + + int i = 0; + for (Element element : selectedElements) { + int[] line = new int[numElements * (numElements - 1) / 2]; + HashMap elementLinks = linkDirections.get(element); + for (Element el : selectedElements) { + if (el == element) { + continue; + } else { + int idx = getIndex(element, el, pairIndex); + line[idx] = elementLinks.get(el); + } + + } + A[i] = line; + b[i] = 0; + i++; + } + + + LinearSystem system = new LinearSystem(numElements, A, b); + + + int[] solution = system.resolve(); + System.out.println("Soluzione trovata:"); + for (int x : solution) { + System.out.printf(String.format("%d ", x)); + } + System.out.println(); + + + + for (Element element : selectedElements) { + GraphElement graphElement = new GraphElement(element); + for (Element el : selectedElements) { + if (el == element) { + continue; + } + //int direction = linkDirections.get(element).get(el); + graphElement.addLink(new ElementLink(solution[getIndex(element, el, pairIndex)], el)); + } + world.addElement(graphElement); + } world.printGraph(); return world; } + private static int getIndex(Element e1, Element e2, HashMap, Integer> pairIndex) { + return pairIndex.get(Set.of(e1, e2)); + } + } +