module Matsuya
Constants
- Menu
松屋の商品。価格は、牛めしなら並盛など、標準の量と思われるものを入れておく
- Morning
松屋の朝定食
- NETWORK
松屋ネットワークを構築し、始点を返す。
- NetworkNode
松屋ネットワーク
- Sample
松屋に実際にあるメニュー。 牛めしのようにプレミアムとそうでないものがある場合は、プレミアムだけを書く オリジナルカレギュウ(プレミアム牛肉使用)も、プレミアムとして扱い、プレミアム牛肉使用と書いていないほうは書かない
- VERSION
Public Class Methods
generate(okano: 0.1, current: NETWORK.find { |n| n.node == :begin })
click to toggle source
お客様に提供する商品を作る。私は接客は不得意なので、ランダムなものが出てくる。 おかの値が1に近づくほど狂った商品が出てくる。
Args¶ ↑
- okano:
-
Float おかの値。おかの値が高いと商品が変異する確率が上がる。0-1の範囲の値。
- current:
-
Matsuya::NetworkNode
再帰呼出し用。省略する。
Return¶ ↑
Array 材料を並べた配列
# File lib/matsuya.rb, line 107 def generate(okano: 0.1, current: NETWORK.find { |n| n.node == :begin }) if current.is_a? NetworkNode nex = current.follow.sample if nex.is_a?(NetworkNode) && (rand < okano) [current.node, *generate(okano: okano, current: NETWORK.sample)] else [current.node, *generate(okano: okano, current: nex)] end end end
network(= NETWORK)
click to toggle source
互換性のため
# File lib/matsuya.rb, line 96 def network = NETWORK # お客様に提供する商品を作る。私は接客は不得意なので、ランダムなものが出てくる。 # おかの値が1に近づくほど狂った商品が出てくる。 # ==== Args # [okano:] # Float おかの値。おかの値が高いと商品が変異する確率が上がる。0-1の範囲の値。 # [current:] # Matsuya::NetworkNode 再帰呼出し用。省略する。 # ==== Return # Array 材料を並べた配列 def generate(okano: 0.1, current: NETWORK.find { |n| n.node == :begin }) if current.is_a? NetworkNode nex = current.follow.sample if nex.is_a?(NetworkNode) && (rand < okano) [current.node, *generate(okano: okano, current: NETWORK.sample)] else [current.node, *generate(okano: okano, current: nex)] end end end # 材料を選択したら釜に入れてぐーるぐーる。 # キムカル丼のように、『キムチ+カルビ』がキムカルに変化するなど、松屋活用を考慮して # Matsuya.generate の戻り値を加工する # ==== Args # [dish] Array 現在の皿の状態 # ==== Return # Array<String> できたー!どの特性を残そう? def preparation(dish) case dish in *head, :+, *tail [head, :' ', tail, :セット] in *head, :キムチ, :カルビ, *tail [head, :キムカル, tail] in *head, :創業, :牛, *tail [head, :創業ビーフ, tail] in *head, :創業, :プレミアム, :牛, *tail [head, :創業プレミアムビーフ, tail] in *head, :牛, :カレー, *tail [head, :ビーフカレー, tail] in *head, :ビビンバ, :丼, *tail [head, :ビビン丼, tail] in *head, :海老, :チリ, *tail [head, :海老のチリ, tail] in *head, :豚, :肩ロース, :豚, :焼肉定食, *tail [head, :豚, :肩ロース, :の, :豚, :焼肉定食, tail] in *head, :豚, :肩ロース, :生姜焼, :定食, *tail [head, :豚, :肩ロース, :の, :生姜焼, :定食, tail] in *head, :玉子, :ハンバーグ, *tail [head, :エッグ, :ハンバーグ, tail] in *head, :ネギ, :玉子, *tail [head, :ネギたま, tail] in *head, :とろろ, :玉子, *tail [head, :とろたま, tail] in *head, :カレー, :牛, *tail [head, :カレギュウ, tail] in *head, :ハンバーグ, :皿, *tail [head, :バーグディッシュ, tail] else dish end.flat_map do |node| if node.is_a? Array then preparation(node) else node end end end # 商品を注文し、商品を受け取る # ==== Args # [okano] # Float おかの値。おかの値が高いと商品が変異する確率が上がる。0-1の範囲の値。 # ==== Return # String 商品名 def order(okano: 0.1) preparation(generate(okano: okano).reject { _1 == :begin }).join end end
order(okano: 0.1)
click to toggle source
preparation(dish)
click to toggle source
材料を選択したら釜に入れてぐーるぐーる。 キムカル丼のように、『キムチ+カルビ』がキムカルに変化するなど、松屋活用を考慮して Matsuya.generate
の戻り値を加工する
Args¶ ↑
- dish
-
Array 現在の皿の状態
Return¶ ↑
Array<String> できたー!どの特性を残そう?
# File lib/matsuya.rb, line 125 def preparation(dish) case dish in *head, :+, *tail [head, :' ', tail, :セット] in *head, :キムチ, :カルビ, *tail [head, :キムカル, tail] in *head, :創業, :牛, *tail [head, :創業ビーフ, tail] in *head, :創業, :プレミアム, :牛, *tail [head, :創業プレミアムビーフ, tail] in *head, :牛, :カレー, *tail [head, :ビーフカレー, tail] in *head, :ビビンバ, :丼, *tail [head, :ビビン丼, tail] in *head, :海老, :チリ, *tail [head, :海老のチリ, tail] in *head, :豚, :肩ロース, :豚, :焼肉定食, *tail [head, :豚, :肩ロース, :の, :豚, :焼肉定食, tail] in *head, :豚, :肩ロース, :生姜焼, :定食, *tail [head, :豚, :肩ロース, :の, :生姜焼, :定食, tail] in *head, :玉子, :ハンバーグ, *tail [head, :エッグ, :ハンバーグ, tail] in *head, :ネギ, :玉子, *tail [head, :ネギたま, tail] in *head, :とろろ, :玉子, *tail [head, :とろたま, tail] in *head, :カレー, :牛, *tail [head, :カレギュウ, tail] in *head, :ハンバーグ, :皿, *tail [head, :バーグディッシュ, tail] else dish end.flat_map do |node| if node.is_a? Array then preparation(node) else node end end end