tetoromino.php
<?php
class Tetoromino {
private $paterns = array(
'O' => array(array(00, 01, 10, 11)),
'I' => array(array(00, 01, 02, 03), array(00, 10, 20, 30)),
'L' => array(
array(00, 01, 02, 10),
array(00, 01, 02, 12),
array(00, 01, 10, 20),
array(00, 01, 11, 21),
array(00, 10, 11, 12),
array(00, 10, 20, 21),
array(01, 11, 20, 21),
array(02, 10, 11, 12)),
'T' => array(
array(00, 01, 02, 11),
array(00, 10, 11, 20),
array(01, 10, 11, 21),
array(01, 10, 11, 12)),
'S' => array(
array(00, 01, 11, 12),
array(00, 10, 11, 21),
array(01, 02, 10, 11),
array(01, 10, 11, 20))
);
private $min_position = array();
function __construct($input) {
$this->min_position = $this->minPosition($input);
}
private function minPosition($input){
$inputs = explode(',', $input);
global $x_min, $y_min;
$x_min = min(array_map(function ($v) { return intval($v / 10); }, $inputs));
$y_min = min(array_map(function ($v) { return intval($v % 10); }, $inputs));
$min_position = array_map(function ($v) {
global $x_min, $y_min;
return $v - $x_min * 10 - $y_min;
}, $inputs);
sort($min_position);
return $min_position;
}
public function isTetoromino () {
$res = '-';
foreach ($this->paterns as $key => $patern) {
foreach ($patern as $value) {
if ($value == $this->min_position){
$res = $key;
break;
}
}
}
return $res;
}
}
if ($argv[1] !== 'test') {
$teto = new Tetoromino($argv[1]);
$res = $teto->isTetoromino();
echo $res."\n";
exit;
}
/*#1*/ test("55,55,55,55", "-");
/*#2*/ test("07,17,06,05", "L");
/*#3*/ test("21,41,31,40", "L");
/*#4*/ test("62,74,73,72", "L");
/*#5*/ test("84,94,74,75", "L");
/*#6*/ test("48,49,57,47", "L");
/*#7*/ test("69,89,79,68", "L");
/*#8*/ test("90,82,91,92", "L");
/*#9*/ test("13,23,03,24", "L");
/*#10*/ test("24,22,25,23", "I");
/*#11*/ test("51,41,21,31", "I");
/*#12*/ test("64,63,62,65", "I");
/*#13*/ test("49,69,59,79", "I");
/*#14*/ test("12,10,21,11", "T");
/*#15*/ test("89,99,79,88", "T");
/*#16*/ test("32,41,43,42", "T");
/*#17*/ test("27,16,36,26", "T");
/*#18*/ test("68,57,58,67", "O");
/*#19*/ test("72,62,61,71", "O");
/*#20*/ test("25,24,15,14", "O");
/*#21*/ test("43,54,53,42", "S");
/*#22*/ test("95,86,76,85", "S");
/*#23*/ test("72,73,84,83", "S");
/*#24*/ test("42,33,32,23", "S");
/*#25*/ test("66,57,67,58", "S");
/*#26*/ test("63,73,52,62", "S");
/*#27*/ test("76,68,77,67", "S");
/*#28*/ test("12,11,22,01", "S");
/*#29*/ test("05,26,06,25", "-");
/*#30*/ test("03,11,13,01", "-");
/*#31*/ test("11,20,00,21", "-");
/*#32*/ test("84,95,94,86", "-");
/*#33*/ test("36,56,45,35", "-");
/*#34*/ test("41,33,32,43", "-");
/*#35*/ test("75,94,84,95", "-");
/*#36*/ test("27,39,28,37", "-");
/*#37*/ test("45,34,54,35", "-");
/*#38*/ test("24,36,35,26", "-");
/*#39*/ test("27,27,27,27", "-");
/*#40*/ test("55,44,44,45", "-");
/*#41*/ test("70,73,71,71", "-");
/*#42*/ test("67,37,47,47", "-");
/*#43*/ test("43,45,41,42", "-");
/*#44*/ test("87,57,97,67", "-");
/*#45*/ test("49,45,46,48", "-");
/*#46*/ test("63,63,52,72", "-");
/*#47*/ test("84,86,84,95", "-");
/*#48*/ test("61,60,62,73", "-");
/*#49*/ test("59,79,69,48", "-");
/*#50*/ test("55,57,77,75", "-");
function test($input, $answer) {
$teto = new Tetoromino($input);
$res = $teto->isTetoromino();
echo ($res == $answer)?1:0;
}