Ohjelmointi, teknologia ja data

Esimerkkejä MistralAI:n kyvykkyydestä.

Ohjelmiston toteuttaminen Mistral AI:lla
 
Tässä esimerkissä toteutetaan peli, mutta voit toteuttaa Mistral AI:llä myös ohjelmiston.
 

pong

Kuva 1: Keskustelulinkistä löytyvä koodi tuottaa kuvan kaltaisen pelin, mutta korostan että tämä on vain karkea esimerkki siitä, millaisen pelin tai ohjelmiston voisit Mistral AI:n koodilla tuottaa.

Tässä tiedot mitä tarvitset saadaksesi tämän Pysty-Pong-pelin toimimaan:


Tarvittavat ohjelmat ja toimet:

  1. Python (versio 3.8 tai uudempi)
    → Pythonin voi ladata täältä: python.org/downloads

  2. Pygame-kirjasto
    → Asennetaan komentorivillä (CMD):

    pip install pygame
    

    (Pythonin mukana tulee yleensä pip, mutta varmistetaan asennuksen yhteydessä.)

  3. Tekstieditori (esimerkiksi)

    • Notepad++ (helppo ja kevyt)

    • Tai vaihtoehtoisesti esim. Visual Studio Code (vähän monipuolisempi, sopii laajempaan ohjelmointiin)

  4. CMD eli komentorivi (Windowsissa valmiina)

    • Python-skripti ajetaan näin:

      python tiedostonimi.py
      
    • Esim. jos tiedosto on tallennettu nimellä pysty_pong.py:

      python pysty_pong.py
      
  5. Äänitiedosto ("bounce.wav")
    → Ladataan ilmainen pieni pomppuääni ja tallennetaan samaan kansioon pelin kanssa.
    (Äänitiedosto voi olla esimerkiksi äänitetty itsekin, mutta tärkeää että tiedosto on nimeltään bounce.wav.)


📦 Yhteenveto minimivaatimuksista:

Tarvittava asia Vinkki
Python 3.8+ Asenna python.org-sivulta
Pygame-kirjasto Asennus CMD:ssä: pip install pygame
Tekstieditori Notepad++, VSCode tai muu
Komentorivi (CMD) Python-ohjelman ajamiseen
Äänitiedosto (bounce.wav) https://freesound.org/

 


📄 Tehtävä: Pysty-Pong -pelin tekeminen Pythonilla ja Pygamella

🎯 Tehtävän kuvaus

Tee yksinkertainen ping pong -peli, jossa:

  • Pallo liikkuu alhaalta ylöspäin ja kimpoaa takaisin pelaajan sekä tekoälyn ohjaamista palkkipelaajista.

  • Pelaaja ohjaa omaa palkkia näppäimistön vasen ja oikea -nuolinäppäimillä.

  • Tekoäly ohjaa yläreunan palkkia automaattisesti.

  • Peli sisältää starttinäytön, peli-ikkunan ja Game Over -näytön.


📦 Alustavat vaatimukset

Asenna Pygame kirjaston komentoriviltä:

pip install pygame

🧩 Perustoiminnallisuus

  • Pallo liikkuu kentällä ja kimpoaa seinistä ja palkista.

  • Pelaaja liikuttaa palkkia vasemmalle ja oikealle.

  • Tekoäly liikuttaa yläreunan palkkia automaattisesti pallon liikettä seuraten.

  • Pelaaja saa pisteen osuessaan palloon.

  • Jos pallo menee ohi ylä- tai alareunasta, tekoäly saa pisteen.

  • Tekoäly voittaa, jos se saa 3 pistettä → Game Over.


🛠️ Laajennetut ominaisuudet

  • Pelin vaikeuden nousu: Pallo nopeutuu joka minuutti, jos pelaaja ei saa pistettä.

  • Ääniefekti: Pallon osuessa palkkiin kuuluu ääni (bounce.wav).

  • Start Game -näyttö: Peli alkaa vasta kun pelaaja painaa SPACE.

  • Game Over -näyttö: Kun tekoäly saa 3 pistettä, peli näyttää Game Over -ruudun ja antaa mahdollisuuden aloittaa uudelleen painamalla SPACE.


📜 Pelin koko Python-koodi

import pygame
import random
import time

# Alustus
pygame.init()

# Näytön asetukset
WIDTH, HEIGHT = 600, 800
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pysty-Pong")

# Värit
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)

# Fontit
font = pygame.font.SysFont(None, 48)
small_font = pygame.font.SysFont(None, 36)

# Ääniefekti (vaatii tiedoston bounce.wav)
bounce_sound = pygame.mixer.Sound("bounce.wav")

# Palkki-asetukset
PADDLE_WIDTH, PADDLE_HEIGHT = 100, 15
PLAYER_Y = HEIGHT - 40
AI_Y = 25
PADDLE_SPEED = 7

# Pallo
BALL_RADIUS = 10
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
ball_dx = random.choice([-4, 4])
ball_dy = -4

# Pelaaja ja AI
player_x = WIDTH // 2 - PADDLE_WIDTH // 2
ai_x = WIDTH // 2 - PADDLE_WIDTH // 2

# Kellot ja pistelaskuri
clock = pygame.time.Clock()
score = 0
ai_score = 0
last_score_time = time.time()
speed_increment_interval = 60  # sekuntia

# Pelin tila
game_started = False
game_over = False

def draw_text_center(text, font, y, color=WHITE):
    text_surf = font.render(text, True, color)
    text_rect = text_surf.get_rect(center=(WIDTH // 2, y))
    screen.blit(text_surf, text_rect)

# Pääsilmukka
running = True
while running:
    screen.fill(BLACK)

    # Aloitusnäyttö
    if not game_started:
        draw_text_center("PYSTY-PONG", font, HEIGHT // 2 - 50)
        draw_text_center("Paina SPACE aloittaaksesi", small_font, HEIGHT // 2 + 10)
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                game_started = True
                score = 0
                ai_score = 0
                ball_x = WIDTH // 2
                ball_y = HEIGHT // 2
                ball_dx = random.choice([-4, 4])
                ball_dy = -4
                last_score_time = time.time()
        continue

    # Tapahtumat
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Ohjaus
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_x > 0:
        player_x -= PADDLE_SPEED
    if keys[pygame.K_RIGHT] and player_x < WIDTH - PADDLE_WIDTH:
        player_x += PADDLE_SPEED

    # AI:n liike
    if ai_x + PADDLE_WIDTH / 2 < ball_x:
        ai_x += PADDLE_SPEED * 0.8
    elif ai_x + PADDLE_WIDTH / 2 > ball_x:
        ai_x -= PADDLE_SPEED * 0.8
    ai_x = max(0, min(WIDTH - PADDLE_WIDTH, ai_x))

    # Pallon liike
    ball_x += ball_dx
    ball_y += ball_dy

    # Kimpoaminen sivuilta
    if ball_x <= 0 or ball_x >= WIDTH:
        ball_dx *= -1

    # Pelaajan osuma
    if (player_x < ball_x < player_x + PADDLE_WIDTH) and (PLAYER_Y < ball_y + BALL_RADIUS < PLAYER_Y + PADDLE_HEIGHT):
        ball_dy *= -1
        bounce_sound.play()
        score += 1
        last_score_time = time.time()

    # AI:n osuma
    if (ai_x < ball_x < ai_x + PADDLE_WIDTH) and (AI_Y < ball_y - BALL_RADIUS < AI_Y + PADDLE_HEIGHT):
        ball_dy *= -1
        bounce_sound.play()

    # Ohi mennyt
    if ball_y < 0:
        score = 0
        ai_score += 1
        ball_x = WIDTH // 2
        ball_y = HEIGHT // 2
        ball_dx = random.choice([-4, 4])
        ball_dy = 4
        last_score_time = time.time()
    elif ball_y > HEIGHT:
        score = 0
        ai_score += 1
        ball_x = WIDTH // 2
        ball_y = HEIGHT // 2
        ball_dx = random.choice([-4, 4])
        ball_dy = -4
        last_score_time = time.time()

    # Pallo nopeutuu jos pelaaja ei saa pistettä
    if time.time() - last_score_time > speed_increment_interval:
        ball_dx *= 1.2
        ball_dy *= 1.2
        last_score_time = time.time()

    # Game Over?
    if ai_score >= 3:
        game_over = True
        game_started = False

    # Piirretään
    pygame.draw.rect(screen, WHITE, (player_x, PLAYER_Y, PADDLE_WIDTH, PADDLE_HEIGHT))
    pygame.draw.rect(screen, WHITE, (ai_x, AI_Y, PADDLE_WIDTH, PADDLE_HEIGHT))
    pygame.draw.circle(screen, WHITE, (int(ball_x), int(ball_y)), BALL_RADIUS)

    # Tekstit
    score_text = small_font.render(f"Pisteet: {score}   Tekoäly: {ai_score}", True, WHITE)
    screen.blit(score_text, (10, HEIGHT - 40))

    # Game Over -näyttö
    if game_over:
        draw_text_center("GAME OVER", font, HEIGHT // 2 - 50)
        draw_text_center("Paina SPACE aloittaaksesi uudestaan", small_font, HEIGHT // 2 + 10)
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                game_over = False
                score = 0
                ai_score = 0
                ball_x = WIDTH // 2
                ball_y = HEIGHT // 2
                ball_dx = random.choice([-4, 4])
                ball_dy = -4
                last_score_time = time.time()
        continue

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

🎵 Ääniefekti

Lataa ilmainen pomppuääni (esim. "bounce.wav") ja tallenna se pelin kansioon. Esimerkiksi:

  • Etsi freesound.org -sivustolta ääni haulla "ping" tai "bounce".

  • Äänen tulee olla lyhyt ja kevyt (WAV-muodossa).


📌 Huomio:

  • Jos haluat pakata projektin esimerkiksi .EXE-tiedostoksi (Windows), voidaan lisätä siihen vielä ohje.

  • Voit myöhemmin kehittää peliä lisäämällä esimerkiksi useita vaikeustasoja tai kaksinpelin!

 
"Haluaisin tehdä sairaanhoitohenkilöstölle ohjelmiston, jonka avulla he voivat etsiä eri sairauksia, eli hakusanalla."
 

Ohjelmisto sairaanhoitohenkilöstölle, jonka avulla voidaan etsiä sairauksia hakusanoilla, kuulostaa hyödylliseltä ja mielenkiintoiselta projektilta. Tässä on askelmerkit ohjelmiston toteutukseen:

1. Ohjelmiston perusominaisuudet

  • Hakutoiminto: Käyttäjä voi syöttää hakusanan (esim. oire, sairauden nimi tai kehonosa).
  • Tietokanta: Sisältää tiedot sairauksista, kuten:
    • Sairauden nimi
    • Oireet
    • Hoitomenetelmät
    • Tarvittavat tutkimukset
  • Tuloslista: Näyttää sairaudet, jotka vastaavat hakusanaa.
  • Yksityiskohtainen näkymä: Käyttäjä voi klikata sairautta ja nähdä lisätiedot.

2. Tekninen toteutus

  • Käyttöliittymä:
    • Desktop-sovellus: esim. käyttäen Pythonin Tkinteriä, PyQT
       
      ä tai web-pohjainen ratkaisu kuten React/HTML+CSS.
    • Mobiilisovellus: esim. Flutter tai React Native.
  • Tietokanta:
    • Yksinkertainen tietokanta: SQLite (lokalisoitu käyttö).
    • Laajempi käyttö: PostgreSQL tai MySQL.
    • Pilvipohjainen ratkaisu: Firebase tai MongoDB.
  • Hakutoiminto: Käytä SQL
     
    LIKE-hakuja tai kehittyneempää tekstin indeksointia, kuten Elasticsearch.

3. Datan hankinta

  • Terveystiedot: Käytä avoimia tietolähteitä (esim. WHO
     
    tietokannat, THL
     
    avoimet aineistot) tai rakenna oma tietokanta keräämällä luotettavia sairaustietoja.
  • Oikeudelliset ja eettiset kysymykset: Varmista, että tiedot ovat ajantasaisia ja noudattavat tietosuojasäädöksiä.

4. Lisäominaisuuksia

  • Suosituimmat haut: Näytä yleisimmin haetut sairaudet.
  • Hakufiltterit: Mahdollisuus rajata hakua esim. oireiden, kehonosien tai sairausryhmien perusteella.
  • Monikielisyys: Tukee suomea, ruotsia ja englantia.
  • Integraatiot: Mahdollisuus integroida muihin järjestelmiin (esim. potilastietojärjestelmät).
  • AI-avusteinen haku: Käytä tekoälyä (GPT tai vastaava) suosittelemaan sairauksia syötettyjen oireiden perusteella.

5. Projektin jakaminen vaiheisiin

  1. Prototyyppi: Rakennetaan perustoiminnallisuus (hakusana, tuloslista, sairauden tiedot).
  2. Tietokannan laajennus: Lisää sairauksia ja tietoja.
  3. Käyttäjätestaus: Testaa ohjelmisto sairaanhoitohenkilöstöllä ja kerää palautetta.
  4. Jatkuva kehitys: Lisää ominaisuuksia ja paranna käytettävyyttä.

Salakirjoitukset ja purku:


"+(=%+( /+ 0!?**/". Ymmärsitkö mitä tuo tarkoitti? Et varmaankaan, sillä se oli salakirjoitusta, jonka avaamiseen tarvitaan avain.

Tässä esimerkissä mennään Sudenpennuista tuttuun aihepiiriin. 

Promt: Suunnittele salakirjoitusaakkosto
 

Salakirjoitusaakkoston suunnittelussa voidaan käyttää monia erilaisia menetelmiä. Yksi yksinkertainen tapa on käyttää korvauskoodia, jossa jokainen aakkonen korvataan toisella merkillä, numerolla tai symbolilla. Tässä on esimerkki salakirjoitusaakkostosta, jossa käytetään symboleja ja numeroita:

Aakkoset: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Salakirjoitus: ! 2 # 4 % 6 & 8 ( 0 * - = + / < > ? @ ^ _ ` ~ |

Tässä järjestelmässä jokainen kirjain korvataan vastaavalla symbolilla tai numerolla. Esimerkiksi sana "SALA" kirjoitettaisiin salakirjoituksena "@=!!".

Voit luoda myös monimutkaisempia salakirjoitusjärjestelmiä lisäämällä sääntöjä, kuten kirjainten sekoittamisen, sanojen kääntämisen tai erilaisten salakirjoitustekniikoiden, kuten Caesarin salauksen, käyttämisen. Tärkeää on, että sekä lähettäjällä että vastaanottajalla on pääsy samaan salakirjoitusaakkostoon ja he tietävät, miten viesti salataan ja puretaan.

 
Kirjoita tuolla salakirjoituksella lause: Nimeni on Matti
 

# Let's encrypt the given sentence "Nimeni on Matti" using the provided substitution cipher.

# Substitution cipher mapping from the example provided
cipher_map = {
'A': '!', 'B': '2', 'C': '#', 'D': '4', 'E': '%', 'F': '6', 'G': '&',
'H': '8', 'I': '(', 'J': '0', 'K': '*', 'L': '-', 'M': '=', 'N': '+',
'O': '/', 'P': '<', 'Q': '>', 'R': '?', 'S': '@', 'T': '^', 'U': '_',
'V': '`', 'W': '~', 'X': '|', 'Y': '\\', 'Z': '['
}

# Sentence to encrypt
sentence = "Nimeni on Matti"

# Encrypt the sentence
encrypted_sentence = ''.join(cipher_map.get(char.upper(), char) for char in sentence)

encrypted_sentence

Result
'+(=%+( /+ =!^^('

Lause "Nimeni on Matti" salakirjoitettuna edellä määritellyllä salakirjoitusaakkostolla on "+(=%+( /+ =!^^(". ​

Entä Nimeni on Jarkko kyseisellä salakirjoitusaakkostolla?

# Let's encrypt another sentence "Nimeni on Jarkko" using the provided substitution cipher.

# Sentence to encrypt
sentence_jarkko = "Nimeni on Jarkko"

# Encrypt the sentence using the same cipher map as before
encrypted_sentence_jarkko = ''.join(cipher_map.get(char.upper(), char) for char in sentence_jarkko)

encrypted_sentence_jarkko

Alalyzed

# Re-defining the substitution cipher map and encrypting the sentence "Nimeni on Jarkko" as previous state was reset.

cipher_map = {
'A': '!', 'B': '2', 'C': '#', 'D': '4', 'E': '%', 'F': '6', 'G': '&',
'H': '8', 'I': '(', 'J': '0', 'K': '*', 'L': '-', 'M': '=', 'N': '+',
'O': '/', 'P': '<', 'Q': '>', 'R': '?', 'S': '@', 'T': '^', 'U': '_',
'V': '`', 'W': '~', 'X': '|', 'Y': '\\', 'Z': '['
}

# Sentence to encrypt
sentence_jarkko = "Nimeni on Jarkko"

# Encrypt the sentence
encrypted_sentence_jarkko = ''.join(cipher_map.get(char.upper(), char) for char in sentence_jarkko)

encrypted_sentence_jarkko

Result
'+(=%+( /+ 0!?**/'
Lause "Nimeni on Jarkko" salakirjoitettuna edellä määritellyllä salakirjoitusaakkostolla on "+(=%+( /+ 0!?**/". ​

Komentokehote: Pura seuraava salakirjoitus: '+(=%+( /+ =!^^('
 

Annettu salakirjoitus '+(=%+( /+ =!^^(' purettuna edellä määritellyllä salakirjoitusaakkostolla on:

  • + = N
  • ( = I
  • % = E
  • = = M
  • + = N
  • ( = I
  • = (välilyönti)
  • / = O
  • + = N
  • = (välilyönti)
  • = = M
  • ! = A
  • ^ = T
  • ^ = T
  • ( = I

Joten purkamisessa saadaan: "Nimeni on Matti".