banana.lua 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/lua
  2. function bananaencode(num, minlength)
  3. minlength = minlength or 1
  4. alphabets = {{"b","c","d","f","g","l","m","n","p","r","s","t","v","z"}, {"a","e","i","o","u"}};
  5. shiftalpha = 0
  6. alphaend = 0
  7. numalpha = #alphabets
  8. v = num
  9. st = ""
  10. length = 0
  11. idx = (numalpha - 1 + shiftalpha + alphaend) % numalpha
  12. while (not (v == 0 and idx == (numalpha - 1 + shiftalpha) % numalpha and length >= minlength))
  13. do
  14. al = alphabets[idx + 1]
  15. r = v % #al
  16. v = math.floor(v / #al)
  17. st = al[r + 1] .. st
  18. idx = (idx + numalpha - 1) % numalpha;
  19. length = length + 1
  20. end
  21. return st
  22. end
  23. function bananarandom(minlength)
  24. minlength = minlength or 6
  25. math.randomseed(os.clock()*100000000000)
  26. alphabets = {{"b","c","d","f","g","l","m","n","p","r","s","t","v","z"}, {"a","e","i","o","u"}};
  27. shiftalpha = 0
  28. alphaend = 0
  29. numalpha = #alphabets
  30. st = ""
  31. if minlength < 1 then return "" end
  32. curr_alpha = (numalpha - 1 + shiftalpha + alphaend) % numalpha
  33. final_alpha = (numalpha - 1 + shiftalpha) % numalpha
  34. while (curr_alpha ~= final_alpha or #st < minlength)
  35. do
  36. al = alphabets[curr_alpha + 1];
  37. st = al[math.floor(math.random() * #al + 1)] .. st
  38. curr_alpha = (curr_alpha + numalpha - 1) % numalpha
  39. end
  40. return st
  41. end
  42. print(bananaencode(5000))
  43. print(bananaencode(10000))
  44. print(bananaencode(1000, 8))
  45. print(bananarandom())
  46. print(bananarandom(10))