3DプリンタとITとプリキュアのブログ

大学でプログラミングに出会って、ズブズブにハマってしまった情報系学生の書くブログです。

Amazon Echo Dotをさわってきた話

T-Lab. Academy Tinkering & Hacking Event 2Days に参加してきました。

 

続きを読む

ICPC2017国内予選参加記

ICPC2017の国内予選に参加しました。

@wk1080idさんと@yebityonさんとprime_rabbits_houseで出場しました。

 

PCはMacBook AirでエディタはEmacsでした。

 

弊大学からは6チームが参加していて、うち3チームが弊サークル、残りの3チームが競プロをしている研究室からの参加でした。

 

プリンタ係としてOB・OGの方に来て貰いました。ありがとうございました。

 

 まず始まってすぐにプリンタトラブルで10分くらい問題が印刷できなかったので、3人でAを通して、Bを

読んでる間に問題が届いたので、@wk1080idさんにBを、@yebityonにCを任せて僕はDを担当しました(レート的に普通は担当順逆じゃないですかねぇ......)

 

@wk1080idさんがBをバグらせたので、Cの解法が分かってた@yebityonさんにPCを交代してCの実装に入りました。その頃僕はDが分からず着席を担当していました。

 

@yebityonさんが、ささっとCを通してくれたので、@wk1080idさんと再び交代してBのデバッグしている間に、僕と@yebityonさんは他の問題を読んでいました。

 

Dは二部マッチングっぽい(嘘考察)とかFは去年の会津合宿で作った折り紙の問題に似てるね(違う)とか害活をしていました。

 

f:id:cameremon84:20170717230217j:image

 /うん うん それもまた ガイカツだね。

 

バグが取れないらしいBの問題概要を@wk1080idさんに教えてもらって、デバッグを試みましたが、結局よく分からなかったので僕がCで書き直しました。

 

が、案の定バグってWAを生やしてたら、@wk1080idさんに答えの判定が間違っていることを指摘されてAC。

 

しゅもん on Twitter: "模擬国内ではICSC(International Chakuseki Surudake Contest)の練習をしていたのでハイライトには含まれない"

 

なんとか模擬国内の二の舞は避けることができました(これは嘘で、WAを生やしているのでやっぱりダメ)

 

その後、Hが一瞬解けそうかと思ったらコーナーケースで死んでたり、誰も二部マッチングが書けなかったので二部マッチングの勉強会がスタートしかけたり(そもそも二部マッチングではないのでやらなくて正解だった)、Eは解けそうだけど解けなかったりしてました。

 

残り30分くらいで GはBFSで最短経路長を調べてDFSで最短経路を求めるのを4回繰り返したら解けるんじゃね?って言って実装を始めましたが、時間内に終わらず(しかも誤解法だった)

 

最終的にABCの3完で99位した。@vvataarneプロ率いる一回生チームも同じくABCの3完でまさかの98位。ちょっと負けて悲しい。とりあえず研究室競プロerの3チームには勝つことできたので良かったです。

 

去年はA問題だけ解いて1完だったので、ちょっぴり成長はしてるのかな?

 

ちなみにチーム名のprime_rabbits_houseは575です(5文字7文字5文字)

C言語で2048を作る

エスケープシーケンスを使って、ターミナルでも色変えたり太字にしたり、なんやらかんやらができることを知ったので、2048を作ってみました。

エスケープシーケンス

このサイトにエスケープシーケンスが一通りまとめられていたので、備忘録。

bash:tip_colors_and_formatting - FLOZz' MISC

このサイトに載っているものだと、bashで表示するならCだろうがシェルスクリプトだろうがJavaだろうがなんでも使えます。 環境次第では使えないエスケープシーケンスもあるけど、基本的にVT100互換なら全部使えるらしい。

いや、めんどくさくね?

C言語でいちいちprintfにあんなこと書くのはしんどいし、タイポでバグ埋め込みそうなので、cursesという便利なライブラリがあります。

当たり前だけどC標準じゃなくてUNIX系でしか使えません。

Windowsは知らん。 Windows APIGUI作ってどうぞ。

名前の由来はエスケープシーケンスを使うと呪文(curse)みたいになるかららしい。

想像以上に色々できるのですごいですよ。

現在はncursesという新しいのがあるので、そっちを使いましょう。

ncurses.hを使おう

ncurses.hに含まれる関数とかマクロの説明はめんどくさいので、自分が勉強に使ったサイトを貼っておきます。

curses

ncurses

マウス

この辺を一通り読んだ後は、ncurses.h自体を読むと良いかも。マクロの細かい動きが読めますよ。

2048の概要

ようやく本題に入ります。

2048なので、少なくとも

  1. タイルの移動

  2. タイルの重ね合わせ

  3. タイルの生成

  4. ゲームオーバーの検知

の4つの要素が必要です。

加えて今回は、

  • スコア計算機能

  • セーブ&ロード機能

  • リトライ機能

  • 中断機能

  • ランキング機能

も実装しました。

GitHub - shumon84/2048: 2048 for C/C++

とりあえずcloneしてmakeすれば"2048"という名前の実行ファイルが出来上がるはずです。

遊び方

READMEを読んでね。 矢印キーかwasdで移動できるので、それさえ覚えていればひとまずプレイできると思います。

doubleとfloatの計算速度の話

C言語ではdouble型とfloat型の計算速度に違いがあることを知ったので、その話です。

 

float型の方が速い?

double型は64bitでfloat型は32bitなのだから、普通は精度の低いfloat型の計算の方が速そうな気がしますが、実はdouble型の方が少し速いみたいです。

ならintとlongならlongの方が速いかと言うと、そういうわけではなく普通にintの方が高速です。

 

なぜdoubleの方が速いのか

理由はCPUの構造にあるみたいです。

どうもCPUに乗っている浮動小数点演算ユニットは

double用に作られているので、floatで計算したい場合は1度doubleにキャストして計算した後に再度floatにキャストする必要があるらしく、結果としてdoubleで計算した方が速くなります。

 

 

まあ競プロでは問題になるような差ではないですし、そもそも基本的にdoubleしか使わないので競プロには関係ないですね。

ポートフォリオサイトを作ったよ!

某サークルOBの3DCGやってる方が、ポートフォリオサイトを作っていて良さげだったので、僕も作ってみました。

 http://shumon84.sakura.ne.jp/ShumonArtWorks/

 

今までに作っ3Dモデルの中で、個人的に気に入ってるモデルと、趣味で作ってる痛グラスを載せています。

そのうち、Sketchfabとか埋め込んだりダウンロードページ作ったり拡張していくかもしれません。

 

さくらレンタルサーバを初めて使いました。

というかwebサーバ構築したのも初。

 

サイト自体はSparkleというソフトで作成しました。

OS X用のホームページ作成ソフトです。

Sparkle, Visual web design

 

無料版では、インストールされているMacにhtmlやcssを保存できず、FTP経由でwebサーバ上にアップロードすることしかできません。

また、作ったホームページの最上部にもSparkleの広告が入ってしまいます。

他の機能は無料版と有料版で大きな違いはなさそうです。

 

これ要するにwebサーバ上でならhtml編集できるんじゃね?って思ったらできました。

普通に広告も消せたんですけど、こんなにガバガバでも儲かってるんだろうか......

色んなアルゴリズムでビット数をカウントしてみる

ビット数をカウントするアルゴリズムには色んな種類があるそうで、そのうち4つのアルゴリズムC言語による実装とベンチマークです。

続きを読む

RUPC2017 参加記

RUPC2017に参加したので、その参加記です。

続きを読む