Guest User

Untitled

a guest
Oct 23rd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2.  
  3. require 'optparse'
  4.  
  5. TibetanAlpha =
  6. [%w[ཀ ཁ ག ང],
  7. %w[ཅ ཆ ཇ ཉ],
  8. %w[ཏ ཐ ད ན],
  9. %w[པ ཕ བ མ],
  10. %w[ཙ ཚ ཛ ཝ],
  11. %w[ཞ ཟ འ ཡ],
  12. %w[ར ལ ཤ ས],
  13. %w[ཧ ཨ]]
  14.  
  15. TibetanPhonoHu =
  16. [%w[k kh g ng],
  17. %w[cs csh dzs ny],
  18. %w[t th d n],
  19. %w[p ph b m],
  20. %w[c ch dz v],
  21. %w[zs z a j],
  22. %w[r l s sz],
  23. %w[h A]]
  24.  
  25. TibetanPhonoEn =
  26. [%w[k kh g ng],
  27. %w[c ch j ny],
  28. %w[t th d n],
  29. %w[p ph b m],
  30. %w[ts tsh dz w],
  31. %w[zh z ' y],
  32. %w[r l sh s],
  33. %w[h a]]
  34.  
  35.  
  36. if __FILE__ == $0
  37.  
  38. iter = false
  39. show = false
  40. lang = "en"
  41. OptionParser.new do |op|
  42. op.on("-n", "--iter N", Integer) { |n| iter = n }
  43. op.on("-s", "--show") { show = true }
  44. op.on("-l", "--lang L") { |l| lang = l }
  45. end.parse!
  46.  
  47. TibetanPhono = self.class.const_get("TibetanPhono" + lang.capitalize)
  48. TibetanPhonoMap = [TibetanAlpha, TibetanPhono].map(&:flatten).transpose.to_h
  49.  
  50. if show
  51. TibetanAlpha.zip(TibetanPhono).each do |ta,la|
  52. puts ta.zip(la).map { |t,l| "#{t}: #{l}" }.join(", ")
  53. end
  54. exit
  55. end
  56.  
  57. # clear the terminal
  58. print "\33[H\33[J"
  59. results = %i[hits misses passes].instance_eval do
  60. zip(map{[]}).to_h
  61. end
  62. passes = []
  63. misses = []
  64. tmap = TibetanPhonoMap.dup
  65. puts (catch :done do
  66. (iter || TibetanPhonoMap.size).downto(1) do |i|
  67. l = tmap.keys.sample
  68. v = tmap.send(iter ? :fetch : :delete, l)
  69. puts "#{i}. #{l}"
  70. belongs_to = :hits
  71. loop {
  72. u = STDIN.gets.strip
  73. case u
  74. when "?"
  75. puts v
  76. belongs_to = :passes
  77. break
  78. when ""
  79. puts "press enter once more if you really want to exit."
  80. if STDIN.gets =~ /^$/
  81. throw :done
  82. else
  83. next
  84. end
  85. end
  86. unless TibetanPhonoMap.each_value.include? u
  87. puts "no such letter, I assume it's a typo."
  88. next
  89. end
  90. if p(u == v)
  91. break
  92. else
  93. belongs_to = :misses
  94. end
  95. }
  96. results[belongs_to] << l
  97. puts
  98. end
  99. "done!"
  100. end)
  101.  
  102. puts "hits: #{results[:hits].size}/#{results.each_value.map(&:size).inject(&:+)}"
  103. %i[passes misses].each do |t|
  104. a = results[t]
  105. unless a.empty?
  106. puts "you had #{a.size} #{t}, namely: #{a.map { |l| "#{l}: #{TibetanPhonoMap[l]}" }.join ", "}"
  107. end
  108. end
  109.  
  110. end
Add Comment
Please, Sign In to add comment