Skip to content

Instantly share code, notes, and snippets.

@andrisp
Created December 18, 2013 15:28
Show Gist options
  • Save andrisp/8024246 to your computer and use it in GitHub Desktop.
Save andrisp/8024246 to your computer and use it in GitHub Desktop.
<?php
$host = "192.168.70.95";
$port = 9000;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket, SOMAXCONN);
while (true) {
$spawn = socket_accept($socket);
$input = socket_read($spawn, 1024, PHP_NORMAL_READ);
$input = trim($input);
$f = unserialize(file_get_contents('./q.txt'));
$fn = require 'solver.php';
$answer = $fn($input);
file_put_contents('./q.txt', serialize($f));
$result = '';
$result = "HTTP/1.0 200 OK\n";
$result .= "Date: Sat, 22 Dec 2012 00:00:01 GMT\n";
$result .= "Content-Type: text/html\n";
$result .= "Content-Length: " . strlen($answer) . "\n";
$result .= "\n";
$result .= $answer;
$written = socket_write($spawn, $result, strlen($result));
//echo "Request: $input\n";
echo "Answer: $answer\n";
}
?>
<?php
return function($input) {
global $f;
preg_match('/\?q=(.*)\sHTTP/i', $input, $m);
$q =urldecode( $m[1]);
echo urldecode($q) . "\n";
$fructs = [
'apple' => 'green',
'banana' => 'yellow',
'carrot' => 'orange',
'orange' => 'orange',
'beet' => 'red',
'cucumber' => 'green',
'lemon' => 'yellow',
'tomato' => 'red'
];
if (preg_match('/your name/', $q)) {
return 'Turbo2000';
} else if (preg_match('/my name is ([a-zA-Z]+)/', $q, $m)) {
$name = $m[1];
$f['name'] = $name;
return $name;
} else if (preg_match('/What was my name/', $q, $m)) {
return isset($f['name']) ? $f['name'] : '';
} else if (preg_match('/KRH05/', $q, $m)) {
return 'Deep Inside';
} else if (preg_match('/color is apple/', $q, $m)) {
return 'green';
} else if (preg_match('/color is carrot/', $q, $m)) {
return 'orange';
}else if (preg_match('/color is banana/', $q, $m)) {
return 'yellow';
}else if (preg_match('/color is orange/', $q, $m)) {
return 'orange';
}else if (preg_match('/color is beet/', $q, $m)) {
return 'red';
}else if (preg_match('/color is lemon/', $q, $m)) {
return 'yellow';
}else if (preg_match('/color is tomato/', $q, $m)) {
return 'red';
} else if (preg_match('/even numbers from the set \((.*)\)/', $q, $m)) {
$nums = explode(',',$m[1]);
$re=[];
foreach($nums as $n) {
if($n%2==0) {
$re[] = $n;
}
}
return implode(',',$re);
} else if (preg_match('/odd numbers from the set \((.*)\)/', $q, $m)) {
$nums = explode(',',$m[1]);
$re=[];
foreach($nums as $n) {
if($n%2==1) {
$re[] = $n;
}
}
return implode(',',$re);
}else if (preg_match('/biggest number of \((.*)\)/', $q, $m)) {
$nums = explode(',',$m[1]);
return max($nums);
}else if (preg_match('/smallest number of \((.*)\)/', $q, $m)) {
$nums = explode(',',$m[1]);
return min($nums);
}else if (preg_match('/set descending \((.*)\)/', $q, $m)) {
$nums = explode(',',$m[1]);
rsort($nums);
return implode(',', $nums);
} else if (preg_match('/set ascending \((.*)\)/', $q, $m)) {
$nums = explode(',',$m[1]);
sort($nums);
return implode(',', $nums);
} else if (preg_match('/Which of \"(.*)\" are ([a-z]+)/', $q, $m)) {
$col = $m[2];
$re = [];
foreach ($fructs as $n => $c) {
if($c==$col) {
$re[] = $n;
}
}
return implode(',', ($re));
} else if (preg_match('/sum of all digits \(([0-9]+)/', $q, $m)) {
$digs = $m[1];
$split = str_split($digs);
return array_sum($split);
} else {
$line = trim(fgets(STDIN)); // reads one line from STDIN
return $line;
}
return '';
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment