プログラミングのお題スレ Part22 (858レス)
プログラミングのお題スレ Part22 http://mevius.5ch.net/test/read.cgi/tech/1691038333/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
234: デフォルトの名無しさん [sage] 2024/02/14(水) 09:32:06.19 ID:JjlrBdlD お題:数値が入力されるのでその数値に最も近い回分数を出力せよ 回分数とは回分になっている数(負数含まず)のことである 最も近い回分数が2つある場合は2つとも出力せよ 入力 0 出力 0 入力 17 出力 22 入力 100 出力 99 出力 101 http://mevius.5ch.net/test/read.cgi/tech/1691038333/234
235: デフォルトの名無しさん [] 2024/02/14(水) 15:20:24.32 ID:VoM/Kva2 >>234 lisp https://ideone.com/MvDoGf http://mevius.5ch.net/test/read.cgi/tech/1691038333/235
236: デフォルトの名無しさん [sage] 2024/02/14(水) 21:10:48.99 ID:/8p4lTpf >>234 ocaml https://ideone.com/4RtyBj >>234 rust https://ideone.com/eLCvSJ http://mevius.5ch.net/test/read.cgi/tech/1691038333/236
238: デフォルトの名無しさん [sage] 2024/02/15(木) 21:30:35.17 ID:MveN6p4/ >>234 Rust fn foo(n: usize) -> (usize, Option<usize>) { let n2b = |n: usize| { let mut o = Some(n); iter::from_fn(|| { let n = o.take()?; o = (n >= 10).then(|| n / 10); Some((n % 10) as i8) }).collect::<Vec<i8>>() }; let b2n = |b: &[i8]| b.iter().rev().fold(0_usize, |n, b| n * 10 + *b as usize); let pal = |b: &mut [i8]| { let len = b.len() / 2; let (l, u) = b.split_at_mut(len); iter::zip(l, u.iter().rev()).for_each(|(l, u)| *l = *u); }; let inc = |b: &mut [i8]| { let len = b.len() / 2; let mut c = 1; b[len..].iter_mut().for_each(|b| { *b += c; if *b > 9 { *b = 0; c = 1; } else { c = 0; }}); }; let dec = |b: &mut [i8]| { let len = b.len() / 2; let mut c = 1; b[len..].iter_mut().for_each(|b| { *b -= c; if *b < 0 { *b = 9; c = 1; } else { c = 0; }}); }; let fix = |b: &mut [i8]| { if b.last() == Some(&0) { if b.len() & 1 == 0 { b[(b.len() - 1) / 2] = 9; } true } else { false } }; let mut b = n2b(n); pal(&mut b); let n1 = b2n(&b); match n.cmp(&n1) { Ordering::Equal => return (n, None), Ordering::Greater => inc(&mut b), Ordering::Less => dec(&mut b), } if fix(&mut b) { b.pop(); } pal(&mut b); let n2 = b2n(&b); match n.abs_diff(n1).cmp(&n.abs_diff(n2)) { Ordering::Less => (n1, None), Ordering::Greater => (n2, None), Ordering::Equal => (n1, Some(n2)), } } http://mevius.5ch.net/test/read.cgi/tech/1691038333/238
239: デフォルトの名無しさん [] 2024/02/15(木) 22:00:50.95 ID:fu0tHwRa >>234 >>237は入力が1〜9のとき出力が正しくなかった。function内の1行目に if ($n -le 9) {return $n} を 挿入すると修正される。 Rでは添字の開始値は1で添字0では空のデータが返るので、入力が1〜9のときの場合分けは不要。 []演算子と+演算子を文字列でも使えるように再定義した。 https://ideone.com/PP5swB Dでは添字範囲指定は半開区間なので、入力が1〜9のときの場合分けは不要。 https://ideone.com/hvNBia http://mevius.5ch.net/test/read.cgi/tech/1691038333/239
240: デフォルトの名無しさん [sage] 2024/02/15(木) 23:18:01.58 ID:IMdr4idU >>234 c https://ideone.com/mWihci http://mevius.5ch.net/test/read.cgi/tech/1691038333/240
241: 9 [sage] 2024/02/16(金) 02:56:10.41 ID:7jtCAGu+ >>234 Perl5 for $n (0,17,100,123459321) { my %a; for (0..$n) { $i = $n - $_; $a{$i} = $i if 0 <= $i and $i =~ /^((\d)(?1)\2|\d?)$/; $j = $n + $_; $a{$j} = $j if $j =~ /^((\d)(?1)\2|\d?)$/; last if keys %a; } @a = keys %a; print "$n -> @a\n"; } ※見やすくするためインデントを全角スペースに置換してあります。 実行結果 $ perl 22_234_palindromic_number.pl 0 -> 0 17 -> 22 100 -> 99 101 123459321 -> 123464321 123454321 http://mevius.5ch.net/test/read.cgi/tech/1691038333/241
243: 9 [sage] 2024/02/16(金) 14:47:55.29 ID:TIAwaOOw >>234 Perl5、小さい方の検索は0で止まるので負の値を避ける必要はなかった、書き直し。 $r = qr/^((\d)(?1)\2|\d?)$/; for $n (0,17,100,123459321) { my %a; for (0..$n) { $a{$n - $_} = 1 if ($n - $_) =~ $r; $a{$n + $_} = 1 if ($n + $_) =~ $r; last if @a = keys %a; } print "$n -> @a\n"; } http://mevius.5ch.net/test/read.cgi/tech/1691038333/243
244: デフォルトの名無しさん [sage] 2024/02/16(金) 21:57:03.19 ID:cLyPSkE5 >>234 pascal https://ideone.com/F1gAKR http://mevius.5ch.net/test/read.cgi/tech/1691038333/244
245: 17 [] 2024/02/16(金) 23:58:17.22 ID:C4FuIAno >>234 Kotlin 何か画期的なアルゴリズムを使ったわけではなく、むしろほとんど何も考えずただ作られただけのプログラム。 https://paiza.io/projects/S5qsLnHz_pZD3um9jYRg_Q http://mevius.5ch.net/test/read.cgi/tech/1691038333/245
246: 9 [sage] 2024/02/17(土) 02:10:36.54 ID:K8P5qDCx >>234 Python3 def f(k): s = str(k) return s == s[::-1] for n in [0, 17, 100, 123459321]: l = set() for i in range(n + 1): if f(n - i): l.add(n - i) if f(n + i): l.add(n + i) if l: print(n, l) break ※見易くするためインデントは全角空白に置換してあります 実行結果 $ python3 22_234_palindromic_number..py 0 {0} 17 {22} 100 {99, 101} 123459321 {123454321, 123464321} http://mevius.5ch.net/test/read.cgi/tech/1691038333/246
247: デフォルトの名無しさん [sage] 2024/02/17(土) 18:14:20.87 ID:nUY+CX2J >>234 pascal https://ideone.com/kRXq6z ・dynamic array 使用 http://mevius.5ch.net/test/read.cgi/tech/1691038333/247
248: デフォルトの名無しさん [] 2024/02/17(土) 19:03:53.65 ID:eWGoJOTY >>234 C++ https://mevius.5ch.net/test/read.cgi/tech/1434079972/126 http://mevius.5ch.net/test/read.cgi/tech/1691038333/248
249: デフォルトの名無しさん [] 2024/02/17(土) 20:00:17.98 ID:k6cg1rdP >>234 >>239のC#版 https://ideone.com/glAEMw Julia版 https://ideone.com/cbP5Dm http://mevius.5ch.net/test/read.cgi/tech/1691038333/249
250: デフォルトの名無しさん [sage] 2024/02/17(土) 20:51:00.88 ID:nUY+CX2J >>234 octave https://ideone.com/MXux5X http://mevius.5ch.net/test/read.cgi/tech/1691038333/250
251: デフォルトの名無しさん [sage] 2024/02/17(土) 21:45:58.19 ID:nUY+CX2J >>234 ruby https://ideone.com/0pvK4o http://mevius.5ch.net/test/read.cgi/tech/1691038333/251
258: デフォルトの名無しさん [sage] 2024/02/18(日) 18:34:19.30 ID:rWy6ZYAH >>234 ruby https://ideone.com/N0w91j f = -> n { (0..n).lazy.map {|i| [n - i, n + i].select {|x| x.to_s.reverse.to_i == x}}.find(&:any?).uniq } >>252 (`・ω・´)ゞ 誤:a - 1, a + 1 正:a - 1, b + 1 http://mevius.5ch.net/test/read.cgi/tech/1691038333/258
259: デフォルトの名無しさん [sage] 2024/02/18(日) 19:41:35.69 ID:rWy6ZYAH >>234 dart https://ideone.com/e23wRv void main() { var rev = (n) => int.parse(n.toString().split('').reversed.join()); var f = (n) => Iterable.generate(n + 1).map((i) => [n - i, n + i].where((x) => x == rev(x))).firstWhere((a) => a.isNotEmpty).toSet().toList(); print([0, 17, 100].map((n) => [n, f(n)])); } http://mevius.5ch.net/test/read.cgi/tech/1691038333/259
269: デフォルトの名無しさん [] 2024/02/21(水) 23:42:23.78 ID:bqTl0uQM >>234 >>249をC++で書き換え(入力値は64ビット整数の範囲内限定) https://ideone.com/e1AM8A 元々はCで書き、4行目はなし、15行目と24行目はstrrev(s + i);だったが、Windowsのgccでは コンパイルできたのにideoneではできなかったので、仕方なくC++にしてstd::reverseで代用した。 http://mevius.5ch.net/test/read.cgi/tech/1691038333/269
270: デフォルトの名無しさん [] 2024/02/22(木) 00:34:50.13 ID:+mJgzEZf >>234 lisp >>266を参考に>>249(C#)を移植 https://ideone.com/CUPTas http://mevius.5ch.net/test/read.cgi/tech/1691038333/270
271: デフォルトの名無しさん [sage] 2024/02/22(木) 01:30:35.61 ID:9s07Ijs0 >>234 Rust fn nearest_palindrome_numbers(n: usize) -> Vec<usize> { let mut dd = DecimalDigits::new(n); dd.palindrome_using_upper_half(); let n1 = dd.to_number(); match compare(n, n1) { Equal => return vec![n], Greater => dd.increment_upper_half(), Less => dd.decrement_upper_half(), } if dd.is_most_upper_zero() { return vec![n - 1, n + 1]; } dd.palindrome_using_upper_half(); let n2 = dd.to_number(); match compare_absolute_diff((n, n1), (n, n2)) { Less => return vec![n1], Greater => return vec![n2], Equal => return if n1 < n2 { vec![n1, n2] } else { vec![n2, n1] }, } } http://mevius.5ch.net/test/read.cgi/tech/1691038333/271
273: デフォルトの名無しさん [sage] 2024/02/22(木) 20:54:45.16 ID:+nyM4OV5 >>234 ruby https://ideone.com/rJCYgT ・それっぽい三個の候補から選んでるだけ http://mevius.5ch.net/test/read.cgi/tech/1691038333/273
274: デフォルトの名無しさん [] 2024/02/22(木) 21:04:16.48 ID:3p8Kt6H4 >>234 >>269の一部でC++の機能をどうせ使ってしまったので、この際、全部をC++流に変えたら C流よりすっきり書けた。 https://ideone.com/38bo2E http://mevius.5ch.net/test/read.cgi/tech/1691038333/274
279: 273 [sage] 2024/02/23(金) 23:06:54.56 ID:RzwC5Hr4 >>234 ruby https://ideone.com/E9VSE3 ・273の[1000, [1001]]バグ修正版 ・275とは違う方法で修正してみたがやっつけ感大 >>234 ruby 2.5.5 https://ideone.com/1zqSr1 ・いわゆる(?)ジェネレータ版 ・「終端を持たない範囲オブジェクト」はRuby 2.6.0から http://mevius.5ch.net/test/read.cgi/tech/1691038333/279
280: デフォルトの名無しさん [sage] 2024/02/24(土) 00:25:03.27 ID:f2xn4abB >>234 Ruby https://paiza.io/projects/2G8vPQJQOBZecXPD5ZIFTQ?language=ruby http://mevius.5ch.net/test/read.cgi/tech/1691038333/280
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.034s