learn-japanese 0.6.1 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9914d80e21c8c34c39ed26df234b08cd46b4c415cc1abf350cd765b7a356213a
4
- data.tar.gz: 31e75a97b121964b1ef3828ea751c82f9897594cba31763f8a9a35b0b96674b1
3
+ metadata.gz: c5265cf2cdc7e5919c77300d3bc624ea0e98dcc64310ebe21b08c343319fee93
4
+ data.tar.gz: ced6eb30b6fba2e4d744bb5015b76619a03335a90bb3a5182bc072c5333b2ce9
5
5
  SHA512:
6
- metadata.gz: 568c67a6f8eb933bad67fc61c47fc0822c6cab94005df74f99bb0ee9415be7556c48faa5060f3dfc970b57bf9cdcaf5ddc16fa439a9baccb697bf701a8bc8059
7
- data.tar.gz: 6f9d1f6b74ad511b674454b9f0638b86cab521bbcb24936d69075205041ec30050fab11e291260eb44f2927be2d42020bdf2fd0e2fa0d1ab83356c917d6748a9
6
+ metadata.gz: 5d43d584404ae0defbb6afc81d6c5c296fff3bf9f7219af373145fc2a298c82ec33b0a9df7752bafab0067bd4272505e5f868961bf146a97fca8554278fd355d
7
+ data.tar.gz: b4bfd549d68de45944a27abc45e21d70f835b7881f85fa55b775a559047c1c3e48391ac89dab431e20539c38a88f6d800d5c15d84de254daa0b62805d760ac15
@@ -11,13 +11,13 @@ class CLI < Thor
11
11
  end
12
12
 
13
13
  map ['ca', '-ca', '--choose-answer', 'choose-answer'] => 'choose_answer'
14
- desc 'choose-answer [LEVEL]', 'LEVEL = 1-4'
14
+ desc 'choose-answer [LEVEL]', 'LEVEL = 1-6'
15
15
  def choose_answer(level)
16
16
  LearnJapanese.choose_answer(level.to_i)
17
17
  end
18
18
 
19
19
  map ['sa', '-sa', '--short-answer', 'short-answer'] => 'short_answer'
20
- desc 'short-answer [LEVEL]', 'LEVEL = 1-4'
20
+ desc 'short-answer [LEVEL]', 'LEVEL = 1-6'
21
21
  def short_answer(level)
22
22
  LearnJapanese.short_answer(level.to_i)
23
23
  end
@@ -27,4 +27,10 @@ class CLI < Thor
27
27
  def sound
28
28
  LearnJapanese.sound
29
29
  end
30
+
31
+ map ['ro', '-ro', '--romanji' ] => 'romaji'
32
+ desc 'romaji', 'Write Romaji for Hiragana word'
33
+ def romaji
34
+ LearnJapanese.romaji
35
+ end
30
36
  end
@@ -0,0 +1,11 @@
1
+
2
+ require 'yaml'
3
+
4
+ module Dictionary
5
+
6
+ def self.words
7
+ filename = File.join(File.dirname(__FILE__), 'words.yaml')
8
+ words = YAML.load(File.read(filename))
9
+ end
10
+
11
+ end
@@ -0,0 +1,115 @@
1
+ require 'colorize'
2
+ require_relative '../debug'
3
+
4
+ # Silabario japonés
5
+ class Hiragana
6
+
7
+ def self.group1
8
+ { a: "\u{3042}",
9
+ i: "\u{3044}",
10
+ u: "\u{3046}",
11
+ e: "\u{3048}",
12
+ o: "\u{304A}"
13
+ }
14
+ end
15
+
16
+ def self.group2
17
+ { ka: "\u{304B}",
18
+ ki: "\u{304D}",
19
+ ku: "\u{304F}",
20
+ ke: "\u{3051}",
21
+ ko: "\u{3053}"
22
+ }
23
+ end
24
+
25
+ def self.group3
26
+ { sa: "\u{3055}",
27
+ shi: "\u{3057}",
28
+ su: "\u{3059}",
29
+ se: "\u{305B}",
30
+ so: "\u{305D}"
31
+ }
32
+ end
33
+
34
+ def self.group4
35
+ { ta: "\u{305F}",
36
+ chi: "\u{3061}",
37
+ tsu: "\u{3064}", # つ
38
+ te: "\u{3066}",
39
+ to: "\u{3068}"
40
+ }
41
+ end
42
+
43
+ def self.group5
44
+ { na: "\u{306A}",
45
+ ni: "\u{306B}",
46
+ nu: "\u{306C}",
47
+ ne: "\u{306D}",
48
+ no: "\u{306E}"
49
+ }
50
+ end
51
+
52
+ def self.group6
53
+ { ha: "\u{306F}",
54
+ hi: "\u{3072}",
55
+ hu: "\u{3075}",
56
+ he: "\u{3078}",
57
+ ho: "\u{307B}"
58
+ }
59
+ end
60
+
61
+ def self.all
62
+ output = self.group1
63
+ output.merge!(self.group2)
64
+ output.merge!(self.group3)
65
+ output.merge!(self.group4)
66
+ output.merge!(self.group5)
67
+ output.merge!(self.group6)
68
+ output
69
+ end
70
+
71
+ def self.groups(levels)
72
+ return self.all if levels == :all
73
+ hiragana = {}
74
+ hiragana.merge! Hiragana.group1 if levels.include? 1
75
+ hiragana.merge! Hiragana.group2 if levels.include? 2
76
+ hiragana.merge! Hiragana.group3 if levels.include? 3
77
+ hiragana.merge! Hiragana.group4 if levels.include? 4
78
+ hiragana.merge! Hiragana.group4 if levels.include? 5
79
+ hiragana.merge! Hiragana.group4 if levels.include? 6
80
+ hiragana
81
+ end
82
+
83
+ def self.sounds_to_hiragana(sounds)
84
+ hiraganas = Hiragana.all
85
+ hiragana_array = sounds.map { hiraganas[_1.to_sym] || '*' }
86
+ hiragana = hiragana_array.join('')
87
+ end
88
+
89
+ def self.hiraganas_to_sound(hiraganas_input)
90
+ all_hiraganas = Hiragana.all
91
+
92
+ sounds_array = hiraganas_input.map do |hiragana_input|
93
+ sound = '*'
94
+ all_hiraganas.each_pair do |key, value|
95
+ sound = key if value == hiragana_input
96
+ end
97
+ sound
98
+ end
99
+
100
+ sounds_array.join('')
101
+ end
102
+
103
+ def self.show_help(level=1)
104
+ Debug.puts_line
105
+ puts "Hiragana help\n".upcase.cyan
106
+
107
+ Debug.puts_group Hiragana.group1
108
+ Debug.puts_group Hiragana.group2 if level > 1
109
+ Debug.puts_group Hiragana.group3 if level > 2
110
+ Debug.puts_group Hiragana.group4 if level > 3
111
+ Debug.puts_group Hiragana.group5 if level > 4
112
+ Debug.puts_group Hiragana.group6 if level > 5
113
+ Debug.puts_group Hiragana.group7 if level > 6
114
+ end
115
+ end
@@ -0,0 +1,36 @@
1
+ group1:
2
+ a: "\u{3042}"
3
+ i: "\u{3044}"
4
+ u: "\u{3046}"
5
+ e: "\u{3048}"
6
+ o: "\u{304A}"
7
+ group2:
8
+ ka: "\u{304B}"
9
+ ki: "\u{304D}"
10
+ ku: "\u{304F}"
11
+ ke: "\u{3051}"
12
+ ko: "\u{3053}"
13
+ group3:
14
+ sa: "\u{3055}"
15
+ shi: "\u{3057}"
16
+ su: "\u{3059}"
17
+ se: "\u{305B}"
18
+ so: "\u{305D}"
19
+ group4:
20
+ ta: "\u{305F}"
21
+ chi: "\u{3061}"
22
+ tsu: "\u{3064}" # つ
23
+ te: "\u{3066}"
24
+ to: "\u{3068}"
25
+ group5:
26
+ na: "\u{306A}"
27
+ ni: "\u{306B}"
28
+ nu: "\u{306C}"
29
+ ne: "\u{306D}"
30
+ no: "\u{306E}"
31
+ group6:
32
+ ha: "\u{306F}"
33
+ hi: "\u{3072}"
34
+ hu: "\u{3075}"
35
+ he: "\u{3078}"
36
+ ho: "\u{307B}"
@@ -4,7 +4,7 @@
4
4
  spanish: amor
