rand-funktiolle käyttöä

Anonyymi

Miten sekoittaa korttipakka helposti?

struct kortti pakka[52] = { ... };

void sekoita_pakka(void) { ... }

10

252

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi
      • Anonyymi

        Kannattaa opetella delegoimaan. Itse voi käyttää aikansa vaikka juopotteluun.


      • Anonyymi
        Anonyymi kirjoitti:

        Kannattaa opetella delegoimaan. Itse voi käyttää aikansa vaikka juopotteluun.

        Eikä kannata, silloin oppi karkaa käsitä vihulaiselle, itse se on tehtävä, tai tyhmyys valtaa mielen.


      • Anonyymi

        w10 on haitake.
        Microsoft sanoo suoraan: Käyttäjien puheita tallennetaan ja kuunnellaan

        Microsoft teki tietosuojalausekkeeseensa muutoksen, mutta ei sanonut keskeyttävänsä käyttäjien kuuntelua.
        Yhdysvaltalainen teknologiayhtiö Microsoft on muuttanut tietosuojalausekettaan. Yhtiö kertoi uutistoimisto Reutersille, että syynä on viime viikkoina pintaan noussut eri teknologiayhtiöiden tapa antaa käyttäjiltä tallennettuja ääninäytteitä muiden ihmisten kuunneltaviksi.
        Lue lisää: Microsoft tallentaa Skype-puheluita – avustajat voivat kuunnella keskusteluja
        Kyse on pienestä osasta äänikomentoja, joita käyttäjät ovat antaneet puhetta tulkitseville digitaalisille avustajille. Microsoftin tapauksessa sen nimi on Cortana, mutta samaa kuuntelua harjoittavat myös ainakin Apple, Google, Amazon ja Facebook. Yhtiöitä on arvosteltu muun muassa siitä, että komentojen päätymisestä vieraiden korviin ei ole kerrottu selvästi käyttäjille.

        – Tajusimme viime aikoina esitettyjen kysymysten perusteella, että meidän pitäisi paremmin täsmentää että joskus ihmiset tarkistavat tätä sisältöä, Microsoft totesi Reutersille.

        Tietosuojalausekkeen muutokset näkyvät myös sen suomenkielisessä versiossa. Siinä sanotaan nyt, että "käsittelemme henkilökohtaisia tietoja [...] sekä automaattisilla että manuaalisilla (ihmisvoimaan perustuvilla) menetelmillä".

        Lisäksi Microsoft sanoo, että "tarkistamme manuaalisesti esimerkiksi lyhyitä ääninäytteitä, joiden alkuperän tunnistettavuuden olemme pyrkineet poistamaan. Niiden avulla parannamme puhepalveluitamme, kuten tunnistusta ja käännöstä".

        Microsoft käyttää paitsi Cortanasta, myös Skypestä kerättyjä ääninäytteitä palvelujensa parantamiseen. Näytteitä kuuntelevat ihmiset ovat sekä Microsoftin että ulkopuolisten yritysten palkkalistoilla.

        Yhtiö ei kuitenkaan sanonut keskeyttävänsä näytteiden kuuntelua. Näin ovat luvanneet tehdä esimerkiksi Apple ja Google.


    • Anonyymi

      Tee dynaaminen lista (=pakka), johon ensin nodeiksi kortit 1-52. Sitten tee toinen dynaaminen lista, johon käydään satunnaisesti kortteja ensimmäisestä listasta. Eli ensin arvotaan luku väliltä 1-52, sitten 1-51 jne. Kortti (node) siis poistetaan aina ensimmäiseltä listalta, jolloin samaa korttia ei voida arpoa uudelleen.

      Tuossa vähän apuja dynaamisiin listoihin: https://www.tutorialspoint.com/data_structures_algorithms/linked_list_program_in_c.htm

    • Anonyymi

      Vaihda kieli sellaiseen jossa valmis shuffle-funktio.

    • Taivaallisen kömpelö esitys (web.nchu.edu.tw). Enkä kirjoittaisi tällaiseen dynaamisia listojakaan, koska korttien määrä on kiinteä. Osoitintaulukko voisi tulla kyseeseen, mutta yksinkertainen ratkaisu on yleensä paras. Esimerkiksi näin:

      void sekoita_pakka(void) {
      unsigned i;
      for (i=0; i<52; i )
      vaihda_kortit(&pakka[i], &pakka[(unsigned) rand() % 52U]);
      }

      vaihda_kortit() on funktio tai makro, joka vaihtaa parametrina annetut kaksi korttia keskenään.

      • Kannattaa muistaa, että vaihdettava indeksi on valittava ensimmäisestä eteenpäin (ensimmäinen mukaanlukien), jotta saadaan harhaton satunnaisuus.

        https://en.wikipedia.org/wiki/Fisher–Yates_shuffle#Implementation_errors

        En tunne näitä C-kielen koukeroita, joten korjatkaa jos olen väärässä mutta minusta näyttää, että tuossa vaihdettavaksi valitaan mikä tahansa pakan kortti kun pitäisi valita väliltä [i .. 51].
        Eli korjautuisiko näin:

        vaihda_kortit(&pakka[i], &pakka[i (unsigned) (rand() % (52U-i))]);


      • Kiitän tarkkaavaisuudesta ja palautteesta, olet tietenkin oikeassa. Esimerkkini ansiot lienevätkin ensisijassa sen osoittamisessa, että lyhyeenkin koodiin saattaa jäädä pari virhettä, jos laiminlyö testaamisen.

        Esimerkkini olisi toki pitänyt "nähdä" virheelliseksi jo helpolla ajatusleikillä: Otetaan kuvakortit J, Q ja K ja sekoitetaan ne esimerkkini mukaisella koodilla. Silmukan ensimmäinen kierros tuottaa yhden kolmesta mahdollisesta lopputuloksesta, toinen kierros 9:stä (sisältäen samoja yhdistelmiä) ja kolmas 27:stä, mikä luku ei ole tasan jaollinen kuudella ts. kolmen kortin yhdistelmien määrällä. Lopputuloksen on siis oltava painotettu.

        Oikeampi toteutus on esittämäsi mukainen. Silmukan pituutta leikkaisin yhdellä, koska 52. kortti jäisi vaihdettavaksi vain itsensä kanssa.

        for (i=0; i<51; i )
        vaihda_kortit(&pakka[i], &pakka[i (unsigned) (rand() % (52U-i))]);

        Satunnaisuus ei ole harhaton vieläkään, sillä rand() modulo tuottaa painotettuja satunnaislukuja aina milloin luku RAND_MAX 1 ei ole tasan jaollinen jakajalla. Kuitenkin, koska RAND_MAX on huomattavan paljon suurempi kuin 50, vähäinen painottuminen voitanee hyväksyä tässä yhteydessä.


      • Anonyymi

        Sulut eivät nyt ole aevan paikoillaan, (unsigned) castaus on tuossa varmaankin tekemässä jakolaskusta etumerkittömän..


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

    Luetuimmat keskustelut

    1. SDP on vastuunkantaja, ja siksi suosituin kansan keskuudessa

      Kiusaamiseenkin SDP puuttuu heti sellaisen tultua ilmi. Esimerkiksi persut lakaisevat nämä maton alle ja pahentavat site
      Maailman menoa
      131
      6262
    2. Punavihreät puolueet haluavat Suomeen satoja tuhansia kehitysmaalaisia

      SDP, vihreät ja vassarit haluavat nostaa esim. pakolaiskiintiötä todella paljon. Orpon hallituksen aikana maahanmuutto
      Maailman menoa
      65
      5172
    3. SDP:n johto pesi kätensä häirintäkohusta

      "Suurimman oppositiopuolue SDP:n johto olisi todennäköisimmin halunnut vaieta puolueen ympärillä velloneen häirintäkohun
      Maailman menoa
      74
      4315
    4. SDP on selvästi paras valinta äänestyskopissa

      Puolueella on arvomaailma kohdallaan, sillä on hyvä CV itsenäisen Suomen historiassa vastuunkantajana ja hyvinvointivalt
      Maailman menoa
      102
      3874
    5. Miksei Korhonen (pers) vastaa Kokon (sd) esittämiin kysymyksiin?

      Hyviin käytöstapoihin kuuluu kysymyksiin vastaaminen, eikä alkaa syyttelemään kysymyksen esittäjää. Mikä vaivaa Korhost
      Maailman menoa
      14
      3655
    6. Häirintäkohun keskellä olevalta kansanedustajalta Jani Kokolta (sd) rajua tekstiä somessa.

      https://www.is.fi/politiikka/art-2000011772322.html Ajaakohan tämä SDP:n kansanedustaja Jani Kokko oikein täysillä valoi
      Maailman menoa
      121
      3240
    7. SDP:n selitykset ontuu pahasti - "On käsitelty heti, mutta kukaan ei tiedä"

      Kokoomuslaiset pistää taas demareita nippuun. Tuppuraisen mukaan mukaan SDP:n useat ahdistelutapaukset on käsitelty het
      Maailman menoa
      52
      2566
    8. Oletko nainen turhautunut, kun en tule juttelemaan siellä?

      Haluaisin tottakai tulla. Älä käsitä väärin. Ehkä ensi kerralla?
      Ikävä
      35
      2539
    9. Nyt tuli Suomen somaleista todella ikävää faktaa

      sillä osa somalivanhemmista lähettää lapsiaan kotimaahansa kurinpitolaitoksiin, joissa heitä pahoinpidellään. Illan MOT
      Maailman menoa
      99
      2322
    10. Kähmijä puolueen kannatus romahtamassa

      Erityisesti naiset ovat suuttuneet SDP:lle kertoo asiantuntijat
      Maailman menoa
      69
      2266
    Aihe