Malá hra o velkého Bajta (3) - Hádání kombinace

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
faraon
Master Level 8
Master Level 8
Příspěvky: 6680
Registrován: prosinec 10
Pohlaví: Muž

Malá hra o velkého Bajta (3) - Hádání kombinace

Příspěvekod faraon » 06 pro 2015 23:58

Všechny bity hry:

00000001 - Jednoduchá kalkulačka
00000010 - Odebírání zápalek
00000100 - Gregoriánský kalendář
00001000 - Hádání kombinace
00010000 - Vigenérova šifra
00100000 - Hledání min
01000000 - Házení kostkou
10000000 - Conway's Game of Life




Přišla první neděle v měsíci, a s ní další kapitola téhle hry. V minulé jsme tvořili kalendář, ze kterého jsme se mohli dozvědět že hraběnka Ada Lovelace, první programátorka na světě, která bude mít 10. prosince 200. narozeniny, se narodila v neděli. A nebo že příští rok bude Štedrý den v sobotu. Jenže ten letošní nastane už přespříští čtvrtek, a tak některé z nás trápí mnohem aktuálnější otázka:

Kam jsem zamkl ty dárky?

A také kde mám zapsaný ten kód od číselného zámku, protože vyzkoušet všech deset tisíc kombinací mi bude trvat minimálně do Velikonoc... :-D

Nebo nebude? Šlo by ten kód uhádnout rychleji podle nějaké nápovědy? Podíváme se zase trochu do historie...

V roce 1970 se objevila hra Mastermind. Je to variace na starší společenskou hru, trochu vylepšená a upravená. První hráč vymyslí náhodnou kombinaci několika barev, tu nastaví do skrytého pole hrací desky, a druhý hráč se pokouší jí uhádnout. Sestaví z barevných hříbků svou kombinaci, a první hráč jí ohodnotí - za každou barvu ve správné pozici černý kolíček, za každou barvu v nesprávné pozici bílý.

mastermind.jpg


V první verzi hry se hádaly čtyři barvy ze šesti, a hádající měl deset pokusů. Existovala i kapesní verze, zmenšená na šest pokusů, což je pro dobrého hráče dostatečné množství. Jakákoliv kombinace se totiž dá zjistit maximálně pěti pokusy, jak dokázal programátorský bůh Don Knuth. V příštích letech vznikla řada verzí, pro nás nejzajímavější je Super Mastermind z roku 1975, rozšířený na hádání pěti barev z osmi, který se od roku 1979 vyráběl i v Československu pod názvem Logik, a vyrábí se dodnes. Třetí nejzajímavější verze je Electronic Mastermind z roku 1977, který vznikl přeprogramováním kapesní kalkulačky, a hádá se v něm číselný kód v různých obtížnostech, může mít tři až pět číslic. Hráčů pokus opět vyhodnotí zobrazením počtu správně a nesprávně umístěných číslic:

https://www.youtube.com/watch?v=WQfMzsxrQWk

Tím se dostáváme k dalšímu bitu, 00001000, a tentokrát je možné vybrat si právě ze tří uvedených her:

1. Hádají se čtyři barvy ze šesti - Mastermind.
2. Hádá se pět barev z osmi - Logic.
3. Hádají se čtyři číslice z deseti - kódový zámek.

Ve všech případech má hráč deset pokusů na to aby uhodl náhodnou kombinaci vygenerovanou počítačem, ten jeho výkony vyhodnotí, a sdělí mu jak dobře si vede.
Nemáte oprávnění prohlížet přiložené soubory.


Všech 500 nejvýkonnějších superpočítačů na světě má přes petaflops a běží na Linuxu:
https://www.root.cz/galerie/nejvykonnejsi-superpocitace-sveta-cerven-2019/

Reklama
Uživatelský avatar
second32
Level 3
Level 3
Příspěvky: 503
Registrován: únor 15
Pohlaví: Muž

Re: Malá hra o velkého Bajta (3) - Hádání kombinace

Příspěvekod second32 » 14 srp 2016 20:02

Udělal jsem ty čtyři číslice z deseti, řekl bych, že je to o dost lepší, než to, co jsem vyváděl v minulých bitech :D Lepší pozdě, než nikdy. exe

