Tips

IT技術系Tips

新人女子プログラマの書いたコードを直すだけの簡単なお仕事です! ←やってみた(Python)〜Part2〜

f:id:kaerouka:20131213081901p:plain
画像の出典:paiza
https://paiza.jp/poh/ec-campaign

前回までの流れ

適当にやってみたところ、遅すぎる上に見事にバグりまくってたという醜態を晒した。
真面目にソース読んでみた人ごめんなさい。
しかもソース汚すぎ。

改善した

今回は少しだけ改善してみた。
[100, 200, 250, 120]
こんなデータを真面目にループで回すと

In [42]: for i in [100, 200, 250, 120]:
   ....:     for j in [100, 200, 250, 120]:
   ....:         

こんな感じになるわけだけど
最初のiとjの組み合わせがi=100, j=100
さらに、i=100, j=200、i=100, j=250、i=100, j=120、i=200, j=100
と続くわけだけど、i=200, j=100の組み合わせって、i=100, j=200と同じだからいらないよねって考え。
ようは、j=i+1から始めようって事。
同じ商品を選んじゃいけないので、iは120の行わない。

# python 2.7.3
import sys

prices = [x.rstrip() for x in sys.stdin]

N, D = [int(x) for x in prices[0].split(' ')]
m_s = [int(x) for x in prices[N+1:]]
prices = [int(x) for x in prices[1: D * -1]]

for n in xrange(D):
    result = 0
    for i, x in enumerate(prices[:-1]):
        for y in prices[i+1:]:
            total = x + y
            if total <= m_s[n] and result < total:
                result = total
    print result

結果

f:id:kaerouka:20131215155758p:plain
画像の出典:paiza

お、Case1クリア
王大人「Case2で死亡確認」

f:id:kaerouka:20131215155807p:plain
画像の出典:paiza
https://paiza.jp/poh/ec-campaign

kaeroukaさん、、すごーい。

かわいい。
Case2、Case3とクリアしていったら、服も1枚ずつ減ってったりするんだろうか。


次回は2分探索でチューニング予定。
Case3もクリアできたら嬉しいけど、どうだろう。

前回
新人女子プログラマの書いたコードを直すだけの簡単なお仕事です! ←やってみた(Python) - Tips
続き
新人女子プログラマの書いたコードを直すだけの簡単なお仕事です! ←やってみた(Python)〜Part3〜 - Tips