プログラミングのお題スレ Part22 (854レス)
前次1-
抽出解除 レス栞

54: デフォルトの名無しさん [] 2023/08/20(日) 20:19:24.17 ID:T0IVLETo(1) AAS
>>52
52(1): デフォルトの名無しさん [sage] 2023/08/19(土) 02:12:13.34 ID:7swIlm9f(1/2) AAS
6,11,11,6,11,11,・・・なんでこうなうの?
365と366を7で割った余りは1と2なので、平年には翌年の元日の曜日が1つ進み、閏年には2つ進む。
100の倍数の年の例外を除けば、曜日の進みは1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, ...のように
1, 1, 1, 2というパターンの繰り返しになる。

パターン1, 1, 1, 2のうちの最初の1の年から始めて、何年後に曜日の進みの累積が7の倍数かつ
その年が閏年でなくなるかを順々に求めれば6, 11, 11年後となり、ここでパターン1, 1, 1, 2の
うちの最初の1の年に戻るので、以降は6, 11, 11年後というパターンの繰り返しになる。

      ┌──────────┐
      │          ↓
???❷???❷???❷???❷???❷???❷???❷???❷
│     ↑          │          ↑
└─────┘          └──────────┘
238
(1): デフォルトの名無しさん [sage] 2024/02/15(木) 21:30:35.17 ID:MveN6p4/(1) AAS
>>234
234(27): デフォルトの名無しさん [sage] 2024/02/14(水) 09:32:06.19 ID:JjlrBdlD(1) AAS
お題:数値が入力されるのでその数値に最も近い回分数を出力せよ
回分数とは回分になっている数(負数含まず)のことである
最も近い回分数が2つある場合は2つとも出力せよ

入力 0
出力 0

入力 17
出力 22

入力 100
出力 99
出力 101
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)),
 }
}
385: デフォルトの名無しさん [sage] 2024/08/03(土) 21:19:51.17 ID:VMb0ie+F(1/2) AAS
>>384
384(2): デフォルトの名無しさん [] 2024/08/03(土) 20:58:23.65 ID:S2fEkJP0(1/4) AAS
お題
整数の格子がある(伝われ)
任意の2点間を線で結ぶ(座標成分は実数)
格子と交わるところで線を分割せよ
jwwの外部変形としてこんな感じで交点で分割させるの作ったことあるけどプログラミングスレののお題としては座標指定もなく漠然としすぎていていかがなものか。ちょっと伝わんなかった。
452: デフォルトの名無しさん [] 2025/01/01(水) 13:32:50.17 ID:ZpviU2f/(1/7) AAS
>>438
438(10): デフォルトの名無しさん [sage] 2024/10/11(金) 05:53:27.29 ID:EzY86rdr(1/2) AAS
お題:文字列の中で1つ以上連続している空白をすべて空白4つに置換せよ。ただし正規表現は使ってはならない。

例:
"abc def ghi" -> "abc def ghi"
Java
外部リンク:paiza.io
457: デフォルトの名無しさん [] 2025/01/01(水) 19:35:45.17 ID:ZpviU2f/(5/7) AAS
>>381
381(2): デフォルトの名無しさん [] 2024/07/30(火) 12:03:21.52 ID:zP/xDheD(1) AAS
お題
C言語のトライグラフ(可能ならダイグラフも)と普通のテキストとの相互変換。

ファイルまたは標準入力から読んで変換した結果を標準出力に出力する。
面倒なら文字列変換する関数とそれをテストするメイン関数のみでも良い。
Java
外部リンク:paiza.io
662: デフォルトの名無しさん [sage] 2025/02/28(金) 23:07:16.17 ID:SRu+xdWw(1) AAS
よく見たらみんな絶対値をとったりbigintを使ったりしてるな
674: デフォルトの名無しさん [] 2025/03/14(金) 20:19:17.17 ID:Imul3vYR(1) AAS
>>672
672(1): デフォルトの名無しさん [sage] 2025/03/14(金) 02:10:51.25 ID:wjeVVi0w(1/2) AAS
>>671
12の34乗は合っているけどその後の差がおかしくない?
4922235242952026704037113243122008064 から
4608002213423117304076202592425322294 を引いて
314233029528909399960910650696685770 が正解のところ
314233029528909439273950854852378624 となっているよ
正解は1の位が「4 - 4 = 0」になるはずだよね

>>670 Rust 逆文字列を生成する版

use num::BigInt;

fn odai(input: &str) -> Option<String> {
 let rev_input: String = input.chars().rev().collect();
 let x: BigInt = input.parse().ok()?;
 let y: BigInt = rev_input.parse().ok()?;
 Some((x - y).to_string())
}

fn main() {
 assert_eq!(odai("12345"), Some("-41976".to_string()));
 assert_eq!(odai("4922235242952026704037113243122008064"), Some("314233029528909399960910650696685770".to_string()));
}
確かに間違っていた。PowerShellの旧ヴァージョンでは [BigInt]文字列 と書くだけで
文字列をBigInt型に正確に変換できるから>>671
671(2): デフォルトの名無しさん [] 2025/03/13(木) 21:13:53.77 ID:SRpNsp20(1) AAS
>>670
PowerShell

function f([BigInt]$n)
{
  $c = [char[]][string]$n
  $n - [BigInt]-join $c[-1..-$c.length]
}

12345, [BigInt]::Pow(12, 34) |% {"$_ → $(f $_)"}

[実行結果]
12345 → -41976
4922235242952026704037113243122008064 → 314233029528909439273950854852378624
のプログラムでも正しい結果が得られるが、
新ヴァージョンではdouble経由での変換に仕様変更されたようで誤差が生じてしまうから
[BigInt]::Parse(文字列) と書かなければならなくなった。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.040s