タグ

ブックマーク / qiita.com/tanakh (4)

  • Rustで競技プログラミングの入出力を自動的にやるマクロ - Qiita

    Rust競技プログラミングの入力をスッキリ記述するマクロ の続編的なやつです。 モチベーション AtCoderRust環境も新しくなって、バージョンが新しくなったり一部の外部のcrateが使えるようになったり、ずいぶんいろいろできるようになりました。前回の記事では、コピペして使えるようなコンパクトで効果的なものを目指していましたが、そういう制約がない状況でならもっといろいろできるのではないかと考えていました。 もうちょっとだけ便利にできそうな気がしたので、とりあえずアイデアを形にしてみるかという感じで書いてみました。 アイデア 一般的に、人は標準入出力とやり取りをするのは苦手だけれども、関数の引数と返り値を扱うのは呼吸をするように容易に行えるものです。そして一般的に、競技プログラミングのタスクというのは入力が与えられて答えを出力するという自然に関数として表現できるものです。実際にTop

    Rustで競技プログラミングの入出力を自動的にやるマクロ - Qiita
    Nyoho
    Nyoho 2020/08/15
    続編が来ていた。
  • Rustで競技プログラミングの入力をスッキリ記述するマクロ - Qiita

    モチベーション Rustで標準入力から望みのデータを入力するのは意外と面倒で、標準ライブラリにあるものを使って素直に書こうとすると、結構コード量がかさみます。例えば、文字列を一行読み込むのに、 let s = { let mut s = String::new(); // バッファを確保 std::io::stdin().read_line(&mut s).unwrap(); // 一行読む。失敗を無視 s.trim_right().to_owned() // 改行コードが末尾にくっついてくるので削る };

    Rustで競技プログラミングの入力をスッキリ記述するマクロ - Qiita
    Nyoho
    Nyoho 2018/08/21
    いーただーきまーす
  • 継続モナドによるリソース管理 - Qiita

    継続モナドって何に使うんだ問題に対する一つの例。 リソース管理の問題 プログラミングをやっていると必ずまとわり付いてくるのがリソース管理の問題です。ここで指すリソースというのは、ファイルのハンドルだとか、ソケットだとか、排他処理のためのロックだとか、グラフィックのハンドルだとかそういう話で、GCのない言語だとメモリの管理もこれに含まれるでしょうか。 言うまでもなく、リソースを確保した後はしかるべきタイミングで確実に解放してやる必要があります。しかし往々にして、現実のプログラムではリソースの解放漏れが発生してしまいます。単に解放するコードを書き忘れると言うのが一番単純でしょうもない理由ですが、それでも、C言語のようにリソース解放のための特別な仕組みを持たない言語では、これを徹底するのも結構骨の折れることだったりします。それはともかく、もう少し高尚な悩みとしては、例外との組み合わせで発生する解

    継続モナドによるリソース管理 - Qiita
    Nyoho
    Nyoho 2015/06/21
    ネストを深くしなくていいのはすごく気持ちよさそうだなー。勉強しよう。
  • 「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」をHaskellでやってみた - Qiita

    Haskellだと問題1が一番難しいともっぱらの噂の問題をやってみました。 問題1 forループ、whileループ、および再帰を使用して、リスト内の数字の合計を計算する3つの関数を記述せよ。 再帰のコードが一番簡単なので、まずはそれから。 ではついに一番難しいforループとwhileループのコードを書いてみましょう。 まず問題になるのが、Haskellにはfor文もwhile文もないというところです。まずはforループを作らなければなりません。そもそもforループ、whileループというのが、何を示すのか?というのがあんまり自明ではないのですが、C言語でのforループとwhileループだと考えましょうか。 for :: Monad m => a -> (a -> Bool) -> (a -> a) -> (a -> m ()) -> m () for init cond incr body

    「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」をHaskellでやってみた - Qiita
    Nyoho
    Nyoho 2015/06/03
  • 1