en cz
File Manager
<!DOCTYPE html>
<html lang="cs-cz">
  <head>
  <meta charset="utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title>Gravitace na Marsu</title>
<style>
form {
  width:200px;
  text-align:right;
}

table {
  background: #f1f0ef 0 0;
	border-spacing:0px;
	color:#151d30;
	margin-bottom:15px;
  border:1px solid #AFC6E5;
}
caption {
	text-align:left;
}
th {
	font-size:120%;
	text-align:center;
	font-weight:bold;
}
td {
  border:1px solid #AFC6E5;
}
</style>
  </head>
  <body>

<h1>Marťané a pozemšťani se snaží dostat přes kanál na Marsu.</h1>
<h2>Vaše hodnoty:</h2>
<form action="index.php" method="GET">
    <label for="cp">počet pozemšťanů</label>
    <input type="number" id="cp" name="cp" value="<?=isset($_GET['cp']) ? $_GET['cp'] : 2?>" size="5"><br>

    <label for="cm">počet marťanů</label>
    <input type="number" id="cm" name="cm" value="<?=isset($_GET['cm']) ? $_GET['cm'] : 2?>" size="5"><br>

    <label for="mp">hmotnost pozemšťanů</label>
    <input type="number" id="mp" name="mp" value="<?=isset($_GET['mp']) ? $_GET['mp'] : 50?>" size="5"><br>

    <label for="mm">hmotnost marťanů</label>
    <input type="number" id="mm" name="mm" value="<?=isset($_GET['mm']) ? $_GET['mm'] : 25?>" size="5"><br>

    <label for="k">kapacita lodi</label>
    <input type="number" id="k" name="k" value="<?=isset($_GET['k']) ? $_GET['k'] : 50?>" size="5"><br>
    
    <center><input type="submit" value="Odeslat" size="5"></center>
</form>
<?php

$cp = isset($_GET['cp']) ? ((int)$_GET['cp'] >= 0) ? (int)$_GET['cp'] : 2 : 2; // počet pozemšťanů
$cm = isset($_GET['cm']) ? ((int)$_GET['cm'] >= 0) ? (int)$_GET['cm'] : 2 : 2; // počet marťanů

$mp = isset($_GET['mp']) ? ((int)$_GET['mp'] > 0) ? (int)$_GET['mp'] : 50 : 50; // hmotnost pozemšťanů
$mm = isset($_GET['mm']) ? ((int)$_GET['mm'] > 0) ? (int)$_GET['mm'] : 25 : 25; // hmotnost marťanů

$k  = isset($_GET['k'])  ? ((int)$_GET['k'] >= 0)  ? (int)$_GET['k']  : 0 : 50; // kapacita lodi

echo "<h2>Vstupní data:</h2>";
echo "<p>Počet pozemšťanů = $cp, marťanů = $cm.<br>Hmotnost pozemšťanů = $mp, marťanů = $mm.<br>Kapacita lodi = $k<br></p>";


if ($cp == 0) $mp = 0; // nulace hmotnosti při nevýskytu dané bytosti - pro potřeby následující porovnávací podmínky
if ($cm == 0) $mm = 0;

// Tato případná záměna probíhá z důvodu přehlednosti a obecnosti řešícího algoritmu, který prioritně pracuje s `většími` pasažéry a `menšími` řidiči
if ( ($mm > 0) && ($mp >= $mm) || ($mp == 0) )
          { $hv = $mp; $pv = $cp; $vtext = "pozemšťan"; // h- ... hmotnost, p- ... počet
            $hm = $mm; $pm = $cm; $mtext = "marťan"; }  // -v ... větší,    -m ... menší
  else    { $hv = $mm; $pv = $cm; $vtext = "marťan";    // v případě, že je marťan těžší než pozemšťan, proběhne `prohození`
            $hm = $mp; $pm = $cp; $mtext = "pozemšťan"; }


echo "<h2>Analýza dat:</h2>";
echo "<p>Hmotnost většího = $hv, počet větších = $pv, rod = $vtext<br>
      Hmotnost menšího = $hm, počet menších = $pm, rod = $mtext</p>";

echo "<h2>Řešení:</h2>";
if ( $k == 0 ) echo "Nelze řešit, nemáme loď!";
elseif ( ($hv > $k) || ($hm > $k) ) echo "Nelze řešit! Hmotnost cestujících nesmí být větší než kapacita lodi.";
elseif ( (($pv+$pm) >= 2) && (($hm*2) > $k) ) echo "Nelze řešit! Neexistuje způsob, jak by se loď mohla vrátit nazpět.";
elseif ( ($pm == 1) && (($hv+$hm) > $k) ) echo "Nelze řešit! Neexistuje způsob, jak by se loď mohla vrátit nazpět.";
else
{
?>
<table>
<thead>
<tr>
  <th>Krok</th>
  <th>Nastoupili</th>
  <th>Vrátil se</th>
  <th colspan="2">Zbývá převézt</th>
</tr>
<tbody>
<?php

  $pocet_cest = 0;
  $bytosti = $pv + $pm; // celkový počet bytostí, které je potřeba převézt
  
  $mo = 0; // počet menších na druhé straně

    echo "<tr>\n<td>$pocet_cest</td>\n<td></td>\n<td></td>\n<td>$bytosti</td>\n<td>$pv"."x $vtext<br>$pm"."x $mtext</td>\n</r>\n";
  while ($bytosti > 0)
  {
    $kap = $k; // obnovení kapacity vozidla - vyprázdnění
    $nm = $nv = 0; // počet malých a velkých, kteří momentálně nastoupili
    
    if ($mo == 0) // pokud na druhé straně žádný menší není, tak jeden nastoupí (zajišťuje potřebné minimum pro návrat lodi)
    {
      $kap -= $hm;
      $pm--;  $bytosti--;  $mo++;   $nm++;
    }
    
    while ($kap > 0) // nastupují větší dokud je místo v lodi
    {
      if ($pv == 0) break; // pokud už žádný větší není, cyklus se vynuceně ukončí
      $kap -= $hv;
      $pv--;  $bytosti--;   $nv++;
    } if ($kap < 0) { $kap += $hv; $pv++; $bytosti++; $nv--; }  // pokud poslední nastoupivší `větší` přesáhl nosnost lodi, vystoupí

    while ($kap > 0) // nastupují menší dokud je místo v lodi
    {
      if ($pm == 0) break; // pokud už žádný menší není, cyklus se vynuceně ukončí
      $kap -= $hm;
      $pm--;  $bytosti--;  $mo++;   $nm++;
    } if ($kap < 0) { $kap += $hm; $pm++; $bytosti++; $mo--; $nm--; }  // pokud poslední nastoupivší `menší` přesáhl nosnost lodi, vystoupí

    $pocet_cest++; // loď odjede, ale jeden cestující se vrací (řidič) ((pouze pokud je potřeba někoho ještě převézt))
    if ($bytosti > 0) { $pm++;  $bytosti++; $mo--; $nmv = "1 $mtext"; } //$nmv uchovává text jednotky, která se vrátila nazpět

    echo "<tr>\n<td>$pocet_cest</td>\n<td>$nv"."x $vtext<br>$nm"."x $mtext</td>\n<td>$nmv</td>\n<td>$bytosti</td>\n<td>$pv"."x $vtext<br>$pm"."x $mtext</td>\n</r>\n";
    $nmv = "";
  }
echo "<caption>Celkový počet kroků: ".$pocet_cest."</caption>";
?>
</tbody>
</table>
<?php

}

?>
  </body>
</html>
</xmp>

  </body>
</html>