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

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
52
(1): デフォルトの名無しさん [sage] 2023/08/19(土) 02:12:13.34 ID:7swIlm9f(1/2) AAS
6,11,11,6,11,11,・・・なんでこうなうの?
197: 17 [] 2024/01/19(金) 19:43:44.34 ID:hxZRcaHh(1) AAS
>>187
187(17): デフォルトの名無しさん [] 2024/01/16(火) 00:33:05.98 ID:n8j0XaXx(1) AAS
お題:時刻の文字列が与えられる。その時刻から1秒後の時刻を出力せよ。


入力:00:00:00
出力:00:00:01
入力:23:59:59
出力:00:00:00
Kotlin

今度は Java のライブラリは使わずに時分秒を保持するクラスを自分で作ってそこで秒に足すとか文字列にするとかやるようにした。

外部リンク:paiza.io
467: デフォルトの名無しさん [] 2025/01/03(金) 15:34:16.34 ID:aGLRGnDr(2/3) AAS
>>464
464(9): デフォルトの名無しさん [] 2025/01/03(金) 13:22:57.82 ID:dEYOS8Dq(1/2) AAS
お題
AのあとにAと同じ数だけBが続く言語エビがあるとします
文字列が入力されたときそれがエビ言語であるか判定するプログラムを作成してください

→ true
A → false
B → false
AB → true
ABB → false
AAB → false
AABB → true
ABAABBAAABBB→ true
python
外部リンク:ideone.com
488: デフォルトの名無しさん [sage] 2025/01/22(水) 23:57:13.34 ID:EHGf/TPZ(2/2) AAS
>>485
485(20): デフォルトの名無しさん [] 2025/01/22(水) 21:35:12.82 ID:JtEnwxKE(1) AAS
お題

文字列と長さを入力として受け取り
デカルト積のリストを出力してください

入力:ABC 1
出力:[A, B, C]

入力:ABC 2
出力:[AA, AB, AC, BA, BB, BC, CA, CB, CC]

入力:ABC 3
出力:[AAA, AAB, AAC, ABA, ABB, ABC, ACA, ACB, ACC, BAA, BAB, BAC, BBA, BBB, BBC, BCA, BCB, BCC, CAA, CAB, CAC, CBA, CBB, CBC, CCA, CCB, CCC]
Rust 今回は積ライブラリを使わない自力版

fn odai(文字列: &str, 長さ: usize) -> Vec<String> {
let chars = 文字列.chars().collect::<Vec<_>>();
let mut state = vec![0; 長さ];
let mut output = Vec::new();
'Loop: loop {
let s = state.iter().map(|i| chars[*i]).collect();
output.push(s);
for index in state.iter_mut().rev() {
*index += 1;
if *index == chars.len() {
*index = 0;
continue;
}
continue 'Loop;
}
return output;
}
}

検証用main()は>>486
486(1): デフォルトの名無しさん [sage] 2025/01/22(水) 22:43:43.59 ID:EHGf/TPZ(1/2) AAS
>>485
Rust

fn odai(文字列: &str, 長さ: usize) -> Vec<String> {
use itertools::Itertools;
(0..長さ)
.map(|_| 文字列.chars())
.multi_cartesian_product()
.map(String::from_iter)
.collect()
}

fn main() {
assert_eq!(odai("ABC", 1), ["A", "B", "C"]);
assert_eq!(odai("ABC", 2), ["AA", "AB", "AC", "BA", "BB", "BC", "CA", "CB", "CC"]);
assert_eq!(odai("ABC", 3), ["AAA", "AAB", "AAC", "ABA", "ABB", "ABC", "ACA", "ACB", "ACC", "BAA", "BAB", "BAC", "BBA", "BBB", "BBC", "BCA", "BCB", "BCC", "CAA", "CAB", "CAC", "CBA", "CBB", "CBC", "CCA", "CCB", "CCC"]);
}
と同じ
580: デフォルトの名無しさん [age] 2025/02/12(水) 00:01:10.34 ID:hk2aQo3G(1/3) AAS
プログラミングはもっと自由なものなんだよ、思ったとおりにかけば良い
583
(1): デフォルトの名無しさん [sage] 2025/02/12(水) 00:13:52.34 ID:SJ0T1N6w(1) AAS
ざっと見たけどmax()を返してるのはC++の人だけで他は皆まともだ
普段からまともなコード書いてるかどうかバレてしまうから自由が面白い
623
(1): デフォルトの名無しさん [] 2025/02/15(土) 22:00:12.34 ID:rssRTGdz(4/9) AAS
>>622
622(1): デフォルトの名無しさん [sage] 2025/02/15(土) 21:52:48.39 ID:qa0m30Tb(1/4) AAS
>>621
最大値をundefined代わりに使ってはいけないと指摘があったのにまだ使っているのかいな
そのコードで入力数列がこうだった場合
vector<int> a = {IntMax - 1, IntMax};
2番目に小さい数として正解のintMaxを返さなければならない
>>593
593(2): デフォルトの名無しさん [] 2025/02/12(水) 22:44:39.40 ID:Qtl/TEf6(2/2) AAS
>>561 571
>>570のC++のf3をint型の最大値を含むデータにも対応させた。

