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

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
34: 17 [] 2023/08/11(金) 16:34:17.24 ID:j3k4ZyED(1) AAS
俺は Perl で書いたやつも sort 使わず >>4,5
4(1): デフォルトの名無しさん [] 2023/08/06(日) 17:47:37.64 ID:RhhSFLLO(1/2) AAS
>>3
Kotlin
外部リンク:paiza.io
5(1): デフォルトの名無しさん [] 2023/08/06(日) 18:08:09.04 ID:RhhSFLLO(2/2) AAS
>>3
C
外部リンク:paiza.io
と同じやり方にした。
一番短い文を最後に出すだけで良いなら sort やる必要ないよね。
何らかの制約があってそうしなければ出来ないとか、使っても思い切り最適化されて最終的に同じ動きになるというなら使うかも知れないが。
135
(1): 134 [sage] 2023/10/18(水) 20:46:23.24 ID:4ifgnZXl(2/4) AAS
簡単なお題:
>>133
133(1): デフォルトの名無しさん [sage] 2023/10/17(火) 07:02:57.86 ID:InaHR8fg(1) AAS
>>132 Ruby
外部リンク:ideone.com
のサブセット(求めたulpも正規化数限定)
147: デフォルトの名無しさん [sage] 2023/10/31(火) 00:00:13.24 ID:mywig6Xf(1) AAS
>>3
3(9): デフォルトの名無しさん [] 2023/08/06(日) 12:21:14.08 ID:/9zIb/V0(1) AAS
お題
1行につき一つの文章が入力されます
アルファベット26文字がすべて含まれている文章をフィルタリングしてください
大文字小文字は区別しません
そのうちもっとも短い文章を出力してください

入力
The quick brown fox jumps over a lazy dog.
The jay, pig, fox, zebra and my wolves quack!
Pack my box with seven dozen liquor jugs.
The horse, pig, fox, zebra and my wolves quack!
Jackdaws love my small sphinx of quartz.
Jackdaws love my big sphinx of quartz.
The quick brown fox jumps over a lazy cat.
Pack my box with five dozen liquor jugs.

出力
Jackdaws love my big sphinx of quartz.
c
外部リンク:ideone.com
int has26(const char *p) {
int c, count[26] = {0};
for (; c = tolower(*p); p++) if (isalpha(c)) count[c - 'a']++;
for (c = 'a'; c <= 'z'; c++) if (count[c - 'a'] < 1) return 0;
return 1;
}
const char *f(const char **lines, int n) {
const char *found = 0;
int i, len, minlen;
for (i = 0; i < n; i++)
if (has26(lines[i]))
if (!found)
found = lines[i], minlen = strlen(lines[i]);
else if (len = strlen(lines[i]) < minlen)
found = lines[i], minlen = len;
return found;
}
150: 17 [] 2023/11/05(日) 02:58:00.24 ID:w6RhJs5K(2/2) AAS
そして更にこういうツッコミを入れる。

最初の34人は自転車を使っていないだけで密かにバスを使っているかも知れないのだが、そのことは考慮しないのか?

ChatGPT
申し訳ありません、私の以前の回答は不完全でした。確かに、最初の34人のうち自転車を使っていないという情報だけでは、彼らがバスを使っているかどうかを確定することはできません。そのため、正確な答えを得るためには追加の情報が必要です。

もし最初の34人のうち何人かが実際にはバスを利用している場合、それを考慮する必要があります。与えられた情報だけからは、バスと自転車の両方を使う学生の正確な数を特定することはできません。必要な情報が揃わない限り、正確な答えを提供することはできません。
253
(1): デフォルトの名無しさん [sage] 2024/02/18(日) 18:14:23.24 ID:puttXdr1(1/4) AAS
>>235
235(1): デフォルトの名無しさん [] 2024/02/14(水) 15:20:24.32 ID:VoM/Kva2(1) AAS
>>234 lisp
外部リンク:ideone.com
しらみ潰しで失格
>>236
236(2): デフォルトの名無しさん [sage] 2024/02/14(水) 21:10:48.99 ID:/8p4lTpf(1) AAS
>>234 ocaml
外部リンク:ideone.com

