diff options
author | cynic <admin@cynic.moe> | 2023-09-13 22:24:02 -0500 |
---|---|---|
committer | lolcat <lolcat@no-reply@lolcat.ca> | 2023-09-13 22:24:02 -0500 |
commit | 8762d68466b825382f4708a0eebbd3074e32c5c5 (patch) | |
tree | 11cd604ee79c4b83769b56cc39bb0db137379e97 /oracles/numerics.php | |
parent | d312674df74affb9f22b2a02e54549006f26d056 (diff) |
add structure for `Oracles' (special answers depending on queries + a few implementations (#10)
incl. a calculator, a hash encoder + rot13 and b64!, and a "what time is it" with timezone selection
frontend injected in $payload["left"] in web.php
you can see this live [on my instance](https://4get.silly.computer/web?s=7%2B8(9%5E2)&scraper=brave&nsfw=yes) (there are some issues that aren't related to this PR. favicons, etc. I'll fix them later.)
Reviewed-on: https://git.lolcat.ca/lolcat/4get/pulls/10
Co-authored-by: cynic <admin@cynic.moe>
Co-committed-by: cynic <admin@cynic.moe>
Diffstat (limited to 'oracles/numerics.php')
-rw-r--r-- | oracles/numerics.php | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/oracles/numerics.php b/oracles/numerics.php new file mode 100644 index 0000000..3d428e3 --- /dev/null +++ b/oracles/numerics.php @@ -0,0 +1,54 @@ +<?php +include_once("oracles/base.php"); +class numerics extends oracle { + public $info = [ + "name" => "numeric base conversion" + ]; + public function check_query($q) { + if (str_contains($q, " ")) { + return false; + } + + $q = strtolower($q); + + $profiles = [ + ["0x", str_split("0123456789abcdef")], + ["", str_split("1234567890")], + ["b", str_split("10")] + ]; + + foreach ($profiles as $profile) { + $good = true; + $good &= str_starts_with($q, $profile[0]); + $nq = substr($q, strlen($profile[0])); + foreach (str_split($nq) as $c) { + $good &= in_array($c, $profile[1]); + } + if ($good) { + return true; + } + } + return false; + } + public function generate_response($q) { + $n = 0; + if (str_starts_with($q, "0x")) { + $nq = substr($q, strlen("0x")); + $n = hexdec($nq); + } + elseif (str_starts_with($q, "b")) { + $nq = substr($q, strlen("b")); + $n = bindec($nq); + } + else { + $n = (int)$q; + } + return [ + "decimal (base 10)" => (string)$n, + "hexadecimal (base 16)" => "0x".(string)dechex($n), + "binary (base 2)" => "b".(string)decbin($n), + "" => "binary inputs should be prefixed with 'b', hex with '0x'." + ]; + } +} +?>
\ No newline at end of file |