Master Mind (Datentypen, Variablen und Ausdrücke)
Schreiben Sie ein Programm, dass alle Möglichkeiten des MasterMind-Spiels ausgibt. Dabei werden sechs Farben auf vier Plätze verteilt. Jede Farbe darf aber auch mehrfach verwendet werden. Dabei Anstelle der sechs Farben rot, blau, grün, gelb, braun und orange sollen die Buchstaben 'r', 'b', 'g', 'e', 'a', und 'o' stehen. So ist z. B. "geeb" eine gültige Ausgabe. Zusatzaufgabe: Wie oft kommt das Muster "rot"-"blau"-"rot" (also "rbr") vor? Schreiben Sie dazu eine Methode rotBlauRot(), die true oder false zurückgibt.
0 Kommentare
2 Lösung(en)
let results = [];
function toComb(str) {
str = str.replace(/0/g, 'R'); // rot
str = str.replace(/1/g, 'B'); // blau
str = str.replace(/2/g, 'G'); // grün
str = str.replace(/3/g, 'E'); // gelb
str = str.replace(/4/g, 'A'); // braun
str = str.replace(/5/g, 'O'); // orange
return str;
}
function leadZero (str) {
while (str.length < 4) str = '0' + str;
return str;
}
// rotBlauRot()
function contains(str, pattern) {
return str.indexOf(pattern) != -1;
}
// liste schreiben:
// 0 (0000[6] = RRRR) bis 1295 (5555[6] = OOOO)
for (let i = 0; i <= 1295; i++)
results.push(toComb(leadZero(i.toString(6))));
console.log(results);
// RBR suchen
let rbr = 0;
for (i = 0; i < results.length; i++)
if (contains(results[i], 'RBR')) rbr++;
console.log(`Anzahl der Kombination RBR: ${rbr}`); // lissalanda@gmx.at
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// C++ 14 | VS-2022
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
const std::string Nums{ "012345" }, Chars{ "rbgeao" };
std::string get_colors(const std::string& str) {
const auto right{ ("000" + str) };
auto out{ right.substr(right.size() - 4) };
for (size_t i{ 0 }; i < 4; i++) {
const auto pos{ Nums.find(out[i]) };
if (pos == std::string::npos) return "";
else out[i] = Chars[pos];
}
return out;
}
int main() {
std::vector<std::string> v;
for (size_t i{ 0 }; i <= 5555; i++) {
auto r{ get_colors(std::to_string(i)) };
if (r != "") v.push_back(r);
}
auto rbr{ 0 };
std::for_each(v.begin(), v.end(), [&](auto i) { if (i.find("rbr") != std::string::npos) rbr++; });
std::cout << "rbr: " << rbr << "\n";
std::for_each(v.begin(), v.end(), [&](auto i) { std::cout << i << "\n"; });
}
Lösung von: Jens Kelm (@JKooP)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2 |
Schwierigkeit: | k.A. |
Webcode: | yepw-g6d9 |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |