fork download
  1. # main.rb
  2. #!ruby
  3. # -*- encoding: UTF-8 -*-
  4.  
  5. STDOUT.set_encoding( Encoding.locale_charmap, Encoding::UTF_8 )
  6. STDERR.set_encoding( Encoding.locale_charmap, Encoding::UTF_8 )
  7.  
  8. Home_path = File.dirname(File.expand_path( __FILE__ )).encode(Encoding::UTF_8)
  9. Dir.chdir( Home_path )
  10.  
  11. =begin
  12.  
  13. プログラミングのお題スレ Part19
  14. 582 蟻人間 ◆T6xkBnTXz7B0 2021/04/10(土) 19:40:12.57 ID:Sahzdf8n
  15. お題: かなとアルファベットと数字からなる文字列をモールス信号に変換するプログラム。ただし、長音を「-」、短音を「・」で表し、モールス信号に変換できない文字は下駄文字(〓)に置き換える。全角・半角の両方に対応すること。
  16.  
  17. -----
  18.  
  19. 無音が規定されていないので、1短音と同じ長さの無音を ','で表す。(モールス符号でなく信号モールス信号だから)
  20. # 長音短音間は 1短音分の無音
  21. # 文字間は 3短音分の無音
  22. # 単語間は 7短音分の無音
  23.  
  24. 和文の単語間も欧文同様 ' 'での分かち書きを想定。
  25.  
  26. =end
  27.  
  28. =begin
  29.  
  30. 585 デフォルトの名無しさん 2021/04/11(日) 18:30:35.89 ID:b01EJxrZ
  31. お題
  32. >>582と同じでモールス信号作成。但し、定義ファイルに文字ごとに対応する信号を入れておきそれを指定して動く方式。(これにより言語が関係なくなる)。
  33. 日本語用定義ファイルを指定して動かせばそれに従って日本語での変換が行われ、英語用のを指定すれば英語での変換になるようにする。
  34.  
  35. プログラムと定義ファイルを最低一つ作ること。定義ファイルの内容は定義に従って正しく変換がされるかの確認が出来る程度で良い(例えば数字の変換だけでも良い)。
  36.  
  37. 586 デフォルトの名無しさん 2021/04/11(日) 18:33:36.97 ID:b01EJxrZ
  38. 定義ファイルのエンコードはご自由に。でも UTF-8 にしておくとあちこちで使えて良いかも知れない。(Javaとか自動変換してくれるやつだと漢字も1文字扱い出来て楽だし)。
  39. =end
  40.  
  41. m_type = gets.strip.downcase
  42. str = gets.chomp
  43. require_relative "./morse_#{m_type}"
  44.  
  45. puts " locate : #{m_type}"
  46. puts " message : '#{str}'"
  47. puts morse( str )
  48. ---
  49. # morse_en.rb
  50. #!ruby
  51. # -*- encoding: UTF-8 -*-
  52.  
  53. def morse( str )
  54. str.unicode_normalize!( :nfc )
  55. str.tr!( '0-9A-Za-za-z ', '0-9A-ZA-ZA-Z ' )
  56.  
  57. morse = ''
  58. str.each_char{|ch|
  59. morse += case ch
  60. when 'A'; '・-'
  61. when 'B'; '-・・・'
  62. when 'C'; '-・-・'
  63. when 'D'; '-・・'
  64. when 'E'; '・'
  65. when 'F'; '・・-・'
  66. when 'G'; '--・'
  67. when 'H'; '・・・・'
  68. when 'I'; '・・'
  69. when 'J'; '・---'
  70. when 'K'; '-・-'
  71. when 'L'; '・-・・'
  72. when 'M'; '--'
  73. when 'N'; '-・'
  74. when 'O'; '---'
  75. when 'P'; '・--・'
  76. when 'Q'; '--・-'
  77. when 'R'; '・-・'
  78. when 'S'; '・・・'
  79. when 'T'; '-'
  80. when 'U'; '・・-'
  81. when 'V'; '・・・-'
  82. when 'W'; '・--'
  83. when 'X'; '-・・-'
  84. when 'Y'; '-・--'
  85. when 'Z'; '--・・'
  86.  
  87. when '1'; '・----'
  88. when '2'; '・・---'
  89. when '3'; '・・・--'
  90. when '4'; '・・・・-'
  91. when '5'; '・・・・・'
  92. when '6'; '-・・・・'
  93. when '7'; '--・・・'
  94. when '8'; '---・・'
  95. when '9'; '----・'
  96. when '0'; '-----'
  97.  
  98. when ' '; ''
  99. else "〓"
  100. end.chars.join(',')
  101. morse += ',' if ch == ' '
  102. morse += ',,,'
  103. }
  104.  
  105. morse.sub( /[\s,]+$/, '' )
  106. end
  107. ---
  108. # morse_jp.rb
  109. #!ruby
  110. # -*- encoding: UTF-8 -*-
  111.  
  112. def morse( str )
  113. str.unicode_normalize!( :nfc )
  114. str.tr!( 'ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚', 'をぁぃぅぇぉゃゅょっーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜' )
  115. str.tr!( '0-9ぁ-ん ', '0-9ァ-ン ' )
  116. str.tr!( 'ァィゥェォヵヶッャュョ', 'アイウエオカケツヤユヨ' )
  117.  
  118. morse = ''
  119. str.each_char{|ch|
  120. morse += case ch
  121. when '1'; '・----'
  122. when '2'; '・・---'
  123. when '3'; '・・・--'
  124. when '4'; '・・・・-'
  125. when '5'; '・・・・・'
  126. when '6'; '-・・・・'
  127. when '7'; '--・・・'
  128. when '8'; '---・・'
  129. when '9'; '----・'
  130. when '0'; '-----'
  131.  
  132. when 'イ'; '・-'
  133. when 'ロ'; '・-・-'
  134. when 'ハ'; '-・・・'
  135. when 'ニ'; '-・-・'
  136. when 'ホ'; '-・・'
  137. when 'ヘ'; '・'
  138. when 'ト'; '・・-・・'
  139. when 'チ'; '・・-・'
  140. when 'リ'; '--・'
  141. when 'ヌ'; '・・・・'
  142. when 'ル'; '-・--・'
  143. when 'ヲ'; '・---'
  144. when 'ワ'; '-・-'
  145. when 'カ'; '・-・・'
  146. when 'ヨ'; '--'
  147. when 'タ'; '-・'
  148. when 'レ'; '---'
  149. when 'ソ'; '---・'
  150. when 'ツ'; '・--・'
  151. when 'ネ'; '--・-'
  152. when 'ナ'; '・-・'
  153. when 'ラ'; '・・・'
  154. when 'ム'; '-'
  155. when 'ウ'; '・・-'
  156. when 'ヰ'; '・-・・-'
  157. when 'ノ'; '・・--'
  158. when 'オ'; '・-・・・'
  159. when 'ク'; '・・・-'
  160. when 'ヤ'; '・--'
  161. when 'マ'; '-・・-'
  162. when 'ケ'; '-・--'
  163. when 'フ'; '--・・'
  164. when 'コ'; '----'
  165. when 'エ'; '-・---'
  166. when 'テ'; '・-・--'
  167. when 'ア'; '--・--'
  168. when 'サ'; '-・-・-'
  169. when 'キ'; '-・-・・'
  170. when 'ユ'; '-・・--'
  171. when 'メ'; '-・・・-'
  172. when 'ミ'; '・・-・-'
  173. when 'シ'; '--・-・'
  174. when 'ヱ'; '・--・・'
  175. when 'ヒ'; '--・・-'
  176. when 'モ'; '-・・-・'
  177. when 'セ'; '・---・'
  178. when 'ス'; '---・-'
  179. when 'ン'; '・-・-・'
  180. when '゛'; '・・'
  181. when '゜'; '・・--・'
  182. when 'ー'; '・--・-'
  183. when '、'; '・-・-・-'
  184. when '」'; '・-・-・・'
  185. when '('; '-・--・-'
  186. when ')'; '・-・・-・'
  187.  
  188. when ' '; ''
  189. else "〓"
  190. end.chars.join(',')
  191. morse += ',' if ch == ' '
  192. morse += ',,,'
  193. }
  194.  
  195. morse.sub( /[\s,]+$/, '' )
  196. end
  197. ---
  198. # test_morae1.txt
  199. en
  200. Hello morse
  201. ---
  202. # test_morae2.txt
  203. jp
  204. もしもし モールス
  205. ---
  206. $ Console
  207. > main.rb < test_morae1.txt
  208. > main.rb < test_morae2.txt
  209.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty