プログラミングのお題スレ Part22 (831レス)
プログラミングのお題スレ Part22 http://mevius.5ch.net/test/read.cgi/tech/1691038333/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
814: デフォルトの名無しさん [sage] 2025/08/22(金) 06:55:21.34 ID:qlaiAqZd >>812 Rust >>799の逆変換の重複順列の何番目か算出 use itertools::Itertools; use num::{BigUint, One}; // 重複順列の何番目かを求める ex. "222331434114" → "123456"番目 fn to_nth(input: &str) -> String { // 出現数 let (mut counts, chars): (Vec<usize>, Vec<char>) = input.chars().sorted().dedup_with_count().multiunzip(); // index化input let input: Vec<usize> = input.chars().map(|c| chars.iter().position(|&c0| c0 == c).unwrap()).collect(); // 階乗関数 fn factorial(x: usize) -> BigUint { (1..=x).fold(BigUint::one(), |p, x| p * x) } // 重複順列の総数 let mut whole: BigUint = factorial(input.len()) / counts.iter().map(|&x| factorial(x)).product::<BigUint>(); // nth番目を算出 (1..=input.len()).rev().zip(input).fold(BigUint::one(), |mut nth, (len, index)| { // 自分より前までの総数をnthに足す nth += &whole * counts[..index].iter().sum::<usize>() / len; // 自分の総数へ更新 whole *= counts[index]; whole /= len; counts[index] -= 1; nth }) .to_string() } http://mevius.5ch.net/test/read.cgi/tech/1691038333/814
815: デフォルトの名無しさん [sage] 2025/08/22(金) 06:56:46.07 ID:qlaiAqZd >>814の検証分 fn main() { assert_eq!(to_nth("123456789"), "1"); assert_eq!(to_nth("123456798"), "2"); assert_eq!(to_nth("123456879"), "3"); assert_eq!(to_nth("416589732"), "123456"); assert_eq!(to_nth("684753219"), "234567"); assert_eq!(to_nth("987654321"), "362880"); assert_eq!(to_nth("111222333444"), "1"); assert_eq!(to_nth("111222334344"), "2"); assert_eq!(to_nth("111222334434"), "3"); assert_eq!(to_nth("222331434114"), "123456"); assert_eq!(to_nth("324424331112"), "234567"); assert_eq!(to_nth("444333222111"), "369600"); assert_eq!(to_nth("111333442545225"), "123456"); assert_eq!(to_nth("555444333222111"), "168168000"); assert_eq!(to_nth("11111222223333344444555556666677777899⑩⑩889889⑩⑩⑩9"), "123456"); assert_eq!(to_nth("⑩⑩⑩⑩⑩999998888877777666665555544444333332222211111"), "49120458506088132224064306071170476903628800"); assert_eq!(to_nth("314159"), "127"); assert_eq!(to_nth("3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067"), "11503448027594046007734790817193859678406683579515952737315863863451534425766911708030454269"); assert_eq!(to_nth("なまむぎなまごめなまたまご"), "10515454"); assert_eq!(to_nth("かえるぴょこぴょこみぴょこぴょこあわせてぴょこぴょこむぴょこぴょこ"), "8273693808428448039784"); } http://mevius.5ch.net/test/read.cgi/tech/1691038333/815
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.045s