about summary refs log tree commit diff
path: root/daily/305easy/permbase.pas
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2017-03-14 10:23:43 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2017-03-14 10:23:43 +0700
commit69a50f40bea8f04c2d2b1715dad5ea8c7d6ef507 (patch)
treef51905a868a94fa6eac79f5a6d6ec5aceb139f42 /daily/305easy/permbase.pas
parent2468c60b00b200b24a383ecc0fdc5d3cf8721b9f (diff)
downloadcp-69a50f40bea8f04c2d2b1715dad5ea8c7d6ef507.tar.gz
Add /r/dailyprogrammer Challenge #305
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.