From 6deb9e1bf7bf9a5a219e434f5ef3027a9dbef9f1 Mon Sep 17 00:00:00 2001 From: Cameron Ball Date: Tue, 20 Nov 2018 17:03:24 +0800 Subject: [PATCH] Starting to refactor purjolok WIP --- common.php | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ purjolok.php | 23 ++++++++++------------- 2 files changed, 71 insertions(+), 13 deletions(-) diff --git a/common.php b/common.php index a32339d..e5424ae 100644 --- a/common.php +++ b/common.php @@ -66,6 +66,19 @@ function formatDate($date) { return $date->format(DATE_FORMAT); } +function ssort($comparitor) { + return function($array) use ($comparitor) { + uasort($array, uncurry($comparitor)); + return $array; + }; +} + +function uncurry($f) { + return function($a, $b) use ($f) { + return $f($a)($b); + }; +} + const sendToGroupChat = 'sendToGroupChat'; function sendToGroupChat(string $message) { return getTelegram()->sendMessage(['chat_id' => CHAT_ID, 'text' => $message]); @@ -86,6 +99,24 @@ function messageNeedsReminder($message) { return $message['due']->diff(new DateTimeImmutable)->d == REMIND_THRESHOLD; } +const unlines = 'unlines'; +function unlines($lines) { + return implode("\n", $lines); +} + +function field($field) { + return function($array) use ($field) { + return $array[$field]; + }; +} + +const ⬄ = '⬄'; +function ⬄($a) { + return function($b) use ($a) { + return $a <=> $b; + }; +} + function ∘(...$fs) { return function($arg) use ($fs) { @@ -101,12 +132,42 @@ function map($callable) { }; } +function aaray_column($column) { + return function($array) use ($column) { + return array_column($array, $column); + }; +} + +function aaray_slice($start) { + return function($length) use ($start) { + return function($array) use ($length, $start) { + return array_slice($array, $start, $length); + }; + }; +} + function filter($callable) { return function($list) use ($callable) { return array_filter($list, $callable); }; } +function f∘(callable $f) { + return function(callable $g) use ($f) { + return function($arg) use($g, $f) { + return $f($g($arg)); + }; + }; +} + +function ∘f(callable $f) { + return function(callable $g) use ($f) { + return function($arg) use($g, $f) { + return $g($f($arg)); + }; + }; +} + function ∪($a, $b) { return array_merge($a, $b); } diff --git a/purjolok.php b/purjolok.php index 185da44..4566cea 100644 --- a/purjolok.php +++ b/purjolok.php @@ -19,20 +19,17 @@ getTelegram()->addCommand( protected $description = 'Search through the movie collection'; public function handle($arguments) { - $results = array_map( - function($moviename) use ($arguments) { - similar_text($arguments, substr($moviename, 0, -7) ?: '', $perc); - return ['title' => $moviename, 'similarity' => $perc]; - }, - scandir('/mnt/media/Movies') + $top5 = ∘(unlines, aaray_column('title'), aaray_slice(0)(5), 'array_reverse', 'array_values', ssort(∘(∘f(field('similarity')), ⬄, field('similarity')))); + $movies = map(function($movie) use ($arguments) { + similar_text($arguments, substr($movie, 0, -7) ?: '', $perc); + return ['title' => $movie, 'similarity' => $perc]; + })(scandir('/mnt/media/Movies')); + + $this->replyWithMessage( + [ + 'text' => "Here are the most similar movies titles I could find...\n\n" . $top5($movies) + ] ); - - uasort($results, function($a, $b) { - return $b['similarity'] <=> $a['similarity']; - }); - - $results = array_column(array_slice(array_values($results), 0, 5), 'title'); - $this->replyWithMessage(['text' => "Here are the most similar movies titles I could find...\n\n" . implode("\n", $results)]); } } ); -- 2.11.0