summaryrefslogtreecommitdiff
path: root/oracles/numerics.php
diff options
context:
space:
mode:
Diffstat (limited to 'oracles/numerics.php')
-rw-r--r--oracles/numerics.php54
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