C#にはint?型があるのですっきり書けるが、
外部リンク:ideone.com

C++ではまあまあすっきり書くにはintへのポインタを返すしかないか。
外部リンク:ideone.com
(該当値が複数の位置に存在する場合にそれらのうちのどれへのポインタを返すかについては
こだわらないものとする)
のC++プログラムの実行結果を参照。入力数列にINT_MAXが含まれる場合でも問題ない。
663
(1): デフォルトの名無しさん [] 2025/03/01(土) 20:18:20.34 ID:H8RpZRUP(1/2) AAS
>>656
656(5): デフォルトの名無しさん [] 2025/02/26(水) 21:33:47.93 ID:rkiIsmEI(1) AAS
お題: Python の int.bit_count()

65535 → 16
15 → 4
6 → 2
1 → 1
0 → 0
-1 → 1
-6 → 2
-15 → 4
-65535 → 16
PowerShellのBigIntなら、

$b = @(0)
1..8 |% {$b += $b |% {$_ + 1}}

function bit_count([BigInt]$n)
{
  ($b[[BigInt]::Abs($n).ToByteArray()] | measure -sum).Sum
}

65535, 15, 6, 1, 0, -1, -6, -15, -65535, [BigInt]::Pow(123, 45) |% {
  "$_ → $(bit_count $_)"
}

[実行結果]
65535 → 16
15 → 4
6 → 2
1 → 1
0 → 0
-1 → 1
-6 → 2
-15 → 4
-65535 → 16
11110408185131956285910790587176451918559153212268021823629073199866111001242743283966127048043 → 159
733: デフォルトの名無しさん [sage] 2025/04/02(水) 20:14:17.34 ID:ZWpp3MuE(1) AAS
5chのプロはどんな変数名使うのか教えて
814
(1): デフォルトの名無しさん [sage] 2025/08/22(金) 06:55:21.34 ID:qlaiAqZd(1/2) AAS
>>812
812(5): デフォルトの名無しさん [] 2025/08/21(木) 23:15:48.39 ID:0KQ1xtxb(1) AAS
>>799 の逆変換プログラム
R
外部リンク:ideone.com
C++
外部リンク:ideone.com

問題A, 問題Bとは違って、順列に出現するユニークな整数は1〜nの連番でなくても良いし、
出現回数はすべて同じでなくても良い。例えば、入力は [3, 1, 4, 1, 5, 9] でも良い
(ユニークな整数は1, 3, 4, 5, 9で、出現回数は1が2回、その他が1回)。
Rust >>799
799(20): デフォルトの名無しさん [sage] 2025/08/16(土) 01:44:59.97 ID:VU+jlz0U(1/2) AAS
【問題A】
1~9を1つずつ使用して表される9桁の数Anは全部で9!(=362880)個存在する。
整数n(1≦n≦362880)が与えられたとき、n番目に小さいAnを求めよ。

(例)
 1 → 123456789
 2 → 123456798
 3 → 123456879
 123456 → 416589732
 234567 → 684753219
 362880 → 987654321

【問題B】
1~4を3つずつ使用して表される12桁の数Bnは全部で12!/(3!)^4(=369600)個存在する。
整数n(1≦n≦369600)が与えられたとき、n番目に小さいBnを求めよ。

(例)
 1 → 111222333444
 2 → 111222334344
 3 → 111222334434
 123456 → 222331434114
 234567 → 324424331112
 369600 → 444333222111

※求める数値は文字列または各桁の数の配列による表現も可能とする(123⇔"123"⇔[1,2,3])
の逆変換の重複順列の何番目か算出

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()
}
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.044s