Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Administrator
C-/C++-Quelltext |
|
1 |
void my_game_of_life(int world_size, const bool* p_world_in, bool* p_world_out); |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
8x8-Spielwelt O = Zelle . = leeres Feld O....O.. .O...OO. O...O.O. .O.....O OO..OO.. ...O.... .OO...OO O....OOO |
C-/C++-Quelltext |
|
1 |
true, false, false, false, false, true, false, false, false, true, false, false, false, true, true, false, true, ... |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
////////////////////////////////////////////////////////////////////////// // spieleprogrammierer.de-Programmier-Contest #05 // // ******************************************************************** // // Titel: ...... "Game of Life" // // Typ: ........ Kürze des Codes // // Deadline: ... 20.04.2008 // // Abgabe: ..... contest@spieleprogrammierer.de // // ******************************************************************** // // // // Aufgabenstellung siehe: // // https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=9284 // // // ////////////////////////////////////////////////////////////////////////// #include <iostream> #include <cstdlib> ////////////////////////////////////////////////////////////////////////// // maximale Größe der Welt (Breite und Höhe) const int MAX_WORLD_SIZE = 256; // Anzahl der durchzuführenden Tests const int NUM_TESTS = 500; ////////////////////////////////////////////////////////////////////////// // >>> DEINE FUNKTION - BITTE IMPLEMENTIEREN! <<< // >>> BENUTZUNG DER STANDARDBIBLIOTHEK IST VERBOTEN! <<< void my_game_of_life(int world_size, const bool* p_world_in, bool* p_world_out) { // Alle Token zwischen "BEGIN COUNT" und "END COUNT" werden vom Token-Counter gezählt // (Download unter http://www.scherfgen-software.net/misc/tokencounter.zip). // BEGIN COUNT // Dies sind 5 Token: int x = 42; // END COUNT } ////////////////////////////////////////////////////////////////////////// // Referenzlösung (304 Token) void correct_game_of_life(int world_size, const bool* p_world_in, bool* p_world_out) { struct Helper { static int coords_to_index(int x, int y, int world_size) { // Was auf der einen Seite raus geht, kommt auf der anderen Seite wieder rein. while(x < 0) x += world_size; while(x >= world_size) x -= world_size; while(y < 0) y += world_size; while(y >= world_size) y -= world_size; // Index für die korrigierten Koordinaten bestimmen return y * world_size + x; } }; for(int x = 0; x < world_size; ++x) { for(int y = 0; y < world_size; ++y) { // Nachbarn dieses Felds zählen const unsigned int num_neighbors = p_world_in[Helper::coords_to_index(x - 1, y - 1, world_size)] + p_world_in[Helper::coords_to_index(x, y - 1, world_size)] + p_world_in[Helper::coords_to_index(x + 1, y - 1, world_size)] + p_world_in[Helper::coords_to_index(x - 1, y, world_size)] + p_world_in[Helper::coords_to_index(x + 1, y, world_size)] + p_world_in[Helper::coords_to_index(x - 1, y + 1, world_size)] + p_world_in[Helper::coords_to_index(x, y + 1, world_size)] + p_world_in[Helper::coords_to_index(x + 1, y + 1, world_size)]; // Index für aktuelles Feld bestimmen const unsigned int index = Helper::coords_to_index(x, y, world_size); if(num_neighbors == 3) { // Zelle wird geboren p_world_out[index] = true; } else if(num_neighbors < 2 || num_neighbors > 3) { // Zelle stirbt an Vereinsamung bzw. Überbevölkerung p_world_out[index] = false; } else { // Es passiert nichts. p_world_out[index] = p_world_in[index]; } } } } ////////////////////////////////////////////////////////////////////////// int main() { std::cout << "Teste ..." << std::endl; for(int i = 0; i < NUM_TESTS; ++i) { // zufällige Weltgröße bestimmen const int world_size = 1 + rand() % MAX_WORLD_SIZE; bool world_in[MAX_WORLD_SIZE * MAX_WORLD_SIZE]; bool my_world_out[MAX_WORLD_SIZE * MAX_WORLD_SIZE]; bool correct_world_out[MAX_WORLD_SIZE * MAX_WORLD_SIZE]; // Welt zufällig füllen for(int i = 0; i < world_size * world_size; ++i) world_in[i] = rand() % 3 == 0; // mit beiden Implementierungen die nächste Generation berechnen my_game_of_life(world_size, world_in, my_world_out); correct_game_of_life(world_size, world_in, correct_world_out); // Ergebnisse vergleichen for(int j = 0; j < world_size * world_size; ++j) { if(my_world_out[j] != correct_world_out[j]) { std::cout << "Fehler in Test Nr. " << (i + 1) << "!" << std::endl; goto end; } } } std::cout << "Die Implementierung scheint korrekt zu sein!" << std::endl; end: return 0; } |
Anonymous
unregistriert
Quellcode |
|
1 |
#include <iostream>#include <cstdlib> const int MAX_WORLD_SIZE = 256;const int NUM_TESTS = 500;void my_game_of_life(int world_size, const bool* p_world_in, bool* p_world_out){int x = 42;}void correct_game_of_life(int world_size, const bool* p_world_in, bool* p_world_out){struct Helper{static int coords_to_index(int x, int y, int world_size){while(x < 0) x += world_size;while(x >= world_size) x -= world_size;while(y < 0) y += world_size;while(y >= world_size) y -= world_size;return y * world_size + x;}};for(int x = 0; x < world_size; ++x){for(int y = 0; y < world_size; ++y){const unsigned int num_neighbors = p_world_in[Helper::coords_to_index(x - 1, y - 1, world_size)] +p_world_in[Helper::coords_to_index(x, y - 1, world_size)] +p_world_in[Helper::coords_to_index(x + 1, y - 1, world_size)] +p_world_in[Helper::coords_to_index(x - 1, y, world_size)] +p_world_in[Helper::coords_to_index(x + 1, y, world_size)] +p_world_in[Helper::coords_to_index(x - 1, y + 1, world_size)] +p_world_in[Helper::coords_to_index(x, y + 1, world_size)] +p_world_in[Helper::coords_to_index(x + 1, y + 1, world_size)];const unsigned int index = Helper::coords_to_index(x, y, world_size);if(num_neighbors == 3){p_world_out[index] = true;}else if(num_neighbors < 2 || num_neighbors > 3){p_world_out[index] = false;}else{p_world_out[index] = p_world_in[index];}}}}int main(){std::cout << "Teste ..." << std::endl;for(int i = 0; i < NUM_TESTS; ++i){const int world_size = 1 + rand() % MAX_WORLD_SIZE;bool world_in[MAX_WORLD_SIZE * MAX_WORLD_SIZE];bool my_world_out[MAX_WORLD_SIZE * MAX_WORLD_SIZE];bool correct_world_out[MAX_WORLD_SIZE * MAX_WORLD_SIZE];for(int i = 0; i < world_size * world_size; ++i) world_in[i] = rand() % 3 == 0;my_game_of_life(world_size, world_in, my_world_out);correct_game_of_life(world_size, world_in, correct_world_out);for(int i = 0; i < world_size * world_size; ++i){if(my_world_out[i] < correct_world_out[i]){std::cout << "Fehler in Test Nr. " << (i + 1) << "!" << std::endl;goto end;}}}std::cout << "Die Implementierung scheint korrekt zu sein!" << std::endl;end:return 0;} |
Administrator
C-/C++-Quelltext |
|
1 |
if(my_world_out[i] != correct_world_out[i]) |
Administrator
Zitat von »"TrommlBomml"«
ist das verweden der fkt. sqrt / sqr erlaubt?
Werbeanzeige