CodeFestival2015に参加してきたんだよっ!!
11/14~11/15に開催されたCodeFestival2015に参加してきたのでその感想とかをね
11/14(Day1)
六本木駅から会場である泉ガーデンプレイスに向かった。地図を見る限り10分で着くはずなのになぜか30分くらい歩いた。会場で名札を貰う。やっぱtwitterIDとか書いてあって笑った。座席は175番でお菓子にとても近くてラッキーだった。Tシャツとリストバンドを貰えて嬉しかった。まあその後開幕式までは友達とおしゃべりしたりtwitterしてたりしてた。壁を見たら#code_festivalのハッシュタグのついたツイートが映されてた。席に朝ごはんがあった。朝ごはんかと思ったらお昼ごはんだったのかもしれない。どっちだったんだろう?
11時位に開幕式とか本戦の説明とかあった。開幕の音楽とかは凄くかっこよかった。
12時本戦開始の予定だったけどネットワークがなんかトラブったらしくて45分遅れて開始。とりあえず5完すればパーカーが貰えると聞いていたので5完を目指すことにした。
B問題で何故かサイコロの目が1~7だと思ってしまい焦った。C問題は貪欲。D問題はimos法で解こうとしてなんかバグった。いっぱい提出したら1人で良い時にバグってる気がして修正してAC。この時点で残り1時間くらいしかない。E問題は問題を「与えられた記号列の連続した部分列」が答えになると勝手に思い込んでしまい、一番最後のケースだけWAになってしまいびっくりした。WAになるケースが1つだからなんか変なケースだろうと思って大量提出(18回)したら別に変なケースじゃなくて答えが部分列じゃなかった(ここで初めて問題の誤解に気がつく)。残り15分位しかなくて解き直す時間も無いと思ったからそのケースだけ手入力した(もはや競技の本質を見失った行為)。残り15分もないけどとりあえずG問題読んで実は実装ほとんどなしみたいなの祈ってテストケースを手で試してたけどそんなわけもなくコンテスト終了。
結果は5完で149位。B問題で時間を無駄にした感じがあってそこはもったいなかった。パーカー貰えるかと思ったけどどうやら140着しか用意していなかったらしくて後日郵送という話(サイズとか聞かれてないけど送ってもらえるのだろうか?)。
コンテスト中に貰ったリストバンドを伸ばしたりして弄ってたらどこかに飛んでいってしまい見当たらなかった(-_-;)。。。
その後は表彰とか。よすぽが2位をとってた。すごい。あとは直大さんの解説をきいたり、個別指導塾で解説きいた。あと、屋台で寿司、じゃがバタ、肉巻き握り、ジェラートを食べたりした。美味しかった。短縮王はpython3で出した後Cで出そうとしたけどpythonより小さくならなかった(;_;)
エキシビションマッチで上位の人が競ってるのをみていた。人が解いているのを見るのって初めてだったからとても楽しかった。全員分の画面がそれぞれのモニタに映しだされてたけど全員分をみるのは難しかったので最初よすぽのをみてた後、みさわさんのを見ていた。みさわさんの観てる人に対してコメント書いたりするのめっちゃ面白かった。
その後、宿泊先の品川プリンスホテルに向かった。向こうについたのが2230くらいでごちうさのOPを見逃してしまった。。。でも今回のごちうさは感動して泣きそうになった。その後、部屋で友達とアニメを見ていたら2時を回った。翌日7時半起床ということを思い出した。急いで寝た。
11/15(Day2)
朝7時半集合だから7時くらいに起床。早起きは辛すぎた。机についたら朝プロタオルが待ってた。色が可愛い。
9時から朝プロ開始。Easyに出場した。Easyだし全完できると思ってでたら3完しか出来なくて泣きそうになった。コンテスト中眠すぎて何度か意識が飛びかけた。D問題はLCS(最長共通部分文字列)だったのだが、そんなのは名前くらいしか知らない(蟻本を読んでないのがバレる)、必死に間違ったDPをしてたら時間終了。Easy60位とかだった気がする(ちゃんとした順位忘れた)。
その後はお昼ごはんを食べた後、高橋直大氏のトークライブを聞いてた。問題を見た時にどういうアルゴリズムが思いつくかみたいないままで適当にしてきたことを話してくれた。(適当にしてきた僕が問題)。あとは、タイピングオブザデッドとか短縮王の解説とか。。。
13時過ぎからはチーム対抗リレー。チームのTシャツをもらった。灰色。初めてやるイベントで他のチームメンバーに迷惑をかけたらどうしようとか思ってビクビクしながら参加したけど、やってみたらめちゃくちゃ楽しかった。僕はC問題を担当した。中1の時に円周率を30桁覚えさせられたのが初めて役に立った。あとはG問題とか一緒にデバッグとか(結局僕の存在は役には立たなかったけど)。チーム全体では9位。後から知ったのだがチーム10人中4人が僕と同じ大学だったみたいだし、ひとりに至っては同じサークルだったらしい。世間は狭かった。
後は、表彰とかハッピーアワーでチームでお菓子食べたり。ラベル無し根付き木が何通りあるかわかるかみたいな話とかした。
そして、終了。帰宅。
どのイベントもとても楽しかった。その中でも本戦とチーム対抗リレーはやっぱ特に楽しかった。来年も予選さえ通れたら参加したい。
貰ったもの
Vimプラグイン-autocloseの設定
Vimで括弧の補完にvim-autocloseを使っている。C++を書いている時にはデフォルトの設定で文句はなかったのだが、schemeを書いている時に
'(1 2 3)
のような表記をしたくなった時に、シングルクオートに対して補完が効いてしまい
'(1 2 3)'
のようになってしまってい邪魔だった。
そこでautocloseの設定をすることでシングルクオートに対して補完を無効にできる。
とりあえずautocloseのgithubに次のように書いてある。
AutoClose#DefaultPairsModified(pairsToAdd, openersToRemove)
いまいちよくわからない。けど設定例があった
例:
autocmd FileType ruby \ let b:AutoClosePairs = AutoClose#DefaultPairsModified("|", "")
つまり、pairsToAddにダブルクオーテーションで囲って追加したいもの、openersToRemoveにダブルクオーテーションで囲って除去したいものを書けばいいのかな?
結果こうしてみた
autocmd FileType scheme let b:AutoClosePairs = AutoClose#DefaultPairsModified("", "'")
とりあえず今のところこれでうまくいってる。
終了。
1桁入力の逆ポーランド記法電卓
今日はハローウィーン。なのにだらだらしてたら夜になっていた。せっかくのハローウィーンなのだから何かしようと思った。
とりあえず逆ポーランド記法電卓でも初めて書いてみた。本当は2桁以上の入力を受けたかったけど面倒くさかったので1桁入力に絞った。splitが使える言語とかだったら楽なのかもしれないけど。。。僕がかろうじて使えるのはC++位だから
まあ調べたらすぐわかるけど、stackに放り込んで演算子が来たら取り出して計算する。最後にstackに残った値が答えになるはず。
適当だからバグってる可能性が高い。
#include <iostream> #include <string> #include <stack> using namespace std; bool is_operater(char c){ switch(c){ case '+': case '-': case '*': case '/': return true; default: return false; } } int main(){ stack<int> que; string s; getline(cin,s); for(int i=0;i<s.length();i++){ if(s[i]>='0'&&s[i]<='9') que.push(s[i]-'0'); if(is_operater(s[i])){ int n1 = que.top();que.pop(); int n2 = que.top();que.pop(); if(s[i]=='+') que.push(n1+n2); else if(s[i]=='-') que.push(n1-n2); else if(s[i]=='*') que.push(n1*n2); else if(s[i]=='/') que.push(n1/n2); } } cout << que.top() << endl; return 0; }
キーバインドの変更に失敗してた?
うん。前にキーバインドの設定方法にxkbを使って設定するために
~/.xkb/kemap/keymapを書き換えるみたいな方法を書いた。
あの方法はzshrcを読み込むとうまく起動してくれる。そこまでは良かった。
しかし、困ったことに日本語を入力したあとに設定が反映されなくなってしまうのだ。
解決方法がわからないからxmodmapを使って設定してみた。
.Xmodmapにadd shift = Muhenkanてした後にxmodmap .Xmodmapとして読み込んだ。この時は確かに無変換キーがshiftとして動いている。
だが一度日本語入力をONにすると、読み込んだはずの設定が消えてしまっている....
なんでだろう?誰か分かる人がいたら教えてほしいな
**追記
解決した!!
iBusの設定(ターミナルからibus-setupコマンドをうてばいい)でキーボードレイアウト→システムのキーボードレイアウトを使用するにチェックを入れるとちゃんと動いた。
ubuntu15.04でiBusを使うのが何故かうまくいかなかった何をしたら使えるようになったか忘れた。
教えてくれた人はメニューのところから設定出来たらしいけど僕はできなかったのでibusの設定にはibus-setupコマンドからする必要がありそう
アセンブリ言語をアセンブルするときのメモ
環境:ubunut 15.04(64bit)
学校の授業でアセンブリ言語がある。自分の環境でも書けるようにしておきたいがどうもアセンブリ言語は環境移植性が低いらしくそのまま
gcc -S a.c
とかすると下のようになってしまう。
int func(int n){ return n+5; }
.file "a.c" .text .globl func .type func, @function func: .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 movl 8(%ebp), %eax addl $5, %eax popl %ebp .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE0: .size func, .-func .ident "GCC: (Ubuntu 5.1.1-4ubuntu12) 5.1.1 20150504" .section .note.GNU-stack,"",@progbits
授業ではMacOSX GCC-4.2.1で32bit用i386コードにするらしい。
うーん何を言っているかよくわからない。どうしたものか。
そこで某「怖い人」に聞くと自分の環境でもそれなりに近いコードを吐けるらしい
次のようにコンパイルすればいい
gcc -m32 -S -O0 -fno-asynchronous-unwind-tables a.c
それぞれのコンパイラオプションは「32bit用i386コード」「アセンブリ」「最適化無効」、最後の長いオプションはよくわからないけど
http://www.cqpub.co.jp/interface/column/freesoft/2004/200402/0.htm
に一応書いてある。(これをつけるとドットから始まる命令が一気に減った)
このコンパイラオプションを付けてコードを吐き出すと次のようになる。
.file "a.c" .text .globl func .type func, @function func: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax addl $5, %eax popl %ebp ret .size func, .-func .ident "GCC: (Ubuntu 5.1.1-4ubuntu12) 5.1.1 20150504" .section .note.GNU-stack,"",@progbits
うん。綺麗になった。
.sファイルをコンパイルして実行ファイルを作るときは
gcc -m32 a.s
とかすればよさそう(適当)
最近
うーん。最近周りの怖い人達に頼りきってる気がするぞ。申し訳ないから頑張らなくては。
Linuxでキー変更
キーバインド変更を試みた。その方法をメモっておく。
環境はubuntu 15.04
使用するのはxkb
なんかいろいろググると~/.xkb/keymap/.mykbdと~/.xkb/symbols/mysmbolを変更していろいろやってたけどそれをしてもうまくいかなかった。3時間位頭かかえたけどどうしようも無いから某氏に聞いてやった方法。
まずは設定ファイルを置くフォルダ
mkdir -p ~/.xkb/keymap setxkbcomp -print > ~/.xkb/keymap/mykbd
なんかいろいろなサイトだとここで~/.xkb/symbolsとか作ってそこにmyswapを作ったりするらしいんだけどそうするとうまくいかなかった。
結局mykbdファイルに直接書き込む。
mykbdは次のような構成になっていた(これは環境とかで多少変わりそう)
xkb_keymap{ xkb_keycodes {include "evdev+aliases(qwerty)" }; xkb_types {include "complete" }; xkb_compat {include "complete" }; xkb_symbols {include "pc+jp+us:2+inet(evdev)+ctrl(nocaps)" }; xkb_geometry {include "pc(pc104)" }; };
ここにとりあえず「変換キーをctrlに」「無変換キーをescに」割り当てた。次のようにxkb_symbolsの""の外に書き込めばいいらしい。
xkb_keymap{ xkb_keycodes {include "evdev+aliases(qwerty)" }; xkb_types {include "complete" }; xkb_compat {include "complete" }; xkb_symbols {include "pc+jp+us:2+inet(evdev)+ctrl(nocaps)" key <HENK> {[Control_L]}; key <MUHE> {[Escape}]; }; xkb_geometry {include "pc(pc104)" }; };
これで設定は完了する。
ついでに某氏に教えてもらった元の設定の確認方法のコマンドは以下のようである。
vim <(xkbcomp $DISPLAY -)
これで設定をみれる。(ここから必要な部分を探せばいい)。
あとは自分で適当に調べたもののメモ。
キーコードを知りたければ
xev
とかすればよかった気がする。
後は一応zshrcにググって書いてあった
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null
とかしているけどこれが何をしていて必要なのかわかってない(-_-;)
なんか記事についてあったらコメントでもtwitterでリプでもくださいな(・・)
追記
「カタカナひらがなローマ字キー」にShiftを割り当てようとおもって上記の通りに
key <HKTG> {[Shift_R]};
としたが適用されなかった。
そこで
key <HKTG> {[Shift_R}]; modifier_map Shift { <HKTG> };
としたら適用された。
あと多分xkbcomp ... というのは必要で書き直したらzshrcを再度読み込む必要がある気がする。