川のブログ

川の適当気ままなブログです。 

パーフェクト Ruby on Rails 読んでみた

こんにちは川です。

読んでいきます。

随時更新していきます。

自分用のメモ程度です。

1章

bundle コマンド

  • install
  • update
  • list <- Gemfile 生成
  • init
  • exec

Rails の思想

CoC (convention over Configuration)

規約を遵守する
  • DBのテーブル名は複数形
  • /member 的なパスは一覧ページ
  • id:1 の情報は /member/1 みたいなパスに

DRY (Don't Repeat Yourself)

同じ処理を繰り返して書くな

REST (Representational State Transfer)

www.slideshare.net

ここが分かりやすい

自動テスト

デフォ ー> Minitest

プログラマ脳を鍛える数学パズル 解きます

こんにちはかわです。

個人的なあれですが、2月は試験、再試ばかりだったので3月はコードを書きます。

中にある問題を解きます。

暇な時にリーダブルコードも続きを読みたいと思います。

コードはgithubにあげます。

まずはRubyで解いて、少しずつ言語を増やしていきたいと思います。

https://github.com/kawa18sima/MathPazzle/tree/rubygithub.com

3月中までには全部解きたいと思います。

AOJ 0099 Surf Smelt Fishing Contest II

こんにちかわです。

久しぶりに解いていきたいと思います。

ソースコード

#include <bits/stdc++.h>
using namespace std;
int main(void){
    int n,event;
    cin>>n>>event;
    
    vector<int> possessionfish(n+1, 0);
    vector<int>::iterator iter;
    
    int index, topNum = -1;
    int fishing,num;
    
    for(;event>0;--event){
        cin>>num>>fishing;
        possessionfish[num]+=fishing;
        
        if(topNum == -1)topNum = num;
        else if(fishing > 0){
            if(possessionfish[num] > possessionfish[topNum] || (topNum > num && possessionfish[num] == possessionfish[topNum]))topNum = num;
        }else if(topNum == num){
            iter = max_element(possessionfish.begin(), possessionfish.end());
            index = distance(possessionfish.begin(), iter);
            topNum = index;
        }
        
        cout<<topNum<<" "<<possessionfish[topNum]<<endl;
    }
}

普通に解くだけなら

iter = max_element(possessionfish.begin(), possessionfish.end());
index = distance(possessionfish.begin(), iter);
topNum = index;

の部分だけでOKですが、

計算量を減らさないといけないため

Topの人のインデックスを保存しておき、

イベントごとの釣った数が正の場合は比較、

負の場合は上記の探し出すコードを利用しました。