5
5
  - sounds: áka
6
6
  hiragana: あか
7
- spanish: rojo)
7
+ spanish: rojo
8
8
  - sounds: áo
9
9
  hiragana: あお
10
10
  spanish: azul
@@ -44,3 +44,6 @@
44
44
  - sounds: áisatsu wo suru
45
45
  hiragana: あいさつをする
46
46
  spanish: saludar
47
+ - sounds: ohayou
48
+ hiragana: おはよう
49
+ spanish: Buenos días (casual)
@@ -15,4 +15,9 @@ class Debug
15
15
  def self.puts_line
16
16
  STDOUT.puts ('=' * 20).white
17
17
  end
18
+
19
+ def self.break
20
+ require 'debug'
21
+ binding.break
22
+ end
18
23
  end
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../debug'
4
- require_relative '../hiragana'
4
+ require_relative '../data/hiragana'
5
5
 
6
6
  class ChooseAnswerGame
7
7
 
@@ -10,10 +10,15 @@ class ChooseAnswerGame
10
10
  @score = 1
11
11
  @max_score = max
12
12
 
13
- @silabario = Hiragana.group1
14
- @silabario.merge! Hiragana.group2 if @level > 1
15
- @silabario.merge! Hiragana.group3 if @level > 2
16
- @silabario.merge! Hiragana.group4 if @level > 3
13
+ #@silabario = Hiragana.group1
14
+ #@silabario.merge! Hiragana.group2 if @level > 1
15
+ #@silabario.merge! Hiragana.group3 if @level > 2
16
+ #@silabario.merge! Hiragana.group4 if @level > 3
17
+ #@silabario.merge! Hiragana.group4 if @level > 4
18
+ #@silabario.merge! Hiragana.group5 if @level > 5
19
+ #@silabario.merge! Hiragana.group6 if @level > 6
20
+ levels = (1..@level).to_a
21
+ @silabario = Hiragana.groups(levels)
17
22
 
18
23
  @keys = @silabario.keys
19
24
  end
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../debug'
4
+ require_relative '../data/dictionary'
5
+
6
+ class RomajiGame
7
+
8
+ def initialize(level=1, max=10)
9
+ @level = level
10
+ @score = 1
11
+ @max_score = max
12
+
13
+ @words = Dictionary.words
14
+ end
15
+
16
+ def run
17
+ Debug.puts_line
18
+ while @score < @max_score
19
+ @words.shuffle!
20
+ guess_romaji(@words.first)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def guess_romaji(data)
27
+ hiragana = data['hiragana']
28
+ spanish = data['spanish']
29
+ sounds = data['sounds']
30
+ progress = "[ #{@score}/#{@max_score} ]"
31
+
32
+ print "#{progress.white} Write Romanji for #{hiragana.light_yellow}: "
33
+ resp = STDIN.gets.chomp
34
+ exit if resp.empty?
35
+
36
+ good = Hiragana.hiraganas_to_sound(hiragana.split(''))
37
+ if resp == good
38
+ @score += 1
39
+ puts ' ' * 9 + "#{spanish} (#{sounds})".white
40
+ return true
41
+ end
42
+ puts "Right answer is #{good}".light_red
43
+ puts ' ' * 9 + "#{spanish} (#{sounds})".red
44
+ false
45
+ end
46
+
47
+ end
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../debug'
4
- require_relative '../hiragana'
4
+ require_relative '../data/hiragana'
5
5
 
6
6
  class ShortAnswerGame
7
7
 
