Haasta tekoälyni! :)

Onko taipuvaisuutta nörttiyteen? Saa esittää omia nörtti-projekteja
Stadin öljylanne
Reactions:
Viestit: 493
Liittynyt: 05 Joulu 2022, 23:47

Re: Haasta tekoälyni! :)

Viesti Kirjoittaja Stadin öljylanne »

Keckuli kirjoitti: 09 Joulu 2022, 21:52 Mulla on itseasiassa javascript versio: https://petke.info/numeropeli/
Pelaajan pisteet
182
Koneen pisteet
176
Avatar
Keckuli
Reactions:
Viestit: 415
Liittynyt: 29 Marras 2022, 22:04
Paikkakunta: Helsinki
Viesti:

Re: Haasta tekoälyni! :)

Viesti Kirjoittaja Keckuli »

KultaKikkare kirjoitti: 10 Joulu 2022, 00:49 Käykö se läpi mun kaikki mahdolliset siirrot 5 siirtoa eteenpäin ja olettaa että teen optimaalisen siirron miettien myös 5 siirtoa eteenpäin, vai olettaako että valitsen sen mistä saa yhdellä siirrolla eniten pisteitä, vai pyrkiikö strategiaan missä mun siirrolla ei ole merkitystä, vai miten?
Se käy läpi kaikki mahdolliset siirrot ja nostaa omaksi siirroksi sen haaran siirron, missä lehtisolmun pelitilanne on sille edullisin. Se ei siis oleta sun tekevän optimaalista siirtoa vaan se pyrkii itse tekemään optimalisen siirron. Tilanteissa, jotka ovat päätössolmuja se kertoo pelitilanteen arvon 10:llä. Jos se siis voittaa päätössolmussa, niin se pyrkii pelipuun siihen haaraan,
Viimeksi muokannut Keckuli, 10 Joulu 2022, 01:30. Yhteensä muokattu 1 kertaa.
Noin näin minä ajattelen
Avatar
Keckuli
Reactions:
Viestit: 415
Liittynyt: 29 Marras 2022, 22:04
Paikkakunta: Helsinki
Viesti:

Re: Haasta tekoälyni! :)

Viesti Kirjoittaja Keckuli »

Stadin öljylanne kirjoitti: 10 Joulu 2022, 01:21
Keckuli kirjoitti: 09 Joulu 2022, 21:52 Mulla on itseasiassa javascript versio: https://petke.info/numeropeli/
Pelaajan pisteet
182
Koneen pisteet
176
Jep. Ohjelmassa ei ole mitään tekoalyä. Kone ottaa ahneesti aina suuriman laatan.
Noin näin minä ajattelen
Stadin öljylanne
Reactions:
Viestit: 493
Liittynyt: 05 Joulu 2022, 23:47

Re: Haasta tekoälyni! :)

Viesti Kirjoittaja Stadin öljylanne »

Eikös javascriptin muuntamisessa typescriptiksi riitä ihan vain muuttujien tietotyyppien määrittäminen ja var ehkä pitää korvata sanalla let jos muuttujan arvo muuttuu tai const jos se ei muutu? Vai onko typescriptissä jotain muitakin huomionarvoisia hienouksia?
Avatar
KultaKikkare
Reactions:
Viestit: 4896
Liittynyt: 28 Marras 2022, 22:30

Re: Haasta tekoälyni! :)

Viesti Kirjoittaja KultaKikkare »

Stadin öljylanne kirjoitti: 10 Joulu 2022, 01:37 Eikös javascriptin muuntamisessa typescriptiksi riitä ihan vain muuttujien tietotyyppien määrittäminen ja var ehkä pitää korvata sanalla let jos muuttujan arvo muuttuu tai const jos se ei muutu? Vai onko typescriptissä jotain muitakin huomionarvoisia hienouksia?
Ei siinä mitään muuntamista tarvitse tehdä, typescript on javascriptin supersetti ja muuttujien tyypitys on vapaaehtoista. Typescript tarjoaa optionaalista extraa javascriptiin nähden mutta javascript sinällään on aina myös validia typescriptiä. Muuttujien tyypitys kai se isoin juttu on, vähentää bugeja monimutkaisemmissa projekteissa.
Jos tuntuu ettei jaksa niin koittakaa vaan jaksaa.
Stadin öljylanne
Reactions:
Viestit: 493
Liittynyt: 05 Joulu 2022, 23:47

Re: Haasta tekoälyni! :)

Viesti Kirjoittaja Stadin öljylanne »

En nyt ole täysin varma, onko tämä täysin speksien mukainen, mutta mun vs code ei ilmoittanut virheistä. Tosin tässä on vain tuo Keckulin javascript-pelisivun javascript-koodi muutettuna typescriptiksi eli mahdolliset tekoälyt hänen tarttee lisätä tähän sitten erikseen.

Koodi: Valitse kaikki

