matsuya 0.2.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Rakefile +7 -0
- data/lib/matsuya.rb +116 -79
- data/lib/matsuya/version.rb +1 -1
- data/matsuya.gemspec +3 -4
- metadata +16 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
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/Rakefile
CHANGED
@@ -1,2 +1,9 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
|
3
|
+
task :graph do
|
4
|
+
require 'matsuya'
|
5
|
+
puts 'digraph matsuya {'
|
6
|
+
#puts Matsuya::Sample.map{|m| 'begin -> ' + m.pattern.join(' -> ') + ' -> end;' }.join("\n")
|
7
|
+
puts Matsuya::Sample.map{|m| [:begin, *m.pattern, :end].each_cons(2).map{|a,b| " \"#{a}\" -> \"#{b}\";" } }.flatten.uniq.join("\n")
|
8
|
+
puts '}'
|
9
|
+
end
|
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,28 +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
|
-
|
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)])
|
67
|
+
|
68
|
+
# 松屋の朝定食
|
69
|
+
Morning = Set.new([%i[定番 朝 定食],
|
70
|
+
%i[焼鮭 定食],
|
71
|
+
%i[ソーセージ エッグ 定食]])
|
35
72
|
|
36
73
|
# 松屋ネットワーク
|
37
74
|
NetworkNode = Struct.new(:node, :follow) do
|
@@ -40,27 +77,24 @@ module Matsuya
|
|
40
77
|
end
|
41
78
|
end
|
42
79
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
Sample.each do |menu|
|
53
|
-
[:begin, *menu.pattern, menu.price].each_cons(2) do |current, follow|
|
54
|
-
node = dic[current] ||= NetworkNode.new(current, [])
|
55
|
-
if follow.is_a? Symbol
|
56
|
-
node.follow << dic[follow] ||= NetworkNode.new(follow, [])
|
57
|
-
else
|
58
|
-
node.follow << follow
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
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
|
63
89
|
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# 松屋ネットワークを構築し、始点を返す。
|
93
|
+
NETWORK = dic.values
|
94
|
+
|
95
|
+
class << self
|
96
|
+
# 互換性のため
|
97
|
+
def network = NETWORK
|
64
98
|
|
65
99
|
# お客様に提供する商品を作る。私は接客は不得意なので、ランダムなものが出てくる。
|
66
100
|
# おかの値が1に近づくほど狂った商品が出てくる。
|
@@ -71,11 +105,11 @@ module Matsuya
|
|
71
105
|
# Matsuya::NetworkNode 再帰呼出し用。省略する。
|
72
106
|
# ==== Return
|
73
107
|
# Array 材料を並べた配列
|
74
|
-
def generate(okano: 0.1, current:
|
108
|
+
def generate(okano: 0.1, current: NETWORK.find { |n| n.node == :begin })
|
75
109
|
if current.is_a? NetworkNode
|
76
110
|
nex = current.follow.sample
|
77
|
-
if nex.is_a?(NetworkNode)
|
78
|
-
[current.node, *generate(okano: okano, current:
|
111
|
+
if nex.is_a?(NetworkNode) && (rand < okano)
|
112
|
+
[current.node, *generate(okano: okano, current: NETWORK.sample)]
|
79
113
|
else
|
80
114
|
[current.node, *generate(okano: okano, current: nex)]
|
81
115
|
end
|
@@ -84,43 +118,46 @@ module Matsuya
|
|
84
118
|
|
85
119
|
# 材料を選択したら釜に入れてぐーるぐーる。
|
86
120
|
# キムカル丼のように、『キムチ+カルビ』がキムカルに変化するなど、松屋活用を考慮して
|
87
|
-
# Matsuya.generate
|
121
|
+
# Matsuya.generate の戻り値を加工する
|
88
122
|
# ==== Args
|
89
123
|
# [dish] Array 現在の皿の状態
|
90
124
|
# ==== Return
|
91
|
-
# String できたー!どの特性を残そう?
|
125
|
+
# Array<String> できたー!どの特性を残そう?
|
92
126
|
def preparation(dish)
|
93
|
-
|
94
|
-
|
127
|
+
case dish
|
128
|
+
in *head, :+, *tail
|
129
|
+
[head, :' ', tail, :セット]
|
130
|
+
in *head, :キムチ, :カルビ, *tail
|
95
131
|
[head, :キムカル, tail]
|
96
|
-
|
97
|
-
|
98
|
-
|
132
|
+
in *head, :創業, :牛, *tail
|
133
|
+
[head, :創業ビーフ, tail]
|
134
|
+
in *head, :創業, :プレミアム, :牛, *tail
|
135
|
+
[head, :創業プレミアムビーフ, tail]
|
136
|
+
in *head, :牛, :カレー, *tail
|
137
|
+
[head, :ビーフカレー, tail]
|
138
|
+
in *head, :ビビンバ, :丼, *tail
|
99
139
|
[head, :ビビン丼, tail]
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
[head,
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
[head,
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
[head,
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
[
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
end
|
140
|
+
in *head, :海老, :チリ, *tail
|
141
|
+
[head, :海老のチリ, tail]
|
142
|
+
in *head, :豚, :肩ロース, :豚, :焼肉定食, *tail
|
143
|
+
[head, :豚, :肩ロース, :の, :豚, :焼肉定食, tail]
|
144
|
+
in *head, :豚, :肩ロース, :生姜焼, :定食, *tail
|
145
|
+
[head, :豚, :肩ロース, :の, :生姜焼, :定食, tail]
|
146
|
+
in *head, :玉子, :ハンバーグ, *tail
|
147
|
+
[head, :エッグ, :ハンバーグ, tail]
|
148
|
+
in *head, :ネギ, :玉子, *tail
|
149
|
+
[head, :ネギたま, tail]
|
150
|
+
in *head, :とろろ, :玉子, *tail
|
151
|
+
[head, :とろたま, tail]
|
152
|
+
in *head, :カレー, :牛, *tail
|
153
|
+
[head, :カレギュウ, tail]
|
154
|
+
in *head, :ハンバーグ, :皿, *tail
|
155
|
+
[head, :バーグディッシュ, tail]
|
156
|
+
else
|
157
|
+
dish
|
158
|
+
end.flat_map do |node|
|
159
|
+
if node.is_a? Array then preparation(node) else node end
|
121
160
|
end
|
122
|
-
.map{|node| if node.is_a? Array then preparation(node) else node end }
|
123
|
-
.flatten
|
124
161
|
end
|
125
162
|
|
126
163
|
# 商品を注文し、商品を受け取る
|
@@ -129,8 +166,8 @@ module Matsuya
|
|
129
166
|
# Float おかの値。おかの値が高いと商品が変異する確率が上がる。0-1の範囲の値。
|
130
167
|
# ==== Return
|
131
168
|
# String 商品名
|
132
|
-
def order(okano
|
133
|
-
preparation(generate.reject{
|
169
|
+
def order(okano: 0.1)
|
170
|
+
preparation(generate(okano: okano).reject { _1 == :begin }).join
|
134
171
|
end
|
135
172
|
end
|
136
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,57 +1,43 @@
|
|
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
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
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
|
@@ -73,24 +59,23 @@ homepage: https://github.com/toshia/matsuya-generator-ruby
|
|
73
59
|
licenses:
|
74
60
|
- MIT
|
75
61
|
metadata: {}
|
76
|
-
post_install_message:
|
62
|
+
post_install_message:
|
77
63
|
rdoc_options: []
|
78
64
|
require_paths:
|
79
65
|
- lib
|
80
66
|
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
|
- - ">="
|
88
74
|
- !ruby/object:Gem::Version
|
89
75
|
version: '0'
|
90
76
|
requirements: []
|
91
|
-
|
92
|
-
|
93
|
-
signing_key:
|
77
|
+
rubygems_version: 3.2.3
|
78
|
+
signing_key:
|
94
79
|
specification_version: 4
|
95
80
|
summary: I'm hungry. gyu-meshi! gyu-meshi!
|
96
81
|
test_files: []
|