@@ -14,6 +14,8 @@ class ShortAnswerGame
14
14
  @silabario.merge! Hiragana.group2 if @level > 1
15
15
  @silabario.merge! Hiragana.group3 if @level > 2
16
16
  @silabario.merge! Hiragana.group4 if @level > 3
17
+ @silabario.merge! Hiragana.group5 if @level > 4
18
+ @silabario.merge! Hiragana.group6 if @level > 5
17
19
 
18
20
  @keys = @silabario.keys
19
21
  end
@@ -1,19 +1,16 @@
1
1
 
2
- require_relative '../hiragana'
3
- require_relative '../dictionary'
4
- require_relative '../debug'
5
2
  require 'colorize'
3
+ require_relative '../debug'
4
+ require_relative '../data/dictionary'
5
+ require_relative '../data/hiragana'
6
6
 
7
7
  module SoundGame
8
8
 
9
9
  def self.to_hiragana(sounds)
10
- hiraganas = Hiragana.all
10
+ hiragana = Hiragana.sounds_to_hiragana(sounds)
11
11
 
12
- hiragana_array = sounds.map { hiraganas[_1.to_sym] || '*' }
13
- hiragana = hiragana_array.join('')
14
-
15
- none = {'hiragana': hiragana, 'spanish': '?', 'sounds': '?'}
16
- words = Dictionary.new.words
12
+ none = {'hiragana' => hiragana, 'spanish' => '?', 'sounds' => '?'}
13
+ words = Dictionary.words
17
14
  word = (words.select {_1["hiragana"] == hiragana})[0] || none
18
15
 
19
16
  word
@@ -25,10 +22,11 @@ module SoundGame
25
22
  puts "Example: a i => あい (amor - ái)".blue
26
23
  Debug.puts_line
27
24
 
28
- sounds = "init"
29
- until sounds.empty?
25
+ loop do
30
26
  print "\nWrite sounds ? ".light_yellow
31
27
  sounds = STDIN.gets.chomp.split
28
+ return if sounds.empty?
29
+
32
30
  word = self.to_hiragana(sounds)
33
31
  print "Hiragana => ".white
34
32
  puts word["hiragana"]
@@ -1,6 +1,6 @@
1
1
 
2
2
  module LearnJapanese
3
- VERSION = '0.6.1'
3
+ VERSION = '0.8.1'
4
4
  NAME = 'learn-japanese'
5
5
  HOMEPAGE = 'https://github.com/dvarrui/learn-japanese'
6
6
  end
@@ -3,6 +3,7 @@ require_relative 'learn-japanese/version'
3
3
  require_relative 'learn-japanese/game/choose-answer-game'
4
4
  require_relative 'learn-japanese/game/short-answer-game'
5
5
  require_relative 'learn-japanese/game/sound-game'
6
+ require_relative 'learn-japanese/game/romaji-game'
6
7
 
7
8
  module LearnJapanese
8
9
 
@@ -30,4 +31,8 @@ module LearnJapanese
30
31
  def self.sound
31
32
  SoundGame.run
32
33
  end
34
+
35
+ def self.romaji
36
+ RomajiGame.new.run
37
+ end
33
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: learn-japanese
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Vargas Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-19 00:00:00.000000000 Z
11
+ date: 2022-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -41,10 +41,7 @@ dependencies:
41
41
  description:
42
42
  email: dvarrui@protonmail.com
43
43
  executables:
44
- - choose-answer-game
45
44
  - learn-japanese
46
- - short-answer-game
47
- - sounds-to-hiragana
48
45
  extensions: []
49
46
  extra_rdoc_files: []
50
47
  files:
@@ -54,22 +51,21 @@ files:
54
51
  - LICENSE
55
52
  - README.md
56
53
  - Rakefile
57
- - bin/choose-answer-game
58
54
  - bin/learn-japanese
59
- - bin/short-answer-game
60
- - bin/sounds-to-hiragana
61
55
  - examples/01-emoji.rb
62
56
  - examples/02-emoji.rb
63
57
  - learn-japanese.gemspec
64
58
  - lib/learn-japanese.rb
65
59
  - lib/learn-japanese/cli.rb
60
+ - lib/learn-japanese/data/dictionary.rb
61
+ - lib/learn-japanese/data/hiragana.rb
62
+ - lib/learn-japanese/data/hiragana.yaml
66
63
  - lib/learn-japanese/data/words.yaml
67
64
  - lib/learn-japanese/debug.rb
68
- - lib/learn-japanese/dictionary.rb
69
65
  - lib/learn-japanese/game/choose-answer-game.rb
66
+ - lib/learn-japanese/game/romaji-game.rb
70
67
  - lib/learn-japanese/game/short-answer-game.rb
71
68
  - lib/learn-japanese/game/sound-game.rb
72
- - lib/learn-japanese/hiragana.rb
73
69
  - lib/learn-japanese/version.rb
74
70
  homepage: https://github.com/dvarrui/learn-japanese
75
71
  licenses:
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
- require 'learn-japanese/game/choose-answer-game'
5
-
6
- def get_level
7
- level = ARGV.first.to_i
8
-
9
- if level.zero?
10
- name = File.basename(__FILE__)
11
- puts "Usage: #{name} [LEVEL] # LEVEL is [1,2,3,4]"
12
- exit 0
13
- end
14
- level
15
- end
16
-
17
- level = get_level
18
- ChooseAnswerGame.show_help(level)
19
- ChooseAnswerGame.new(level).run
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
- require 'learn-japanese/game/short-answer-game'
5
-
6
- def get_level
7
- level = ARGV.first.to_i
8
-
9
- if level.zero?
10
- name = File.basename(__FILE__)
11
- puts "Usage: #{name} [LEVEL] # LEVEL is [1,2,3,4]"
12
- exit 0
13
- end
14
- level
15
- end
16
-
17
- level = get_level
18
- ShortAnswerGame.show_help(level)
19
- ShortAnswerGame.new(level).run
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
- require 'learn-japanese/game/sound-game'
5
-
6
- SoundGame.run
@@ -1,12 +0,0 @@
1
-
2
- require 'yaml'
3
-
4
- class Dictionary
5
- attr_reader :words
6
-
7
- def initialize()
8
- filename = File.join(File.dirname(__FILE__), 'data', 'words.yaml')
9
- @words = YAML.load(File.read(filename))
10
- end
11
-
12
- end
@@ -1,60 +0,0 @@
1
- require 'colorize'
2
- require_relative 'debug'
3
-
4
- # Silabario japonés
5
- class Hiragana
6
-
7
- def self.group1
8
- { a: "\u{3042}",
9
- i: "\u{3044}",
10
- u: "\u{3046}",
11
- e: "\u{3048}",
12
- o: "\u{304A}"
13
- }
14
- end
15
-
16
- def self.group2
17
- { ka: "\u{304B}",
18
- ki: "\u{304D}",
19
- ku: "\u{304F}",
20
- ke: "\u{3051}",
21
- ko: "\u{3053}"
22
- }
23
- end
24
-
25
- def self.group3
26
- { sa: "\u{3055}",
27
- shi: "\u{3057}",
28
- su: "\u{3059}",
29
- se: "\u{305B}",
30
- so: "\u{305D}"
31
- }
32
- end
33
-
34
- def self.group4
35
- { ta: "\u{305F}",
36
- chi: "\u{3061}",
37
- tsu: "\u{3064}",
38
- te: "\u{3066}",
39
- to: "\u{3068}"
40
- }
41
- end
42
-
43
- def self.all
44
- output = self.group1
45
- output.merge!(self.group2)
46
- output.merge!(self.group3)
47
- output.merge!(self.group4)
48
- output
49
- end
50
-
51
- def self.show_help(level=1)
52
- Debug.puts_line
53
- puts "Hiragana help\n".upcase.cyan
54
-
55
- Debug.puts_group Hiragana.group1
56
- Debug.puts_group Hiragana.group2 if level > 1
57
- Debug.puts_group Hiragana.group3 if level > 2
58
- Debug.puts_group Hiragana.group4 if level > 3
59
- end
60
- end