about summary refs log tree commit diff
path: root/daily/305easy/permbase.pas
diff options
context:
space:
mode:
Diffstat (limited to 'daily/305easy/permbase.pas')
-rw-r--r--daily/305easy/permbase.pas50
1 files changed, 50 insertions, 0 deletions
diff --git a/daily/305easy/permbase.pas b/daily/305easy/permbase.pas
new file mode 100644
index 0000000..5513a77
--- /dev/null
+++ b/daily/305easy/permbase.pas
@@ -0,0 +1,50 @@
+uses math, strutils, sysutils;
+
+var
+  inv: string;
+  b: byte;
+  n: string;
+
+
+function permbase(
+  base: byte;
+  index: longint
+): string;
+
+  var
+    i: byte = 1;
+
+  begin
+    while base ** i <= index do
+      begin
+        index := index - base ** i;
+        inc(i)
+      end;
+    permbase := dec2numb(index, i, base)
+  end;
+
+
+function invpermbase(
+  base: byte;
+  value: string
+): longint;
+
+  begin
+    invpermbase := (base ** length(value) - base) div (base - 1) +
+                   numb2dec(value, base)
+  end;
+
+begin
+  (*
+   * Input format:
+   * <invert?>
+   * <base> <value>
+   *)
+  readln(inv);
+  readln(b, n);
+  n := delspace(n);
+  if strtobool(inv) then
+    writeln(invpermbase(b, n))
+  else
+    writeln(permbase(b, strtoint(n)))
+end.