<?php
/*
Некто кладет в банк 10000 р.
Банк начисляет 10% годовых
(то есть, каждый год на счету становится на 10% больше, чем в прошлом году).
Напиши программу, считающую, через сколько лет в банке будет миллион?
Сколько лет будет этому некто?
Доживет ли некто до этого дня, если сегодня ему 16 лет? */
class Man
{
private $years;
private $averageDurationLife = 72;
public function __construct(int $years)
{
$this->years = $years;
}
public function isAlive(): bool
{
if($this->years < $this->averageDurationLife) {
return true;
} else {
return false;
}
}
public function addYear(): self
{
$this->years++;
return $this;
}
public function getYears(): int
{
return $this->years;
}
}
class Bill
{
private $amount;
private $annual;
public function __construct(int $amount, int $annual)
{
$this->amount = $amount;
$this->annual = $annual;
}
public function getAmount(): float
{
return $this->amount;
}
public function totalizeAnnual(): self
{
$this->amount += $this->amount * $this->annual / 100;
return $this;
}
}
class Calculator
{
private $man;
private $bill;
public function __construct(Man $man, Bill $bill)
{
$this->man = $man;
$this->bill = $bill;
}
public function getResult
(): array {
while($this->man->isAlive() and TARGET > $this->bill->getAmount()) {
$this->bill->totalizeAnnual();
$this->man->addYear();
}
return [
$this->man->isAlive(),
$this->bill->getAmount(),
$this->man->getYears()
];
}
}
$calculator = new Calculator(
new Man(16),
new Bill(10000, 10)
);
$result = $calculator->getResult();
echo $result[0] === true ? "Парень жив\n" : "Земля парню пухом\n";
echo "Он успел накопить: ".(int)$result[1]." рублей\n";
echo "И ему сейчас ".$result[2]." лет";
PD9waHAKCi8qIArQndC10LrRgtC+INC60LvQsNC00LXRgiDQsiDQsdCw0L3QuiAxMDAwMCDRgC4K0JHQsNC90Log0L3QsNGH0LjRgdC70Y/QtdGCIDEwJSDQs9C+0LTQvtCy0YvRhSAKKNGC0L4g0LXRgdGC0YwsINC60LDQttC00YvQuSDQs9C+0LQg0L3QsCDRgdGH0LXRgtGDINGB0YLQsNC90L7QstC40YLRgdGPINC90LAgMTAlINCx0L7Qu9GM0YjQtSwg0YfQtdC8INCyINC/0YDQvtGI0LvQvtC8INCz0L7QtNGDKS4gCtCd0LDQv9C40YjQuCDQv9GA0L7Qs9GA0LDQvNC80YMsINGB0YfQuNGC0LDRjtGJ0YPRjiwg0YfQtdGA0LXQtyDRgdC60L7Qu9GM0LrQviDQu9C10YIg0LIg0LHQsNC90LrQtSDQsdGD0LTQtdGCINC80LjQu9C70LjQvtC9PyAK0KHQutC+0LvRjNC60L4g0LvQtdGCINCx0YPQtNC10YIg0Y3RgtC+0LzRgyDQvdC10LrRgtC+PyAK0JTQvtC20LjQstC10YIg0LvQuCDQvdC10LrRgtC+INC00L4g0Y3RgtC+0LPQviDQtNC90Y8sINC10YHQu9C4INGB0LXQs9C+0LTQvdGPINC10LzRgyAxNiDQu9C10YI/ICovCgpkZWZpbmUoJ1RBUkdFVCcsIDEwMDAwMDApOwoKY2xhc3MgTWFuCnsKICAgIHByaXZhdGUgJHllYXJzOwogICAgcHJpdmF0ZSAkYXZlcmFnZUR1cmF0aW9uTGlmZSA9IDcyOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJHllYXJzKQogICAgewogICAgICAgICR0aGlzLT55ZWFycyA9ICR5ZWFyczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNBbGl2ZSgpOiBib29sCiAgICB7CiAgICAgICAgaWYoJHRoaXMtPnllYXJzIDwgJHRoaXMtPmF2ZXJhZ2VEdXJhdGlvbkxpZmUpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGFkZFllYXIoKTogc2VsZgogICAgewogICAgCSR0aGlzLT55ZWFycysrOwogICAgCXJldHVybiAkdGhpczsKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGdldFllYXJzKCk6IGludAogICAgewogICAgCXJldHVybiAkdGhpcy0+eWVhcnM7CiAgICB9Cn0KCmNsYXNzIEJpbGwKewogICAgcHJpdmF0ZSAkYW1vdW50OwogICAgcHJpdmF0ZSAkYW5udWFsOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFtb3VudCwgaW50ICRhbm51YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPmFtb3VudCA9ICRhbW91bnQ7CiAgICAgICAgJHRoaXMtPmFubnVhbCA9ICRhbm51YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFtb3VudCgpOiBmbG9hdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YW1vdW50OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b3RhbGl6ZUFubnVhbCgpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmFtb3VudCArPSAkdGhpcy0+YW1vdW50ICogJHRoaXMtPmFubnVhbCAvIDEwMDsKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0KCmNsYXNzIENhbGN1bGF0b3IKewogICAgcHJpdmF0ZSAkbWFuOwogICAgcHJpdmF0ZSAkYmlsbDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoTWFuICRtYW4sIEJpbGwgJGJpbGwpCiAgICB7CiAgICAgICAgJHRoaXMtPm1hbiA9ICRtYW47CiAgICAgICAgJHRoaXMtPmJpbGwgPSAkYmlsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzdWx0KCk6IGFycmF5CiAgICB7CiAgICAgICAgd2hpbGUoJHRoaXMtPm1hbi0+aXNBbGl2ZSgpIGFuZCBUQVJHRVQgPiAkdGhpcy0+YmlsbC0+Z2V0QW1vdW50KCkpIHsKICAgICAgICAgICAgJHRoaXMtPmJpbGwtPnRvdGFsaXplQW5udWFsKCk7CiAgICAgICAgICAgICR0aGlzLT5tYW4tPmFkZFllYXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJHRoaXMtPm1hbi0+aXNBbGl2ZSgpLAogICAgICAgICAgICAkdGhpcy0+YmlsbC0+Z2V0QW1vdW50KCksCiAgICAgICAgICAgICR0aGlzLT5tYW4tPmdldFllYXJzKCkKICAgICAgICBdOwogICAgfQp9CgokY2FsY3VsYXRvciA9IG5ldyBDYWxjdWxhdG9yKAogICAgbmV3IE1hbigxNiksCiAgICBuZXcgQmlsbCgxMDAwMCwgMTApCik7CgokcmVzdWx0ID0gJGNhbGN1bGF0b3ItPmdldFJlc3VsdCgpOwplY2hvICRyZXN1bHRbMF0gPT09IHRydWUgPyAi0J/QsNGA0LXQvdGMINC20LjQslxuIiA6ICLQl9C10LzQu9GPINC/0LDRgNC90Y4g0L/Rg9GF0L7QvFxuIjsKZWNobyAi0J7QvSDRg9GB0L/QtdC7INC90LDQutC+0L/QuNGC0Yw6ICIuKGludCkkcmVzdWx0WzFdLiIg0YDRg9Cx0LvQtdC5XG4iOwplY2hvICLQmCDQtdC80YMg0YHQtdC50YfQsNGBICIuJHJlc3VsdFsyXS4iINC70LXRgiI7