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.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

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

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.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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á ;-)
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Je nutná kombinace routeru a modemu.
    od Nyashiru » 06 srp 2023 00:28 » v Sítě - hardware
    2
    1583
    od mmmartin Zobrazit poslední příspěvek
    07 srp 2023 16:44
  • Malá sestava do 30 tisíc
    od kupjec » 20 zář 2023 21:24 » v Rady s výběrem hw a sestavením PC
    14
    2185
    od kupjec Zobrazit poslední příspěvek
    25 zář 2023 11:26
  • Výběr skříně (zakoupená je malá) Příloha(y)
    od DaveMove » 09 čer 2023 15:35 » v Problémy s hardwarem
    8
    791
    od meda2016 Zobrazit poslední příspěvek
    09 čer 2023 20:27

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti