banana.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/usr/bin/env python3
  2. import argparse
  3. def dec2banana():
  4. parser = argparse.ArgumentParser(description="Convert dec number to banana")
  5. parser.add_argument("num", help="number to be converted", type=int)
  6. parser.add_argument("--dictionary", help="Set dictionary", type=list, nargs='+', default=[list("bcdfglmnprstvz"), list("aeiou")]) # , list("123456")
  7. parser.add_argument("--exactlength", help="Set exact length", type=int, default=0)
  8. parser.add_argument("--minlength", help="Set minimum length", type=int, default=0)
  9. parser.add_argument("--dictstart", help="Set starting dictionary", type=int, default=0)
  10. parser.add_argument("--shiftend", help="Set shift for ending dictionary", type=int, default=0)
  11. args = parser.parse_args()
  12. dictionary = args.dictionary
  13. numdict = len(dictionary)
  14. minlength = args.minlength
  15. v = args.num
  16. st = ""
  17. l = 0
  18. if args.exactlength == 0:
  19. i = (numdict - 1 + args.dictstart + args.shiftend) % numdict
  20. while not (v == 0 and i == (numdict - 1 + args.dictstart) % numdict and l >= args.minlength):
  21. r = v % len(dictionary[i])
  22. v = int(v / len(dictionary[i]))
  23. st = dictionary[i][r] + st
  24. i = (i - 1) % numdict
  25. l += 1
  26. else:
  27. i = (numdict - 1 + args.dictstart + args.shiftend + args.exactlength) % numdict
  28. while not (l >= args.exactlength):
  29. r = v % len(dictionary[i])
  30. v = int(v / len(dictionary[i]))
  31. st = dictionary[i][r] + st
  32. i = (i - 1) % numdict
  33. l += 1
  34. if v > 0:
  35. print("Error, result longer than exactlength")
  36. return
  37. print(st)
  38. def banana2dec():
  39. parser = argparse.ArgumentParser(description="Convert banana string to dec")
  40. parser.add_argument("banana", help="strin to be converted")
  41. parser.add_argument("--dictionary", help="Set dictionary", type=list, nargs='+', default=[list("bcdfglmnprstvz"), list("aeiou")]) # , list("123456")
  42. parser.add_argument("--dictstart", help="Set starting dictionary", type=int, default=0)
  43. parser.add_argument("--shiftend", help="Set shift for ending dictionary", type=int, default=0)
  44. args = parser.parse_args()
  45. dictionary = args.dictionary
  46. numdict = len(dictionary)
  47. banana = args.banana
  48. v = 0
  49. for i in range(len(banana)):
  50. r = (numdict + i + args.dictstart) % numdict
  51. try:
  52. v = v * len(dictionary[r]) + dictionary[r].index(banana[i])
  53. except:
  54. print("Carattere non valido in posizione", i+1)
  55. return()
  56. print(v)
  57. if __name__ == "__main__":
  58. #dec2banana()
  59. #banana2dec()
  60. print("Ciao sono la libreria banana")