Kód: Vybrat vše

#include <iostream>
#include <ctime>

const int POCETCISEL = 4;
const int POCETPOKUSU = 10;

using namespace std;

int main()
{
   cout << "Vita Vas Kodovy zamek, hadate ctyri cisla z deseti, mate deset pokusu." << endl;
   char pokracovat;
   unsigned int kod[POCETCISEL], tip[POCETCISEL], pokusy, sporadi, scisla, i;
   bool pouzito[POCETCISEL];
   srand(time(0));
   do
   {
      pokusy = 0;
      for (i = 0; i < POCETCISEL; i++)
      {
         kod[i] = rand() % 10;
      }
      cout << "Vygenerovan novy kod." << endl;
      do
      {
         pokusy++;
         sporadi = 0;
         scisla = 0;
         for (i = 0; i < POCETCISEL; i++)
         {
            pouzito[i] = false;
         }
         cout << "Zadejte vas tip (s mezerami): ";
         while (!(cin >> tip[0] >> tip[1] >> tip[2] >> tip[3]) || tip[0] > 10 || tip[1] > 10 || tip[2] > 10 || tip[3] > 10)
         {
            cout << "Neplatny vstup, zkuste to znovu: ";
            cin.clear();
            while (cin.get() != '\n');
         }
         for (i = 0; i < POCETCISEL; i++)
         {
            if (kod[i] == tip[i])
            {
               if (pouzito[i] == true)
                  scisla--;
               else
                  pouzito[i] = true;
               sporadi++;
            }
            else
            {
               for (int a = 0; a < POCETCISEL; a++)
               {
                  if (tip[i] == kod[a] && pouzito[a] == false)
                  {
                     scisla++;
                     pouzito[a] = true;
                  }
               }
            }
         }
         if (sporadi == 4)
         {
            break;
         }
         cout << "Pocet spravnych cisel ve spravne pozici: " << sporadi << endl;
         cout << "Pocet spravnych cisel ve spatne pozici: " << scisla << endl << endl;
      } while (pokusy < POCETPOKUSU);
      if(pokusy == POCETPOKUSU)
         cout << "Prohrali jste." << endl << "Napiste \"P\" pro pokracovani, jiny vstup hru ukonci: ";
      else
         cout << "Vyhrali jste na " << pokusy << " pokusu, gratulace." << endl << "Napiste \"P\" pro pokracovani, jiny vstup hru ukonci: ";
      cin.get();
      cin.get(pokracovat);
   } while ((pokracovat == 'p' || pokracovat == 'P') && cin.get() == '\n');
   return 0;
}

Uživatelský avatar
faraon
Master Level 8
Master Level 8
Příspěvky: 6680
Registrován: prosinec 10
Pohlaví: Muž

Re: Malá hra o velkého Bajta (3) - Hádání kombinace

Příspěvekod faraon » 14 srp 2016 21:14

Konečně aspoň někdo, ale hrát se dá celý život a klidně se můžou připojit i další, tahle hra je časově neomezená ;-)
Všech 500 nejvýkonnějších superpočítačů na světě má přes petaflops a běží na Linuxu:
https://www.root.cz/galerie/nejvykonnejsi-superpocitace-sveta-cerven-2019/


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Kombinace pamětí DDR3
    od carlosz123456 » 18 lis 2018 14:27 » v Windows 10, 8, 7, Vista, XP…
    4
    423
    od xbs
    18 lis 2018 16:21
  • Kombinace 2 monitorů různých frekvencí
    od Petulak » 10 říj 2018 16:23 » v Problémy s hardwarem
    6
    618
    od Petulak
    11 říj 2018 15:21
  • kombinace funkcí nepřímý odkaz a suma
    od Alkhay » 24 črc 2018 12:53 » v Kancelářské balíky
    7
    890
    od Alkhay
    30 črc 2018 10:57
  • Malá vs Velká case
    od jarek3202 » 23 čer 2019 14:17 » v Rady s výběrem hardwaru a sestavením PC
    4
    182
    od Donald64
    23 čer 2019 18:07
  • Zmizelá hra
    od TomášJedno2 » 03 črc 2018 16:10 » v Hry
    2
    389
    od RIKI22
    03 črc 2018 17:43

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 0 hostů