blogこの広告は、90日以上更新していないブログに表示しています。PostgreSQL10.0です。基本方針としては、まず方眼紙を用意して、次に条件判定で塗るべきところを*で塗っているだけです。SQLなので、再帰でごにょごにょします。limitxyで表示する大きさを決めています。WHENで条件判定を行い、どこを塗るのかを決めています。最後にくっつけて出力するところを書きます。条件式を変えると、他にも色々描けます。僕「あれ?よく考えたら結構簡単にできるのでは?」カキカキ〜僕「できた!なんだ簡単じゃん!」みたいな感じでした。最後に信州大学ものづくりサークルkstmは、技術に興味のある信州大学生を募集しています。信州大学公認サークルkstmあと僕、就活中です。05:52SQLで円を描く技術Tweet広告を非表示にするもっと読むコメントを書く2017-11-26ISUCON7本戦で惜敗してきたどうも、馬です。今回のコード前日までやったこと終わってからリンク集チームメイトの記事あーちゃんの記事bgpat.hateblo.jpふぉのさんの記事ISUCON7本戦惜敗記(学生枠)今回のコードgithub.comあーちゃんがブランチ分けたりGitのテクを駆使して、ソースコード管理オペレータをやってくれたので、依頼すると「この時点までこのコードだけ切り戻し」とかやってくれました。あと、Closeされてますけどやることリストを今回も作ってます。github.com前も書いた通り、これは次にやることがわからなくなった時に使うものなので、あまり使わなかった感じですね。縁あって株式会社scoutyさんのオフィスでこのやることリストを作りました。ありがとうございました!scouty.co.jp前日までISUCON7予選、ISUCON5本戦、ISUCON4本戦をやろうとしたのですが、結局ISUCON5本戦はうまく動かずでした。コードを見ると、もうaptで配布されていないgradle2.8をバージョン指定で入れていたので、2.8の部分を削ってビルドが通るようにしたり、PHPのいくつかのライブラリのがおかしかったので直したりしてみたのですが、ちゃんと動いているかよくわからない状態でした。二年も前のアプリケーションだとよくあることかもしれませんが、ISUCONは動かすところからだ!と言われると・・・って感じなので、なんとかしたさがあります。今の環境でも動くようにするということは、スコアに影響があったり、二年前より楽になるor辛くなることがあるので、本番と全く同じ状態ではなくなってしまうところが、難しいところですね・・・。割り切りが必要そうです。ISUCON7予選とISUCON4本戦は楽しんでやれました。三年も前のISUCON4本戦が普通に動いたことは、本当にすごいことだと思います。やったこと今回はあまり仕事できなかった感じですね。チームではいつものごとくDB担当でしたけど、テーブルは綺麗なもんで、いじるところとか特になかったです。queryになるまで行けなかったです。言えばトランザクションのところが遅いと言えば遅かったですけど、かなり触りづらい感じになっていた上、AppのCPU使用率が高すぎて、ボトルネックになっていました。不変値であると判明したm_itemをinitialize時にメモリに読み込む処理をサクッと書いたあとは調査、遅いところを直していこうって感じでした。書いている間にふぉのさんは使うかもしれないRedis入れたりとかの環境の整備、あーちゃんはデプロイの自動化とかやってました。golangでやってたので、pprofで調査したところ、多倍長演算がとんでもなく時間食っていることが判明しました。この時の話し合いで、僕は多倍長演算をなんとかする、あーちゃんは構成を分散させてroom名で使うマシンを切り替える、ふぉのさんはそのサポートって感じで仕事を分けました。結論から言うと、多倍長演算を最後までなんとかできなくて、あまり点数を伸ばすことができませんでした。addingの方はかけ算をサボることができて、まず左から60bitくらいを残すように右にシフトさせたあとかけ算して、右にシフトさせた分を左にシフトし直すことで、誤差範囲内でかなりの計算量を減らすことができたのですが、Priceの方はこれやっちゃダメで、どう頑張っても誤差範囲内に収めることができませんでした。書いてる時はわからなかったのですが、これは当たり前で、買えるかどうかの判定を厳密な値を用いて判定しているからでした。多くもないパターン数だったので、計算結果をキャッシュすればよかったっぽいんですけど、引数が64bit変数だったんでキャッシュは無理って判断してました。競技プログラミングを齧ってる身としては、今から思えばなんで無理って思い込んだんだろうってなってます。あーちゃんの方の分散はある程度うまくいき、ジャッジケースセットによっては一つのマシンに偏ったり、うまく分散したりと、微妙な挙動をしてました。結局やれたのはここまでで、あとはガチャ回していい結果を引こうとしたのですが、うまくひけず、最高点の17000点くらいまでできずに12000点くらいでフィニッシュしました。競技終了後に運営側で一回回して、その点数と競技時間内最後に提出された点数の高い方が取られるので、ちょっといいガチャが引けたっぽくて15000点くらいの結果になりました。再起動試験は2回くらいしかやってなかったので、少し不安だったのですが、ちゃんとFailせずに終わりました。終わってからなんか頭がぼーっとしちゃって、ちょっとしんどかったです。ビール飲んでケーキ食べたらちょっと回復しました。優勝したチームと全く同じ構成(golang+vim)だったので、実質優勝もっといい点数を取りたかったです。来年はあーちゃんがいなくなるので、今回でこのチームも解散です。ISUCON5,6,7と本戦出場率100%を誇るすごくいいチームでした。来年のISUCONはどうするかまだ決めてないのですが、あーちゃんレベルの超人オペレータはなかなかいないので苦戦しそうです。それとコード読める人が欲しい・・・。就職活動するんで、もし面接とかでお会いできれば、よろしくお願いします。去年までと全く同じです。アプリケーションと全体指揮やったこと前日までPixiv-isucon,ISHOCON1を個人で、ISUCON4予選をチームでやった。今年は前日に練習会やるなんて暴挙はしないで、ちゃんと時間を取ってやったので、その時に得た知見を深掘りして調べることができたので、本番に活かせたと思う。大学の学園祭だったので、終わってから打ち合わせ。今年も不測の事態を除いてGolangを使うこと、誰がどこを担当するかを改めて確認した後、やることリストを作っていった。やることリスト、去年まではTrelloを使っていて、あれはあれで便利だったが、今年はGitHubのProjectを使うことにした。僕たちのチームで使う用途であれば、どちらを使ってもそんなに変わらないので、コードの管理まで含めてGitHubに任せてしまうことにしました。サークルのGitHubのチームが、Privateリポジトリ無制限に使えるしね!一応公開してあるので、参考になるかも?github.com全部Issueとして立ててあり、それぞれ仕事ごとに担当者に紐づける的な感じでやってます。大体Doneに移っていますが、ほとんどmustかshouldに入ってる状態でスタートしました。それから、マイルストーンを使っての管理もできればってあーちゃんの提案により、一応全部どこかに所属するようにしました。これはあんま使わなかったな。結論から言うと、このリスト、あんま活用できませんでした。後で書きますが、みんなかなり慌ててしまって、更新をあまりしないで突っ走ってしまったため、Doneに入っている多くが、競技終了後に更新したものです。この方法自体が悪いと言う訳ではなく、もっと冷静にやれば、きちんと活用できたのかなあと。去年までの知見になりますが、本番中は「あれ、この後どーするんだっけ」ってなることが結構あったりして、そんな時に事前にやることリストを作っておくことで、スムーズに次にすることを始められたりします。今回みたいにやることがすでにわかっている(ができない)場合は、あまり活用できなさそうだな〜ってなりました。あるに越したことはないので、本戦もこれ作ります。それからふぉのさんとあーちゃんに買い出しにいってもらい、モンスターを仕入れてもらった。開始前あんま寝れなかった。