Skip to content

Instantly share code, notes, and snippets.

@mavimo
Last active April 4, 2016 14:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mavimo/4b154bad7d7ebcc426c6877ff43ef1af to your computer and use it in GitHub Desktop.
Save mavimo/4b154bad7d7ebcc426c6877ff43ef1af to your computer and use it in GitHub Desktop.
Esercizio ZOO

Zoo 1 con:

  • 2 elefanti (verdure: 10kg/day/animale)
  • 2 coccodrilli (carne: 0.6kg/day/animale)
  • 3 scimmie (verdure: 0.6kg/day, carne: 0.1kg/day/animale) 8 zebre (verdure: 2kg/day/animale)
  • 3 rinoceronti (verdure: 1kg/day/animale)
  • 3 leoni (carne: 1kg/day/animale)
  • 4 panda (verdure: 10kg/day/animale)
  • 3 orsi (verdure: 0.7kg/day, carne: 0.3kg/day/animale)

Zoo 2 con:

  • 1 elefanti (verdure: 10kg/day/animale)
  • 2 orso polare (verdure: 0.3kg/day, carne: 0.6kg/day/animale)
  • 4 scimmie (verdure: 0.6kg/day, carne: 0.1kg/day/animale)
  • 2 zebre (verdure: 2kg/day/animale)
  • 3 opossum (carne: 0.05kg/day/animale)
  • 2 ghepardi (carne: 0.6kg/day/animale)

Dire quanti giorni ogni singolo zoo può alimentare i suoi animali con:

  • verdure: 36kg, carne: 18kg
  • verdure: 6kg, carne: 38kg
  • verdure: 26kg, carne: 19kg
  • verdure: 60kg, carne: 37kg
<?php
namespace Codemaster\Esercizio2;
use Codemaster\Esercizio2\AnimaleInterface;
abstract class Animale implements AnimaleInterface
{
private $carne;
private $verdura;
public function __construct($carne = 0, $verdura = 0)
{
if (!is_numeric($carne) || $carne < 0) {
throw new \InvalidArgumentException();
}
if (!is_numeric($verdura) || $verdura < 0) {
throw new \InvalidArgumentException();
}
$this->carne = $carne;
$this->verdura = $verdura;
}
public function getCarne()
{
return $this->carne;
}
public function getVerdura()
{
return $this->verdura;
}
}
<?php
namespace Codemaster\Esercizio2;
interface AnimaleInterface
{
public function getCarne();
public function getVerdura();
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Coccodrillo extends Animale
{
public function __construct()
{
parent::__construct(0.6);
}
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Elefante extends Animale
{
public function __construct()
{
parent::__construct(0, 10);
}
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Ghepardo extends Animale
{
public function __construct()
{
parent::__construct(0.6);
}
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Leone extends Animale
{
public function __construct()
{
parent::__construct(1);
}
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Opossum extends Animale
{
public function __construct()
{
parent::__construct(0.05);
}
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Orso extends Animale
{
public function __construct()
{
parent::__construct(0.3, 0.7);
}
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Panda extends Animale
{
public function __construct()
{
parent::__construct(0, 3);
}
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Rinoceronte extends Animale
{
public function __construct()
{
parent::__construct(0, 1);
}
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Scimmia extends Animale
{
public function __construct()
{
parent::__construct(0.6, 0.1);
}
}
<?php
namespace Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale;
class Zebra extends Animale
{
public function __construct()
{
parent::__construct(0, 2);
}
}
<?php
include './Zoo.php';
include './AnimaleInterface.php';
include './Animale.php';
include './Animali_Elefante.php';
include './Animali_Leone.php';
include './Animali_Orso.php';
include './Animali_Coccodrillo.php';
include './Animali_Panda.php';
include './Animali_Rinoceronte.php';
include './Animali_Scimmia.php';
include './Animali_Zebra.php';
include './Animali_Opossum.php';
include './Animali_Ghepardo.php';
use Codemaster\Esercizio2\Zoo;
use Codemaster\Esercizio2\Animale;
use Codemaster\Esercizio2\Animale\Elefante;
use Codemaster\Esercizio2\Animale\Leone;
use Codemaster\Esercizio2\Animale\Coccodrillo;
use Codemaster\Esercizio2\Animale\Panda;
use Codemaster\Esercizio2\Animale\Rinoceronte;
use Codemaster\Esercizio2\Animale\Scimmia;
use Codemaster\Esercizio2\Animale\Zebra;
use Codemaster\Esercizio2\Animale\Orso;
use Codemaster\Esercizio2\Animale\Opossum;
use Codemaster\Esercizio2\Animale\Ghepardo;
$animali = [
new Elefante(),
new Elefante(),
new Coccodrillo(),
new Coccodrillo(),
new Scimmia(),
new Scimmia(),
new Scimmia(),
new Zebra(),
new Zebra(),
new Zebra(),
new Zebra(),
new Zebra(),
new Zebra(),
new Zebra(),
new Zebra(),
new Rinoceronte(),
new Rinoceronte(),
new Rinoceronte(),
new Leone(),
new Leone(),
new Leone(),
new Panda(),
new Panda(),
new Panda(),
new Panda(),
new Panda(),
new Orso(),
new Orso(),
new Orso(),
];
$zoo1 = new Zoo($animali);
print "<h2>Zoo 1</h2>";
print sprintf('Carne: %d, Verdure: %d, Giorni %d<br/>', 18, 36, $zoo1->getSurvivalDays(18, 36));
print sprintf('Carne: %d, Verdure: %d, Giorni %d<br/>', 38, 6, $zoo1->getSurvivalDays(38, 6));
print sprintf('Carne: %d, Verdure: %d, Giorni %d<br/>', 19, 26, $zoo1->getSurvivalDays(19, 26));
print sprintf('Carne: %d, Verdure: %d, Giorni %d<br/>', 37, 60, $zoo1->getSurvivalDays(37, 60));
// var_dump($zoo1);
$zoo2 = new Zoo();
$zoo2->addAnimale(new Elefante());
$zoo2->addAnimale(new Orso());
$zoo2->addAnimale(new Orso());
$zoo2->addAnimale(new Scimmia());
$zoo2->addAnimale(new Scimmia());
$zoo2->addAnimale(new Scimmia());
$zoo2->addAnimale(new Scimmia());
$zoo2->addAnimale(new Zebra());
$zoo2->addAnimale(new Zebra());
$zoo2->addAnimale(new Opossum());
$zoo2->addAnimale(new Opossum());
$zoo2->addAnimale(new Opossum());
$zoo2->addAnimale(new Ghepardo());
$zoo2->addAnimale(new Ghepardo());
// var_dump($zoo2);
print "<h2>Zoo 2</h2>";
print sprintf('Carne: %d, Verdure: %d, Giorni %d<br/>', 18, 36, $zoo2->getSurvivalDays(18, 36));
print sprintf('Carne: %d, Verdure: %d, Giorni %d<br/>', 38, 6, $zoo2->getSurvivalDays(38, 6));
print sprintf('Carne: %d, Verdure: %d, Giorni %d<br/>', 19, 26, $zoo2->getSurvivalDays(19, 26));
print sprintf('Carne: %d, Verdure: %d, Giorni %d<br/>', 37, 60, $zoo2->getSurvivalDays(37, 60));
<?php
namespace Codemaster\Esercizio2;
use Codemaster\Esercizio2\AnimaleInterface;
class Zoo
{
private $animali;
public function __construct(array $animali = [])
{
foreach ($animali as $animale) {
$this->addAnimale($animale);
}
}
public function addAnimale(AnimaleInterface $animale)
{
$this->animali[] = $animale;
}
public function getSurvivalDays($carne, $verdura)
{
if (!is_numeric($carne) || $carne < 0) {
throw new \InvalidArgumentException();
}
if (!is_numeric($verdura) || $verdura < 0) {
throw new \InvalidArgumentException();
}
$totCarne = 0;
$totVerdure = 0;
foreach ($this->animali as $animale) {
$totCarne += $animale->getCarne();
$totVerdure += $animale->getVerdura();
}
$ggVerdura = $verdura / $totVerdure;
$ggCarne = $carne / $totCarne;
return min($ggVerdura, $ggCarne);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment