昼起きたら友人がベッドの引き出しで寝ていてとても申し訳なくなくなった
自分は遠慮というものをもう少し知るべきだ
その友人が昼に出かけるというので同じタイミングで家を出た
部室に行き、まず京大漫トロピーの会誌を読んだ 面白かった
次に、アイマスの曲を書けながら友人の板書を写していると人が着たのでラジオに切り替えた
曲だとどうしても意識に介入してくるのでラジオのほうが作業がはかどる
その後、BMSに一家言ある先輩が来たので、BOF2012とういうイベントに投稿されたBMS作品をさらっと遊んでいた
いままで自分がすきなのはHAPPYHARDCOREというジャンルだけだと思っていたが、実は〜COREというやつが大体イケるとわかり、食指が広がった
その中で気になる曲が二つあった
ひとつはタイトルがうろ覚え たしか「FOOOLISH KERNEL」という曲 人生はかどらないということを延々と歌っている曲でとても共感できた
もうひとつは「宮子」という曲
動画
初めて「見させられる動画」を見た 見たくないのに、目をそらすことができない 完全に感覚を掌握されていた それほどの作品だった
これが個人製作のアニメーションということに本当に驚きを禁じ得なかった 人はすごい
ぜひ他の人にも見てほしい動画である 見たら教えてほしい 話がしたい
この動画に出会えただけでも、今日を生きた価値はあった
その後、昨日実装が間に合わなかったARC(Atcorder Regular Contest)#009のB問題を解いた
おそらく私の書いた中でダントツでトップのゴミコードなので自戒の意味でここに晒しあげておく
問題http://arc009.contest.atcoder.jp/tasks/arc009_2(みれるんかな)
書いたコード
#include <cstdio> #include <cstdlib> #include <cmath> #include <string> #include <vector> #include <queue> #include <map> #include <set> #include <algorithm> #include <sstream> #include <iostream> #include <cassert> #include <fstream> #define FOR(i,k,n) for (int i=(k); i<(int)(n); ++i) #define REP(i,n) FOR(i,0,n) #define FORIT(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i) #define sz size() #define lgt length() #define pb push_back #define mp make_pair #define ALL(X) (X).begin(),(X).end() #define SORT(a) sort(ALL(a)); using namespace std; typedef pair<int,int> pint; typedef vector<int> vi; typedef vector<string> vs; typedef vector<vi> vvi; int toInt(string s){int v;istringstream sin(s);sin>>v;return v;} double toDouble(string s){double v;istringstream sin(s);sin>>v;return v;} template<class T>string toString(T x){ostringstream sout;sout<<x;return sout.str();} vs form(string a,char s){a+=s;vs v;string b;REP(i,a.lgt){if(a[i]==s){v.pb(b);b="";}else b+=a[i];}return v;} vi formint(string a,char s){a+=s;vi v;string b;REP(i,a.lgt){if(a[i]==s){v.pb(toInt(b));b="";}else b+=a[i];}return v;} //入力数を通常の数字に置き換えた後、ソートしてまた復元して出力、としたかった int main(){ int b[10]; REP(i,10){ cin >> b[i]; }//配列のインデックスが本来の数字に対応 int N; cin >> N; vector<int> c; int num; REP(i,N){//ひとつひとつの入力について元の数に復元して配列に格納する double in; num=0; int m = 1; cin >> in;//まず、入力をとる if(in>=1||in==0){ while(in>=1||in==0){//各桁数ごとに変換 REP(h,10){//%10で一桁目を取って比較、 if((int)in%10==b[h]){//numに記憶して num+=m*h;//10でわって続行 }//inが0<in<10になるまで続ける } m*=10; in=in/10; if(in>0&&in<1)break; } } c.push_back(num);//intにしてcに収納 } SORT(c); vector<double> d; REP(i,N){ d.push_back((double)c[i]); } //あとは復元して出力 //わざわざdoble配列もう一個作ってやり直してるあたり爆笑 REP(i,N){ double in; num=0; int m = 1; if(d[i]>=1||d[i]==0){ while(d[i]>=1||d[i]==0){ REP(h,10){ if((int)d[i]%10==h){ num+=m*b[h]; } } m*=10; d[i]=d[i]/10; if(d[i]>0&&d[i]<1)break; } } c[i]=num; } REP(i,N){ cout << c[i] << endl; } return 0; }
冗談抜きに競技なんてやめたほうがいいレベルのコードを書いている
自分への言い訳としては三週間くらい書いてなくてなにもかも飛んだ、ということにしておく
これから毎日最低一問を解いて、とりあえず触れようと思う
自分の脆弱性に気づく毎日にうんざりしてくる