verilog書く人

自称ASIC設計者です。どなたかkaggle一緒に出ましょう。

Pycon JP 2019 登壇の感想

感想

資料はこちら。(gifが動きません)

speakerdeck.com

発表動画はこちら。(恥ずかしいので自分では見てません。)

www.youtube.com

採択率が厳しくてどの発表も質が高く、感想書きたいですが、ひとまず登壇の感想を。

技術系カンファレンスの登壇は初めてでした。

発表を終えた後に多くの方に温かい言葉をもらえて、ずっと一人で戦ってきた競プロIDEですが、

新たな理解してくださる方を得れたような、誰も見てないところに光が当たったような、力強い気持ちになれました。

人生で一回くらいは登壇と前から思っていたんですが、一回終えた今は、「次はもっとすごいのをやりたい!」という思いに駆られています。

続きを読む

Rustで文字列を数字に、あるいは数字を文字列にする方法

毎回ググってるのでまとめ。 10進数だけでなく、2進数など、基数変更に対応。

文字と数字の相互変換

charと数値型を行き来したい場合は、to_digit()あるいはfrom_digit()を使う。こっちは覚えやすい。

>> '5'.to_digit(10).unwrap() // 10進数
5
>> std::char::from_digit(10, 36)  // 2番目の引数は基数、この場合は36進数
'a'

文字列の場合

文字列と数値を行き来したい場合は以下のようにする。

>> format!("{:b}", 10) // 2進数
"1010"
>> format!("{}", 10) // 10進数
"10"
>> 10.to_string()  // to_stringは覚えやすいが、10進数固定のようだ。
"10"
>> format!("{:x}", 10) // 16進数
"a"
>> i64::from_str_radix("1010", 2).unwrap()  // 2番目の引数は基数、この場合は2進数
10

to_str_radixだと覚えやすいのだが。

AtCoderで青になるまでにやったこと

一年一ヶ月ほどの苦心の末、ようやく青コーダーになりました。感慨深いです。

f:id:segafreder:20190603235753p:plain
rate

全く独自性のないブログタイトルですが、なるべく他の人が書いてないことを書くようにします。胡散臭い箇所はスキップしてみてください。

続きを読む

AtCoder Beginner Contest 128 E Roadwork 別解

問題

N個の工事が行われ、それぞれの工事はS_i-0.5, t_i-0.5に座標X_iで行われる。

Q人の歩行者が存在し、それぞれ時刻D_iに座標0を出発する。

歩行者は一度工事に遭遇するとそこで停止する。

各歩行者が座標いくつまで歩けるか出力せよ。

解法

想定解法全然違うけど、座標圧縮と遅延評価セグメント木(Range Minimum Query)知っていればそれを使う方が思いつきやすい気がする。

S, T, Xの工事はS - X <= D < T - Xなる時刻Dの歩行者を足止めをすることになる。

複数存在しうるそれらの工事のうち、もっとも小さいXを持つ工事が、その歩行者が歩ける距離である。

そこで、遅延評価セグメント木を用意して、全ての工事について、[S - X, T - X)の最小値をX以下に更新する。

ただし、S - X, T - Xの存在範囲は大きいので、座標圧縮を行う。

この際、クエリを全て先読みして、Dもすべて座標圧縮の対象とする。

セグメント木を全ての工事について更新したら、クエリDに対して[D, D + 1)の最小値を出力すればよい。

ここで、座標圧縮の際に辞書を作って、クエリに対して圧縮後の座標を入手できるようにしておく。 (二分探索してもよい。)

続きを読む

AtCoder Beginner Contest 126 XOR Matching 別解

問題: 非負整数 M (≤17) と非負整数 K (≤109) が与えられる。以下の条件を満たす0 ~ 2M の数列が存在するか判定し、存在するなら一例を示せ。

続きを読む

Ubuntu 18.04でPycharmをランチャーとお気に入りに登録する。

PyCharmを公式からダウンロードして展開して/bin/pycharm.shを叩けば実行できるが、 常に左に表示されているgnomeのお気に入りバーにこんな感じで登録されていた方が立ち上げやすい。

f:id:segafreder:20190429152842p:plain

続きを読む