LINUX.ORG.RU

[Brainfuck] Вычисляем число пи

 


0

1

Вот тут нашел интересный исходник на языке Си. У кого какие мысли, как он работает? Для Ъ: в примере вычисление числа Пи по рисованому кргу в теле функции:

/* (c) Brian Westley, 1988 */
#define _ 0xF<00? --F<00||--F-OO--:-F<00||--F-OO--;
int F=00,OO=00;
main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
         _-_-_-_
     _-_-_-_-_-_-_-_-_
   _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
   _-_-_-_-_-_-_-_-_-_-_-_
      _-_-_-_-_-_-_-_
         _-_-_-_
}
И чем больше тот круг, тем точнее вічисление...

Ответ на: комментарий от Artificial_Thought

Чего непонятно, элементы «круга» разворачиваются препроцессором в ковнокод, в котором накапливаются в FF и OO площадь и радиус.

madcore ★★★★★
()
Ответ на: комментарий от KERNEL_PANIC

Ну элементарно же все работает. Каждая чертчока раскрывается в 0xF<00? --F<00||--F-OO--:-F<00||--F-OO--; причем если эта черточка первая в строке, то выполняется просто 0xF<00? --F<00||--F-OO--:-F<00||--F-OO--;, а если это последующие черточкИ, то перед ними ставится минус и выполняется -0xF<00? --F<00||--F-OO--:-F<00||--F-OO--; соответственно в первом случае (один раз длякаждой строки при выполнении первой черты этой строки) будет выполнено -F<00||--F-OO--, а во всех остальных случаях выполняется --F<00||--F-OO-- поскольку после первого декремента F всегда меньше нуля, то в случае -F<00||--F-OO-- всегда будет выполнено --F-OO-- (то есть декремент и F и ОО), а вот в случае --F<00||--F-OO-- будет выполнено только --F<00, вторая ветка выполняться не будет, т.к. первая = true. Т.о. для каждой черты декрементеруется F (то есть -F это площадь) и для каждой первой черты в строке (то есть всего столько раз сколько у нас строк) декрементируется ОО - это радиус.

anonymous
()
Ответ на: комментарий от anonymous

> А причем тут Brainfuck?
Ну как бы так называют головоломки для программистов в виде небольшого кода, где хер поймешь, что к чему, не?

KERNEL_PANIC ★★★
() автор топика
Ответ на: комментарий от KERNEL_PANIC

> Ну как бы так называют головоломки для программистов в виде небольшого кода, где хер поймешь, что к чему, не?

1. Тут явно не хер поймешь, что к чему.

2. Так называют язык программирования.

anonymous
()

Извините, мне влом решать задачу таким способом. Это наверное лучше решать при помощи SNUSP. Выглядеть будет красивее =)

Я просто выведу чуть более точное Пи, чем в этой программе)))

+++++[>++[>+++++<-]<-]>>+.-----.+++.+++.---.+++++.

Я просто хотел показать Brainfuck.

m4n71k0r
()
Ответ на: комментарий от m4n71k0r

Да ладно, ладно, понял я что такое Brainfuck)) Просто както раз читал другое значение Brainfuck - то, что я описывал выше. Помоему в журнале LinuxFormat))

KERNEL_PANIC ★★★
() автор топика
Ответ на: комментарий от KERNEL_PANIC

До кучи отошлю на широко известный в узких кругах ресурс: http://99-bottles-of-beer.net/

Например, программа на Перле, печатающая тот стих:

    ''=~(        '(?{'        .('`'        |'%')        .('['        ^'-')
    .('`'        |'!')        .('`'        |',')        .'"'.        '\\$'
    .'=='        .('['        ^'+')        .('`'        |'/')        .('['
    ^'+')        .'||'        .(';'        &'=')        .(';'        &'=')
    .';-'        .'-'.        '\\$'        .'=;'        .('['        ^'(')
    .('['        ^'.')        .('`'        |'"')        .('!'        ^'+')
   .'_\\{'      .'(\\$'      .';=('.      '\\$=|'      ."\|".(      '`'^'.'
  ).(('`')|    '/').').'    .'\\"'.+(    '{'^'[').    ('`'|'"')    .('`'|'/'
 ).('['^'/')  .('['^'/').  ('`'|',').(  '`'|('%')).  '\\".\\"'.(  '['^('(')).
 '\\"'.('['^  '#').'!!--'  .'\\$=.\\"'  .('{'^'[').  ('`'|'/').(  '`'|"\&").(
 '{'^"\[").(  '`'|"\"").(  '`'|"\%").(  '`'|"\%").(  '['^(')')).  '\\").\\"'.
 ('{'^'[').(  '`'|"\/").(  '`'|"\.").(  '{'^"\[").(  '['^"\/").(  '`'|"\(").(
 '`'|"\%").(  '{'^"\[").(  '['^"\,").(  '`'|"\!").(  '`'|"\,").(  '`'|(',')).
 '\\"\\}'.+(  '['^"\+").(  '['^"\)").(  '`'|"\)").(  '`'|"\.").(  '['^('/')).
 '+_,\\",'.(  '{'^('[')).  ('\\$;!').(  '!'^"\+").(  '{'^"\/").(  '`'|"\!").(
 '`'|"\+").(  '`'|"\%").(  '{'^"\[").(  '`'|"\/").(  '`'|"\.").(  '`'|"\%").(
 '{'^"\[").(  '`'|"\$").(  '`'|"\/").(  '['^"\,").(  '`'|('.')).  ','.(('{')^
 '[').("\["^  '+').("\`"|  '!').("\["^  '(').("\["^  '(').("\{"^  '[').("\`"|
 ')').("\["^  '/').("\{"^  '[').("\`"|  '!').("\["^  ')').("\`"|  '/').("\["^
 '.').("\`"|  '.').("\`"|  '$')."\,".(  '!'^('+')).  '\\",_,\\"'  .'!'.("\!"^
 '+').("\!"^  '+').'\\"'.  ('['^',').(  '`'|"\(").(  '`'|"\)").(  '`'|"\,").(
 '`'|('%')).  '++\\$="})'  );$:=('.')^  '~';$~='@'|  '(';$^=')'^  '[';$/='`';

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Помню находил исходник, к котором подобным образом изображена голова Боба Марли. После компиляции и эапуска в консоли выводилась совсем другая Картинка из символов =))

KERNEL_PANIC ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.