Tips

IT技術系Tips

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

新人女子プログラマの...とは

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

新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!
ECサイト内の2つの異なる商品(値段は同じでも構わない)を購入し、その合計価格が指定の価格以内で最大になる組み合せを探してください。

だそうです。
いわゆるハッカソンってやつで、みんなでコード書いて実行速度やら可読性やら比べようぜって企画です。
新人女子プログラマという言葉で引っ掛けようって魂胆が見え見えですね。
はい、釣られました。

お仕事の詳細

は、やたら長いので↑のリンク先見てね。

とりあえず動くもの

新人女子プログラマ「納期に間に合わない…」

とか言ってるわけですよ。
チューニングは後回しにして、とりあえず動くものを作らないといけないよね。
遅くても動いてればクライアントへの進捗報告もやりやすい。
おじさんが面倒見てやろうじゃないの。

ソース(バグってるので読み飛ばし推奨)
# python 2.7.3
import sys, math

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]]
results = [0] * D

for n in xrange(D):
    for x in prices:
        for y in prices:
            a = math.fabs(m_s[n] - (x + y))
            b = math.fabs(math.fabs(results[n]) - math.fabs(m_s[n]))
            if a < b:
                results[n] = x + y

for x in results:
    print(x)

※2013/12/13追記 仕様よく読んでなくて、結構バグってる事が発覚

単純に1個ずつ足してって、今まで1番近かった解答と比較し
今回の比較の方が正解に近ければ、解答を書き換えるって仕組み。
計算量はO(D*N^2)かな。
どんだけmath.fabs呼んでんだよ。








結果は・・・・



























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

うおぉおおおい!タイムオーバー!?
15秒以内なんて要件あったんかい。

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

kaeroukaさん、ある意味凄いコードですね。
新人の私でもそうそうこんなコードかけませんよ。。

この女殺すわ。

続きは後日。

2013/12/13追記
CASE2のサンプルで動かしてみたら、正解と合わない。
よくよく問題見てみたら、2つの異なる商品と書いてあった罠。
さらに設定金額以下でって書いてあるから、math.fabsとかなんの関係も・・・
さて、そろそろ真面目にやらないと・・・
明日から本気出す!

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