Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Generator Magiczne Karty, [algorytm]
evolucja
post 6.04.2011, 18:52:29
Post #1





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

Ostrzeżenie: (0%)
-----


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ć. smile.gif

Zasada działania
Liczbę 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.

  1. <?
  2. //Generator Magicznych Kart
  3. //Wersja: 1.0
  4. //Data modyfikacji: 06.04.2011
  5. //Wykonał: evolucja
  6. //Kontakt: kontakt@evolucja.eu
  7. //Stworzono dla zadania 1.79 "Zbioru zadań z informatyki dla gimnazjum" Błażeja Gruszczyńskiego
  8. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. //Ustawienia
  10. $zakres_liczb = 10; //Określ zakres liczby znajdujących się na kartach
  11. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  12. if($zakres_liczb == 0) { die("Niepoprawny zakres liczb."); }
  13. //Obliczanie liczby Magicznych Kart
  14. $liczba_kart = strlen(decbin($zakres_liczb));
  15. //Zamienianie liczb dziesiętnych na binarne, dodawanie odpowiedniej ilości zer i zapisanie ciągu wspak
  16. for($liczba=1;$liczba<$zakres_liczb+1;$liczba++) {
  17. $liczba_binarna = decbin($liczba);
  18. while(strlen($liczba_binarna)<$liczba_kart) {
  19. $liczba_binarna = '0'.$liczba_binarna;
  20. }
  21. $liczby_binarne_wspak[$liczba] = strrev($liczba_binarna);
  22. }
  23. //Przypisanie odwróconych liczb binarnych do odpowiednich kart
  24. foreach($liczby_binarne_wspak as $liczba => $liczba_binarna) {
  25. for($karta = 0; $karta<$liczba_kart+1; $karta++) {
  26. if($liczba_binarna[$karta] == 1) {
  27. $karty[$karta][] = $liczba;
  28. }
  29. }
  30. }
  31. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  32. //Prezentowanie wyników
  33. $liczba_wierszy = ceil($zakres_liczb/2);
  34. echo "<style>table { font-size: 20px; border-collapse : collapse; text-align : center; } td { border: 1px solid black; padding : 2px; } </style>";
  35. echo "<table>";
  36. echo "<tr>";
  37. for($karta = 1;$karta<$liczba_kart+1;$karta++) {
  38. echo "<th><b>".($karta)."</b></th>";
  39. }
  40. echo "</tr>";
  41. for($wiersz = 0; $wiersz<$liczba_wierszy;$wiersz++) {
  42. echo "<tr>";
  43. for($karta = 0;$karta<$liczba_kart;$karta++) {
  44. echo "<td>".$karty[$karta][$wiersz]."</td>";
  45. }
  46. echo "</tr>";
  47. }
  48. echo "</table>";
  49. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  50. ?>


Ten post edytował evolucja 6.04.2011, 19:02:25


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 20:08