<?php
$tests = <<<EOL
1+2i+3j+4k => [1 2 3 4]
-1+3i-3j+7k => [-1 3 -3 7]
-1-4i-9j-2k => [-1 -4 -9 -2]
17-16i-15j-14k => [17 -16 -15 -14]
7+2i => [7 2 0 0]
2i-6k => [0 2 0 -6]
1-5j+2k => [1 0 -5 2]
3+4i-9k => [3 4 0 -9]
42i+j-k => [0 42 1 -1]
6-2i+j-3k => [6 -2 1 -3]
1+i+j+k => [1 1 1 1]
-1-i-j-k => [-1 -1 -1 -1]
16k-20j+2i-7 => [-7 2 -20 16]
i+4k-3j+2 => [2 1 -3 4]
5k-2i+9+3j => [9 -2 3 5]
5k-2j+3 => [3 0 -2 5]
1.75-1.75i-1.75j-1.75k => [1.75 -1.75 -1.75 -1.75]
2.0j-3k+0.47i-13 => [-13 0.47 2.0 -3]
5.6-3i => [5.6 -3 0 0]
k-7.6i => [0 -7.6 0 1]
0 => [0 0 0 0]
0j+0k => [0 0 0 0]
-0j => [0 0 0 0]
1-0k => [1 0 0 0]
EOL;
$lines = explode("\n", $tests);
foreach($lines as $line) {
list($test, $result) = explode('=>', $line);
$test = trim($test);
$result = preg_replace("/\s+/", ",", trim($result));
// Fake stdin
$argv[1] = $test;
// Golfed solution
$a=[''=>0,'i'=> 0,'j'=>0,'k'=>0];
preg_match_all("/([-+]?)(\d*(\.\d+)?)([ijk]?)/",$argv[1],$m,2);
foreach($m as$n)if($n[0])$a[$n[4]]=$n[1].($n[2]===''?1:$n[2]);
echo "Test: " . $test, "\n";
echo "Expect: " . $result, "\n";
echo "Actual: [" . implode(',', $a), "]\n";
echo "\n";
}
preferences:
59.41 ms | 402 KiB | 5 Q