<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="https://peda.net/:static/533/atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Ohjelmointi, teknologia ja data</title>
<id>https://peda.net/id/be8da1cfb26</id>
<updated>2025-10-26T14:03:11+02:00</updated>
<link href="https://peda.net/id/be8da1cfb26:atom" rel="self" />
<link href="https://peda.net/p/JarkkoSoini/chatgpt-n-peruskaytto2/le-chat-tekoalyn-perusteet/varamoduuli-2#top" rel="alternate" />
<logo>https://peda.net/:static/533/peda.net.logo.bg.svg</logo>
<rights type="html">&lt;div class=&quot;license&quot;&gt;Tämän sivun lisenssi &lt;a rel=&quot;license&quot; href=&quot;https://peda.net/info&quot;&gt;Peda.net-yleislisenssi&lt;/a&gt;&lt;/div&gt;&#10;</rights>

<entry>
<title>Videonurkka</title>
<id>https://peda.net/id/be8e42adb26</id>
<updated>2025-05-21T01:28:03+03:00</updated>
<link href="https://peda.net/p/JarkkoSoini/chatgpt-n-peruskaytto2/le-chat-tekoalyn-perusteet/varamoduuli-2/videonurkka#top" />
<content type="html">&lt;div class=&quot;youtube&quot;&gt;&lt;iframe loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/RcdsH09wpNk?rel=0&amp;amp;modestbranding=1&amp;amp;hl=fi&quot; allowfullscreen=&quot;allowfullscreen&quot;&gt;&lt;/iframe&gt;&lt;div&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RcdsH09wpNk&quot; title=&quot;https://www.youtube.com/watch?v=RcdsH09wpNk&quot; target=&quot;_blank&quot; rel=&quot;nofollow ugc noopener&quot;&gt;https://www.youtube.com/watch?v=RcdsH09wpNk&lt;/a&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;</content>
<published>2025-10-26T14:03:11+02:00</published>
</entry>

<entry>
<title>Ohjelmointi, teknologia ja data</title>
<id>https://peda.net/id/be8ebae0b26</id>
<updated>2025-05-20T21:48:12+03:00</updated>
<link href="https://peda.net/p/JarkkoSoini/chatgpt-n-peruskaytto2/le-chat-tekoalyn-perusteet/varamoduuli-2/ohjelmointi-teknologia-ja-data#top" />
<content type="html">&lt;div class=&quot;main&quot;&gt;&#10;&lt;div class=&quot;content enclose&quot;&gt;Esimerkkejä MistralAI:n kyvykkyydestä.&lt;br/&gt;&#10;&lt;br/&gt;&#10;&lt;div class=&quot;m-auto text-base py-[18px] px-3 md:px-4 w-full md:px-5 lg:px-4 xl:px-5&quot;&gt;&#10;&lt;div class=&quot;mx-auto flex flex-1 gap-4 text-base md:gap-5 lg:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem]&quot;&gt;&#10;&lt;div class=&quot;group/conversation-turn relative flex w-full min-w-0 flex-col&quot;&gt;&#10;&lt;div class=&quot;flex-col gap-1 md:gap-3&quot;&gt;&#10;&lt;div class=&quot;flex max-w-full flex-col flex-grow&quot;&gt;&#10;&lt;div class=&quot;min-h-8 text-message flex w-full flex-col items-end gap-2 whitespace-normal break-words [.text-message+&amp;amp;]:mt-5&quot; dir=&quot;auto&quot;&gt;&lt;!--filtered attribute: data-message-author-role=&quot;user&quot;--&gt;&lt;!--filtered attribute: data-message-id=&quot;aaa228f2-3de3-46ec-a1d3-644448aadc84&quot;--&gt;&#10;&lt;div class=&quot;flex w-full flex-col gap-1 empty:hidden items-end rtl:items-start&quot;&gt;&#10;&lt;div class=&quot;relative max-w-[70%] rounded-3xl bg-token-message-surface px-5 py-2.5&quot;&gt;&#10;&lt;div class=&quot;whitespace-pre-wrap&quot;&gt;&lt;strong&gt;Ohjelmiston toteuttaminen Mistral AI:lla&lt;/strong&gt;&lt;/div&gt;&#10;&lt;div class=&quot;whitespace-pre-wrap&quot;&gt; &lt;/div&gt;&#10;&lt;div class=&quot;whitespace-pre-wrap&quot;&gt;Tässä esimerkissä toteutetaan peli, mutta voit toteuttaa Mistral AI:llä myös ohjelmiston.&lt;/div&gt;&#10;&lt;div class=&quot;whitespace-pre-wrap&quot;&gt; &lt;/div&gt;&#10;&lt;div class=&quot;whitespace-pre-wrap&quot;&gt;&#10;&lt;p&gt;&lt;img class=&quot;img-fluid align-top&quot; src=&quot;https://moodle.omnia.fi/pluginfile.php/2500028/mod_page/content/5/Pong460x276.png&quot; alt=&quot;pong&quot;/&gt;&lt;/p&gt;&#10;&lt;p&gt;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.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Tässä tiedot mitä tarvitset saadaksesi tämän Pysty-Pong-pelin toimimaan:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;hr&gt;&lt;/hr&gt;&#10;&lt;h3&gt;Tarvittavat ohjelmat ja toimet:&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Python (versio 3.8 tai uudempi)&lt;/strong&gt;&lt;br/&gt;&#10;→ Pythonin voi ladata täältä:&lt;span&gt; &lt;/span&gt;&lt;a href=&quot;https://www.python.org/downloads/&quot; rel=&quot;nofollow ugc noopener&quot;&gt;python.org/downloads&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Pygame-kirjasto&lt;/strong&gt;&lt;br/&gt;&#10;→ Asennetaan komentorivillä (CMD):&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install pygame&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;(Pythonin mukana tulee yleensä&lt;span&gt; &lt;/span&gt;&lt;code&gt;pip&lt;/code&gt;, mutta varmistetaan asennuksen yhteydessä.)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Tekstieditori&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;(esimerkiksi)&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Notepad++&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;(helppo ja kevyt)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Tai vaihtoehtoisesti esim. Visual Studio Code (vähän monipuolisempi, sopii laajempaan ohjelmointiin)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;CMD eli komentorivi&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;(Windowsissa valmiina)&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Python-skripti ajetaan näin:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python tiedostonimi.py&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Esim. jos tiedosto on tallennettu nimellä&lt;span&gt; &lt;/span&gt;&lt;code&gt;pysty_pong.py&lt;/code&gt;:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python pysty_pong.py&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Äänitiedosto (&amp;quot;bounce.wav&amp;quot;)&lt;/strong&gt;&lt;br/&gt;&#10;→ Ladataan ilmainen pieni pomppuääni ja tallennetaan samaan kansioon pelin kanssa.&lt;br/&gt;&#10;(Äänitiedosto voi olla esimerkiksi äänitetty itsekin, mutta tärkeää että tiedosto on nimeltään&lt;span&gt; &lt;/span&gt;&lt;strong&gt;bounce.wav&lt;/strong&gt;.)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&lt;/hr&gt;&#10;&lt;h3&gt;📦 Yhteenveto minimivaatimuksista:&lt;/h3&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Tarvittava asia&lt;/th&gt;&#10;&lt;th&gt;Vinkki&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Python 3.8+&lt;/td&gt;&#10;&lt;td&gt;Asenna python.org-sivulta&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Pygame-kirjasto&lt;/td&gt;&#10;&lt;td&gt;Asennus CMD:ssä:&lt;span&gt; &lt;/span&gt;&lt;code&gt;pip install pygame&lt;/code&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Tekstieditori&lt;/td&gt;&#10;&lt;td&gt;Notepad++, VSCode tai muu&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Komentorivi (CMD)&lt;/td&gt;&#10;&lt;td&gt;Python-ohjelman ajamiseen&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Äänitiedosto (bounce.wav)&lt;/td&gt;&#10;&lt;td&gt;&lt;a href=&quot;https://freesound.org/&quot; rel=&quot;nofollow ugc noopener&quot;&gt;https://freesound.org/&lt;/a&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt; &lt;/p&gt;&#10;&lt;hr&gt;&lt;/hr&gt;&#10;&lt;h2&gt;📄 Tehtävä: Pysty-Pong -pelin tekeminen Pythonilla ja Pygamella&lt;/h2&gt;&#10;&lt;h3&gt;🎯 Tehtävän kuvaus&lt;/h3&gt;&#10;&lt;p&gt;Tee yksinkertainen ping pong -peli, jossa:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Pallo liikkuu alhaalta ylöspäin ja kimpoaa takaisin pelaajan sekä tekoälyn ohjaamista palkkipelaajista.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Pelaaja ohjaa omaa palkkia näppäimistön vasen ja oikea -nuolinäppäimillä.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Tekoäly ohjaa yläreunan palkkia automaattisesti.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Peli sisältää starttinäytön, peli-ikkunan ja Game Over -näytön.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&lt;/hr&gt;&#10;&lt;h3&gt;📦 Alustavat vaatimukset&lt;/h3&gt;&#10;&lt;p&gt;Asenna&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Pygame&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;kirjaston komentoriviltä:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install pygame&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;hr&gt;&lt;/hr&gt;&#10;&lt;h3&gt;🧩 Perustoiminnallisuus&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Pallo liikkuu kentällä ja kimpoaa seinistä ja palkista.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Pelaaja liikuttaa palkkia vasemmalle ja oikealle.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Tekoäly liikuttaa yläreunan palkkia automaattisesti pallon liikettä seuraten.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Pelaaja saa pisteen osuessaan palloon.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Jos pallo menee ohi ylä- tai alareunasta, tekoäly saa pisteen.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Tekoäly voittaa, jos se saa 3 pistettä → Game Over.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&lt;/hr&gt;&#10;&lt;h3&gt;🛠️ Laajennetut ominaisuudet&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Pelin vaikeuden nousu&lt;/strong&gt;: Pallo nopeutuu joka minuutti, jos pelaaja ei saa pistettä.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Ääniefekti&lt;/strong&gt;: Pallon osuessa palkkiin kuuluu ääni (bounce.wav).&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Start Game -näyttö&lt;/strong&gt;: Peli alkaa vasta kun pelaaja painaa&lt;span&gt; &lt;/span&gt;&lt;code&gt;SPACE&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Game Over -näyttö&lt;/strong&gt;: Kun tekoäly saa 3 pistettä, peli näyttää Game Over -ruudun ja antaa mahdollisuuden aloittaa uudelleen painamalla&lt;span&gt; &lt;/span&gt;&lt;code&gt;SPACE&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&lt;/hr&gt;&#10;&lt;h3&gt;📜 Pelin koko Python-koodi&lt;/h3&gt;&#10;&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import pygame&#10;import random&#10;import time&#10;&#10;# Alustus&#10;pygame.init()&#10;&#10;# Näytön asetukset&#10;WIDTH, HEIGHT = 600, 800&#10;screen = pygame.display.set_mode((WIDTH, HEIGHT))&#10;pygame.display.set_caption(&amp;quot;Pysty-Pong&amp;quot;)&#10;&#10;# Värit&#10;WHITE = (255, 255, 255)&#10;BLACK = (0, 0, 0)&#10;&#10;# Fontit&#10;font = pygame.font.SysFont(None, 48)&#10;small_font = pygame.font.SysFont(None, 36)&#10;&#10;# Ääniefekti (vaatii tiedoston bounce.wav)&#10;bounce_sound = pygame.mixer.Sound(&amp;quot;bounce.wav&amp;quot;)&#10;&#10;# Palkki-asetukset&#10;PADDLE_WIDTH, PADDLE_HEIGHT = 100, 15&#10;PLAYER_Y = HEIGHT - 40&#10;AI_Y = 25&#10;PADDLE_SPEED = 7&#10;&#10;# Pallo&#10;BALL_RADIUS = 10&#10;ball_x = WIDTH // 2&#10;ball_y = HEIGHT // 2&#10;ball_dx = random.choice([-4, 4])&#10;ball_dy = -4&#10;&#10;# Pelaaja ja AI&#10;player_x = WIDTH // 2 - PADDLE_WIDTH // 2&#10;ai_x = WIDTH // 2 - PADDLE_WIDTH // 2&#10;&#10;# Kellot ja pistelaskuri&#10;clock = pygame.time.Clock()&#10;score = 0&#10;ai_score = 0&#10;last_score_time = time.time()&#10;speed_increment_interval = 60  # sekuntia&#10;&#10;# Pelin tila&#10;game_started = False&#10;game_over = False&#10;&#10;def draw_text_center(text, font, y, color=WHITE):&#10;    text_surf = font.render(text, True, color)&#10;    text_rect = text_surf.get_rect(center=(WIDTH // 2, y))&#10;    screen.blit(text_surf, text_rect)&#10;&#10;# Pääsilmukka&#10;running = True&#10;while running:&#10;    screen.fill(BLACK)&#10;&#10;    # Aloitusnäyttö&#10;    if not game_started:&#10;        draw_text_center(&amp;quot;PYSTY-PONG&amp;quot;, font, HEIGHT // 2 - 50)&#10;        draw_text_center(&amp;quot;Paina SPACE aloittaaksesi&amp;quot;, small_font, HEIGHT // 2 + 10)&#10;        pygame.display.flip()&#10;        for event in pygame.event.get():&#10;            if event.type == pygame.QUIT:&#10;                running = False&#10;            elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:&#10;                game_started = True&#10;                score = 0&#10;                ai_score = 0&#10;                ball_x = WIDTH // 2&#10;                ball_y = HEIGHT // 2&#10;                ball_dx = random.choice([-4, 4])&#10;                ball_dy = -4&#10;                last_score_time = time.time()&#10;        continue&#10;&#10;    # Tapahtumat&#10;    for event in pygame.event.get():&#10;        if event.type == pygame.QUIT:&#10;            running = False&#10;&#10;    # Ohjaus&#10;    keys = pygame.key.get_pressed()&#10;    if keys[pygame.K_LEFT] and player_x &amp;gt; 0:&#10;        player_x -= PADDLE_SPEED&#10;    if keys[pygame.K_RIGHT] and player_x &amp;lt; WIDTH - PADDLE_WIDTH:&#10;        player_x += PADDLE_SPEED&#10;&#10;    # AI:n liike&#10;    if ai_x + PADDLE_WIDTH / 2 &amp;lt; ball_x:&#10;        ai_x += PADDLE_SPEED * 0.8&#10;    elif ai_x + PADDLE_WIDTH / 2 &amp;gt; ball_x:&#10;        ai_x -= PADDLE_SPEED * 0.8&#10;    ai_x = max(0, min(WIDTH - PADDLE_WIDTH, ai_x))&#10;&#10;    # Pallon liike&#10;    ball_x += ball_dx&#10;    ball_y += ball_dy&#10;&#10;    # Kimpoaminen sivuilta&#10;    if ball_x &amp;lt;= 0 or ball_x &amp;gt;= WIDTH:&#10;        ball_dx *= -1&#10;&#10;    # Pelaajan osuma&#10;    if (player_x &amp;lt; ball_x &amp;lt; player_x + PADDLE_WIDTH) and (PLAYER_Y &amp;lt; ball_y + BALL_RADIUS &amp;lt; PLAYER_Y + PADDLE_HEIGHT):&#10;        ball_dy *= -1&#10;        bounce_sound.play()&#10;        score += 1&#10;        last_score_time = time.time()&#10;&#10;    # AI:n osuma&#10;    if (ai_x &amp;lt; ball_x &amp;lt; ai_x + PADDLE_WIDTH) and (AI_Y &amp;lt; ball_y - BALL_RADIUS &amp;lt; AI_Y + PADDLE_HEIGHT):&#10;        ball_dy *= -1&#10;        bounce_sound.play()&#10;&#10;    # Ohi mennyt&#10;    if ball_y &amp;lt; 0:&#10;        score = 0&#10;        ai_score += 1&#10;        ball_x = WIDTH // 2&#10;        ball_y = HEIGHT // 2&#10;        ball_dx = random.choice([-4, 4])&#10;        ball_dy = 4&#10;        last_score_time = time.time()&#10;    elif ball_y &amp;gt; HEIGHT:&#10;        score = 0&#10;        ai_score += 1&#10;        ball_x = WIDTH // 2&#10;        ball_y = HEIGHT // 2&#10;        ball_dx = random.choice([-4, 4])&#10;        ball_dy = -4&#10;        last_score_time = time.time()&#10;&#10;    # Pallo nopeutuu jos pelaaja ei saa pistettä&#10;    if time.time() - last_score_time &amp;gt; speed_increment_interval:&#10;        ball_dx *= 1.2&#10;        ball_dy *= 1.2&#10;        last_score_time = time.time()&#10;&#10;    # Game Over?&#10;    if ai_score &amp;gt;= 3:&#10;        game_over = True&#10;        game_started = False&#10;&#10;    # Piirretään&#10;    pygame.draw.rect(screen, WHITE, (player_x, PLAYER_Y, PADDLE_WIDTH, PADDLE_HEIGHT))&#10;    pygame.draw.rect(screen, WHITE, (ai_x, AI_Y, PADDLE_WIDTH, PADDLE_HEIGHT))&#10;    pygame.draw.circle(screen, WHITE, (int(ball_x), int(ball_y)), BALL_RADIUS)&#10;&#10;    # Tekstit&#10;    score_text = small_font.render(f&amp;quot;Pisteet: {score}   Tekoäly: {ai_score}&amp;quot;, True, WHITE)&#10;    screen.blit(score_text, (10, HEIGHT - 40))&#10;&#10;    # Game Over -näyttö&#10;    if game_over:&#10;        draw_text_center(&amp;quot;GAME OVER&amp;quot;, font, HEIGHT // 2 - 50)&#10;        draw_text_center(&amp;quot;Paina SPACE aloittaaksesi uudestaan&amp;quot;, small_font, HEIGHT // 2 + 10)&#10;        pygame.display.flip()&#10;        for event in pygame.event.get():&#10;            if event.type == pygame.QUIT:&#10;                running = False&#10;            elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:&#10;                game_over = False&#10;                score = 0&#10;                ai_score = 0&#10;                ball_x = WIDTH // 2&#10;                ball_y = HEIGHT // 2&#10;                ball_dx = random.choice([-4, 4])&#10;                ball_dy = -4&#10;                last_score_time = time.time()&#10;        continue&#10;&#10;    pygame.display.flip()&#10;    clock.tick(60)&#10;&#10;pygame.quit()&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;hr&gt;&lt;/hr&gt;&#10;&lt;h3&gt;🎵 Ääniefekti&lt;/h3&gt;&#10;&lt;p&gt;Lataa ilmainen pomppuääni (esim. &amp;quot;bounce.wav&amp;quot;) ja tallenna se pelin kansioon. Esimerkiksi:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Etsi freesound.org -sivustolta ääni haulla&lt;span&gt; &lt;/span&gt;&lt;strong&gt;&amp;quot;ping&amp;quot;&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;tai&lt;span&gt; &lt;/span&gt;&lt;strong&gt;&amp;quot;bounce&amp;quot;&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Äänen tulee olla lyhyt ja kevyt (WAV-muodossa).&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&lt;/hr&gt;&#10;&lt;h3&gt;📌 Huomio:&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Jos haluat pakata projektin esimerkiksi .EXE-tiedostoksi (Windows), voidaan lisätä siihen vielä ohje.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Voit myöhemmin kehittää peliä lisäämällä esimerkiksi useita vaikeustasoja tai kaksinpelin!&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;whitespace-pre-wrap&quot;&gt; &lt;/div&gt;&#10;&lt;div class=&quot;whitespace-pre-wrap&quot;&gt;&amp;quot;Haluaisin tehdä sairaanhoitohenkilöstölle ohjelmiston, jonka avulla he voivat etsiä eri sairauksia, eli hakusanalla.&amp;quot;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;m-auto text-base py-[18px] px-3 md:px-4 w-full md:px-5 lg:px-4 xl:px-5&quot;&gt;&#10;&lt;div class=&quot;mx-auto flex flex-1 gap-4 text-base md:gap-5 lg:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem]&quot;&gt;&#10;&lt;div class=&quot;flex-shrink-0 flex flex-col relative items-end&quot;&gt;&#10;&lt;div&gt;&#10;&lt;div class=&quot;pt-0&quot;&gt;&#10;&lt;div class=&quot;gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full&quot;&gt;&#10;&lt;div class=&quot;relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8&quot;&gt; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn&quot;&gt;&#10;&lt;div class=&quot;flex-col gap-1 md:gap-3&quot;&gt;&#10;&lt;div class=&quot;flex max-w-full flex-col flex-grow&quot;&gt;&#10;&lt;div class=&quot;min-h-8 text-message flex w-full flex-col items-end gap-2 whitespace-normal break-words [.text-message+&amp;amp;]:mt-5&quot; dir=&quot;auto&quot;&gt;&lt;!--filtered attribute: data-message-author-role=&quot;assistant&quot;--&gt;&lt;!--filtered attribute: data-message-id=&quot;71442128-8544-4c01-b979-9869009e8200&quot;--&gt;&lt;!--filtered attribute: data-message-model-slug=&quot;gpt-4o&quot;--&gt;&#10;&lt;div class=&quot;flex w-full flex-col gap-1 empty:hidden first:pt-[3px]&quot;&gt;&#10;&lt;div class=&quot;markdown prose w-full break-words dark:prose-invert dark&quot;&gt;&#10;&lt;p&gt;Ohjelmisto sairaanhoitohenkilöstölle, jonka avulla voidaan etsiä sairauksia hakusanoilla, kuulostaa hyödylliseltä ja mielenkiintoiselta projektilta. Tässä on askelmerkit ohjelmiston toteutukseen:&lt;/p&gt;&#10;&lt;h3&gt;1.&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Ohjelmiston perusominaisuudet&lt;/strong&gt;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Hakutoiminto:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Käyttäjä voi syöttää hakusanan (esim. oire, sairauden nimi tai kehonosa).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Tietokanta:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Sisältää tiedot sairauksista, kuten:&#10;&lt;ul&gt;&#10;&lt;li&gt;Sairauden nimi&lt;/li&gt;&#10;&lt;li&gt;Oireet&lt;/li&gt;&#10;&lt;li&gt;Hoitomenetelmät&lt;/li&gt;&#10;&lt;li&gt;Tarvittavat tutkimukset&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Tuloslista:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Näyttää sairaudet, jotka vastaavat hakusanaa.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Yksityiskohtainen näkymä:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Käyttäjä voi klikata sairautta ja nähdä lisätiedot.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3&gt;2.&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Tekninen toteutus&lt;/strong&gt;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Käyttöliittymä:&lt;/strong&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Desktop-sovellus: esim. käyttäen&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Pythonin Tkinteriä, PyQT&lt;/strong&gt;&#10;&lt;div&gt; &lt;/div&gt;&#10;&lt;strong&gt;ä&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;tai web-pohjainen ratkaisu kuten&lt;span&gt; &lt;/span&gt;&lt;strong&gt;React/HTML+CSS.&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;Mobiilisovellus: esim.&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Flutter tai React Native.&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Tietokanta:&lt;/strong&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Yksinkertainen tietokanta:&lt;span&gt; &lt;/span&gt;&lt;strong&gt;SQLite&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;(lokalisoitu käyttö).&lt;/li&gt;&#10;&lt;li&gt;Laajempi käyttö:&lt;span&gt; &lt;/span&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;tai&lt;span&gt; &lt;/span&gt;&lt;strong&gt;MySQL&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;Pilvipohjainen ratkaisu:&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Firebase&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;tai&lt;span&gt; &lt;/span&gt;&lt;strong&gt;MongoDB.&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Hakutoiminto:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Käytä SQL&#10;&lt;div&gt; &lt;/div&gt;&#10;LIKE-hakuja tai kehittyneempää tekstin indeksointia, kuten&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Elasticsearch&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3&gt;3.&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Datan hankinta&lt;/strong&gt;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Terveystiedot:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Käytä avoimia tietolähteitä (esim. WHO&#10;&lt;div&gt; &lt;/div&gt;&#10;tietokannat, THL&#10;&lt;div&gt; &lt;/div&gt;&#10;avoimet aineistot) tai rakenna oma tietokanta keräämällä luotettavia sairaustietoja.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Oikeudelliset ja eettiset kysymykset:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Varmista, että tiedot ovat ajantasaisia ja noudattavat tietosuojasäädöksiä.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3&gt;4.&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Lisäominaisuuksia&lt;/strong&gt;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Suosituimmat haut:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Näytä yleisimmin haetut sairaudet.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Hakufiltterit:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Mahdollisuus rajata hakua esim. oireiden, kehonosien tai sairausryhmien perusteella.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Monikielisyys:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Tukee suomea, ruotsia ja englantia.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Integraatiot:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Mahdollisuus integroida muihin järjestelmiin (esim. potilastietojärjestelmät).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;AI-avusteinen haku:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Käytä tekoälyä (GPT tai vastaava) suosittelemaan sairauksia syötettyjen oireiden perusteella.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3&gt;5.&lt;span&gt; &lt;/span&gt;&lt;strong&gt;Projektin jakaminen vaiheisiin&lt;/strong&gt;&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Prototyyppi:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Rakennetaan perustoiminnallisuus (hakusana, tuloslista, sairauden tiedot).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Tietokannan laajennus:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Lisää sairauksia ja tietoja.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Käyttäjätestaus:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Testaa ohjelmisto sairaanhoitohenkilöstöllä ja kerää palautetta.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Jatkuva kehitys:&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Lisää ominaisuuksia ja paranna käytettävyyttä.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;br/&gt;&#10;&lt;b&gt;Salakirjoitukset ja purku:&lt;/b&gt;&lt;br/&gt;&#10;&lt;br/&gt;&#10;&lt;br/&gt;&#10;&lt;b&gt;&lt;span&gt;&amp;quot;+(=%+( /+ 0!?**/&amp;quot;. &lt;/span&gt;&lt;/b&gt;&lt;span&gt;Ymmärsitkö mitä tuo tarkoitti? Et varmaankaan, sillä se oli salakirjoitusta, jonka avaamiseen tarvitaan avain.&lt;/span&gt;&lt;br/&gt;&#10;&lt;br/&gt;&#10;&lt;div class=&quot;w-full text-token-text-primary&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;py-2 px-3 text-base md:px-4 m-auto md:px-5 lg:px-1 xl:px-5&quot;&gt;&#10;&lt;div class=&quot;mx-auto flex flex-1 gap-3 text-base juice:gap-4 juice:md:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem]&quot;&gt;&#10;&lt;div class=&quot;relative flex w-full min-w-0 flex-col&quot;&gt;&#10;&lt;div class=&quot;flex-col gap-1 md:gap-3&quot;&gt;&#10;&lt;div class=&quot;flex flex-grow flex-col max-w-full&quot;&gt;&#10;&lt;div class=&quot;min-h-[20px] text-message flex flex-col items-start whitespace-pre-wrap break-words [.text-message+&amp;amp;]:mt-5 juice:w-full juice:items-end overflow-x-auto gap-3&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;relative max-w-[90%]&quot;&gt;Tässä esimerkissä mennään Sudenpennuista tuttuun aihepiiriin. &lt;br/&gt;&#10;&lt;br/&gt;&#10;&lt;b&gt;Promt: Suunnittele salakirjoitusaakkosto&lt;/b&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;mt-1 flex gap-3 empty:hidden juice:mr-1 juice:flex-row-reverse&quot;&gt;&#10;&lt;div class=&quot;-ml-1 mt-0 flex h-7 items-center justify-center gap-[2px] self-end text-gray-400 lg:justify-start lg:self-center md:invisible&quot;&gt; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;w-full text-token-text-primary&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;py-2 px-3 text-base md:px-4 m-auto md:px-5 lg:px-1 xl:px-5&quot;&gt;&#10;&lt;div class=&quot;mx-auto flex flex-1 gap-3 text-base juice:gap-4 juice:md:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem]&quot;&gt;&#10;&lt;div class=&quot;relative flex w-full min-w-0 flex-col agent-turn&quot;&gt;&#10;&lt;div class=&quot;flex-col gap-1 md:gap-3&quot;&gt;&#10;&lt;div class=&quot;flex flex-grow flex-col max-w-full&quot;&gt;&#10;&lt;div class=&quot;min-h-[20px] text-message flex flex-col items-start whitespace-pre-wrap break-words [.text-message+&amp;amp;]:mt-5 juice:w-full juice:items-end overflow-x-auto gap-3&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;markdown prose w-full break-words dark:prose-invert dark&quot;&gt;&#10;&lt;p&gt;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:&lt;/p&gt;&#10;&lt;p&gt;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&lt;br/&gt;&#10;Salakirjoitus: ! 2 # 4 % 6 &amp;amp; 8 ( 0 * - = + / &amp;lt; &amp;gt; ? @ ^ _ ` ~ |&lt;/p&gt;&#10;&lt;p&gt;Tässä järjestelmässä jokainen kirjain korvataan vastaavalla symbolilla tai numerolla. Esimerkiksi sana &amp;quot;SALA&amp;quot; kirjoitettaisiin salakirjoituksena &amp;quot;@=!!&amp;quot;.&lt;/p&gt;&#10;&lt;p&gt;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.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;mt-1 flex gap-3 empty:hidden juice:-ml-3&quot;&gt;&#10;&lt;div class=&quot;-ml-1 mt-0 flex h-7 items-center justify-center gap-[2px] self-end text-gray-400 lg:justify-start lg:self-center md:invisible&quot;&gt;&#10;&lt;div class=&quot;flex&quot;&gt; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;w-full text-token-text-primary&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;py-2 px-3 text-base md:px-4 m-auto md:px-5 lg:px-1 xl:px-5&quot;&gt;&#10;&lt;div class=&quot;mx-auto flex flex-1 gap-3 text-base juice:gap-4 juice:md:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem]&quot;&gt;&#10;&lt;div class=&quot;relative flex w-full min-w-0 flex-col&quot;&gt;&#10;&lt;div class=&quot;flex-col gap-1 md:gap-3&quot;&gt;&#10;&lt;div class=&quot;flex flex-grow flex-col max-w-full&quot;&gt;&#10;&lt;div class=&quot;min-h-[20px] text-message flex flex-col items-start whitespace-pre-wrap break-words [.text-message+&amp;amp;]:mt-5 juice:w-full juice:items-end overflow-x-auto gap-3&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;relative max-w-[90%]&quot;&gt;Kirjoita tuolla salakirjoituksella lause: Nimeni on Matti&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;mt-1 flex gap-3 empty:hidden juice:mr-1 juice:flex-row-reverse&quot;&gt;&#10;&lt;div class=&quot;-ml-1 mt-0 flex h-7 items-center justify-center gap-[2px] self-end text-gray-400 lg:justify-start lg:self-center md:invisible&quot;&gt; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;w-full text-token-text-primary&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;py-2 px-3 text-base md:px-4 m-auto md:px-5 lg:px-1 xl:px-5&quot;&gt;&#10;&lt;div class=&quot;mx-auto flex flex-1 gap-3 text-base juice:gap-4 juice:md:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem]&quot;&gt;&#10;&lt;div class=&quot;relative flex w-full min-w-0 flex-col agent-turn&quot;&gt;&#10;&lt;div class=&quot;flex-col gap-1 md:gap-3&quot;&gt;&#10;&lt;div class=&quot;flex flex-grow flex-col max-w-full&quot;&gt;&#10;&lt;div class=&quot;overflow-hidden&quot;&gt;&#10;&lt;div class=&quot;mb-3 mt-0.5 overflow-hidden rounded-xl bg-black&quot;&gt;&#10;&lt;div class=&quot;markdown prose w-full break-words dark:prose-invert dark markdown prose w-full break-words dark:prose-invert dark&quot;&gt;&#10;&lt;div class=&quot;dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium&quot;&gt;&#10;&lt;div class=&quot;overflow-y-auto p-4 text-left undefined&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;!whitespace-pre hljs language-python&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;br/&gt;&#10;# Let's encrypt the given sentence &amp;quot;Nimeni on Matti&amp;quot; using the provided substitution cipher.&lt;br/&gt;&#10;&lt;br/&gt;&#10;# Substitution cipher mapping from the example provided&lt;br/&gt;&#10;cipher_map = {&lt;br/&gt;&#10;'A': '!', 'B': '2', 'C': '#', 'D': '4', 'E': '%', 'F': '6', 'G': '&amp;amp;',&lt;br/&gt;&#10;'H': '8', 'I': '(', 'J': '0', 'K': '*', 'L': '-', 'M': '=', 'N': '+',&lt;br/&gt;&#10;'O': '/', 'P': '&amp;lt;', 'Q': '&amp;gt;', 'R': '?', 'S': '@', 'T': '^', 'U': '_',&lt;br/&gt;&#10;'V': '`', 'W': '~', 'X': '|', 'Y': '\\', 'Z': '['&lt;br/&gt;&#10;}&lt;br/&gt;&#10;&lt;br/&gt;&#10;# Sentence to encrypt&lt;br/&gt;&#10;sentence = &amp;quot;Nimeni on Matti&amp;quot;&lt;br/&gt;&#10;&lt;br/&gt;&#10;# Encrypt the sentence&lt;br/&gt;&#10;encrypted_sentence = ''.join(cipher_map.get(char.upper(), char) for char in sentence)&lt;br/&gt;&#10;&lt;br/&gt;&#10;encrypted_sentence&lt;br/&gt;&#10;&lt;br/&gt;&#10;&lt;/span&gt;&lt;/code&gt;&#10;&lt;div class=&quot;mb-1 text-gray-400&quot;&gt;Result&lt;/div&gt;&#10;&lt;div class=&quot;prose flex flex-col-reverse text-white&quot;&gt;&#10;&lt;pre&gt;'+(=%+( /+ =!^^('&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;br/&gt;&#10;Lause &amp;quot;Nimeni on Matti&amp;quot; salakirjoitettuna edellä määritellyllä salakirjoitusaakkostolla on &amp;quot;+(=%+( /+ =!^^(&amp;quot;. ​&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;br/&gt;&#10;&lt;span&gt;Entä Nimeni on Jarkko kyseisellä salakirjoitusaakkostolla?&lt;/span&gt;&lt;br/&gt;&#10;&lt;br/&gt;&#10;# Let's encrypt another sentence &amp;quot;Nimeni on Jarkko&amp;quot; using the provided substitution cipher.&lt;br/&gt;&#10;&lt;br/&gt;&#10;# Sentence to encrypt&lt;br/&gt;&#10;sentence_jarkko = &amp;quot;Nimeni on Jarkko&amp;quot;&lt;br/&gt;&#10;&lt;br/&gt;&#10;# Encrypt the sentence using the same cipher map as before&lt;br/&gt;&#10;encrypted_sentence_jarkko = ''.join(cipher_map.get(char.upper(), char) for char in sentence_jarkko)&lt;br/&gt;&#10;&lt;br/&gt;&#10;encrypted_sentence_jarkko&lt;br/&gt;&#10;&lt;br/&gt;&#10;Alalyzed&lt;br/&gt;&#10;&lt;br/&gt;&#10;# Re-defining the substitution cipher map and encrypting the sentence &amp;quot;Nimeni on Jarkko&amp;quot; as previous state was reset.&lt;br/&gt;&#10;&lt;br/&gt;&#10;cipher_map = {&lt;br/&gt;&#10;'A': '!', 'B': '2', 'C': '#', 'D': '4', 'E': '%', 'F': '6', 'G': '&amp;amp;',&lt;br/&gt;&#10;'H': '8', 'I': '(', 'J': '0', 'K': '*', 'L': '-', 'M': '=', 'N': '+',&lt;br/&gt;&#10;'O': '/', 'P': '&amp;lt;', 'Q': '&amp;gt;', 'R': '?', 'S': '@', 'T': '^', 'U': '_',&lt;br/&gt;&#10;'V': '`', 'W': '~', 'X': '|', 'Y': '\\', 'Z': '['&lt;br/&gt;&#10;}&lt;br/&gt;&#10;&lt;br/&gt;&#10;# Sentence to encrypt&lt;br/&gt;&#10;sentence_jarkko = &amp;quot;Nimeni on Jarkko&amp;quot;&lt;br/&gt;&#10;&lt;br/&gt;&#10;# Encrypt the sentence&lt;br/&gt;&#10;encrypted_sentence_jarkko = ''.join(cipher_map.get(char.upper(), char) for char in sentence_jarkko)&lt;br/&gt;&#10;&lt;br/&gt;&#10;encrypted_sentence_jarkko&lt;br/&gt;&#10;&lt;br/&gt;&#10;&lt;div class=&quot;mb-1 text-gray-400&quot;&gt;Result&lt;/div&gt;&#10;&lt;div class=&quot;prose flex flex-col-reverse text-white&quot;&gt;&#10;&lt;pre&gt;'+(=%+( /+ 0!?**/'&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;span&gt;Lause &amp;quot;Nimeni on Jarkko&amp;quot; salakirjoitettuna edellä määritellyllä salakirjoitusaakkostolla on &amp;quot;+(=%+( /+ 0!?**/&amp;quot;. ​&lt;br/&gt;&#10;&lt;br/&gt;&#10;&lt;/span&gt;&#10;&lt;div class=&quot;w-full text-token-text-primary&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;py-2 px-3 text-base md:px-4 m-auto md:px-5 lg:px-1 xl:px-5&quot;&gt;&#10;&lt;div class=&quot;mx-auto flex flex-1 gap-3 text-base juice:gap-4 juice:md:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem]&quot;&gt;&#10;&lt;div class=&quot;relative flex w-full min-w-0 flex-col&quot;&gt;&#10;&lt;div class=&quot;flex-col gap-1 md:gap-3&quot;&gt;&#10;&lt;div class=&quot;flex flex-grow flex-col max-w-full&quot;&gt;&#10;&lt;div class=&quot;min-h-[20px] text-message flex flex-col items-start whitespace-pre-wrap break-words [.text-message+&amp;amp;]:mt-5 juice:w-full juice:items-end overflow-x-auto gap-3&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;relative max-w-[90%]&quot;&gt;Komentokehote: Pura seuraava salakirjoitus: '+(=%+( /+ =!^^('&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;mt-1 flex gap-3 empty:hidden juice:mr-1 juice:flex-row-reverse&quot;&gt;&#10;&lt;div class=&quot;-ml-1 mt-0 flex h-7 items-center justify-center gap-[2px] self-end text-gray-400 lg:justify-start lg:self-center visible&quot;&gt; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class=&quot;w-full text-token-text-primary&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;py-2 px-3 text-base md:px-4 m-auto md:px-5 lg:px-1 xl:px-5&quot;&gt;&#10;&lt;div class=&quot;mx-auto flex flex-1 gap-3 text-base juice:gap-4 juice:md:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem]&quot;&gt;&#10;&lt;div class=&quot;relative flex w-full min-w-0 flex-col agent-turn&quot;&gt;&#10;&lt;div class=&quot;flex-col gap-1 md:gap-3&quot;&gt;&#10;&lt;div class=&quot;flex flex-grow flex-col max-w-full&quot;&gt;&#10;&lt;div class=&quot;min-h-[20px] text-message flex flex-col items-start whitespace-pre-wrap break-words [.text-message+&amp;amp;]:mt-5 juice:w-full juice:items-end overflow-x-auto gap-3&quot; dir=&quot;auto&quot;&gt;&#10;&lt;div class=&quot;markdown prose w-full break-words dark:prose-invert dark&quot;&gt;&#10;&lt;p&gt;Annettu salakirjoitus '+(=%+( /+ =!^^(' purettuna edellä määritellyllä salakirjoitusaakkostolla on:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;+&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= N&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;(&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= I&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;%&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= E&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;=&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= M&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;+&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= N&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;(&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= I&lt;/li&gt;&#10;&lt;li&gt;= (välilyönti)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;/&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= O&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;+&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= N&lt;/li&gt;&#10;&lt;li&gt;= (välilyönti)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;=&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= M&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;!&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= A&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;^&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= T&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;^&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= T&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;(&lt;/code&gt;&lt;span&gt; &lt;/span&gt;= I&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Joten purkamisessa saadaan:&lt;span&gt; &lt;/span&gt;&lt;strong&gt;&amp;quot;Nimeni on Matti&amp;quot;&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;</content>
<published>2025-10-26T14:03:11+02:00</published>
</entry>


</feed>