diff options
| author | Miguel <m.i@gmx.at> | 2021-04-06 19:54:47 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2021-04-06 19:54:47 +0200 |
| commit | c05912e07b39de1e8bded419cec7d4f69fcd1534 (patch) | |
| tree | a29e65ab2266fcdb6f18f173298d1d4200837e6d | |
| parent | dacc03b3911bd399150eae728432c7156de73b1c (diff) | |
| -rw-r--r-- | Mastermind/MiguelEngine.java | 87 | ||||
| -rw-r--r-- | Mastermind/Test.java | 8 |
2 files changed, 34 insertions, 61 deletions
diff --git a/Mastermind/MiguelEngine.java b/Mastermind/MiguelEngine.java index 7695dac..536419e 100644 --- a/Mastermind/MiguelEngine.java +++ b/Mastermind/MiguelEngine.java @@ -3,66 +3,39 @@ package Mastermind; import Mastermind.EngineResponse; public class MiguelEngine{ - - static int M=4; - - public static EngineResponse run (int liczba1, int liczba2, int liczba3, int liczba4, - int odpowiedz1, int odpowiedz2, int odpowiedz3, int odpowiedz4) - { - - int S[]={liczba1,liczba2,liczba3,liczba4}; - int T[]={odpowiedz1,odpowiedz2,odpowiedz3,odpowiedz4}; - - int dobry_kolor_i_dobra_pozycja=0; - int dobry_kolor_ale_zla_pozycja=0; - int dupa_nigdzie_nie_pasuje=0; - - boolean used[]=new boolean[M+1]; // array pomocniczy Boolow, dlugosci M. - for (int i=0;i<M;i++) used[M]=false; // na poczatek ustawiamy wszystkie nasze pozycje na un-used. - - for (int i=0;i<M;i++) // jedzeimy po wszsytkich pozycjach - { - if(T[i]==S[i]) // jak ta pozycja jest idetnyczna w obu sekwenjach -> sprawa prosta - { - dobry_kolor_i_dobra_pozycja+=1; - used[i]=true; // dodatkowo oznaczymy ze ta pozycja naszego "kolor-kodu" zostala "sonkumowana" - } - } - - for (int i=0;i<M;i++) // jedzeimy ponownie po wszsytkich pozycjach - { - if(T[i]==S[i])continue; // jedziemy dalej, bo to juz przeprocesowala pierwsza petla! - // w przeciwnym razie wolamy funkcje pomicnicza ktora sprawdza czy taki kolor wystepuje na innej pozycji. - int idx=wystepuje_gdzie_indziej(T[i],used,S); - if(idx!=-1) - { - dobry_kolor_ale_zla_pozycja+=1; - used[idx]=true; - continue; - } + public static EngineResponse run (int c1, int c2, int c3, int c4, int g1, int g2, int g3, int g4) + { + int S[]={c1,c2,c3,c4}; + int T[]={g1,g2,g3,g4}; + return genericRun(S,T); + } - dupa_nigdzie_nie_pasuje+=1; - } + public static EngineResponse genericRun(int S[], int T[]) + { + int N=S.length, perfect=0, goodcolor=0, i, j; + boolean used[] = new boolean[N]; - /* - System.out.println ("dobrze:"+dobry_kolor_i_dobra_pozycja); - System.out.println ("dobry kolor ale zla pozycja:"+dobry_kolor_ale_zla_pozycja); - System.out.println ("dupa:"+dupa_nigdzie_nie_pasuje); - */ + // scan and mark `perfects` + for (i=0;i<N;i++) + if(T[i]==S[i]) + { + perfect++; + used[i] = true; + } - return new EngineResponse (dobry_kolor_i_dobra_pozycja, dobry_kolor_ale_zla_pozycja, dupa_nigdzie_nie_pasuje); - - } - // funkcja pomocnicza. - static int wystepuje_gdzie_indziej(int color,boolean used[],int S[]) - { - for(int i=0;i<M;i++) - { - if (used[i])continue; // jak juz zostalo przedtem skonsumowane przeskakujemy i patrzymy na kolejne. - if (S[i]==color)return i; // hurra znalezlismy nie-skonsumowna na dowolnej pozycji. - } - return -1; // dupa - } + // scan and mark `good color` + for (i=0;i<N;i++) + for(j=0;j<N;j++) + if (T[i]!=S[i] && T[i]==S[j] && !used[j]) + { + goodcolor++; + used[j] = true; + break; + } + + // construct result + return new EngineResponse (perfect, goodcolor, N-perfect-goodcolor); + } } diff --git a/Mastermind/Test.java b/Mastermind/Test.java index c6166d9..5824147 100644 --- a/Mastermind/Test.java +++ b/Mastermind/Test.java @@ -24,15 +24,15 @@ class Test for (int g3=1;g3<=6;g3++) for (int g4=1;g4<=6;g4++) { - EngineResponse fra=FranekEngine.run(c1,c2,c3,c4,g1,g2,g3,g4); - EngineResponse mig=MiguelEngine.run(c1,c2,c3,c4,g1,g2,g3,g4); + EngineResponse fra = FranekEngine.run(c1,c2,c3,c4,g1,g2,g3,g4); + EngineResponse mig = MiguelEngine.run(c1,c2,c3,c4,g1,g2,g3,g4); if(!fra.isSame(mig)) { if(args.length>0 && args[0].equals("--show-mismatch")){ System.out.println("Mismatch on " +c1+c2+c3+c4+ " with guess: "+g1+g2+g3+g4); - System.out.println("FRA: "+mig.toString()); - System.out.println("MIG: "+fra.toString()); + System.out.println("FRA: "+fra.toString()); + System.out.println("MIG: "+mig.toString()); } bad++; } |
