2026-07-01から1ヶ月間の記事一覧
https://rosalind.info/problems/fibd/この問題も行列を使いますが、大きさが最初から決まっていません。そういうときはndarrayを使います。 Cargo.tomlに [dependencies] ndarray = "0.13.0"と書いて、 use ndarray::prelude::*; fn make_matrix(m: usize) …
https://rosalind.info/problems/subs/次の文字列を探すには、スライスにfindを実行させればよいです。ただし、罠があります。返ってくるpositionはスライス後のものなので、スライスより前の長さを足さないといけないです。
https://atcoder.jp/contests/abc467/tasks/abc467_eに何回1を加えるかを決めると、までが次々と決まります。に1を加える回数をとすると、入力例1で加える回数は、となります。 ただし、は[0, 10)の値が取れて、は[0, 6)ではですが、[6, 10)ではとなります。…
https://rosalind.info/problems/gc/FASTAを読むのはこんな感じです。 fn read_fasta(file: std::fs::File) -> Vec<(String, String)> { let reader = BufReader::new(file).lines().map(|r| r.unwrap()); let lines: Vec<String> = reader.collect(); let heads: Vec<usize></usize></string>…
https://rosalind.info/problems/fib/漸化式の問題は行列を使いたくなります。Rosalindは勝手にライブラリを使えるので使いましょう。 大きさが小さくて決まっていれば、nalgebraというライブラリを使うとよいそうです。 Cargo.tomlに [dependencies] nalgeb…
https://atcoder.jp/contests/abc467/tasks/abc467_d2点の中点を通る線分の垂直線をそれぞれ引きます。それが交わればそこが共通の中心です。 垂直線が平行でなければ交点があります。平行なら、同じ直線上なら共通の中心になりうる点が無限にあることになり…
RosalindをRustで解きなおしていきます。 ただし、答えは書けないので、Rustで注意する点を書いていきます。https://rosalind.info/problems/dna/テキストファイルはこんなに読みます。 use std::env; use std::fs::File; use std::io::{self, BufRead, BufR…
https://atcoder.jp/contests/abc466/tasks/abc466_d行と列と別にどこにコマがあるか管理すればよいです。 // Placing Rooks #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String::new();</t:>…
https://atcoder.jp/contests/abc465/tasks/abc465_d入力例1の最初のケースでは、11 → 3 → 9となりますが、共に3で割ると3だからこうなりますね。では、8と9なら、8 → 2 → 0 → 1 → 3 → 9で5回かかります。 こう見ると3進法で考えるとよさそうですね。11は3進…