プログラミングのお題スレ Part22 (859レス)
プログラミングのお題スレ Part22 http://mevius.5ch.net/test/read.cgi/tech/1691038333/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
640: デフォルトの名無しさん [sage] 2025/02/17(月) 13:08:08.60 ID:lz3iaMcC お題:ランダムな数列が与えられる。隣り合う数字が偶数同士の時、あいだに0を。奇数同士の時は1を挿入し、それ以外は何も挿入しない In < 123346 Out > 12313406 http://mevius.5ch.net/test/read.cgi/tech/1691038333/640
641: デフォルトの名無しさん [sage] 2025/02/17(月) 13:47:54.59 ID:1CKZ5rpi >>640 ruby DATA.readlines(chomp:1).map{|e| a=e.split("").map{|f| f.to_i} (0..a.size-2).each{|n| a[n]=a[n]*10 if (a[n]%2==0 && a[n+1]%2==0) a[n+1]=a[n+1]+10 if (a[n]%2==1 && a[n+1]%2==1)} puts "IN < #{e}\nOUT > #{a.map{|f| f.to_s}.join}"} __END__ 123346 http://mevius.5ch.net/test/read.cgi/tech/1691038333/641
642: デフォルトの名無しさん [sage] 2025/02/17(月) 20:02:39.61 ID:SzDlV4TD >>640 lisp https://ideone.com/DV9DeR http://mevius.5ch.net/test/read.cgi/tech/1691038333/642
643: デフォルトの名無しさん [] 2025/02/17(月) 20:47:46.22 ID:2enU2rA/ >>640 PowerShell (一般的な文字コードを想定) function f([string]$s) { $rprev = 2 -join ([char[]]$s |% { $r = $_ % 2 if ($r -eq $rprev) {$r} $rprev = $r $_ }) } 123346, 12333468, 1, "" |% {"$_ → $(f $_)"} [実行結果] 123346 → 12313406 12333468 → 123131340608 1 → 1 → http://mevius.5ch.net/test/read.cgi/tech/1691038333/643
645: デフォルトの名無しさん [sage] 2025/02/17(月) 20:58:11.16 ID:UxhkW11K >>640 Rust fn f(input: &[u8]) -> Vec<u8> { input.windows(2).fold(Vec::new(), |mut vec, w| { if vec.is_empty() { vec.push(w[0]); } if (w[0] ^ w[1]) & 1 == 0 { vec.push(w[0] & 1 + b'0'); } vec.push(w[1]); vec }) } fn main() { assert_eq!(f(b"123346"), b"12313406"); assert_eq!(f(b"12333468"), b"123131340608"); } http://mevius.5ch.net/test/read.cgi/tech/1691038333/645
647: デフォルトの名無しさん [sage] 2025/02/18(火) 17:51:16.96 ID:ZRfTlf8i Vecのnewやpushなど普通にcollectに任せる手もあるね 条件付き挿入は汎用にOptionで取捨を示してflat_mapとflattenでも可能 前値など状態を保ちつつ1つにまとめるならfoldでイテレータに流すならscan 一例としてこんな感じ fn f(input: &[u8]) -> Vec<u8> { input .iter() .scan(None, |pre, &x| { Some([ pre.replace(x & 1) .and_then(|p| (p == x & 1).then_some(p + b'0')), Some(x), ]) }) .flat_map(|list| list.into_iter().flatten()) .collect() } >>640 Rust http://mevius.5ch.net/test/read.cgi/tech/1691038333/647
648: デフォルトの名無しさん [] 2025/02/19(水) 21:30:14.30 ID:LKzHskwz >>640 >>643-644の3つのfを上から順にf1, f2, f3とし、長い文字列を引数として呼び出したときの 実行時間を比較すると、 $s = -join (1..10000) $t = 1..3 |% {(iex "measure-command {f$_ $s}").ticks} $tmin = ($t | measure -min).minimum 1..3 |% {"f$_`: {0:0.00}倍" -f ($t[$_ - 1] / $tmin)} [実行結果の一例] f1: 34.78倍 f2: 1.00倍 f3: 14.93倍 大差でf2 < f3 < f1となった。インタプリタ言語のコード実行は遅いので、処理を自分で 書くほど遅くなり、ライブラリ関数等に丸投げすれば速くなることによる。 https://ideone.com/GVewWL コンパイラ言語のC#で同様の比較をすると (PowerShellより速いので文字列を長くし、 f1の改良版としてStringBuilder使用のf4を追加した)、当然f4< f1 < f2 < f3になった。 http://mevius.5ch.net/test/read.cgi/tech/1691038333/648
651: 警備員[Lv.21] [] 2025/02/22(土) 15:11:12.54 ID:nEyoRU5r >>640 Perl5 https://paiza.io/projects/gW_sI1_VqokddmYSJ6Lj2A http://mevius.5ch.net/test/read.cgi/tech/1691038333/651
652: 警備員[Lv.21] [] 2025/02/22(土) 15:42:54.65 ID:nEyoRU5r >>640 Kotlin https://paiza.io/projects/mAEXhhFdJiHVQWYtHvIP-g http://mevius.5ch.net/test/read.cgi/tech/1691038333/652
653: 警備員[Lv.21] [] 2025/02/22(土) 15:53:04.03 ID:nEyoRU5r >>640 C https://paiza.io/projects/7L9vpqOvFcbZfv9vO5GPvA http://mevius.5ch.net/test/read.cgi/tech/1691038333/653
654: デフォルトの名無しさん [] 2025/02/22(土) 23:33:07.08 ID:k7PDvk0j >>640 Haskell https://ideone.com/U3SvTZ http://mevius.5ch.net/test/read.cgi/tech/1691038333/654
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.036s