const laatat: number[] = new Array();
let valittusarake: number = 0;
let valitturivi: number = 0;
let valittulaatta: number = 0;
let tahti: number = 0;
let edellinen: number = 0;
let konevalitsiarvon: number = 0;
let konevalitsirivin: number = 0;
let ppisteet: number = 0;
let kpisteet: number = 0;
function voikokonevalita() {
  let voi: boolean = false;
  for (let rivi: number = 1; rivi <= 10; rivi++) {
    if (!voi) {
      if (laatat[10 * (rivi - 1) + valittusarake] != 99) {
        voi = true;
      }
    }
  }
  return voi;
}
function voikopelaajavalita() {
  let voi: boolean = false;
  for (let sara: number = 1; sara <= 10; sara++) {
    if (!voi) {
      if (laatat[10 * (konevalitsirivin - 1) + sara] != 99) {
        voi = true;
      }
    }
  }
  return voi;
}
function konesiirtaa() {
  // kone valitsee raa'asti suurimman laatan
  let maxarvo: number = -16;
  let konevalitsi: number = 99; // Stadin Öljylanne lisäsi tämän muuttujan alustuksen kun muuten ilmoittaa virheestä. Kandee laittaa tilalle numero, joka on turvallinen tässä kohtaa koodia.
  for (let rivi: number = 1; rivi <= 10; rivi++) {
    const ind: number = (rivi - 1) * 10 + valittusarake;
    if (laatat[ind] > maxarvo && laatat[ind] != 99) {
      maxarvo = laatat[ind];
      konevalitsi = ind;
    }
  }
  konevalitsiarvon = laatat[konevalitsi];
  kpisteet = kpisteet + konevalitsiarvon - 15;
  const kone: HTMLElement|undefined = document.getElementById("kone") || undefined;
  if(kone) kone.innerHTML = `${kpisteet}`;
  laatat[konevalitsi] = 99;
  const img: HTMLImageElement|undefined = document.getElementById(`${konevalitsi}`) as HTMLImageElement || undefined;
  if(img) img.src = "tahti.png";
  tahti = konevalitsi;
  konevalitsirivin = Math.floor((konevalitsi - 1) / 10) + 1;
  if (!voikopelaajavalita()) {
    let apus: string = "Tasapeli!";
    if (ppisteet > kpisteet) {
      apus = "Onneksi olkoon! Voitit :)";
    }
    if (ppisteet < kpisteet) {
      apus = "Hah hah! Hävisit.";
    }
    alert("Peli päättyi. Et voi valita enää." + apus);
    return;
  }
}
function changeImage(param: number) {
  valitturivi = Math.floor((param - 1) / 10) + 1;
  if (valitturivi == konevalitsirivin || konevalitsirivin == 0) {
    const img: HTMLImageElement|undefined = document.getElementById(`${param}`) as HTMLImageElement || undefined;
    if (laatat[param] == 99) {
      alert("Et voi valita tyhjää laattaa etkä tähtilaattaa.");
    } else {
      if (tahti != 0) {
        //koneen valinnan merkkinä oleva tähtilaatta muutetaan tyhjäksi. Alussa sillä on arvo 0.
        const tahtiimg: HTMLImageElement|undefined = document.getElementById(`${tahti}`) as HTMLImageElement || undefined;
        if(tahtiimg) tahtiimg.src = "empty.png";
      }
      if(img) img.src = "empty.png";
      valittusarake = ((param - 1) % 10) + 1;
      valittulaatta = laatat[param] - 15;
      ppisteet = ppisteet + valittulaatta;
	  const pelaaja: HTMLElement|undefined = document.getElementById("pelaaja") || undefined;
      if(pelaaja) pelaaja.innerHTML = `${ppisteet}`;
      laatat[param] = 99;

      if (voikokonevalita()) {
        konesiirtaa();
      } else {
        alert("Kone ei voi enää valita");
        return;
      }
    }
  } else {
    alert(
      "Valitse siltä samalta riviltä numerolaatta, millä rivillä tähtilaatta on."
    );
  }
}
function arvolaatat() {
  document.write("<table align='center' width='500'><tr><td>");
  document.write("<h1>Numeropeli</h1>");
  document.write(
    "<p>Valitse haluamasi numerolaatta joltain riviltä klikkaamalla sitä. Tietokone valitsee sitten siltä pystysarakkeelta, mistä sinä olit valinnut numeron, jonka jälkeen sinä valitset taas numeron siltä riviltä, mistä tietokone oli laatan valinnut. Tietokoneen valinnasta merkkinä on <img src='tahtiohje.png'> laatta. Pelin voittaa se kummalla valittujen laattojen arvojen summa on suurin kun ei enää pystytä valitsemaan. Aloita uusi peli lataamalla sivu uudestaan, jolloin laattojen arvot arvotaan uudestaan.<p>"
  );
  let ind: number = 1;
  for (let rivi: number = 1; rivi <= 10; rivi++) {
    for (let sara: number = 1; sara <= 10; sara++) {
      const laatta: number = Math.floor(Math.random() * 31);
      laatat[ind] = laatta;
      ind++;
    }
  }
}

function tulostalaatat() {
  let i: number = 1;
  document.write("<table>");
  for (let r: number = 1; r <= 10; r++) {
    document.write("<tr>");
    for (let s: number = 1; s <= 10; s++) {
      document.write(
        '<td><img src="laatta' +
          laatat[i] +
          '.png" id="' +
          i +
          '" onclick="changeImage(' +
          i +
          ')"></td>'
      );
      i++;
    }
    document.write("</tr>");
  }
  document.write("</table>");
}
arvolaatat();
tulostalaatat();
Stadin öljylanne
Reactions:
Viestit: 493
Liittynyt: 05 Joulu 2022, 23:47

Re: Haasta tekoälyni! :)

Viesti Kirjoittaja Stadin öljylanne »

Testailin hieman ChatGPT-tekoälyä ja sillä pascalin konvertointi typescriptiksi onnistuisi todennäköisesti käden käänteessä. Kun kokeilin, niin ihan koko koodia se ei yhdeltä istumalta kääntänyt, mutta proseduuri kerallaan kääntäminen mahdollisesti onnistuu.
Vastaa Viestiin