12月14日【IT系就活生向けプログラミング試験対策勉強会】開催決定! - paiza開発日誌 これいってきました。ピザおいしかった。
で、事前課題で 天才火消しエンジニア霧島「もしPMおじさんが丸投げを覚えたら」|paizaオンラインハッカソンLite を解くとのことなので、解き直してました。
前解いた時の記事 => paiza Online Hackathon 解いてみた - pockestrap
Ruby
pockeさんの採点結果[100点] 完璧ぃぃ!|paizaオンラインハッカソンLite
m = gets.to_i n = gets.to_i # for index man = 0 cost = 1 companies = [] n.times do |i| a, b = gets.split.map(&:to_i) companies.push([a, b]) end memo = {} p (func = -> (i, x) { if x >= m return 0 end if i == n # last return 2500000000000 end return memo[i * 2500000000000 + x] ||=( a = companies[i][cost] + func.call(i + 1, x + companies[i][man]) b = func.call(i + 1, x) a < b ? a : b ) }).call(0, 0)
def
でメソッド定義しないでlambda
にしたほうが変数が束縛されて便利なんだよね。
Golang
pockeさんの採点結果[100点] 完璧ぃぃ!|paizaオンラインハッカソンLite
package main import ( "bufio" "fmt" "os" "strconv" ) type Company struct { man int cost int } func main() { sc := bufio.NewScanner(os.Stdin) sc.Scan() m, _ := strconv.Atoi(sc.Text()) sc.Scan() n, _ := strconv.Atoi(sc.Text()) cs := make([]*Company, 0) sc.Split(bufio.ScanWords) for i := 0; i < n; i++ { sc.Scan() a, _ := strconv.Atoi(sc.Text()) sc.Scan() b, _ := strconv.Atoi(sc.Text()) c := &Company{man: a, cost: b} cs = append(cs, c) } memo := make(map[int]int) var f func(int, int) int f = func(i int, x int) int { if x >= m { return 0 } if i == n { return 2500000000000 } if v, ok := memo[i*2500000000000+x]; ok { return v } h := cs[i].cost + f(i+1, x+cs[i].man) g := f(i+1, x) var r int if h < g { r = h } else { r = g } memo[i*2500000000000+x] = r return r } fmt.Println(f(0, 0)) }
Rubyのほうは事前課題として、Goの方は解きたくなったので後から追加で書きました。行数多いなぁ、うーん。
当日 ハノイの塔 と Mod7 を解きました。コード公開していいかわかんないからとりあえず載せない。
というかmod7の方はテストケース多いとstack溢れて死ぬし解けてないんだけどね。つらい。 ハノイの塔もググったのをそのまま実装して、解いてから意味を考えようと思ってたら解いて時間が終わってしまった。
まー pizza おいしかったし、面白い話聞けたし、人と話せたし、おかし美味しかったし、エナドリおいしかったしよかったです。
もっとGolang書きたい