>>234 rust
外部リンク:ideone.com
しらみ潰しで失格
>>240
240(1): デフォルトの名無しさん [sage] 2024/02/15(木) 23:18:01.58 ID:IMdr4idU(1) AAS
>>234 c
外部リンク:ideone.com
しらみ潰しで失格
391: デフォルトの名無しさん [] 2024/08/03(土) 22:35:56.24 ID:S2fEkJP0(3/4) AAS
具体例を計算するのはめんどくさいけど、例えばさっきの絵で言えば右上が始点で左下が終点なら始点側から順番に座標を出力するとかね
426: 警備員[Lv.7] [] 2024/09/29(日) 14:12:38.24 ID:Sdg7KlJR(1) AAS
>>416
416(4): デフォルトの名無しさん [sage] 2024/09/03(火) 07:13:35.79 ID:1bP400Ev(1) AAS
お題
引数aから引数bまでの数列を返す関数がある。この関数を数列にゾロ目が含まれていた場合に空の数列を返すように実装せよ
Kotlin
(URL投稿禁止になってるようなので先頭の https:// は抜きで)。
paiza.io/projects/nPK7U1uDtt4b7O2saECP0A

[入力]タブの方で開始、終了の値を入れている。とりあえず 10 40 を入れてある。
一桁の数を指定した場合は全てゾロ目扱いになるので出力は空のリストになる。
430: デフォルトの名無しさん [sage] 2024/10/09(水) 00:38:16.24 ID:j8RLE5Fj(1) AAS
EUCにも半角2バイト文字なんてあったりする
487: デフォルトの名無しさん [sage] 2025/01/22(水) 23:18:53.24 ID:dYX3B7ea(1) 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]
ruby
外部リンク:ideone.com
f = ->(s, n) {:product.to_proc.(*[s.chars]*n).map(&:join)}
492
(1): 9 [sage] 2025/01/24(金) 17:38:14.24 ID:cg1ZmS3G(1) 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
Perl5

for (<DATA>) {
 chomp;
 print "$_ → ", (/^(A((AB)?|(?1))B)+$/g ? 'true' : 'false'), "\n";
}
__DATA__

A
B
AB
ABB
AAB
AABB
ABAABBAAABBB
ABC
AABABB

※見易くするためにインデントを全角スペースに置換してあります

実行結果
~ $ perl 22_464_AB_rec_rex.pl
→ false
A → false
B → false
AB → true
ABB → false
AAB → false
AABB → true
ABAABBAAABBB → true
ABC → false
AABABB → false
509: デフォルトの名無しさん [sage] 2025/01/29(水) 21:56:05.24 ID:GDFS0NvX(1) AAS
>>500
500(11): デフォルトの名無しさん [] 2025/01/27(月) 09:16:22.69 ID:rqFJtGlJ(1) AAS
お題
入力された文字列から重複する文字を抽出してください

T →
CG →
ATA → A
CGGA → G
ATGAT → AT
GTTGCA → GT
CCCCGGG → CG
ACTGCGAG → ACG
ATCAGAATA → AT
TGCCATGACA → TGCA
java
外部リンク:ideone.com
613: デフォルトの名無しさん [sage] 2025/02/15(土) 01:01:01.24 ID:qzrI3kKZ(1) AAS
>>608
608(10): デフォルトの名無しさん [sage] 2025/02/14(金) 23:42:29.57 ID:PVqLPxMJ(1) AAS
お題:ランダムな英文字列が与えられる。隣り合う英文字が同じ大文字だった場合、その間にその大文字の小文字を挿入せよ

In < abcDDefGG
Out > abcDdDefGgG
 Rust

