summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2021-04-06 12:21:43 +0200
committerMiguel <m.i@gmx.at>2021-04-06 12:21:43 +0200
commit5f1294e89468841f1e1396cb39af873993826cf7 (patch)
tree1b79a0328a4dea3c9c7759dcdba7ad64578ee777
Initial commit for Mastermind
-rwxr-xr-xFranekEngine.java212
-rw-r--r--MiguelEngine.java62
-rw-r--r--run.sh19
3 files changed, 293 insertions, 0 deletions
diff --git a/FranekEngine.java b/FranekEngine.java
new file mode 100755
index 0000000..d69591b
--- /dev/null
+++ b/FranekEngine.java
@@ -0,0 +1,212 @@
+import java.util.Random;
+import java.util.Scanner;
+
+public class FranekEngine {
+
+ public static void main (String args[])
+ {
+
+ int liczba1=Integer.parseInt(args[0]);
+ int liczba2=Integer.parseInt(args[1]);
+ int liczba3=Integer.parseInt(args[2]);
+ int liczba4=Integer.parseInt(args[3]);
+
+ int odpowiedz1=Integer.parseInt(args[4]);
+ int odpowiedz2=Integer.parseInt(args[5]);
+ int odpowiedz3=Integer.parseInt(args[6]);
+ int odpowiedz4=Integer.parseInt(args[7]);
+
+
+ Scanner wejscie = new Scanner(System.in);
+ Random losowanie = new Random();
+// int liczba1 = losowanie.nextInt(5) + 1;
+// int liczba2 = losowanie.nextInt(5) + 1;
+// int liczba3 = losowanie.nextInt(5) + 1;
+// int liczba4 = losowanie.nextInt(5) + 1;
+
+ // do ustawiania samemu wartości - do testów:
+ /*liczba1 = 1;
+ liczba2 = 1;
+ liczba3 = 3;
+ liczba4 = 3; */
+
+ int kolor1 = 0, kolor2 = 0, czerwoneLiczb = 0, zieloneLiczb = 0, niebieskieLiczb = 0, żółteLiczb = 0, czarneLiczb = 0, białeLiczb = 0;
+ int czerwoneOdp = 0, zieloneOdp = 0, niebieskieOdp = 0, żółteOdp = 0, czarneOdp = 0, białeOdp = 0;
+ int licznik = 0;
+
+ int dobremiejsce = 0;
+ int dobrykolor = 0;
+
+ //ściągawka to testów:
+ // System.out.println(jakiKolor(liczba1) + " " + jakiKolor(liczba2) + " " + jakiKolor(liczba3) + " "
+ // + jakiKolor(liczba4));
+
+ // System.out.println("KOLORY: " + " " + "Czerwony: 1" + " " + "Zielony: 2" + " " + "Niebieski: 3"
+ // + " " + "Żółty: 4" + " " + "Czarny: 5" + " " + "Biały: 6");
+
+
+// do {
+ // System.out.println("Wprowadź cztery kolory (pod jednym odstępie między nimi):");
+ // int odpowiedz1 = wejscie.nextInt();
+// int odpowiedz2 = wejscie.nextInt();
+// int odpowiedz3 = wejscie.nextInt();
+// int odpowiedz4 = wejscie.nextInt();
+
+ if (liczba1 == odpowiedz1)
+ dobremiejsce += 1;
+ else if ((liczba1 == odpowiedz2) || (liczba1 == odpowiedz3) || (liczba1 == odpowiedz4))
+ dobrykolor += 1;
+
+ if (liczba2 == odpowiedz2)
+ dobremiejsce += 1;
+ else if ((liczba2 == odpowiedz1) || (liczba2 == odpowiedz3) || (liczba2 == odpowiedz4))
+ dobrykolor += 1;
+
+ if (liczba3 == odpowiedz3)
+ dobremiejsce += 1;
+ else if ((liczba3 == odpowiedz1) || (liczba3 == odpowiedz2) || (liczba3 == odpowiedz4))
+ dobrykolor += 1;
+
+ if (liczba4 == odpowiedz4)
+ dobremiejsce += 1;
+ else if ((liczba4 == odpowiedz1) || (liczba4 == odpowiedz2) || (liczba4 == odpowiedz3))
+ dobrykolor += 1;
+
+ int[] liczby = new int[4];
+ liczby[0] = liczba1;
+ liczby[1] = liczba2;
+ liczby[2] = liczba3;
+ liczby[3] = liczba4;
+
+ for (int index = 0; index < liczby.length; index++) {
+ kolor1 = liczby[index];
+
+ switch (kolor1) {
+ case 1 :
+ czerwoneLiczb++;
+ break;
+ case 2 :
+ zieloneLiczb++;
+ break;
+ case 3 :
+ niebieskieLiczb++;
+ break;
+ case 4 :
+ żółteLiczb++;
+ break;
+ case 5 :
+ czarneLiczb++;
+ break;
+ case 6 :
+ białeLiczb++;
+ break;
+ }
+ }
+
+ int[] odpowiedzi = new int[4];
+ odpowiedzi[0] = odpowiedz1;
+ odpowiedzi[1] = odpowiedz2;
+ odpowiedzi[2] = odpowiedz3;
+ odpowiedzi[3] = odpowiedz4;
+
+ for (int index = 0; index < odpowiedzi.length; index++) {
+ kolor2 = odpowiedzi[index];
+
+ switch (kolor2) {
+ case 1:
+ czerwoneOdp++;
+ break;
+ case 2:
+ zieloneOdp++;
+ break;
+ case 3:
+ niebieskieOdp++;
+ break;
+ case 4:
+ żółteOdp++;
+ break;
+ case 5:
+ czarneOdp++;
+ break;
+ case 6:
+ białeOdp++;
+ break;
+ }
+ }
+
+ /*System.out.println("Odpowiedzi: " + czerwoneLiczb + " " + zieloneLiczb + " " + niebieskieLiczb + " "
+ + żółteLiczb + " " + czarneLiczb + " " + białeLiczb + " " + czerwoneOdp + " " + zieloneOdp + " "
+ + niebieskieOdp + " " + żółteOdp + " " + czarneOdp + " " + białeOdp);
+
+ System.out.println("Dobry kolor przed: " + dobrykolor); */
+
+ //System.out.println("Dobre miejsce1: " + dobremiejsce + "\n" + "Dobry kolor1: " + dobrykolor);
+ if (( (czerwoneLiczb == 2 && zieloneLiczb == 2) || (czerwoneLiczb == 2 && niebieskieLiczb == 2) || (czerwoneLiczb == 2 && żółteLiczb == 2) || (czerwoneLiczb == 2 && czarneLiczb == 2)
+ || (czerwoneLiczb == 2 && białeLiczb == 2) || (zieloneLiczb == 2 && niebieskieLiczb == 2) || (zieloneLiczb == 2 && żółteLiczb == 2) || (zieloneLiczb == 2 && czarneLiczb == 2 )
+ || (zieloneLiczb == 2 && białeLiczb == 2) || (niebieskieLiczb == 2 && żółteLiczb == 2) || (niebieskieLiczb == 2 && czarneLiczb == 2) || (niebieskieLiczb == 2 && białeLiczb == 2)
+ || (żółteLiczb == 2 && czarneLiczb == 2) || (żółteLiczb == 2 && białeLiczb == 2) || (czarneLiczb == 2 && białeLiczb == 2))
+ && (((dobrykolor == 3) || (dobremiejsce == 1 && dobrykolor == 2)) && !(czerwoneOdp == 3 || zieloneOdp == 3 || niebieskieOdp == 3 || żółteOdp == 3 || czarneOdp == 3 || białeOdp == 3)))
+ dobrykolor -= 1;
+
+ // if (((czerwoneLiczb > 1 && czerwoneLiczb - czerwoneOdp == 1) || (zieloneLiczb > 1 && zieloneLiczb - zieloneOdp == 1) || (niebieskieLiczb > 1 && niebieskieLiczb - niebieskieOdp == 1)
+ // || (żółteLiczb > 1 && żółteLiczb - żółteOdp == 1) || (czarneLiczb > 1 && czarneLiczb - czarneOdp == 1) || (białeLiczb > 1 && białeLiczb - białeOdp == 1)))
+ // dobrykolor -= 1;
+ else if (((czerwoneLiczb - czerwoneOdp == 2 && czerwoneOdp > 0) || (zieloneLiczb - zieloneOdp == 2 && zieloneOdp > 0) || (niebieskieLiczb - niebieskieOdp == 2 && niebieskieOdp > 0))
+ || (żółteLiczb - żółteOdp == 2 && żółteOdp > 0) || (czarneLiczb - czarneOdp == 2 && czarneOdp > 0) || (białeLiczb - białeOdp == 2 && białeOdp > 0))
+ dobrykolor -= 2;
+
+ //System.out.println("Dobre miejsce2: " + dobremiejsce + "\n" + "Dobry kolor2: " + dobrykolor);
+
+ if (( (czerwoneLiczb == 2 && zieloneLiczb == 2) || (czerwoneLiczb == 2 && niebieskieLiczb == 2) || (czerwoneLiczb == 2 && żółteLiczb == 2) || (czerwoneLiczb == 2 && czarneLiczb == 2)
+ || (czerwoneLiczb == 2 && białeLiczb == 2) || (zieloneLiczb == 2 && niebieskieLiczb == 2) || (zieloneLiczb == 2 && żółteLiczb == 2) || (zieloneLiczb == 2 && czarneLiczb == 2 )
+ || (zieloneLiczb == 2 && białeLiczb == 2) || (niebieskieLiczb == 2 && żółteLiczb == 2) || (niebieskieLiczb == 2 && czarneLiczb == 2) || (niebieskieLiczb == 2 && białeLiczb == 2)
+ || (żółteLiczb == 2 && czarneLiczb == 2) || (żółteLiczb == 2 && białeLiczb == 2) || (czarneLiczb == 2 && białeLiczb == 2))
+ && (((dobrykolor == 3) || (dobremiejsce == 1 && dobrykolor == 2)) && !(czerwoneOdp == 3 || niebieskieOdp == 3) || żółteOdp == 3 || czarneOdp == 3 || białeOdp == 3))
+ dobrykolor -= 1;
+
+ if (dobrykolor < 0)
+ dobrykolor = 0;
+
+ System.out.println(dobremiejsce + " " + dobrykolor);
+ if (dobremiejsce == 4) {
+ dobremiejsce = 4;
+// System.out.println("Brawo, wygrałeś!");
+ } else
+ dobremiejsce = 0;
+ dobrykolor = 0;
+
+ czerwoneLiczb = 0; zieloneLiczb = 0; niebieskieLiczb = 0; żółteLiczb = 0; czarneLiczb = 0; białeLiczb = 0;
+ czerwoneOdp = 0; zieloneOdp = 0; niebieskieOdp = 0; żółteOdp = 0; czarneOdp = 0; białeOdp = 0;
+ licznik++;
+ // if (licznik == 8)
+ // System.out.println("Przykro mi - przegrałeś.");
+ // }
+// while (dobremiejsce != 4 && licznik != 8);
+ }
+
+ public static String jakiKolor(int liczba)
+ {
+ String kolor = "";
+ switch (liczba) {
+ case 1 :
+ kolor = "Czerwony";
+ break;
+ case 2 :
+ kolor = "Zielony";
+ break;
+ case 3 :
+ kolor = "Niebieski";
+ break;
+ case 4 :
+ kolor = "Żółty";
+ break;
+ case 5 :
+ kolor = "Czarny";
+ break;
+ case 6 :
+ kolor = "Biały";
+ break;
+ }
+ return kolor;
+ }
+}
diff --git a/MiguelEngine.java b/MiguelEngine.java
new file mode 100644
index 0000000..bc11748
--- /dev/null
+++ b/MiguelEngine.java
@@ -0,0 +1,62 @@
+public class MiguelEngine{
+
+ static int M=4;
+
+ public static void main(String []args){
+
+ int S[]={Integer.parseInt(args[0]),Integer.parseInt(args[1]),Integer.parseInt(args[2]),Integer.parseInt(args[3])}; // nasz kod
+ int T[]={Integer.parseInt(args[4]),Integer.parseInt(args[5]),Integer.parseInt(args[6]),Integer.parseInt(args[7])}; // nasz kod
+
+ 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;
+ }
+
+ dupa_nigdzie_nie_pasuje+=1;
+ }
+
+ /*
+ 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);
+ */
+
+ System.out.println (dobry_kolor_i_dobra_pozycja + " " + dobry_kolor_ale_zla_pozycja);
+
+ }
+ // 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
+ }
+
+}
diff --git a/run.sh b/run.sh
new file mode 100644
index 0000000..4aaed84
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,19 @@
+javac -encoding utf8 FranekEngine.java
+javac MiguelEngine.java
+
+CODE=" $((1 + $RANDOM % 6)) $((1 + $RANDOM % 6)) $((1 + $RANDOM % 6)) $((1 + $RANDOM % 6))"
+GUESS=" $((1 + $RANDOM % 6)) $((1 + $RANDOM % 6)) $((1 + $RANDOM % 6)) $((1 + $RANDOM % 6))"
+FRA=`java FranekEngine $CODE $GUESS`
+MIG=`java MiguelEngine $CODE $GUESS`
+
+if [ "$FRA" = "$MIG" ]; then
+ echo $CODE / $GUESS OK
+else
+ echo MISMATCH ON:
+ echo code: $CODE
+ echo guess: $GUESS
+ echo fra: $FRA
+ echo mig: $MIG
+ exit 0;
+fi
+