Magiczne Karty pozwalają odgadnąć wybraną liczbę tylko na podstawie numeru kart na których się znajduje. Poniżej przedstawiam generator, który przed momentem wykonałem. Prosiłbym o ogólną opinię oraz czy kod da się jakoś uprościć lub zoptymalizować.
Zasada działaniaLiczbę kart dla danego zakresu liczb dobieramy dzieląc owy zakres przez 2 i zaokrąglając w górę.
Aby poznać jakie liczby zapisać na poszczególnych kartach należy je zamienić na postać binarną(np. 13d = 1011b), następnie zapisać wspak(np. 1101). Dla 4 kart liczba 13 powinna znajdować się na karcie 1, 2 i 4.
<?
//Generator Magicznych Kart
//Wersja: 1.0
//Data modyfikacji: 06.04.2011
//Wykonał: evolucja
//Kontakt: kontakt@evolucja.eu
//Stworzono dla zadania 1.79 "Zbioru zadań z informatyki dla gimnazjum" Błażeja Gruszczyńskiego
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Ustawienia
$zakres_liczb = 10; //Określ zakres liczby znajdujących się na kartach
////////////////////////////////////////////////////////////////////////////////////////////////////////////
if($zakres_liczb == 0
) { die("Niepoprawny zakres liczb."); } //Obliczanie liczby Magicznych Kart
//Zamienianie liczb dziesiętnych na binarne, dodawanie odpowiedniej ilości zer i zapisanie ciągu wspak
for($liczba=1;$liczba<$zakres_liczb+1;$liczba++) {
$liczba_binarna = decbin($liczba); while(strlen($liczba_binarna)<$liczba_kart) { $liczba_binarna = '0'.$liczba_binarna;
}
$liczby_binarne_wspak[$liczba] = strrev($liczba_binarna); }
//Przypisanie odwróconych liczb binarnych do odpowiednich kart
foreach($liczby_binarne_wspak as $liczba => $liczba_binarna) {
for($karta = 0; $karta<$liczba_kart+1; $karta++) {
if($liczba_binarna[$karta] == 1) {
$karty[$karta][] = $liczba;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Prezentowanie wyników
$liczba_wierszy = ceil($zakres_liczb/2
); echo "<style>table { font-size: 20px; border-collapse : collapse; text-align : center; } td { border: 1px solid black; padding : 2px; } </style>"; for($karta = 1;$karta<$liczba_kart+1;$karta++) {
echo "<th><b>".($karta)."</b></th>"; }
for($wiersz = 0; $wiersz<$liczba_wierszy;$wiersz++) {
for($karta = 0;$karta<$liczba_kart;$karta++) {
echo "<td>".$karty[$karta][$wiersz]."</td>"; }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
?>
Ten post edytował evolucja 6.04.2011, 19:02:25