matsuya 0.4.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/matsuya.rb +101 -134
- data/lib/matsuya/version.rb +1 -1
- data/matsuya.gemspec +3 -4
- metadata +10 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f5e33196b50e272eccb688e82cdf5f662e09cf79b3bd23cc9f932d85be3f70f
|
4
|
+
data.tar.gz: 732d76c421ad0bc5a784f1288ec0c655b502b057606a3944685b357447d54504
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3569bce0e331758aa4d4774f64219045e3f845c974bbd112fe2d4faa174eddc132e6cc3ed6658ddd58aa71422fe1462c5ce7468882989500d4b8e770774efa87
|
7
|
+
data.tar.gz: 10a185d0d0e8743118cc7d9d59e9871bd626f21f09f8a044b35f467c7d3a87120c81c099d9ad9fbf9895df70cc4e4ffa5edbc3396899ffb1893a63cdac896485
|
data/lib/matsuya.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require '
|
2
|
+
|
3
|
+
require 'matsuya/version'
|
4
4
|
require 'set'
|
5
5
|
|
6
6
|
module Matsuya
|
@@ -10,66 +10,65 @@ module Matsuya
|
|
10
10
|
# 松屋に実際にあるメニュー。
|
11
11
|
# 牛めしのようにプレミアムとそうでないものがある場合は、プレミアムだけを書く
|
12
12
|
# オリジナルカレギュウ(プレミアム牛肉使用)も、プレミアムとして扱い、プレミアム牛肉使用と書いていないほうは書かない
|
13
|
-
Sample = Set.new([
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
])
|
13
|
+
Sample = Set.new([Menu.new(%i[プレミアム 牛 めし], 380),
|
14
|
+
Menu.new(%i[ネギ たっぷり プレミアム 旨 辛 ネギ 玉子 牛 めし], 490),
|
15
|
+
Menu.new(%i[プレミアム おろし ポン酢 牛 めし], 480),
|
16
|
+
Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + キムチ], 730),
|
17
|
+
Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + 生野菜 + キムチ], 830),
|
18
|
+
Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + とろろ], 730),
|
19
|
+
Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + 生野菜 + とろろ], 830),
|
20
|
+
Menu.new(%i[創業 牛 カレー], 490), # 創業ビーフカレー
|
21
|
+
Menu.new(%i[創業 牛 カレー + 生野菜], 590),
|
22
|
+
Menu.new(%i[創業 プレミアム 牛 カレー 牛], 720),
|
23
|
+
Menu.new(%i[創業 牛 カレー 牛], 660),
|
24
|
+
Menu.new(%i[創業 ハンバーグ 牛 カレー], 720),
|
25
|
+
Menu.new(%i[味噌漬け トンテキ 丼 + キムチ], 730),
|
26
|
+
Menu.new(%i[味噌漬け トンテキ 丼 + とろろ], 730),
|
27
|
+
Menu.new(%i[味噌漬け トンテキ 丼 + 生野菜 + キムチ], 830),
|
28
|
+
Menu.new(%i[味噌漬け トンテキ 丼 + 生野菜 + とろろ], 830),
|
29
|
+
Menu.new(%i[豚 キムチ 丼], 650),
|
30
|
+
Menu.new(%i[キムチ カルビ 丼], 500),
|
31
|
+
Menu.new(%i[ネギ たっぷり ネギ 塩 豚 肩ロース 丼], 500),
|
32
|
+
Menu.new(%i[ビビンバ 丼], 500),
|
33
|
+
Menu.new(%i[まぐろ 丼 6枚盛], 730),
|
34
|
+
Menu.new(%i[まぐろ 丼 大漁12枚盛], 1000),
|
35
|
+
Menu.new(%i[海老 チリ ソース 定食], 730),
|
36
|
+
Menu.new(%i[海老 チリ ソース 定食 + ポテトサラダ], 790),
|
37
|
+
Menu.new(%i[豚 キムチ 定食], 730),
|
38
|
+
Menu.new(%i[牛 焼肉 定食], 600),
|
39
|
+
Menu.new(%i[カルビ 焼肉 定食], 660),
|
40
|
+
Menu.new(%i[豚 肩ロース 豚 焼肉定食], 600),
|
41
|
+
Menu.new(%i[豚 肩ロース 生姜焼 定食], 660),
|
42
|
+
Menu.new(%i[ブラウン ソース ハンバーグ 定食], 600),
|
43
|
+
Menu.new(%i[ブラウン ソース 玉子 ハンバーグ 定食], 680),
|
44
|
+
Menu.new(%i[プレミアム 牛 皿 + 牛 焼肉], 730),
|
45
|
+
Menu.new(%i[プレミアム 牛 皿 + 牛 焼肉 + 生野菜], 830),
|
46
|
+
Menu.new(%i[プレミアム 牛 皿 + 豚 焼肉], 730),
|
47
|
+
Menu.new(%i[プレミアム 牛 皿 + 豚 焼肉 + 生野菜], 830),
|
48
|
+
Menu.new(%i[プレミアム 牛 皿 + ブラウン ソース ハンバーグ], 730),
|
49
|
+
Menu.new(%i[プレミアム 牛 皿 + ブラウン ソース ハンバーグ + 生野菜], 830),
|
50
|
+
Menu.new(%i[プレミアム 牛 皿 + 焼鮭], 730),
|
51
|
+
Menu.new(%i[プレミアム 牛 皿 + 焼鮭 生野菜], 830),
|
52
|
+
Menu.new(%i[プレミアム 牛 皿 + カルビ 焼肉], 790),
|
53
|
+
Menu.new(%i[プレミアム 牛 皿 + カルビ 焼肉 + 生野菜], 890),
|
54
|
+
Menu.new(%i[プレミアム 牛 皿 + 豚 生姜焼], 790),
|
55
|
+
Menu.new(%i[プレミアム 牛 皿 + 豚 生姜焼 + 生野菜], 890),
|
56
|
+
Menu.new(%i[おこさま プレミアム 牛 めし プレート], 390),
|
57
|
+
Menu.new(%i[おこさま 牛 めし プレート], 390),
|
58
|
+
Menu.new(%i[おこさま カレー プレート], 390),
|
59
|
+
Menu.new(%i[+ おもちゃ], 200),
|
60
|
+
Menu.new(%i[りんご ジュース], 100),
|
61
|
+
Menu.new(%i[ぶっかけ うどん], 320),
|
62
|
+
Menu.new(%i[ぶっかけ うどん + ミニ プレミアム 牛 めし], 620),
|
63
|
+
Menu.new(%i[ぶっかけ うどん + ミニ 創業 カレー], 620),
|
64
|
+
Menu.new(%i[ぶっかけ とろろ 玉子 うどん], 400),
|
65
|
+
Menu.new(%i[ぶっかけ とろろ 玉子 うどん + ミニ プレミアム 牛 めし], 700),
|
66
|
+
Menu.new(%i[ぶっかけ とろろ 玉子 うどん + ミニ 創業 カレー], 700)])
|
68
67
|
|
69
68
|
# 松屋の朝定食
|
70
|
-
Morning = Set.new([
|
71
|
-
|
72
|
-
|
69
|
+
Morning = Set.new([%i[定番 朝 定食],
|
70
|
+
%i[焼鮭 定食],
|
71
|
+
%i[ソーセージ エッグ 定食]])
|
73
72
|
|
74
73
|
# 松屋ネットワーク
|
75
74
|
NetworkNode = Struct.new(:node, :follow) do
|
@@ -78,27 +77,24 @@ module Matsuya
|
|
78
77
|
end
|
79
78
|
end
|
80
79
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
Sample.each do |menu|
|
91
|
-
[:begin, *menu.pattern, menu.price].each_cons(2) do |current, follow|
|
92
|
-
node = dic[current] ||= NetworkNode.new(current, [])
|
93
|
-
if follow.is_a? Symbol
|
94
|
-
node.follow << dic[follow] ||= NetworkNode.new(follow, [])
|
95
|
-
else
|
96
|
-
node.follow << follow
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
dic.values
|
80
|
+
dic = { begin: NetworkNode.new(:begin, []) }
|
81
|
+
Sample.each do |menu|
|
82
|
+
[:begin, *menu.pattern, menu.price].each_cons(2) do |current, follow|
|
83
|
+
node = dic[current] ||= NetworkNode.new(current, [])
|
84
|
+
node.follow << if follow.is_a? Symbol
|
85
|
+
dic[follow] ||= NetworkNode.new(follow, [])
|
86
|
+
else
|
87
|
+
follow
|
88
|
+
end
|
101
89
|
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# 松屋ネットワークを構築し、始点を返す。
|
93
|
+
NETWORK = dic.values
|
94
|
+
|
95
|
+
class << self
|
96
|
+
# 互換性のため
|
97
|
+
def network = NETWORK
|
102
98
|
|
103
99
|
# お客様に提供する商品を作る。私は接客は不得意なので、ランダムなものが出てくる。
|
104
100
|
# おかの値が1に近づくほど狂った商品が出てくる。
|
@@ -109,11 +105,11 @@ module Matsuya
|
|
109
105
|
# Matsuya::NetworkNode 再帰呼出し用。省略する。
|
110
106
|
# ==== Return
|
111
107
|
# Array 材料を並べた配列
|
112
|
-
def generate(okano: 0.1, current:
|
108
|
+
def generate(okano: 0.1, current: NETWORK.find { |n| n.node == :begin })
|
113
109
|
if current.is_a? NetworkNode
|
114
110
|
nex = current.follow.sample
|
115
|
-
if nex.is_a?(NetworkNode)
|
116
|
-
[current.node, *generate(okano: okano, current:
|
111
|
+
if nex.is_a?(NetworkNode) && (rand < okano)
|
112
|
+
[current.node, *generate(okano: okano, current: NETWORK.sample)]
|
117
113
|
else
|
118
114
|
[current.node, *generate(okano: okano, current: nex)]
|
119
115
|
end
|
@@ -122,75 +118,46 @@ module Matsuya
|
|
122
118
|
|
123
119
|
# 材料を選択したら釜に入れてぐーるぐーる。
|
124
120
|
# キムカル丼のように、『キムチ+カルビ』がキムカルに変化するなど、松屋活用を考慮して
|
125
|
-
# Matsuya.generate
|
121
|
+
# Matsuya.generate の戻り値を加工する
|
126
122
|
# ==== Args
|
127
123
|
# [dish] Array 現在の皿の状態
|
128
124
|
# ==== Return
|
129
|
-
# String できたー!どの特性を残そう?
|
125
|
+
# Array<String> できたー!どの特性を残そう?
|
130
126
|
def preparation(dish)
|
131
|
-
|
132
|
-
|
127
|
+
case dish
|
128
|
+
in *head, :+, *tail
|
133
129
|
[head, :' ', tail, :セット]
|
134
|
-
|
135
|
-
|
136
|
-
with(Egison::List.(*_head, :キムチ, :カルビ, *_tail)) do
|
130
|
+
in *head, :キムチ, :カルビ, *tail
|
137
131
|
[head, :キムカル, tail]
|
138
|
-
|
139
|
-
|
140
|
-
with(Egison::List.(*_head, :創業, :牛, *_tail)) do
|
132
|
+
in *head, :創業, :牛, *tail
|
141
133
|
[head, :創業ビーフ, tail]
|
142
|
-
|
143
|
-
|
144
|
-
with(Egison::List.(*_head, :創業, :プレミアム, :牛, *_tail)) do
|
134
|
+
in *head, :創業, :プレミアム, :牛, *tail
|
145
135
|
[head, :創業プレミアムビーフ, tail]
|
146
|
-
|
147
|
-
|
148
|
-
with(Egison::List.(*_head, :牛, :カレー, *_tail)) do
|
136
|
+
in *head, :牛, :カレー, *tail
|
149
137
|
[head, :ビーフカレー, tail]
|
150
|
-
|
151
|
-
|
152
|
-
with(Egison::List.(*_head, :ビビンバ, :丼, *_tail)) do
|
138
|
+
in *head, :ビビンバ, :丼, *tail
|
153
139
|
[head, :ビビン丼, tail]
|
154
|
-
|
155
|
-
|
156
|
-
with(Egison::List.(*_head, :海老, :チリ, *_tail)) do
|
140
|
+
in *head, :海老, :チリ, *tail
|
157
141
|
[head, :海老のチリ, tail]
|
158
|
-
|
159
|
-
|
160
|
-
with(Egison::List.(*_head, *%i[豚 肩ロース 豚 焼肉定食], *_tail)) do
|
142
|
+
in *head, :豚, :肩ロース, :豚, :焼肉定食, *tail
|
161
143
|
[head, :豚, :肩ロース, :の, :豚, :焼肉定食, tail]
|
162
|
-
|
163
|
-
|
164
|
-
with(Egison::List.(*_head, *%i[豚 肩ロース 生姜焼 定食], *_tail)) do
|
144
|
+
in *head, :豚, :肩ロース, :生姜焼, :定食, *tail
|
165
145
|
[head, :豚, :肩ロース, :の, :生姜焼, :定食, tail]
|
166
|
-
|
167
|
-
|
168
|
-
with(Egison::List.(*_head, :玉子, :ハンバーグ, *_tail)) do
|
146
|
+
in *head, :玉子, :ハンバーグ, *tail
|
169
147
|
[head, :エッグ, :ハンバーグ, tail]
|
170
|
-
|
171
|
-
|
172
|
-
with(Egison::List.(*_head, :ネギ, :玉子, *_tail)) do
|
148
|
+
in *head, :ネギ, :玉子, *tail
|
173
149
|
[head, :ネギたま, tail]
|
174
|
-
|
175
|
-
|
176
|
-
with(Egison::List.(*_head, :とろろ, :玉子, *_tail)) do
|
150
|
+
in *head, :とろろ, :玉子, *tail
|
177
151
|
[head, :とろたま, tail]
|
178
|
-
|
179
|
-
|
180
|
-
with(Egison::List.(*_head, :カレー, :牛, *_tail)) do
|
152
|
+
in *head, :カレー, :牛, *tail
|
181
153
|
[head, :カレギュウ, tail]
|
182
|
-
|
183
|
-
|
184
|
-
with(Egison::List.(*_head, :ハンバーグ, :皿, *_tail)) do
|
154
|
+
in *head, :ハンバーグ, :皿, *tail
|
185
155
|
[head, :バーグディッシュ, tail]
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
end
|
156
|
+
else
|
157
|
+
dish
|
158
|
+
end.flat_map do |node|
|
159
|
+
if node.is_a? Array then preparation(node) else node end
|
191
160
|
end
|
192
|
-
.map{|node| if node.is_a? Array then preparation(node) else node end }
|
193
|
-
.flatten
|
194
161
|
end
|
195
162
|
|
196
163
|
# 商品を注文し、商品を受け取る
|
@@ -200,7 +167,7 @@ module Matsuya
|
|
200
167
|
# ==== Return
|
201
168
|
# String 商品名
|
202
169
|
def order(okano: 0.1)
|
203
|
-
preparation(generate(okano: okano).reject{
|
170
|
+
preparation(generate(okano: okano).reject { _1 == :begin }).join
|
204
171
|
end
|
205
172
|
end
|
206
173
|
end
|
data/lib/matsuya/version.rb
CHANGED
data/matsuya.gemspec
CHANGED
@@ -18,9 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.required_ruby_version = '>=
|
21
|
+
spec.required_ruby_version = '>= 3.0'
|
22
22
|
|
23
|
-
spec.add_development_dependency "bundler"
|
24
|
-
spec.add_development_dependency "rake"
|
25
|
-
spec.add_dependency "egison", "~> 1.0"
|
23
|
+
spec.add_development_dependency "bundler"
|
24
|
+
spec.add_development_dependency "rake"
|
26
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: matsuya
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Toshiaki Asai
|
@@ -14,44 +14,30 @@ dependencies:
|
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: egison
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.0'
|
40
|
+
version: '0'
|
55
41
|
description: Generate Okanic Matsuya food.
|
56
42
|
email:
|
57
43
|
- toshi.alternative@gmail.com
|
@@ -81,7 +67,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
67
|
requirements:
|
82
68
|
- - ">="
|
83
69
|
- !ruby/object:Gem::Version
|
84
|
-
version: '
|
70
|
+
version: '3.0'
|
85
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
73
|
- - ">="
|