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

Odpovědět
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7408
Registrován: 23 pro 2010 09:23

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

Příspěvek od faraon »

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)
Uživatelský avatar
second32
Level 3
Level 3
Příspěvky: 553
Registrován: 13 úno 2015 21:20

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

Příspěvek od second32 »

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: 7408
Registrován: 23 pro 2010 09:23

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

Příspěvek od faraon »

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)
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Excel 2016 - vzorec kombinace podmínek
    od MK_Vs » » v Kancelářské balíky
    5 Odpovědi
    6218 Zobrazení
    Poslední příspěvek od lubo.

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