summaryrefslogtreecommitdiff
path: root/Mastermind/MiguelEngine.java
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2021-04-06 19:54:47 +0200
committerMiguel <m.i@gmx.at>2021-04-06 19:54:47 +0200
commitc05912e07b39de1e8bded419cec7d4f69fcd1534 (patch)
treea29e65ab2266fcdb6f18f173298d1d4200837e6d /Mastermind/MiguelEngine.java
parentdacc03b3911bd399150eae728432c7156de73b1c (diff)
cleanup and simplify MiguelEngineHEADmaster
Diffstat (limited to 'Mastermind/MiguelEngine.java')
-rw-r--r--Mastermind/MiguelEngine.java87
1 files changed, 30 insertions, 57 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);
+ }
}