Skocz do zawartości

  •  
  • Mini kompendium
  • MimeTeX
  • Regulamin

Zdjęcie
        STUDIA        

Dominacja skoczka w szachach. Wolfram mathematica



  • Nie możesz napisać tematu
  • Zaloguj się aby odpowiedzieć
8 odpowiedzi w tym temacie

#1 Clxa100

Clxa100

    Nowicjusz

  • Jr Użytkownik
  • 3 postów
1
Neutralny
  • Płeć:Kobieta

Napisano 31.01.2016 - 21:58

Witam

Potrzebuje pomocy w napisaniu programu w Wolfram Mathematica. Program ma rozwiązywać problem dominacji skoczka/gońca w szachach.

Dzięki za wszelką pomoc.


  • 0

Afroman

    Kombinator

  • Użytkownik
3
  • Płeć:Kobieta

Napisano 25.09.2011 - 17:55

#2 Ereinion

Ereinion

    Mega Rozkminiacz z Marsa

  • $Jr Admin
  • 2104 postów
1008
Starszy Wykładowca I
  • Płeć:Mężczyzna

Napisano 31.01.2016 - 23:29

1. Zapoznaj się z problemem.

 

2. Pomyśl co chcesz napisać.

 

3. Napisz jakiś pseudokod.

 

4. Przetłumacz na WL.

 

Ja służę pomocą w kroku 4 lub wcześniejszych, ale musisz wrzucić jakieś swoje przemyslenia, cokolwiek żeby było o czym dyskutować :)


  • 1

#3 Clxa100

Clxa100

    Nowicjusz

  • Jr Użytkownik
  • 3 postów
1
Neutralny
  • Płeć:Kobieta

Napisano 02.02.2016 - 19:52

W dominacji skoczka trzeba tak rozłożyć figury na planszy, żeby każde wolne pole było bite. Wiem, że minimalna liczba skoczków na planszy to 12. Udało się napisać coś takiego XN01cf.jpg


  • 1

#4 Ereinion

Ereinion

    Mega Rozkminiacz z Marsa

  • $Jr Admin
  • 2104 postów
1008
Starszy Wykładowca I
  • Płeć:Mężczyzna

Napisano 03.02.2016 - 01:15

Generalnie taka uwaga - jakbyś mogła nie wrzucać zdjeć z kodem, tylko skopiować go i wkleić w treśc posta i sformatować, żeby był czytelny. Albo jak Ci się nie chce, to po prostu załącz plik .nb do posta.

 

Co do samego zadania, to Twój kod ma znajdować optymalne ustawienie skoczków (czyli równo 12) czy dowolne? Bo jak dowolne, to możesz po prostu ustawić skoczka na każdym polu :) W Twoim kodzie nie widzę żadnego ograniczenia na liczbę skoczków. Kolejna sprawa jest taka, że Ty teraz losowo umieszczasz skoczków na planszy, więc jak dodasz ograniczenie na ich liczbę, to nie ma gwarancji, że Twój program znajdzie dobre ustawienie.


  • 1

#5 Clxa100

Clxa100

    Nowicjusz

  • Jr Użytkownik
  • 3 postów
1
Neutralny
  • Płeć:Kobieta

Napisano 04.02.2016 - 00:13

Nie chodzi o to, że mi się nie chce :)  Ograniczenia na liczbę skoczków raczej nie było, ale nie wiem czy chodziłoby o to w zadaniu żeby postawić ich na każdym polu.

 

nie wiem czy o to chodziło ale wklejam kod i jeszcze dodatkowo załączę plik

 

 

       szachownica = Table[0, {i, 1, 8}, {j, 1, 8}];
 
 
       pozycja = szachownica;
 
 
       war = 0;
 
 
              While[war == 0, i = RandomInteger[8]; j = RandomInteger[8];
 
                   If[szachownica[[i, j]] == 0; pozycja[i, j] = 1;
 
                        szachownica[[i, j]] = 1,
 
                        If[i - 2 >= 1 & j - 1 >= 1, szachownica[[i - 2, j - 1]] = 1];
 
                        If[i - 1 >= 1 & j - 2 >= 1, szachownica[[i - 1, j - 1]] = 1];
 
                        If[i - 1 <= 8 & j - 2 >= 1, szachownica[[i - 1, j - 2]] = 1];
 
                        If[i + 2 <= 8 & j - 1 >= 1, szachownica[[i + 2, j - 1]] = 1];
 
                        If[i + 2 <= 8 & j + 1 <= 8, szachownica[[i + 2, j + 1]] = 1];
 
                        If[i + 1 <= 8 & j + 2 <= 8, szachownica[[i + 1, j + 2]] = 1];
 
                        If[i - 1 >= 1 & j + 2 <= 8, szachownica[[i - 1, j + 2]] = 1];
 
                        If[i - 2 >= 1 & j + 1 <= 8, szachownica[[i - 2, j + 1]] = 1];
 
                       ]
 
                      war = 1;
 
                  For[i = 1, i <= 8, i++;
 
                  For[j = 1, j <= 8, j++;
 
                     war = szachownica[[i, j]]*war]]
 
                   ]
 
 
                 pozycja // MatrixForm
 
 
Coś jest źle, może wszystko :)  bo działać to nie chce
 
 

  • 0

#6 Ereinion

Ereinion

    Mega Rozkminiacz z Marsa

  • $Jr Admin
  • 2104 postów
1008
Starszy Wykładowca I
  • Płeć:Mężczyzna

Napisano 04.02.2016 - 22:34

Sporo było źle, zarówno koncepcyjnie, jak i jeśli chodzi o sam Wolfram Language. Poprawiłem ten kod i zoptymalizowałem :)

 

Ogólnie działa tak jak Ty planowałaś, ale dodatkowo można mu powiedzieć ile chce się mieć skoczków na planszy i on szuka dobrego ustawienia, dopóki nie znajdzie takiego z żądaną liczbą skoczków. Z tym, że dla 12, to on będzie szukał niemal w nieskończoność, ale np już dla 16 da się szybciutko znaleźć :)

 

Tu znajdziesz plik https://www.dropbox..../szachy.nb?dl=0

 

Jakby były jakies pytania, to oczywiście pytaj śmiało.

 

Jeśli nie, to generalnie muszę przyznać, że chwilę nad tym spędziłem, więc jeśli mogłabyś przy moich postach w tym temacie kliknąć na "zielony plus" to będę się czuł w pełni doceniony :)


  • 2

#7 Clxa100

Clxa100

    Nowicjusz

  • Jr Użytkownik
  • 3 postów
1
Neutralny
  • Płeć:Kobieta

Napisano 04.02.2016 - 23:07

Dzięki wielkie


  • 0

#8 Clxa100

Clxa100

    Nowicjusz

  • Jr Użytkownik
  • 3 postów
1
Neutralny
  • Płeć:Kobieta

Napisano 04.02.2016 - 23:43

Na podstawie kodu skoczka próbowałam pozamieniać tak, żeby działało też dla gońca. Gdybyś mógł zerknąć na to i może coś podpowiedzieć, bo chyba coś jest nie tak z tym ileChceMiećGońców.
https://www.dropbox.... goniec.nb?dl=0

Użytkownik Clxa100 edytował ten post 05.02.2016 - 00:12

  • 0

#9 Ereinion

Ereinion

    Mega Rozkminiacz z Marsa

  • $Jr Admin
  • 2104 postów
1008
Starszy Wykładowca I
  • Płeć:Mężczyzna

Napisano 05.02.2016 - 20:01

Dobra wiadomość jest taka, że z Twoim kodem wszystko jest ok :) tzn da się pewnie napisać to trochę krócej, ale działa dobrze.

 

Z tym ileChceMiećGońców to jest taka sprawa, że program ma znaleźć ustawienie, w którym jest nie więcej gońców, niż wskazuje ta zmienna, więc np dla ileChceMiećGońców = 15 jeśli program znajdzie ustawienie z 11 gońcami, to je zaakceptuje i zakończy działanie.

 

Jeśli chcesz napisać wersję, w której program znajduje ustawienie z dokładnie taką liczbą gońców jak ileChceMiećGońców, to trzeba coś zmienić. Spróbuj sama pokombinować i ew. służę dalszą pomocą.


  • 1