「17着だけ服があれば一年中違う服装が可能」は本当か
「【大発見】17着だけ服があれば一年中違う服装が可能」というツイートがありました。
例として示されているのは、帽子、アウター、インナー、パンツ、靴の5種類があって、それぞれ3個、4着、3着、4本、3足の合計17着があれば、432パターンになるので、一年中違う服装になるというものです。
まずマフラーや手袋があったらもっと減るんじゃないかと考えました。
そもそも正しいのでしょうか。
プログラムで正しいかどうか確認します。
import pprint
def list_product(a):
p = 1
for x in a:
p *= x
return p
def fukuso_trial(shurui):
target = 366
if shurui == 1:
chakusu_max = 400
elif shurui == 2:
chakusu_max = 30
elif shurui < 6:
chakusu_max = 10
else:
chakusu_max = 4
list_chakusu = range(1, chakusu_max)
all_list_fukuso = list(itertools.product(list_chakusu, repeat = shurui))
min_list_fukuso = [1000, [], 0]
for list_fukuso in all_list_fukuso:
num_pattern = list_product(list_fukuso)
if num_pattern >= target:
chakusu = sum(list_fukuso)
if min_list_fukuso[0] > chakusu:
min_list_fukuso = [chakusu, list_fukuso, num_pattern]
return min_list_fukuso
for shurui in range(1, 13):
min_list_fukuso = fukuso_trial(shurui)
print(shurui, min_list_fukuso)
結果
1 [366, (366,), 366]
2 [39, (16, 23), 368]
3 [22, (6, 7, 9), 378]
4 [18, (3, 5, 5, 5), 375]
5 [17, (2, 3, 4, 4, 4), 384]
6 [17, (2, 3, 3, 3, 3, 3), 486]
7 [17, (2, 2, 2, 2, 3, 3, 3), 432]
8 [17, (2, 2, 2, 2, 2, 2, 2, 3), 384]
9 [18, (1, 2, 2, 2, 2, 2, 2, 2, 3), 384]
10 [19, (1, 1, 2, 2, 2, 2, 2, 2, 2, 3), 384]
11 [20, (1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3), 384]
12 [21, (1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3), 384]
左端が洋服の種類(帽子、アウターなど)。
次に最低何着あればパターンが366以上になるか。
次にその場合の内訳。
右端がパターンの数。
洋服が1種類の場合、例えば全身タイツですね。この場合は366着あれば366パターンになります。
洋服が2種類の場合、例えばシャツとパンツ。この場合は16着と23着あれば368パターンになります。
このようにして洋服が5種類の場合、17着あれば384パターンで366パターン以上になります。
マフラーを加えて6種類とします。このときも17着で366パターン以上になります。
さらに手袋を加えて7種類とします。このときも17着で366パターン以上になります。
8種類も17着。
9種類は18着。あとは種類が増えると1着ずつ増えます。
ということで「17着あれば一年中違う服装」は正しいことが分かりました。
[ 2023年2月1日 | カテゴリー: Python | タグ: 数学 ]
« 和暦年と西暦年を相互に変換する方法 | JavaScriptで日数計算をする方法 »
コメントを残す