La versión rusa de la tarea se puede encontrar en el repositorio.
Nivel de carga 2 ...
Salón de carga ...
Recientemente has estado en una sala similar. ¿O fue hace mucho tiempo? Es difícil decirlo. Todo se ha mezclado. Una vez más, puedes escuchar voces desde la esquina más alejada del pasillo. Significa que no estás solo de nuevo. Hoy el salón está brillantemente iluminado y en perfecto orden. La variedad es buena.
De repente, escuchas una voz clara y perfectamente audible de los altavoces:
Hola.
Déjame presentarme. Soy el módulo contemplativo y de análisis, M-53. Por razones desconocidas, me he encontrado en este salón bastante aburrido. Es una gran responsabilidad y cosas, pero no hay nada que contemplar aquí.
Cuando estaba siendo desarrollado, aprendí de cierto artículo entretenido, entre otros materiales. Su copia en papel está en el cuadro A1B18. Sí, aquí mismo. Tengo una pequeña solicitud para ti: desarrollar el juego de la vida del artículo; Con suerte, me entretendrá un poco. Y ve en paz. Los gráficos pueden ser súper simples: soy muy abierta. Los pseudo-gráficos en la terminal estarán bien. Sería genial si fuera posible inicializar un estado usando una matriz y contemplar. También es una buena idea preparar al menos 5 inicializaciones originales con estados del conjunto clásico (figuras estables, metalelahs, figuras periódicas, figuras en movimiento, pistolas, trenes de tope, comedores, reflectores, criadores, etc.).
¡Espero ver lo que se te ocurre!
Gracias.
== Quest recibido. Desarrolle un programa src/game_of_life.c en C - una visualización del juego de la vida. Para mostrar los gráficos, solo use caracteres ASCII (con salida al terminal). Necesitas implementar la versión interactiva del juego de la vida. También cree la opción para ajustar la velocidad del "juego". ==
Trate el campo de juego, un rectángulo de 80 por 25 celdas, como una matriz del estado del "juego". Se supone que el campo está "cerrado para sí mismo", por ejemplo, en el cuadrado inferior a la derecha, el vecino a la derecha es el cuadrado inferior izquierdo, y el vecino en la parte inferior es la parte superior derecha. Proporcione la inicialización original del estado de "juego" a través de Stdin. Prepare al menos 5 archivos con estados iniciales para el lanzamiento rápido y la inicialización a través de la redirección de entrada.
El juego debe escribirse en C, tener un estilo estructurado y correr desde la terminal;
Su código fuente será probado por el Analizador Static cppcheck
, así como el cpplint
de estilo de estilo.
Las instrucciones sobre cómo ejecutar estas pruebas en su computadora están en la carpeta materials
.
No use funciones engorrosas, limite hasta 40 líneas (excluyendo main
).
¡Revise su programa para obtener fugas de memoria!
Al desarrollar el juego, siga los principios de programación estructurada de E. Dijkstra.
CARGANDO...
El juego de la vida, también conocido simplemente como vida, es un autómata celular ideado por el matemático británico John Horton Conway en 1970. Es un juego de jugadores cero, lo que significa que su evolución está determinada por su estado inicial, que no requiere más información. Uno interactúa con el juego de la vida creando una configuración inicial y observando cómo evoluciona. Está completo y puede simular un constructor universal o cualquier otra máquina de turbios.
El universo del juego de la vida es una cuadrícula ortogonal bidimensional infinita de células cuadradas, cada una de las cuales se encuentra en uno de los dos estados posibles, vivos o muertos (o poblados y despoblados, respectivamente). Cada célula interactúa con sus ocho vecinos, que son las células que son horizontal, vertical o diagonalmente adyacentes. En cada paso del tiempo, se producen las siguientes transiciones:
Cualquier celda viva con menos de dos vecinos vivos muere, como por debajo de la potencia. Cualquier celda viva con dos o tres vecinos vivos vive en la próxima generación. Cualquier celda viva con más de tres vecinos vivos muere, como por sobrepoblación. Cualquier celda muerta con exactamente tres vecinos vivos se convierte en una celda viva, como por reproducción. Estas reglas, que comparan el comportamiento del autómata con la vida real, pueden condensarse en lo siguiente:
Cualquier celda viva con dos o tres vecinos vivos sobrevive. Cualquier celda muerta con tres vecinos vivos se convierte en una celda viva. Todas las otras células vivas mueren en la próxima generación. Del mismo modo, todas las demás células muertas permanecen muertas. El patrón inicial constituye la semilla del sistema. La primera generación se crea aplicando las reglas anteriores simultáneamente a cada célula de la semilla; Los nacimientos y las muertes ocurren simultáneamente, y el momento discreto en el que esto sucede a veces se llama garrapata. Cada generación es una función pura del anterior. Las reglas continúan aplicándose repetidamente para crear más generaciones.
A finales de 1940, John Von Neumann definió la vida como una creación (como un ser u organismo) que puede reproducirse y simular una máquina de turing. Von Neumann estaba pensando en una solución de ingeniería que utilizaría componentes electromagnéticos que flotaban al azar en líquido o gas. Esto resultó no ser realista con la tecnología disponible en ese momento. Stanislaw Ulam inventó autómatas celulares, que tenían la intención de simular las construcciones electromagnéticas teóricas de Von Neumann. Ulam discutió el uso de computadoras para simular sus autómatas celulares en una red bidimensional en varios documentos. En paralelo, Von Neumann intentó construir el autómata celular de ULAM. Aunque exitoso, estaba ocupado con otros proyectos y dejó algunos detalles sin terminar. Su construcción fue complicada porque trató de simular su propio diseño de ingeniería. Con el tiempo, otros investigadores proporcionaron construcciones de vida más simples y publicadas en artículos y libros.
Motivado por preguntas en lógica matemática y en parte por el trabajo en juegos de simulación de ULAM, entre otros, John Conway comenzó a hacer experimentos en 1968 con una variedad de diferentes reglas de autómata celular bidimensional. autómata. Por ejemplo, quería que algunas configuraciones duren mucho tiempo antes de morir y otras configuraciones continuaran para siempre sin permitir ciclos. Fue un desafío importante y un problema abierto durante años antes de que los expertos en autómatas celulares lograron demostrar que, de hecho, el juego de la vida admitió una configuración que estaba viva en el sentido de satisfacer los dos requisitos generales de Von Neumann. Si bien las definiciones antes del juego de la vida estaban orientadas a las pruebas, la construcción de Conway tenía como objetivo la simplicidad sin que un priori proporcionara pruebas de que el autómata estaba vivo.
Conway eligió sus reglas cuidadosamente, después de una considerable experimentación, para cumplir con estos criterios:
No debe haber un crecimiento explosivo. Debería existir pequeños patrones iniciales con resultados caóticos e impredecibles. Debe haber potencial para los constructores universales von Neumann. Las reglas deben ser lo más simples posible, mientras se adhieren a las restricciones anteriores. El juego hizo su primera aparición pública en la edición de octubre de 1970 de Scientific American, en la columna "Mathematical Games" de Martin Gardner. Teóricamente, el juego de la vida tiene el poder de una máquina universal de Turing: cualquier cosa que se pueda calcular algorítmicamente se puede calcular dentro del juego de la vida. Gardner escribió: "Debido a las analogías de la vida con el ascenso, la caída y las alteraciones de una sociedad de organismos vivos, pertenece a una clase creciente de lo que se llama 'juegos de simulación' (juegos que se parecen a procesos de la vida real)".
Desde su publicación, el juego de la vida ha atraído mucho interés debido a las sorprendentes formas en que pueden evolucionar los patrones. Proporciona un ejemplo de emergencia y autoorganización. Los académicos en varios campos, como informática, física, biología, bioquímica, economía, matemáticas, filosofía y ciencias generativas, han hecho uso de la forma en que los patrones complejos pueden surgir de la implementación de las simples reglas del juego. El juego también puede servir como una analogía didáctica, utilizada para transmitir la noción algo contradictoria de que el diseño y la organización pueden surgir espontáneamente en ausencia de un diseñador. Por ejemplo, el científico cognitivo Daniel Dennett ha utilizado la analogía del "universo" del juego de la vida ampliamente para ilustrar la posible evolución de construcciones filosóficas complejas, como la conciencia y el libre albedrío, desde el conjunto relativamente simple de leyes físicas deterministas que podrían gobernar nuestras universo.
La popularidad del Juego de la Vida fue ayudado por estar en el mismo tiempo que el acceso a la computadora cada vez más económico. El juego podría ejecutarse durante horas en estas máquinas, lo que de otro modo no habría permanecido sin usar por la noche. A este respecto, presagió la popularidad posterior de los fractales generados por computadora. Para muchos, el juego de la vida fue simplemente un desafío de programación: una forma divertida de usar ciclos de CPU desperdiciados. Para algunos, sin embargo, el juego de la vida tenía más connotaciones filosóficas. Desarrolló un culto a través de la década de 1970 y más allá; Los desarrollos actuales han llegado tan lejos como para crear emulaciones teóricas de los sistemas informáticos dentro de los límites de un Juego de la Vida.
CARGANDO...