一蘭の行列に並んでいた折、ふと店の壁を見るとオーダー次第で1万2千もの味ができるという。本当か。Pythonicに検証してみた。
from functools import reduce
order1 = {'味の濃さ': ('うす味', '基本', 'こい味'),
'こってり度': ('なし', 'あっさり', '基本', 'こってり', '超こってり'),
'にんにく': ('なし', '少々', '基本', '1/2片分', '1片分'),
'ネギ': ('なし', '白ネギ', '青ネギ'),
'チャーシュー': ('なし', 'あり'),
'秘伝のたれ': ('なし', '1/2倍', '基本', '2倍', 'X倍'),
'麵のかたさ': ('超かた', 'かため', '基本', 'やわめ', '超やわ')}
print(order1)
{'味の濃さ': ('うす味', '基本', 'こい味'), 'こってり度': ('なし', 'あっさり', '基本', 'こってり', '超こってり'), 'にんにく': ('なし', '少々', '基本', '1/2片分', '1片分'), 'ネギ': ('なし', '白ネギ', '青ネギ'), 'チャーシュー': ('なし', 'あり'), '秘伝のたれ': ('なし', '1/2倍', '基本', '2倍', 'X倍'), '麵のかたさ': ('超かた', 'かため', '基本', 'やわめ', '超やわ')}
各変数のレベルの数を内包表記で取り出す
order1_num = {key: len(value) for key, value in order1.items()}
order1_num
{'味の濃さ': 3,
'こってり度': 5,
'にんにく': 5,
'ネギ': 3,
'チャーシュー': 2,
'秘伝のたれ': 5,
'麵のかたさ': 5}
高階関数を用いて、リスト内の全要素を掛け算する。高階関数の引数としてラムダ関数を渡している。
reduce(lambda x, y: x * y, order1_num.values())
11250
11250を千の位で切り上げて1万2千としているらしい。一蘭の主張はだいたい本当だったようだ。もっとも、'こってり'と'超こってり'に大きな差があるとは思えず、1万2千のうち多くは似たような味だろうと思うが・・・。