Saturday, January 8, 2011

Game of Life

Игра "Жизнь" (англ. Game of Life, или просто Life) — это клеточный автомат, придуманный английским математиком Джоном Конвеем (John Horton Conway) в 1970 году.
В качестве игрового поля выступает вселенная. Каждая клетка поля может быть живой или мёртвой. Клетка имеет восемь соседей. Распределение живых клеток в начале игры называется первым поколением. Каждое следующее поколение рассчитывается на основе предыдущего по таким правилам:
- мёртвая клетка, рядом с которой ровно три живые клетки, оживает;
- если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить; если же соседей меньше двух или больше трёх, то клетка умирает.
Игрок не принимает прямого участия в игре, а лишь расставляет начальную конфигурацию «живых» клеток, которые затем взаимодействуют согласно правилам уже без его участия.
В процессе игры могут получаться очень замысловатые и красивые комбинации.



В конце игры выживают устойчивые (которые остаются неизменными) и периодические (у которых состояние повторяется через некоторое число поколений) фигуры.

Friday, January 7, 2011

Quine

Квайн или куайн — это компьютерная программа, выдающая на выходе точную копию своего исходного текста.
Название происходит от имени американского логика, математика и философа Уилларда Ван Ормана Куайна (англ. Willard Van Orman Quine) (1908—2000), который занимался углубленным изучением косвенного самоупоминания.
Программа не считается куайном, если используется чтение кода программы из файла, ввод его с клавиатуры и т. д. Также программа не считается куайном, если не содержит вообще никакого кода.

Приведу свой вариант реализации куайна.

#include <stdio.h> 
void main() { puts("#include <stdio.h>"); char *qstr = "void main() { puts(\"#include <stdio.h>\"); char *qstr = \"%s\"; printf(qstr, qstr); }"; printf(qstr, qstr); }

Thursday, January 6, 2011

Цвет текста и фона в консоли

Для того чтобы в консоль вывести текст с выбранным цветом текста и фона необходимо написать следующий код:

#include <stdio.h>
#include <windows.h>

void SetColor(DWORD color)
{
  HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute(hConsole, color);
}

void main()
{
  SetColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
  printf("Red\n");
  SetColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  printf("Green\n");
  SetColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
  printf("Blue\n");

  SetColor(BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
  printf("White\n");

  SetColor(0x0F);
  printf("\n");
}

* This source code was highlighted with Source Code Highlighter.
Это даст следующий эффект:


Видно, что белый цвет получается путем смешивания красного, зеленого и синего цветов.
В коде, можно также задать цвет, передав его в числовом формате.
Командная строка по команде color\? подсказывает возможные доступные цвета:

0 = Черный  8 = Серый
1 = Синий   9 = Светло-синий
2 = Зеленый A = Светло-зеленый
3 = Голубой B = Светло-голубой
4 = Красный C = Светло-красный
5 = Лиловый D = Светло-лиловый
6 = Желтый  E = Светло-желтый
7 = Белый   F = Ярко-белый

Можно задавать цвет фона и текста в шестнадцатеричном формате, для этого используется две цифры. Первая цифра определяет цвет фона, а вторая - цвет текста.