Nim-pelin tietokonepelaajan algoritmikilpailu

Peliä pelataan mxn-ruudukolla. Pelaaja ottaa ruudukosta vuorollaan yhtenäisen, 1-levyisen pötkön (joko vaaka- tai pystysuunnassa) ruutuja pois. Peli päättyy, kun ruudukko on tyhjä ja voittaja on se, joka otti viimeisenä (eli tyhjensi ruudukon).

Täällä voi kokeilla:
https://codepen.io/minkkilaukku/full/qyzMqM/
Siellä oleva "AI"-pelaaja toimii tällä hetkellä täysin satunnaisesti. Tuossa on kaksi pelaajaa ja itse ollaan ensimmäisenä ottava ja toinen pelaaja on siis tietokone- ("AI"-) pelaaja.

Nytpä julistankin kilpailun siitä, kuka kirjoittaa parhaan funktion "getAiMove(board, maxLen)", joka siis saa parametreina ruudukon board sekä luvun maxLen, joka kertoo kuinka pitkän pötkön voi maksimissaan ottaa (tässä pelin perusversiossa tätä ei ole rajoitettu, maxLen=Infinity).
Ruudukko on objekti, jolla on ominaisuudet m ja n (dimensiot) sekä funktio hasCell(i, j), joka kertoo onko ruutu (i, j) paikallaan (vai onko se jo otettu).
Funktion kuuluu palauttaa tehtävä siirto listana otettavien ruutujen indekseistä {i, j}.

Pidetään sitten turnajaiset ja katsotaan kenenkä funktio voittaa. Ai niin funktio ei saa viedä yli kymmentä sekuntia mun kämäsellä läppärillä ja jos vie, niin sit käytetään tota satunnaisvalinta-funktiota.

Koitin etsiä olisiko tämän tyyppistä nim-peliä tutkittu ja mahdollisesti ratkaistu, mutta en löytänyt. Mitenkäs ois yks-ulotteinen versio tästä, mutta siinä tietenkin otettaisiin se yläraja oton maksimipituudelle käyttöön. Yhtenäisyysvaatimus taitaa tehdä tästä vähän erilaisen kuin perus "summaa sataan"-nimistä(?)

2

190

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Turbo-Urpo1

      Eikös tämä mene niin että:

      KUN ruudukon solujen määrä on pariton, voittaa ALOITTAJA
      KUN ruudukon solujen määrä on parillinen, voittaa VASTAPELURI
      KUN kumpikin tekee, vaikutukseltaan samanlaisen siirron.

      Kuvittele1x1 soluinen ruudukko, avaaja voittaa väkisin.

      Kuvittele 2x2 soluinen ruudukku, vastapeluri voittaa: koska
      Avaajan varatessa ylä rivin (A1,B1), vie vastapeluri alarivin (A2,B2)
      ( https://s25.postimg.cc/4hrsj61nz/Kolmas-peli.gif )

      TAI

      Avaaja varaa vain solu A1, niin vaikutukseltaan yhtä voimakas olisi B2 vastapelurille, jolloin on ihan sama varaako avaaja solun A2 vai B1, aina vastapelurille jää se viimmeinen solu.
      ( https://s25.postimg.cc/liaorumf3/Eka-peli.gif )

      TÄSSÄ esimerkissä random funktio tuottaa virheellisen (ei saman arvoinen) siirron, ja voittaja on taas aloittaja: ( https://s25.postimg.cc/aiphg93pr/toka-peli.gif ).

      VOITON avaimet on siinä että vastustaja tekee siirtonsa peilikuvana. Raahaa ja pudota, alla oleva console ikkunaan ja testaa.

      var MaxXsolut = 2;
      var MaxYsolut = 2;
      var sx1 = 2;
      var sy1 = 2;
      var sx2 = MaxXsolut - sx1 1;
      var sy2 = MaxYsolut - sy1 1;
      console.log(sx2);
      console.log(sy2);

      • Niinpäs onkin. Mutta eikös aloittaja voita kun jompi kumpi m tai n on pariton? Perustelisin sen niin, että aloittaja voi ottaa keskimmäisen rivin/sarakkeen, jolloin synty kaksi saman kokoista karsinaa ja tämän jälkeen aloittaja vain matkii toista pelaajaa aina eri karsinassa, kuin mistä tämä otti.

        Vähän piti tässä miettiä, mutta nyt nään myös tuon molemmat parillisia -tapauksen. Lauta pysyy aina symmetrisenä molemman keskiakselin suhteen, joten toisena pelaava pystyy aina matkimaan siirtoa.

        Tämä jälkimmäinen tapaus ei riipu maxLen:stä, mutta mitenkäs tuo ensimmäinen jos kokonaista riviä/saraketta ei pysty ottamaan, koska se on liian pitkä? No, joka tapauksessa turnaus on peruttu (kirjoitinko mä todellakin turnajaiset, lol), koska tämä osoittautui melko triviaaliksi. Mutta muutetaan lauta vaikka kolmioksi tai otetaan vaikka satunnaisesti joitain ruutuja pois, niin muuttuuko tämä peli mielenkiintoisemmaksi?


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Kokoomus haluaa leikata vielä lisää sosiaaliturvasta

      Kokoomuksen Sanni-Granhn Laasonen pyytänyt KELA:aa selvittämään mistä leikataan vähäosaisilta vielä lisää sosiaaliturvas
      Maailman menoa
      215
      1449
    2. Mitä tapahtuu

      Syksyllä?
      Ikävä
      96
      1286
    3. Ikävöin sua

      Sä vaan pyörit mun mielessä, en saa sua unohdettua. Tilanteesta tekee vaikean sen kun molemmat ollaan varattuja ja tilan
      Ikävä
      4
      1088
    4. Oletko pitkävihainen ja onko sinulla " huono muisti muisti "?

      Mitä asioita et unohda tai anna anteeksi ? Mitä asioita voit " unohtaa" tai unohtaa? Vastaa koskien kaivattuasi tai yle
      Ikävä
      17
      1076
    5. Neljä kuukautta vankeutta, kenelle?

      Kuka tuomittiin ehdottomaan neljän kuukauden vankeustuomioon ja korvauksiin?
      Suomussalmi
      9
      928
    6. Minä täällä vaan

      Ukko jota oot joutunu joskus sietämään työnpuolesta. Toivottelen kauniita unia💛
      Ikävä
      86
      900
    7. Jos haluat jatkaa tutustumista

      Pyydä mut suoraan kunnon treffeille. En lähde mihinkään epämääräiseen viestittelyyn enää.
      Ikävä
      61
      852
    8. Olet huippunainen

      Ja onneksi tiedät sen itsekin.
      Ikävä
      32
      840
    9. T, miten mun pitäis toimia

      Olen niin toivottoman ihastunut suhun...ollut jo liian,monta,vuotta. Lähestynkö viestillä? Miten? Sun katse...mä en kest
      Ikävä
      37
      778
    10. Oho! Esko Eerikäinen joutuu palaamaan "kalakukkokaupunkiin" - Tämä syy ei jätä kylmäksi!

      Esko Eerikäinen on kyllä monessa mukana ja uskaltaa heittäytyä. Hatun nosto siitä! Eerikäinen palasi “kalakukkokaupunkii
      Kotimaiset julkkisjuorut
      45
      770
    Aihe