<?php
class Engine {
const KILOMETERS_TO_MILES = 1.609344;
protected $mileage;
protected $is_metric_system = true;
public function __construct(float $mileage = 0.0, bool $is_metric = true) {
$this->mileage = $mileage;
$this->is_metric_system = $is_metric;
}
public function getMileage(): float {
return $this->is_metric_system ? $this->mileage : $this->mileage * self::KILOMETERS_TO_MILES;
}
public function getUnconvertedMileage(): float {
return $this->mileage;
}
public function getMileageUnit(): string {
return $this->is_metric_system ? "km" : "mi";
}
}
class Car {
protected $engine;
protected $name;
public function __construct(Engine $engine, string $name) {
$this->engine = $engine;
$this->name = $name;
}
public function getRealName(): string {
return $this->name;
}
public function getAdvertisementName(): string {
$mileage = round($this->engine->getMileage() / 1000);
return self::getRandomAdvertisementPrefix() . " " . $this->name . " " . $mileage . "kkm";
}
public function getRealMileage(): string {
return round($this->engine->getUnconvertedMileage()) . " " . $this->engine->getMileageUnit(); }
public function getConvertedMileage(): string {
return round($this->engine->getMileage()); }
private static function getRandomAdvertisementPrefix(): string {
$prefixes = [
"Niemiec płakał jak sprzedawał ",
"Nowy, super stan, niebity ",
"Nówka sztuka ",
"OKAZJA ",
"HIT ",
"Stan perfekt "
];
}
public static function getRandomCarName(): string {
$names = [
"Audi A3",
"Citroen C5",
"Daewoo Lanos",
"Ford Focus",
"Kia Rio",
"Mazda 3",
"Nissan Qashqai",
"Skoda Octavia ",
"Volkswagen Passat",
];
}
}
$cars = [];
foreach(range(0, 10) as $car) { $engine = new Engine
(rand(100000, 500000), rand(0, 10) > 1); $name = Car::getRandomCarName();
$cars[] = new Car($engine, $name);
}
echo "<h1>Mirek Handlarz - your most trusted used car dealer</h1>";
echo "<h2>Lista aukcji na otomoto</h2>";
foreach($cars as $car) {
echo $car->getAdvertisementName() . "<br>";
}
echo "<h2>Lista magazynowa</h2>";
echo "<table>";
foreach($cars as $car) {
echo "<tr>";
echo "<td>" . $car->getRealName() . "</td>";
echo "<td>" . $car->getRealMileage() . "</td>";
echo "<td>" . $car->getConvertedMileage() . " km</td>";
echo "</tr>";
}
echo "</table>";
PD9waHAKCmNsYXNzIEVuZ2luZSB7CgoJY29uc3QgS0lMT01FVEVSU19UT19NSUxFUyA9IDEuNjA5MzQ0OwoKCXByb3RlY3RlZCAkbWlsZWFnZTsKCXByb3RlY3RlZCAkaXNfbWV0cmljX3N5c3RlbSA9IHRydWU7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGZsb2F0ICRtaWxlYWdlID0gMC4wLCBib29sICRpc19tZXRyaWMgPSB0cnVlKSB7CgkJJHRoaXMtPm1pbGVhZ2UgPSAkbWlsZWFnZTsKCQkkdGhpcy0+aXNfbWV0cmljX3N5c3RlbSA9ICRpc19tZXRyaWM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldE1pbGVhZ2UoKTogZmxvYXQgewoJCXJldHVybiAkdGhpcy0+aXNfbWV0cmljX3N5c3RlbSA/ICR0aGlzLT5taWxlYWdlIDogJHRoaXMtPm1pbGVhZ2UgKiBzZWxmOjpLSUxPTUVURVJTX1RPX01JTEVTOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRVbmNvbnZlcnRlZE1pbGVhZ2UoKTogZmxvYXQgewoJCXJldHVybiAkdGhpcy0+bWlsZWFnZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0TWlsZWFnZVVuaXQoKTogc3RyaW5nIHsKCQlyZXR1cm4gJHRoaXMtPmlzX21ldHJpY19zeXN0ZW0gPyAia20iIDogIm1pIjsKCX0KCn0KCmNsYXNzIENhciB7CgoJcHJvdGVjdGVkICRlbmdpbmU7Cglwcm90ZWN0ZWQgJG5hbWU7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEVuZ2luZSAkZW5naW5lLCBzdHJpbmcgJG5hbWUpIHsKCQkkdGhpcy0+ZW5naW5lID0gJGVuZ2luZTsKCQkkdGhpcy0+bmFtZSA9ICRuYW1lOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRSZWFsTmFtZSgpOiBzdHJpbmcgewoJCXJldHVybiAkdGhpcy0+bmFtZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0QWR2ZXJ0aXNlbWVudE5hbWUoKTogc3RyaW5nIHsKCQkkbWlsZWFnZSA9IHJvdW5kKCR0aGlzLT5lbmdpbmUtPmdldE1pbGVhZ2UoKSAvIDEwMDApOwoKCQlyZXR1cm4gc2VsZjo6Z2V0UmFuZG9tQWR2ZXJ0aXNlbWVudFByZWZpeCgpIC4gIiAiIC4gJHRoaXMtPm5hbWUgLiAiICIgLiAkbWlsZWFnZSAuICJra20iOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRSZWFsTWlsZWFnZSgpOiBzdHJpbmcgewoJCXJldHVybiByb3VuZCgkdGhpcy0+ZW5naW5lLT5nZXRVbmNvbnZlcnRlZE1pbGVhZ2UoKSkgLiAiICIgLiAkdGhpcy0+ZW5naW5lLT5nZXRNaWxlYWdlVW5pdCgpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRDb252ZXJ0ZWRNaWxlYWdlKCk6IHN0cmluZyB7CgkJcmV0dXJuIHJvdW5kKCR0aGlzLT5lbmdpbmUtPmdldE1pbGVhZ2UoKSk7Cgl9CgoJcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0UmFuZG9tQWR2ZXJ0aXNlbWVudFByZWZpeCgpOiBzdHJpbmcgewoJCSRwcmVmaXhlcyA9IFsKCQkJIk5pZW1pZWMgcMWCYWthxYIgamFrIHNwcnplZGF3YcWCICIsCgkJCSJOb3d5LCBzdXBlciBzdGFuLCBuaWViaXR5ICIsCgkJCSJOw7N3a2Egc3p0dWthICIsCgkJCSJPS0FaSkEgIiwKCQkJIkhJVCAiLAoJCQkiU3RhbiBwZXJmZWt0ICIKCQldOwoKCQlyZXR1cm4gJHByZWZpeGVzW2FycmF5X3JhbmQoJHByZWZpeGVzKV07Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSYW5kb21DYXJOYW1lKCk6IHN0cmluZyB7CgkJJG5hbWVzID0gWwoJCQkiQXVkaSBBMyIsCgkJCSJDaXRyb2VuIEM1IiwKCQkJIkRhZXdvbyBMYW5vcyIsCgkJCSJGb3JkIEZvY3VzIiwKCQkJIktpYSBSaW8iLAoJCQkiTWF6ZGEgMyIsCgkJCSJOaXNzYW4gUWFzaHFhaSIsCgkJCSJTa29kYSBPY3RhdmlhICIsCgkJCSJWb2xrc3dhZ2VuIFBhc3NhdCIsCgkJXTsKCgkJcmV0dXJuICRuYW1lc1thcnJheV9yYW5kKCRuYW1lcyldOwoJfQoKfQoKJGNhcnMgPSBbXTsKCmZvcmVhY2gocmFuZ2UoMCwgMTApIGFzICRjYXIpIHsKCSRlbmdpbmUgPSBuZXcgRW5naW5lKHJhbmQoMTAwMDAwLCA1MDAwMDApLCByYW5kKDAsIDEwKSA+IDEpOwoJJG5hbWUgPSBDYXI6OmdldFJhbmRvbUNhck5hbWUoKTsKCgkkY2Fyc1tdID0gbmV3IENhcigkZW5naW5lLCAkbmFtZSk7Cn0KCmVjaG8gIjxoMT5NaXJlayBIYW5kbGFyeiAtIHlvdXIgbW9zdCB0cnVzdGVkIHVzZWQgY2FyIGRlYWxlcjwvaDE+IjsKCmVjaG8gIjxoMj5MaXN0YSBhdWtjamkgbmEgb3RvbW90bzwvaDI+IjsKCmZvcmVhY2goJGNhcnMgYXMgJGNhcikgewoJZWNobyAkY2FyLT5nZXRBZHZlcnRpc2VtZW50TmFtZSgpIC4gIjxicj4iOwp9CgplY2hvICI8aDI+TGlzdGEgbWFnYXp5bm93YTwvaDI+IjsKZWNobyAiPHRhYmxlPiI7Cgpmb3JlYWNoKCRjYXJzIGFzICRjYXIpIHsKCWVjaG8gIjx0cj4iOwoJCWVjaG8gIjx0ZD4iIC4gJGNhci0+Z2V0UmVhbE5hbWUoKSAuICI8L3RkPiI7CgkJZWNobyAiPHRkPiIgLiAkY2FyLT5nZXRSZWFsTWlsZWFnZSgpIC4gIjwvdGQ+IjsKCQllY2hvICI8dGQ+IiAuICRjYXItPmdldENvbnZlcnRlZE1pbGVhZ2UoKSAuICIga208L3RkPiI7CgllY2hvICI8L3RyPiI7Cn0KCmVjaG8gIjwvdGFibGU+Ijs=