「17着だけ服があれば一年中違う服装が可能」は本当か

Pocket

「【大発見】17着だけ服があれば一年中違う服装が可能」というツイートがありました。
例として示されているのは、帽子、アウター、インナー、パンツ、靴の5種類があって、それぞれ3個、4着、3着、4本、3足の合計17着があれば、432パターンになるので、一年中違う服装になるというものです。
まずマフラーや手袋があったらもっと減るんじゃないかと考えました。
そもそも正しいのでしょうか。
プログラムで正しいかどうか確認します。

import itertools
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 | タグ: ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報