<?php
function SOUL($MY) {return 0xFFFF & $MY;}
function BODY($MY) {return $MY>>0x10;}
class emotion {
const neutral = 0; const upbeat = 1; const sleepy = 2; const tired = 3; const pessimistic = 4;
const betrayed = 5; const mad = 6; const afraid = 7; const down = 8; const left_behind = 9;
};
define('bormand', 'x!( "@"!, #(&!$ $\&!$ %(\'!$ &T&! \'T& $ !, %0&!$ $X&!$ #$&!$ )$& $ ');
function embrace($a, $i) {
$x = 0;
for($j = 0; $j<3; ++$j)
$x += (ord($a[$i+$j])-0x20)<<($j*6); return $x;
}
function make_love($x, $y) {
global $podushka;
$my = $podushka[$x + p_x*$y];
$my_soul = SOUL($my);
if ($my_soul >= strlen(bormand
) - 3) return;
$my_happiness = embrace(bormand, $my_soul);
$dx = 0;
$dy = 0;
switch($my_happiness & 0xFF) {
case emotion::upbeat:
$podushka[$x + $y*p_x] = $my_soul + MY_LIFE + (($my_happiness & 0xFFFF00)<<8);
break;
case emotion::sleepy:
case emotion::tired:
$dx = -1; $dy = -1; goto
sleep; case emotion::left_behind:
$dx = -1; $dy = 1; goto
sleep; case emotion::mad:
case emotion::betrayed:
$dx = 1; $dy = -1; goto
sleep; case emotion::afraid:
$dx = 1; $dy = 1; goto
sleep; case emotion::pessimistic:
case emotion::down:
break;
default:
return;
$podushka[($x+$dx)%p_x + ($y+$dy)%p_y*p_x] = BODY($my) ? $my - 0x10000 : $my_soul + MY_LIFE;
$podushka[$x + p_x*$y] = $my_happiness>>8;
}
}
$podushka[8+p_x*9] = 1;
for ($t = 0; $t<20; ++$t) {
for ($i = 0; $i<p_x*p_y; ++$i) {
make_love
($i%p_x
, floor($i/p_x
)); }
}
for ($j = 0; $j<p_y; ++$j) {
for ($i = 0; $i<p_x; ++$i) {
$c = $podushka[$i+p_x*$j];
echo(($c>0x20 && $c<0x7e)?
chr($c):' '); }
echo PHP_EOL;
}
return 0;
PD9waHAKZGVmaW5lKCdNWV9MSUZFJywgMyk7CgpmdW5jdGlvbiBTT1VMKCRNWSkge3JldHVybiAweEZGRkYgJiAkTVk7fQpmdW5jdGlvbiBCT0RZKCRNWSkge3JldHVybiAkTVk+PjB4MTA7fQoKY2xhc3MgZW1vdGlvbiB7CiAgICBjb25zdCBuZXV0cmFsICA9IDA7IGNvbnN0IHVwYmVhdCA9IDE7IGNvbnN0IHNsZWVweSA9IDI7IGNvbnN0IHRpcmVkID0gMzsgY29uc3QgcGVzc2ltaXN0aWMgPSA0OyAKICAgIGNvbnN0IGJldHJheWVkID0gNTsgY29uc3QgbWFkICAgID0gNjsgY29uc3QgYWZyYWlkID0gNzsgY29uc3QgZG93biAgPSA4OyBjb25zdCBsZWZ0X2JlaGluZCA9IDk7Cn07CgpkZWZpbmUoJ2Jvcm1hbmQnLCAneCEoICJAIiEsICMoJiEkICRcJiEkICUoXCchJCAmVCYhICBcJ1QmICQgISwgJTAmISQgJFgmISQgIyQmISQgKSQmICQgJyk7CgpkZWZpbmUoJ3BfeCcsIDE1KTsKZGVmaW5lKCdwX3knLCAxMCk7CgokcG9kdXNoa2EgPSBhcnJheV9maWxsKDAsIHBfeCpwX3ksIDApOwoKZnVuY3Rpb24gZW1icmFjZSgkYSwgJGkpIHsKICAgICR4ID0gMDsKICAgIGZvcigkaiA9IDA7ICRqPDM7ICsrJGopCiAgICAgICAgJHggKz0gKG9yZCgkYVskaSskal0pLTB4MjApPDwoJGoqNik7CiAgICByZXR1cm4gJHg7Cn0KCmZ1bmN0aW9uIG1ha2VfbG92ZSgkeCwgJHkpIHsKICAgIGdsb2JhbCAkcG9kdXNoa2E7CiAgICAkbXkgPSAkcG9kdXNoa2FbJHggKyBwX3gqJHldOwogICAgJG15X3NvdWwgPSBTT1VMKCRteSk7CiAgICBpZiAoJG15X3NvdWwgPj0gc3RybGVuKGJvcm1hbmQpIC0gMykKICAgICAgICByZXR1cm47CiAgICAkbXlfaGFwcGluZXNzID0gZW1icmFjZShib3JtYW5kLCAkbXlfc291bCk7CiAgICAkZHggPSAwOwogICAgJGR5ID0gMDsKICAgIHN3aXRjaCgkbXlfaGFwcGluZXNzICYgMHhGRikgewogICAgICAgIGNhc2UgZW1vdGlvbjo6dXBiZWF0OgogICAgICAgICAgICAkcG9kdXNoa2FbJHggKyAkeSpwX3hdID0gJG15X3NvdWwgKyBNWV9MSUZFICsgKCgkbXlfaGFwcGluZXNzICYgMHhGRkZGMDApPDw4KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBlbW90aW9uOjpzbGVlcHk6CiAgICAgICAgICAgICRkeCA9IC0xOyBnb3RvIHNsZWVwOwogICAgICAgIGNhc2UgZW1vdGlvbjo6dGlyZWQ6CiAgICAgICAgICAgICRkeCA9IC0xOyAkZHkgPSAtMTsgZ290byBzbGVlcDsKICAgICAgICBjYXNlIGVtb3Rpb246OmxlZnRfYmVoaW5kOgogICAgICAgICAgICAkZHggPSAtMTsgJGR5ID0gMTsgZ290byBzbGVlcDsKICAgICAgICBjYXNlIGVtb3Rpb246Om1hZDoKICAgICAgICAgICAgJGR4ID0gMTsgZ290byBzbGVlcDsKICAgICAgICBjYXNlIGVtb3Rpb246OmJldHJheWVkOgogICAgICAgICAgICAkZHggPSAxOyAkZHkgPSAtMTsgZ290byBzbGVlcDsKICAgICAgICBjYXNlIGVtb3Rpb246OmFmcmFpZDoKICAgICAgICAgICAgJGR4ID0gMTsgJGR5ID0gMTsgZ290byBzbGVlcDsKICAgICAgICBjYXNlIGVtb3Rpb246OnBlc3NpbWlzdGljOgogICAgICAgICAgICAkZHkgPSAtMTsgZ290byBzbGVlcDsKICAgICAgICBjYXNlIGVtb3Rpb246OmRvd246CiAgICAgICAgICAgICRkeSA9IDE7IGdvdG8gc2xlZXA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzbGVlcDoKICAgICAgICAgICAgJHBvZHVzaGthWygkeCskZHgpJXBfeCArICgkeSskZHkpJXBfeSpwX3hdID0gQk9EWSgkbXkpID8gJG15IC0gMHgxMDAwMCA6ICRteV9zb3VsICsgTVlfTElGRTsKICAgICAgICAgICAgJHBvZHVzaGthWyR4ICsgcF94KiR5XSA9ICRteV9oYXBwaW5lc3M+Pjg7CiAgICB9Cn0KCiRwb2R1c2hrYVs4K3BfeCo5XSA9IDE7CmZvciAoJHQgPSAwOyAkdDwyMDsgKyskdCkgewogICAgZm9yICgkaSA9IDA7ICRpPHBfeCpwX3k7ICsrJGkpIHsKICAgICAgICBtYWtlX2xvdmUoJGklcF94LCBmbG9vcigkaS9wX3gpKTsKICAgIH0KfQpmb3IgKCRqID0gMDsgJGo8cF95OyArKyRqKSB7CiAgICBmb3IgKCRpID0gMDsgJGk8cF94OyArKyRpKSB7CiAgICAgICAgJGMgPSAkcG9kdXNoa2FbJGkrcF94KiRqXTsKICAgICAgICBlY2hvKCgkYz4weDIwICYmICRjPDB4N2UpP2NocigkYyk6JyAnKTsKICAgIH0KICAgIGVjaG8gUEhQX0VPTDsKfQoKcmV0dXJuIDA7Cg==