fn f(input: &str) -> String {
 let mut output = String::new();
 let mut pre_uppercase = None;
 for char in input.chars() {
  if Some(char) == pre_uppercase {
   output.push(char.to_ascii_lowercase());
  }
  output.push(char);
  pre_uppercase = char.is_ascii_uppercase().then_some(char);
 }
 output
}

fn main() {
 assert_eq!(f("abcDDefGG"), "abcDdDefGgG");
 assert_eq!(f("abcDDDfGG"), "abcDdDdDfGgG");
}
619: 615 [sage] 2025/02/15(土) 13:20:38.24 ID:eC3jFbuY(1) AAS
>>608 java
外部リンク:ideone.com

>>616
616(2): 9 [sage] 2025/02/15(土) 10:36:35.12 ID:1WENuqRv(1/2) AAS
>>608 Perl5、肯定先読みと置換の小文字変換

s/([A-Z])(?=\1)/\1\l\1/g, print for <DATA>;
__DATA__
abcDDefGG
abcDDDefGGG

実行結果
C:\Home>perl 22_608_ins_l.pl
abcDdDefGgG
abcDdDdDefGgGgG
_人人人人人人人人人人人人_
> 置換の小文字変換!? <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

勉強になりました
703: デフォルトの名無しさん [sage] 2025/03/25(火) 15:54:47.24 ID:GZ5kfx5g(1) AAS
>>702
702(1): デフォルトの名無しさん [] 2025/03/25(火) 15:25:56.57 ID:Yc/egiP0(1/3) AAS
>>699
> 実行時間はC++プログラムの数倍かかるようだが

rustc -C opt-level=2 でコンパイルしたら
g++ -O2 でコンパイルした ideone_KID2jR.cpp (>>700の一つめ) とほぼ同じ速度出たよ
データ精度を揃えたアルゴリズム比較のために
>>697-698をi128固定ではなくnum::BigIntにして計測して見ては?

あと出題者>>685
685(4): デフォルトの名無しさん [] 2025/03/18(火) 21:39:06.90 ID:9hwr8+MV(1) AAS
>>683
14桁と15桁には該当値がないので、そこに列挙された数に0を追加した72個が15桁以下の答で
結果的には合っているよ。

出題時に作ったC++プログラムはideoneで36桁以下を0.43秒で完了した。これをPowerShellに
移植したプログラムは15桁以下を0.5秒未満、36桁以下を数分で完了した。

その後、改良したC++プログラムではideoneで36桁以下を0.23秒に短縮できた。
>>700
700(4): デフォルトの名無しさん [] 2025/03/23(日) 23:00:51.13 ID:pi1bImlR(1) AAS
>>680から1週間経ったので解答例を掲載

>>685を書いたときに作ってあった2つのC++プログラム
外部リンク:ideone.com
外部リンク:ideone.com

1番目ではsolve関数の再帰呼び出しの対象とするx[p]の下限と上限を線形探索するが、
2番目では二分探索する。要素数10では二分探索の効果は薄いと思いきや、大分速くなった。

2番目を読み返していたらバグを発見してしまった。i = N - 1のとき63行目のa[i + 1]はa[N]となり
配列の添字範囲外アクセス。0との比較だけだし、if文の評価がどっちでも以降の処理は結局同じだから、
実害も解への影響もないが、厳格さが必要ならif ((i + 1 < N ? a[i + 1] : 0) >= 0) {と書き換えるべきだな。
実行時間への影響は無視できる。

それぞれのPowerShellへの移植版
外部リンク:ideone.com
外部リンク:ideone.com

完全な逐語訳ではなく、PowerShellで書くと遅くなったり煩雑になったりする箇所は適宜改変した。
15桁以下の場合は64ビット整数でも桁溢れしないので、BigIntの代わりにInt64を使えば少し速くなる。
の二つ目で(倍速以上に)短縮出来たと言っているよ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.038s