プログラミングのお題スレ Part22 (831レス)
プログラミングのお題スレ Part22 http://mevius.5ch.net/test/read.cgi/tech/1691038333/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
1: デフォルトの名無しさん [] 2023/08/03(木) 13:52:13.20 ID:/xW45k0z プログラミングのお題スレです。 【出題と回答例】 1 名前:デフォルトの名無しさん お題:お題本文 2 名前:デフォルトの名無しさん >>1 使用言語 回答本文 結果がある場合はそれも 【ソースコードが長くなったら】 (オンラインでコードを実行できる) https://ideone.com/ http://codepad.org/ http://compileonline.com/ http://rextester.com/runcode https://runnable.com/ https://code.hackerearth.com/ http://melpon.org/wandbox https://paiza.io/ 宿題は宿題スレがあるのでそちらへ。 ※前スレ プログラミングのお題スレ Part21 https://mevius.5ch.net/test/read.cgi/tech/1668333636/ http://mevius.5ch.net/test/read.cgi/tech/1691038333/1
802: デフォルトの名無しさん [] 2025/08/16(土) 20:29:06.33 ID:kN4EEg8M >>799 の問題B R https://ideone.com/SdWBKf C++ https://ideone.com/90BpGt http://mevius.5ch.net/test/read.cgi/tech/1691038333/802
803: デフォルトの名無しさん [] 2025/08/16(土) 21:32:58.04 ID:kN4EEg8M >>799 >>802 のC++のithDuplicatedPermutation関数は引数が別の値(例えばn = 5, m = 3)のとき 正しく計算できなかったので修正。Rの方はintではなくdoubleで計算しているので問題ない。 https://ideone.com/uH8dpO http://mevius.5ch.net/test/read.cgi/tech/1691038333/803
804: デフォルトの名無しさん [sage] 2025/08/16(土) 21:46:08.81 ID:VU+jlz0U 32bitだと階乗は12!が限界 http://mevius.5ch.net/test/read.cgi/tech/1691038333/804
805: デフォルトの名無しさん [sage] 2025/08/17(日) 12:07:33.92 ID:R1ye1QDy >>799 ruby https://ideone.com/o2Qlkr >>799 c https://ideone.com/Q4XNBb http://mevius.5ch.net/test/read.cgi/tech/1691038333/805
806: 805 [sage] 2025/08/17(日) 15:08:29.44 ID:R1ye1QDy >>799 ruby 若干の改善 https://ideone.com/oavxRo >>799 c 若干の改善 https://ideone.com/34A07H http://mevius.5ch.net/test/read.cgi/tech/1691038333/806
807: デフォルトの名無しさん [sage] 2025/08/17(日) 15:21:28.95 ID:OrBxx4uG ソートが消えて>>800と同じアルゴリズムになったね http://mevius.5ch.net/test/read.cgi/tech/1691038333/807
808: デフォルトの名無しさん [] 2025/08/17(日) 20:40:30.84 ID:bUKuWE64 >>804 確かにそうだった。15!も14!もintの範囲内に収まらない。>>803でn = 5に変えた場合に正しい 出力になるのはたまたまだった。 >>802をBigInt化するだけで問題なかった。 R https://ideone.com/OgBxTJ C++ https://ideone.com/KLqe3g http://mevius.5ch.net/test/read.cgi/tech/1691038333/808
809: デフォルトの名無しさん [] 2025/08/19(火) 21:08:19.27 ID:zFi0pntB >>799 問題A perl use v5.42; sub nthPermutation($digits, $rank) { my @figures = (1..$digits); my @fact = (1); push @fact, $_ * $fact[-1] for @figures; return join "", map { splice(@figures, $_, 1) } sub($n, $r) { $n-- ? (int($r / $fact[$n]), __SUB__->($n, $r % $fact[$n])) : (); }->($digits, $rank - 1); } for my $i (1, 2, 3, 123456, 234567, 362880) { say "$i -> " . nthPermutation(9, $i); } 1 -> 123456789 2 -> 123456798 3 -> 123456879 123456 -> 416589732 234567 -> 684753219 362880 -> 987654321 http://mevius.5ch.net/test/read.cgi/tech/1691038333/809
810: デフォルトの名無しさん [sage] 2025/08/19(火) 21:28:38.04 ID:ahVErwF8 >>771 scheme (chicken 4.13) https://ideone.com/RREeGy http://mevius.5ch.net/test/read.cgi/tech/1691038333/810
811: 806 [sage] 2025/08/21(木) 22:19:54.42 ID:fAlkh9Aq >>799 ruby https://ideone.com/3TW9Vr ・問題A時に若干端折る http://mevius.5ch.net/test/read.cgi/tech/1691038333/811
812: デフォルトの名無しさん [] 2025/08/21(木) 23:15:48.39 ID:0KQ1xtxb >>799 の逆変換プログラム R https://ideone.com/TU73Yu C++ https://ideone.com/dmETd5 問題A, 問題Bとは違って、順列に出現するユニークな整数は1〜nの連番でなくても良いし、 出現回数はすべて同じでなくても良い。例えば、入力は [3, 1, 4, 1, 5, 9] でも良い (ユニークな整数は1, 3, 4, 5, 9で、出現回数は1が2回、その他が1回)。 http://mevius.5ch.net/test/read.cgi/tech/1691038333/812
813: デフォルトの名無しさん [] 2025/08/22(金) 01:14:43.39 ID:6LYRfbyj >>799 Java https://paiza.io/projects/F5kCIBu6BOVB9QTX7hHWMg http://mevius.5ch.net/test/read.cgi/tech/1691038333/813
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
816: 811 [sage] 2025/08/22(金) 20:26:43.82 ID:m9vhyo0Z >>799 ruby https://ideone.com/vvp0kq ・問題A時に全体的な規則性に着目 ・部分的に着目しちゃったのが>>811 ・何も工夫を入れなかったのが>>806 http://mevius.5ch.net/test/read.cgi/tech/1691038333/816
817: 816 [sage] 2025/08/23(土) 20:27:40.18 ID:uyhDG+iz >>799 ruby 問題Bもケア https://ideone.com/od17Hn http://mevius.5ch.net/test/read.cgi/tech/1691038333/817
818: デフォルトの名無しさん [sage] 2025/08/23(土) 21:01:55.02 ID:gxRFdG35 >>799 java https://ideone.com/qRTy1Z http://mevius.5ch.net/test/read.cgi/tech/1691038333/818
819: 817 [sage] 2025/08/23(土) 23:26:24.12 ID:uyhDG+iz >>799 java https://ideone.com/78psr6 http://mevius.5ch.net/test/read.cgi/tech/1691038333/819
820: デフォルトの名無しさん [] 2025/08/24(日) 21:13:57.80 ID:ubCw2JoQ >>812の逆変換プログラムは>>808の順変換プログラムを流用したから処理に無駄があった。 逆変換用に一から書き直したらすっきりした。 R https://ideone.com/jYUHe1 C++ https://ideone.com/Lne3AQ http://mevius.5ch.net/test/read.cgi/tech/1691038333/820
821: 819 [sage] 2025/08/25(月) 00:28:39.45 ID:IbSJkZLt >>799 java Iterable<int[]> https://ideone.com/NRTZpa http://mevius.5ch.net/test/read.cgi/tech/1691038333/821
822: デフォルトの名無しさん [sage] 2025/08/27(水) 00:40:48.46 ID:AbNZa8yo >>799 ocaml https://ideone.com/1Jx1Q8 >>799 scheme (chicken 4.13) https://ideone.com/n7pIFw http://mevius.5ch.net/test/read.cgi/tech/1691038333/822
823: デフォルトの名無しさん [sage] 2025/08/27(水) 21:02:12.94 ID:AbNZa8yo >>799 octave https://ideone.com/RH6xXb http://mevius.5ch.net/test/read.cgi/tech/1691038333/823
824: デフォルトの名無しさん [] 2025/08/27(水) 21:46:51.59 ID:B7vE54ji >>820の逆変換プログラムのC#版 https://ideone.com/8HpCN9 LINQのTakeWhileメソッドとSumメソッドを組み合わせたらすっきり書けた。 http://mevius.5ch.net/test/read.cgi/tech/1691038333/824
825: 821 [sage] 2025/08/28(木) 21:01:46.43 ID:mnaa+hsk >>799 java https://ideone.com/aKkfqN ・next()ごとに複製しない版。する版は >>821 ・hasNext()側で次を準備。next()側なのは >>821 http://mevius.5ch.net/test/read.cgi/tech/1691038333/825
826: デフォルトの名無しさん [] 2025/08/29(金) 13:52:26.21 ID:xrZF+zBK >>799 https://ideone.com/JLM8r8 C++ http://mevius.5ch.net/test/read.cgi/tech/1691038333/826
827: デフォルトの名無しさん [sage] 2025/08/29(金) 20:09:32.40 ID:VEuLqGzD >>812 ruby 2.5.5 https://ideone.com/tzzN04 ・tallyあるのは2.7以降 >>812 octave https://ideone.com/ebJd9k http://mevius.5ch.net/test/read.cgi/tech/1691038333/827
828: デフォルトの名無しさん [] 2025/08/29(金) 22:34:59.67 ID:uVFRnDIW >>802をCMD (Windowsバッチファイル) に移植 @echo off & setlocal EnableDelayedExpansion echo 【問題A】 for %%i in (1, 2, 3, 123456, 234567, 362880) do call :ithDuplicatedPermutation 9 1 %%i echo. echo 【問題B】 for %%i in (1, 2, 3, 123456, 234567, 369600) do call :ithDuplicatedPermutation 4 3 %%i exit /b :ithDuplicatedPermutation set /a n = %1, m = %2, i = %3, L = 0, P = 1 for /l %%j in (1, 1, %n%) do ( set /a c%%j = %m% for /l %%k in (1, 1, %m%) do set /a L += 1, P = P * L / %%k ) set a=%i% → for /l %%j in (1, 1, %L%) do ( set /a done = 0 for /l %%k in (1, 1, %n%) do ( if !done! equ 0 ( set /a "q = P * c%%k / (L - %%j + 1)" if !i! leq !q! ( set a=!a!%%k set /a c%%k -= 1, P = q, done = 1 ) else ( set /a i -= q ) ) ) ) echo %a% http://mevius.5ch.net/test/read.cgi/tech/1691038333/828
829: デフォルトの名無しさん [] 2025/08/29(金) 22:35:22.12 ID:uVFRnDIW -- 実行結果 -- 【問題A】 1 → 123456789 2 → 123456798 3 → 123456879 123456 → 416589732 234567 → 684753219 362880 → 987654321 【問題B】 1 → 111222333444 2 → 111222334344 3 → 111222334434 123456 → 222331434114 234567 → 324424331112 369600 → 444333222111 http://mevius.5ch.net/test/read.cgi/tech/1691038333/829
830: デフォルトの名無しさん [sage] 2025/08/30(土) 17:37:04.21 ID:zI+bKiSo >>812 ocaml https://ideone.com/SfsytC >>812 scheme (chicken 4.13) https://ideone.com/jwWrRt http://mevius.5ch.net/test/read.cgi/tech/1691038333/830
831: 830 [sage] 2025/09/02(火) 21:36:10.92 ID:MM5Gazf9 >>812 scheme (chicken 4.13) https://ideone.com/fZufck ・集計部分をalistに変えてみただけ http://mevius.5ch.net/test/read.cgi/tech/1691038333/831
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s