PageRenderTime 54ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/Task/Anagrams/M4/anagrams.m4

https://github.com/aayushKumarJarvis/RosettaCodeData
m4 | 46 lines | 46 code | 0 blank | 0 comment | 0 complexity | 22fe061053c70aebe3df14d01a1b8fa2 MD5 | raw file
  1. divert(-1)
  2. changequote(`[',`]')
  3. define([for],
  4. [ifelse($#,0,[[$0]],
  5. [ifelse(eval($2<=$3),1,
  6. [pushdef([$1],$2)$4[]popdef([$1])$0([$1],incr($2),$3,[$4])])])])
  7. define([_bar],include(t.txt))
  8. define([eachlineA],
  9. [ifelse(eval($2>0),1,
  10. [$3(substr([$1],0,$2))[]eachline(substr([$1],incr($2)),[$3])])])
  11. define([eachline],[eachlineA([$1],index($1,[
  12. ]),[$2])])
  13. define([removefirst],
  14. [substr([$1],0,$2)[]substr([$1],incr($2))])
  15. define([checkfirst],
  16. [ifelse(eval(index([$2],substr([$1],0,1))<0),1,
  17. 0,
  18. [ispermutation(substr([$1],1),
  19. removefirst([$2],index([$2],substr([$1],0,1))))])])
  20. define([ispermutation],
  21. [ifelse([$1],[$2],1,
  22. eval(len([$1])!=len([$2])),1,0,
  23. len([$1]),0,0,
  24. [checkfirst([$1],[$2])])])
  25. define([_set],[define($1<$2>,$3)])
  26. define([_get],[defn([$1<$2>])])
  27. define([_max],1)
  28. define([_n],0)
  29. define([matchj],
  30. [_set([count],$2,incr(_get([count],$2)))[]ifelse(eval(_get([count],$2)>_max),
  31. 1,[define([_max],incr(_max))])[]_set([list],$2,[_get([list],$2) $1])])
  32. define([checkwordj],
  33. [ifelse(ispermutation([$1],_get([word],$2)),1,[matchj([$1],$2)],
  34. [addwordj([$1],incr($2))])])
  35. define([_append],
  36. [_set([word],_n,[$1])[]_set([count],_n,1)[]_set([list],_n,
  37. [$1 ])[]define([_n],incr(_n))])
  38. define([addwordj],
  39. [ifelse($2,_n,[_append([$1])],[checkwordj([$1],$2)])])
  40. define([addword],
  41. [addwordj([$1],0)])
  42. divert
  43. eachline(_bar,[addword])
  44. _max
  45. for([x],1,_n,[ifelse(_get([count],x),_max,[_get([list],x)
  46. ])])