プログラミングのお題スレです。
【出題と回答例】
1 名前:デフォルトの名無しさん
お題:お題本文
2 名前:デフォルトの名無しさん
>>1 使用言語
回答本文
結果がある場合はそれも
【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/
宿題は宿題スレがあるのでそちらへ。
※前スレ
プログラミングのお題スレ Part21
https://mevius.5ch.net/test/read.cgi/tech/1668333636/
探検
プログラミングのお題スレ Part22
1デフォルトの名無しさん
2023/08/03(木) 13:52:13.20ID:/xW45k0z549デフォルトの名無しさん
2025/02/08(土) 20:02:06.41ID:EDI8nVtP >>510
C++
https://ideone.com/TluWQi
>>548では検索文字列が短くて高速化されたか分かりにくかったので、長くして529, 534, 548の
実行時間を比較してみると、効果が顕著に現れた。
C++
https://ideone.com/TluWQi
>>548では検索文字列が短くて高速化されたか分かりにくかったので、長くして529, 534, 548の
実行時間を比較してみると、効果が顕著に現れた。
550 警備員[Lv.19]
2025/02/09(日) 03:18:28.07ID:Y8d2noVo551 警備員[Lv.19]
2025/02/09(日) 03:56:54.57ID:Y8d2noVo552デフォルトの名無しさん
2025/02/09(日) 12:47:59.38ID:uN83pfj6 >>510 c
https://ideone.com/D2AZMK
・両端に着目し、両端のみを更新しつつ調べていく(が、これといってパっとせず)
・f_both_ends はあくまで元の文字列s上を調べていく
・f_both_ends_v2 は「次」「隣」にアクセスしやすくした構造の上を調べていく
・あと実行時間の値ははげしくブレブレなので参考程度にとどめておいてね
https://ideone.com/D2AZMK
・両端に着目し、両端のみを更新しつつ調べていく(が、これといってパっとせず)
・f_both_ends はあくまで元の文字列s上を調べていく
・f_both_ends_v2 は「次」「隣」にアクセスしやすくした構造の上を調べていく
・あと実行時間の値ははげしくブレブレなので参考程度にとどめておいてね
553デフォルトの名無しさん
2025/02/09(日) 21:29:55.65ID:do9MXosP554デフォルトの名無しさん
2025/02/09(日) 21:31:24.58ID:do9MXosP555デフォルトの名無しさん
2025/02/09(日) 21:35:08.87ID:do9MXosP556 警備員[Lv.19]
2025/02/10(月) 13:21:24.86ID:g+w4FSG9557デフォルトの名無しさん
2025/02/10(月) 21:24:31.20ID:KgR1Tipz558デフォルトの名無しさん
2025/02/11(火) 03:27:04.16ID:FlAqv/ML 動画再生回数、登録者数、評価数、コメント数
上2桁、下2桁に04、13、40、44、71、74など
(+生年月日、IDの数字など)の組み合わせ
業者による忌み数字、不吉数字の嫌がらせ&精神攻撃がキモすぎ
上2桁、下2桁に04、13、40、44、71、74など
(+生年月日、IDの数字など)の組み合わせ
業者による忌み数字、不吉数字の嫌がらせ&精神攻撃がキモすぎ
559 警備員[Lv.20]
2025/02/11(火) 05:48:25.27ID:Y4Uu1QjJ それはお題なのか?それともただの誤爆か?
560デフォルトの名無しさん
2025/02/11(火) 06:03:36.08ID:h8gYOd9x 糖質でしょ
忌み数字不吉数字とか意味不明なこと言ってるし,それを業者が特定個人を狙って表示する意味も分からんし
忌み数字不吉数字とか意味不明なこと言ってるし,それを業者が特定個人を狙って表示する意味も分からんし
561デフォルトの名無しさん
2025/02/11(火) 10:54:21.93ID:E5oVpL7o お題
数列が入力されます
ニ番目に小さい数を出力してください
入力:4, 5, 1, 7, 1, 2, 8, 9, 2, 7
出力:2
数列が入力されます
ニ番目に小さい数を出力してください
入力:4, 5, 1, 7, 1, 2, 8, 9, 2, 7
出力:2
562デフォルトの名無しさん
2025/02/11(火) 11:46:37.94ID:A5/Zs5AB こんちゃ
質問いいでしょうけ
プルダウン(ポップアップ)をUIとしてだすとして
見えている項目名と、実際にパラミータとして出す値を変えたい時はどうしたらよか
質問いいでしょうけ
プルダウン(ポップアップ)をUIとしてだすとして
見えている項目名と、実際にパラミータとして出す値を変えたい時はどうしたらよか
5639
2025/02/11(火) 14:53:15.78ID:mMj2PIa8 >>561 Perl5
$h{$_} = $_ for 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
@s = sort keys %h;
print "$s[1]\n";
実行結果
~ $ perl 22_561_second.pl
2
Perl5.26以降に付属のList::Utilにはuniq関数があるのでそれを使えば:
use List::Util qw(uniq);
@s = uniq sort 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
print "$s[1]\n";
$h{$_} = $_ for 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
@s = sort keys %h;
print "$s[1]\n";
実行結果
~ $ perl 22_561_second.pl
2
Perl5.26以降に付属のList::Utilにはuniq関数があるのでそれを使えば:
use List::Util qw(uniq);
@s = uniq sort 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
print "$s[1]\n";
564 警備員[Lv.20]
2025/02/11(火) 16:33:48.19ID:Y4Uu1QjJ >>562
環境や言語やフレームワークを書いて限定しないと色々な環境や言語やフレームワークでの答えが適当に沢山湧いて出て来る可能性あるぞ。
しかも分からない所は適当に解釈してだ。なぜならここはお題スレだから。
環境や言語やフレームワークを書いて限定しないと色々な環境や言語やフレームワークでの答えが適当に沢山湧いて出て来る可能性あるぞ。
しかも分からない所は適当に解釈してだ。なぜならここはお題スレだから。
565デフォルトの名無しさん
2025/02/11(火) 16:37:12.05ID:WPoAkGuN566デフォルトの名無しさん
2025/02/11(火) 16:40:21.13ID:gFwXvlnz567デフォルトの名無しさん
2025/02/11(火) 17:43:14.68ID:7RexIvi8568デフォルトの名無しさん
2025/02/11(火) 17:48:30.95ID:7RexIvi8569デフォルトの名無しさん
2025/02/11(火) 18:19:05.70ID:7RexIvi8570デフォルトの名無しさん
2025/02/11(火) 20:45:09.89ID:hMHygfcC571デフォルトの名無しさん
2025/02/11(火) 23:21:03.54ID:Vzh5cLYk 数列が入力されるので
整数の数列だけでなく浮動小数点数の数列にも対応してくださいね
ニ番目に小さい数がない時
例えば同じ数しか存在しない時や数列の長さが1の時には
解がないことを返してくださいね
例えばその時にMAX値が返ってきたら失格ですよ
整数の数列だけでなく浮動小数点数の数列にも対応してくださいね
ニ番目に小さい数がない時
例えば同じ数しか存在しない時や数列の長さが1の時には
解がないことを返してくださいね
例えばその時にMAX値が返ってきたら失格ですよ
572565
2025/02/11(火) 23:28:05.14ID:qmej6t155739
2025/02/11(火) 23:36:31.53ID:yxel6cu3 先に言えよって、感じw
574デフォルトの名無しさん
2025/02/11(火) 23:48:25.56ID:E5oVpL7o575デフォルトの名無しさん
2025/02/11(火) 23:50:12.69ID:HwVbkmdb 小数対応はともかく
max値を返してしまう人はプログラマ失格かな
あとsortを使ってしまう人は計算量を知らない初心者
max値を返してしまう人はプログラマ失格かな
あとsortを使ってしまう人は計算量を知らない初心者
576デフォルトの名無しさん
2025/02/11(火) 23:53:59.73ID:E5oVpL7o そういうこだわりはアスペルガーにしか思えないな、どうでも良いじゃないですかそんなこと
577デフォルトの名無しさん
2025/02/11(火) 23:56:29.96ID:E5oVpL7o こだわりは自分の胸のうちに留めていただきたい、他人に求めたら回答の幅を狭めるだけ、多様性のある回答こそ美しい
578デフォルトの名無しさん
2025/02/11(火) 23:57:23.71ID:HwVbkmdb579デフォルトの名無しさん
2025/02/11(火) 23:59:56.87ID:E5oVpL7o だからそういう、こうじゃないとダメだという態度がアスペルガー仕草なんだってばよ、君が思うのは勝手だが他人に求めるものじゃない
580デフォルトの名無しさん
2025/02/12(水) 00:01:10.34ID:hk2aQo3G プログラミングはもっと自由なものなんだよ、思ったとおりにかけば良い
5819
2025/02/12(水) 00:03:23.15ID:yw0CaA/O そういう条件は回答を見て思いついた後から言わず先に書くべきでは?
そうでなければ、与えられた短い文とテストデータから、
処理対象データの範囲や要求仕様を読み手が色々解釈しても仕方ないだろ。
後からいろいろ言って批判なんてでもってのほかだと思うが。
そうでなければ、与えられた短い文とテストデータから、
処理対象データの範囲や要求仕様を読み手が色々解釈しても仕方ないだろ。
後からいろいろ言って批判なんてでもってのほかだと思うが。
5829
2025/02/12(水) 00:05:30.21ID:yw0CaA/O 出来たもの見て実はこういう条件がありましたってケチつけるのはクソクライアントと一緒だな
583デフォルトの名無しさん
2025/02/12(水) 00:13:52.34ID:SJ0T1N6w ざっと見たけどmax()を返してるのはC++の人だけで他は皆まともだ
普段からまともなコード書いてるかどうかバレてしまうから自由が面白い
普段からまともなコード書いてるかどうかバレてしまうから自由が面白い
584デフォルトの名無しさん
2025/02/12(水) 00:18:10.68ID:hk2aQo3G 好きにしたら良いんやで吉田松陰もそんなこと言ってた気がする
585デフォルトの名無しさん
2025/02/12(水) 00:20:24.72ID:hk2aQo3G まともとかバレるとかそういう当て擦りの嫌味ったらしい言い方どこで身につけてきたのあんた、母ちゃんは悲しいよ
586デフォルトの名無しさん
2025/02/12(水) 00:22:24.96ID:Qtl/TEf65879
2025/02/12(水) 00:28:30.94ID:yw0CaA/O 「データが二個未満の場合にはnilを返す。」とか書いとくべき。
でもそういう細かい条件をちまちま指定した窮屈な課題は、つまんなくて回答を造る意欲が減るんだよな。
シンプルで純な課題に対してどういうエレガントでエッセンシャルな回答があるか考えるのが楽しいのであって、
細かいいろんな条件を守る周辺コードで固めるような作業はつまんないから趣味の世界ではやりたくないな
でもそういう細かい条件をちまちま指定した窮屈な課題は、つまんなくて回答を造る意欲が減るんだよな。
シンプルで純な課題に対してどういうエレガントでエッセンシャルな回答があるか考えるのが楽しいのであって、
細かいいろんな条件を守る周辺コードで固めるような作業はつまんないから趣味の世界ではやりたくないな
588デフォルトの名無しさん
2025/02/12(水) 00:31:16.47ID:1WuTe288 普段はプログラム載せるだけだけど、みんな意外と饒舌なんだなw
5899
2025/02/12(水) 00:33:57.88ID:yw0CaA/O ここはある意味、回答のコードでもって語るスレだからな
590デフォルトの名無しさん
2025/02/12(水) 00:35:35.77ID:kQv2EDFI お題にそんな指定ないのに
みんなnilなどを返してるからこのスレの住人たちはセンスいいな
みんなnilなどを返してるからこのスレの住人たちはセンスいいな
591デフォルトの名無しさん
2025/02/12(水) 19:12:16.26ID:FZJ50oR3 >>561 lisp (sbcl)
https://ideone.com/Bct7bC
>>561 lisp (clisp)
https://ideone.com/yqfmzh
clispだと何故かsort版の方が速い
https://ideone.com/Bct7bC
>>561 lisp (clisp)
https://ideone.com/yqfmzh
clispだと何故かsort版の方が速い
592デフォルトの名無しさん
2025/02/12(水) 20:45:54.96ID:JML0DDov593デフォルトの名無しさん
2025/02/12(水) 22:44:39.40ID:Qtl/TEf6 >>561, 571
>>570のC++のf3をint型の最大値を含むデータにも対応させた。
C#にはint?型があるのですっきり書けるが、
https://ideone.com/oRhDL1
C++ではまあまあすっきり書くにはintへのポインタを返すしかないか。
https://ideone.com/xYnTSD
(該当値が複数の位置に存在する場合にそれらのうちのどれへのポインタを返すかについては
こだわらないものとする)
>>570のC++のf3をint型の最大値を含むデータにも対応させた。
C#にはint?型があるのですっきり書けるが、
https://ideone.com/oRhDL1
C++ではまあまあすっきり書くにはintへのポインタを返すしかないか。
https://ideone.com/xYnTSD
(該当値が複数の位置に存在する場合にそれらのうちのどれへのポインタを返すかについては
こだわらないものとする)
594デフォルトの名無しさん
2025/02/13(木) 12:04:43.08ID:KGk2Z9bM お題:ランダムな数列から任意の並んでいる二つの数同士を足して、その二つの数の間に挿入せよ。
その新しい数が一桁ならそのまま挿入し二桁なら桁同士を足してその二桁の間に挿入せよ。
< 123456789 3 4
> 1237456789
(3+4=7)
< 123456789 6 7
> 123456143789
(6+7=13 1+3=4)
その新しい数が一桁ならそのまま挿入し二桁なら桁同士を足してその二桁の間に挿入せよ。
< 123456789 3 4
> 1237456789
(3+4=7)
< 123456789 6 7
> 123456143789
(6+7=13 1+3=4)
595デフォルトの名無しさん
2025/02/13(木) 12:31:31.25ID:QhFtS6hw 問題文の記述が下手かよ
596デフォルトの名無しさん
2025/02/13(木) 13:27:16.37ID:J5YSE8js >>594 ruby
a=$stdin.gets.chomp.split(" ")
b=a[1].to_i+a[2].to_i
c=(b<9 ? a[1]+b.to_s+a[2] : a[1]+"#{b/10}#{b/10+b%10}#{b%10}"+a[2])
puts a[0].gsub(a[1]+a[2],c)
a=$stdin.gets.chomp.split(" ")
b=a[1].to_i+a[2].to_i
c=(b<9 ? a[1]+b.to_s+a[2] : a[1]+"#{b/10}#{b/10+b%10}#{b%10}"+a[2])
puts a[0].gsub(a[1]+a[2],c)
5979
2025/02/13(木) 17:35:13.67ID:UAfabByi >>594 Perl5、見易くするためインデントは全角スペースに置換してあります
for (<DATA>) {
($s, $a, $b) = split;
$c = $a + $b;
$c = $1 . ($1 + $2) . $2 if $c =~ /(\d)(\d)/;
$s =~ s/$a$b/$a$c$b/g;
print "$s\n";
}
__DATA__
123456789 3 4
123456789 6 7
123456789 8 9
3141592653589793238462643383279502884197169399375105820974944 9 7
実行結果
~ $ perl 22_594.pl
1237456789
123456143789
123456781879
3141592653589176793238462643383279502884191767169399375105820917674944
for (<DATA>) {
($s, $a, $b) = split;
$c = $a + $b;
$c = $1 . ($1 + $2) . $2 if $c =~ /(\d)(\d)/;
$s =~ s/$a$b/$a$c$b/g;
print "$s\n";
}
__DATA__
123456789 3 4
123456789 6 7
123456789 8 9
3141592653589793238462643383279502884197169399375105820974944 9 7
実行結果
~ $ perl 22_594.pl
1237456789
123456143789
123456781879
3141592653589176793238462643383279502884191767169399375105820917674944
598デフォルトの名無しさん
2025/02/13(木) 20:12:01.16ID:3SfOseF2 >>594
題意が以下の通りだとして、PowerShell (エラーチェックは省略)
自然数x, i, j (i + 1 = jを満たす) が与えられる。xの上i桁目の数字をx[i]で表す。
x[i]とx[j]の和をyとして、
・yが1桁のとき、yをx[i]とx[j]の間に挿入せよ
・yが2桁のとき、y[1]とy[2]の和をy[1]とy[2]の間に挿入してから、yをx[i]とx[j]の間に挿入せよ
function f($x, $i, $j)
{
$s = [string]$x
$y = [int][string]$s[$i - 1] + [int][string]$s[$j - 1]
if ($y -lt 10) {
$s.insert($i, $y)
} else {
$s.insert($i, 11 * $y)
}
}
(123456789, 3, 4), (123456789, 6, 7) |% {
"< $($_[0]) $($_[1]) $($_[2])"
"> $(f $_[0] $_[1] $_[2])", ""
}
[実行結果]
< 123456789 3 4
> 1237456789
< 123456789 6 7
> 123456143789
題意が以下の通りだとして、PowerShell (エラーチェックは省略)
自然数x, i, j (i + 1 = jを満たす) が与えられる。xの上i桁目の数字をx[i]で表す。
x[i]とx[j]の和をyとして、
・yが1桁のとき、yをx[i]とx[j]の間に挿入せよ
・yが2桁のとき、y[1]とy[2]の和をy[1]とy[2]の間に挿入してから、yをx[i]とx[j]の間に挿入せよ
function f($x, $i, $j)
{
$s = [string]$x
$y = [int][string]$s[$i - 1] + [int][string]$s[$j - 1]
if ($y -lt 10) {
$s.insert($i, $y)
} else {
$s.insert($i, 11 * $y)
}
}
(123456789, 3, 4), (123456789, 6, 7) |% {
"< $($_[0]) $($_[1]) $($_[2])"
"> $(f $_[0] $_[1] $_[2])", ""
}
[実行結果]
< 123456789 3 4
> 1237456789
< 123456789 6 7
> 123456143789
5999
2025/02/13(木) 20:24:48.49ID:UAfabByi 数学屋さんかいなw
i,jの「3 4」とか「6 7」は桁の位置をしていしているのではなく数値列の中にある数字を指定するんジャマイカ
とオレは解釈したが
i,jの「3 4」とか「6 7」は桁の位置をしていしているのではなく数値列の中にある数字を指定するんジャマイカ
とオレは解釈したが
600デフォルトの名無しさん
2025/02/13(木) 20:34:25.67ID:3SfOseF2 >>599
そうか。だとすれば、
function f($x, $i, $j)
{
$s = [string]$x
$y = $i + $j
if ($y -ge 10) {$y *= 11}
$s -replace "$i$j", "$i$y$j"
}
(123456789, 3, 4), (123456789, 6, 7), (123456789, 8, 9), ("3141592653589793238462643383279502884197169399375105820974944", 9, 7) |% {
"< $($_[0]) $($_[1]) $($_[2])"
"> $(f $_[0] $_[1] $_[2])", ""
}
[実行結果]
< 123456789 3 4
> 1237456789
< 123456789 6 7
> 123456143789
< 123456789 8 9
> 123456781879
< 3141592653589793238462643383279502884197169399375105820974944 9 7
> 3141592653589176793238462643383279502884191767169399375105820917674944
そうか。だとすれば、
function f($x, $i, $j)
{
$s = [string]$x
$y = $i + $j
if ($y -ge 10) {$y *= 11}
$s -replace "$i$j", "$i$y$j"
}
(123456789, 3, 4), (123456789, 6, 7), (123456789, 8, 9), ("3141592653589793238462643383279502884197169399375105820974944", 9, 7) |% {
"< $($_[0]) $($_[1]) $($_[2])"
"> $(f $_[0] $_[1] $_[2])", ""
}
[実行結果]
< 123456789 3 4
> 1237456789
< 123456789 6 7
> 123456143789
< 123456789 8 9
> 123456781879
< 3141592653589793238462643383279502884197169399375105820974944 9 7
> 3141592653589176793238462643383279502884191767169399375105820917674944
601デフォルトの名無しさん
2025/02/13(木) 20:45:01.39ID:KiG3F5Wd6029
2025/02/13(木) 20:52:32.26ID:UAfabByi なんでこの人はコーデイングするのがこんなに早いんだろう…
603デフォルトの名無しさん
2025/02/13(木) 22:58:07.29ID:bC7pFAVH >>594 Rust
fn f(input: &str, a: u32, b:u32) -> String {
let src = format!("{a}{b}");
let dst = if a + b < 10 {
format!("{a}{x}{b}", x = a + b)
} else {
format!("{a}{x}{y}{z}{b}", x = 1, y = 1 + a + b - 10, z = a + b - 10)
};
use itertools::Itertools;
input.split(&src).join(&dst)
}
fn main() {
assert_eq!(f("123456789", 3, 4), "1237456789");
assert_eq!(f("123456789", 6, 7), "123456143789");
assert_eq!(f("3141592653589793238462643383279502884197169399375105820974944", 9, 7),
"3141592653589176793238462643383279502884191767169399375105820917674944");
}
fn f(input: &str, a: u32, b:u32) -> String {
let src = format!("{a}{b}");
let dst = if a + b < 10 {
format!("{a}{x}{b}", x = a + b)
} else {
format!("{a}{x}{y}{z}{b}", x = 1, y = 1 + a + b - 10, z = a + b - 10)
};
use itertools::Itertools;
input.split(&src).join(&dst)
}
fn main() {
assert_eq!(f("123456789", 3, 4), "1237456789");
assert_eq!(f("123456789", 6, 7), "123456143789");
assert_eq!(f("3141592653589793238462643383279502884197169399375105820974944", 9, 7),
"3141592653589176793238462643383279502884191767169399375105820917674944");
}
604デフォルトの名無しさん
2025/02/13(木) 23:47:12.83ID:bC7pFAVH >>561 Rust
fn second_smallest<T: Copy + Ord>(input: &[T]) -> Option<T> {
use std::cmp::Ordering::{Equal, Greater, Less};
input
.iter()
.copied()
.fold(None, |state, t| match state {
Some((_t0, Some(t1))) if t >= t1 => state,
Some((t0, _)) => match Ord::cmp(&t, &t0) {
Less => Some((t, Some(t0))),
Equal => state,
Greater => Some((t0, Some(t))),
},
None => Some((t, None)),
})
.and_then(|(_t0, t1option)| t1option)
}
fn main() {
assert_eq!(second_smallest(&[4, 5, 1, 7, 1, 2, 8, 9, 2, 7, 1]), Some(2));
assert_eq!(second_smallest(&[1, 1, 1]), None);
assert_eq!(second_smallest(&[] as &[i32]), None);
}
fn second_smallest<T: Copy + Ord>(input: &[T]) -> Option<T> {
use std::cmp::Ordering::{Equal, Greater, Less};
input
.iter()
.copied()
.fold(None, |state, t| match state {
Some((_t0, Some(t1))) if t >= t1 => state,
Some((t0, _)) => match Ord::cmp(&t, &t0) {
Less => Some((t, Some(t0))),
Equal => state,
Greater => Some((t0, Some(t))),
},
None => Some((t, None)),
})
.and_then(|(_t0, t1option)| t1option)
}
fn main() {
assert_eq!(second_smallest(&[4, 5, 1, 7, 1, 2, 8, 9, 2, 7, 1]), Some(2));
assert_eq!(second_smallest(&[1, 1, 1]), None);
assert_eq!(second_smallest(&[] as &[i32]), None);
}
605デフォルトの名無しさん
2025/02/14(金) 17:55:06.91ID:L6dJMbYJ わけがわからん
アセンブラじゃあるまいし
アセンブラじゃあるまいし
606デフォルトの名無しさん
2025/02/14(金) 18:42:18.21ID:RXjqXFcF わからないのはどのへんなんだろう?
・型がジェネリックになっている点
・代入文がないなど関数型プログラミングになっている点
・パターンマッチングが使われている点
いずれも最近は対応している言語が増えてるような
・型がジェネリックになっている点
・代入文がないなど関数型プログラミングになっている点
・パターンマッチングが使われている点
いずれも最近は対応している言語が増えてるような
607デフォルトの名無しさん
2025/02/14(金) 23:21:45.00ID:bNo2F1oE 可読性の良さから高階関数を使ったメソッドチェーンが一般的になってきたね
マイクロソフトがC#などでLINQ広めたのがきっかけで各言語もその有用性から導入するようになった
マイクロソフトがC#などでLINQ広めたのがきっかけで各言語もその有用性から導入するようになった
608デフォルトの名無しさん
2025/02/14(金) 23:42:29.57ID:PVqLPxMJ お題:ランダムな英文字列が与えられる。隣り合う英文字が同じ大文字だった場合、その間にその大文字の小文字を挿入せよ
In < abcDDefGG
Out > abcDdDefGgG
In < abcDDefGG
Out > abcDdDefGgG
609デフォルトの名無しさん
2025/02/15(土) 00:16:29.67ID:aVKCg5xf >>608 ruby
while 1
s=DATA.gets.chomp
exit if s==""
t=s.gsub(%r|([A-Z])\1|){$1+$1.downcase+$1}
puts "IN < #{s}\nOUT > #{t}"
end
__END__
abcDDefGG
while 1
s=DATA.gets.chomp
exit if s==""
t=s.gsub(%r|([A-Z])\1|){$1+$1.downcase+$1}
puts "IN < #{s}\nOUT > #{t}"
end
__END__
abcDDefGG
610デフォルトの名無しさん
2025/02/15(土) 00:16:34.18ID:f9ERvXXy611デフォルトの名無しさん
2025/02/15(土) 00:28:45.42ID:/PgyVRU9 >>606
正規表現みたい非人間的な書式はやめようぜっての
正規表現みたい非人間的な書式はやめようぜっての
612デフォルトの名無しさん
2025/02/15(土) 00:39:27.81ID:rssRTGdz >>608
PowerShell
function f($s)
{
-join $(
foreach ($i in 0..($s.length - 2)) {
$s[$i]
if ($s[$i] -ne $s[$i + 1]) {continue}
if ($s[$i] -lt [char]"A" -or $s[$i] -gt [char]"Z") {continue}
([string]$s[$i]).ToLower()
}
$s[$i + 1]
)
}
"abcDDefGG", "abcDDDfGG" |% {"$_ → $(f $_)"}
[実行結果]
abcDDefGG → abcDdDefGgG
abcDDDfGG → abcDdDdDfGgG
PowerShell
function f($s)
{
-join $(
foreach ($i in 0..($s.length - 2)) {
$s[$i]
if ($s[$i] -ne $s[$i + 1]) {continue}
if ($s[$i] -lt [char]"A" -or $s[$i] -gt [char]"Z") {continue}
([string]$s[$i]).ToLower()
}
$s[$i + 1]
)
}
"abcDDefGG", "abcDDDfGG" |% {"$_ → $(f $_)"}
[実行結果]
abcDDefGG → abcDdDefGgG
abcDDDfGG → abcDdDdDfGgG
613デフォルトの名無しさん
2025/02/15(土) 01:01:01.24ID:qzrI3kKZ >>608 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");
}
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");
}
614デフォルトの名無しさん
2025/02/15(土) 09:21:24.60ID:XILc/8JX615614
2025/02/15(土) 10:02:25.10ID:UI50KRFJ6169
2025/02/15(土) 10:36:35.12ID:1WENuqRv >>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
s/([A-Z])(?=\1)/\1\l\1/g, print for <DATA>;
__DATA__
abcDDefGG
abcDDDefGGG
実行結果
C:\Home>perl 22_608_ins_l.pl
abcDdDefGgG
abcDdDdDefGgGgG
618デフォルトの名無しさん
2025/02/15(土) 10:40:34.16ID:+yYMeR0h619615
2025/02/15(土) 13:20:38.24ID:eC3jFbuY >>608 java
https://ideone.com/YfufZz
>>616
_人人人人人人人人人人人人_
> 置換の小文字変換!? <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
勉強になりました
https://ideone.com/YfufZz
>>616
_人人人人人人人人人人人人_
> 置換の小文字変換!? <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
勉強になりました
620デフォルトの名無しさん
2025/02/15(土) 21:05:44.70ID:rssRTGdz >>612は文字列長が1文字の場合にバクがあった。PowerShellの0..-1は空(から)ではなく0, -1になるのが
原因 (Rの0:-1も同様)。修正するには、fの最初に if ($s.length -lt 2) {return $s} を挿入する。
原因 (Rの0:-1も同様)。修正するには、fの最初に if ($s.length -lt 2) {return $s} を挿入する。
621デフォルトの名無しさん
2025/02/15(土) 21:06:37.89ID:rssRTGdz >>561
C++
https://ideone.com/bQBKIM
C#のヌル許容型と同じ挙動のnullable型を自作し、>>593のC#のmin2関数をジェネリック化、
ポインタ参照化して移植した。
https://ideone.com/p2LNC9
593のC++のmin2関数と実行速度を比較する¹と30%ほど遅い。文字列型や可変長数値型と
違って最大値が存在する固定長数値型では、それを利用するf593の方が良い。
──
¹ Microsoft C++では100回繰り返しテストが最適化され1回しか実行されない
C++
https://ideone.com/bQBKIM
C#のヌル許容型と同じ挙動のnullable型を自作し、>>593のC#のmin2関数をジェネリック化、
ポインタ参照化して移植した。
https://ideone.com/p2LNC9
593のC++のmin2関数と実行速度を比較する¹と30%ほど遅い。文字列型や可変長数値型と
違って最大値が存在する固定長数値型では、それを利用するf593の方が良い。
──
¹ Microsoft C++では100回繰り返しテストが最適化され1回しか実行されない
622デフォルトの名無しさん
2025/02/15(土) 21:52:48.39ID:qa0m30Tb >>621
最大値をundefined代わりに使ってはいけないと指摘があったのにまだ使っているのかいな
そのコードで入力数列がこうだった場合
vector<int> a = {IntMax - 1, IntMax};
2番目に小さい数として正解のintMaxを返さなければならない
最大値をundefined代わりに使ってはいけないと指摘があったのにまだ使っているのかいな
そのコードで入力数列がこうだった場合
vector<int> a = {IntMax - 1, IntMax};
2番目に小さい数として正解のintMaxを返さなければならない
623デフォルトの名無しさん
2025/02/15(土) 22:00:12.34ID:rssRTGdz624デフォルトの名無しさん
2025/02/15(土) 22:09:09.66ID:qa0m30Tb625デフォルトの名無しさん
2025/02/15(土) 22:24:28.09ID:rssRTGdz >>624
>>621の速度比較テストに>>570のf3も追加
https://ideone.com/scnfdu
ポインタで持つf593との比で、整数で持つf570は6%速いだけ。一方、null許容型のf621は29%も遅い。
最大値が存在する型ではそれを利用する方が良いという結論に変わりはない。
>>621の速度比較テストに>>570のf3も追加
https://ideone.com/scnfdu
ポインタで持つf593との比で、整数で持つf570は6%速いだけ。一方、null許容型のf621は29%も遅い。
最大値が存在する型ではそれを利用する方が良いという結論に変わりはない。
626デフォルトの名無しさん
2025/02/15(土) 22:29:41.23ID:rssRTGdz まあ、同じ値の要素が大量に存在する入力データではf570は遅くなるが、平均的な速度はf570の方が速い。
627デフォルトの名無しさん
2025/02/15(土) 22:31:16.05ID:rssRTGdz >>626はf570じゃなくてf593だった。
628デフォルトの名無しさん
2025/02/15(土) 22:42:01.35ID:v2QOLp/q f593でローカル変数へのポインタを返し得るのは如何かと
629デフォルトの名無しさん
2025/02/15(土) 23:34:59.77ID:rssRTGdz >>628
返しえないでしょ。
返しえないでしょ。
630デフォルトの名無しさん
2025/02/15(土) 23:46:12.83ID:qa0m30Tb >>625
まずnullableのコードがおかしい
例えばoverload(op)のこれ
if (y.isNull) return false; \
return x op y.value; \
Nullだとfals eとなり
opの計算結果次第でもfal seとなり
両者を区別できない
まずnullableのコードがおかしい
例えばoverload(op)のこれ
if (y.isNull) return false; \
return x op y.value; \
Nullだとfals eとなり
opの計算結果次第でもfal seとなり
両者を区別できない
631デフォルトの名無しさん
2025/02/15(土) 23:47:32.80ID:qa0m30Tb >>625
あとvector扱うコードは倫理的に際どいかな
長さ0でないことを調べずに
いきなりint *m1 = &a[0], m2 = &y;
今回は長さ0の時に*m1をアクセスしないから論理的にギリセーフだけど際どい
そのへんのトリッキーさも含めて
(もしあれば)最小値も返す場合
(もしあれば)3番目の最小値も返す場合など
このIntMax方式は破綻すると思う
あとvector扱うコードは倫理的に際どいかな
長さ0でないことを調べずに
いきなりint *m1 = &a[0], m2 = &y;
今回は長さ0の時に*m1をアクセスしないから論理的にギリセーフだけど際どい
そのへんのトリッキーさも含めて
(もしあれば)最小値も返す場合
(もしあれば)3番目の最小値も返す場合など
このIntMax方式は破綻すると思う
632デフォルトの名無しさん
2025/02/15(土) 23:52:31.08ID:rssRTGdz6339
2025/02/16(日) 06:28:07.79ID:GnMUCCm7 qa0m30Tb の回答はどれよ?
634デフォルトの名無しさん
2025/02/16(日) 08:09:49.66ID:v+IcfGmt いるよねえ他人の回答に文句だけつけて自分では回答しないやつ
635デフォルトの名無しさん
2025/02/16(日) 08:16:54.29ID:v+IcfGmt 他人の回答が間違いとなるようにお題を解釈するのは知的なことではないよバカの所業だよ
636デフォルトの名無しさん
2025/02/16(日) 08:20:29.71ID:eNZyrnPC そんなことより>>616のワンライナーがカッコよくてほれぼれする
637デフォルトの名無しさん
2025/02/16(日) 10:58:48.51ID:EXJYkLn8 帰ったと思ったらまたやってんのw
638デフォルトの名無しさん
2025/02/16(日) 15:14:38.18ID:8bpH8MuA コンパイラ警告無視するのが知的な事だと思ってそうだな
6399
2025/02/16(日) 15:45:59.98ID:GnMUCCm7 回答のコードでもって語ってほしいなぁ
640デフォルトの名無しさん
2025/02/17(月) 13:08:08.60ID:lz3iaMcC お題:ランダムな数列が与えられる。隣り合う数字が偶数同士の時、あいだに0を。奇数同士の時は1を挿入し、それ以外は何も挿入しない
In < 123346
Out > 12313406
In < 123346
Out > 12313406
641デフォルトの名無しさん
2025/02/17(月) 13:47:54.59ID: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
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
642デフォルトの名無しさん
2025/02/17(月) 20:02:39.61ID:SzDlV4TD643デフォルトの名無しさん
2025/02/17(月) 20:47:46.22ID: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
→
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
→
644デフォルトの名無しさん
2025/02/17(月) 20:48:16.10ID:2enU2rA/ 正規表現置換なら、
function f($s)
{
$s -replace "[02468](?=[02468])", "$&0" -replace "[13579](?=[13579])", "$&1"
}
1回で済ますなら、
function f($s)
{
[RegEx]::Replace($s, "[02468](?=[02468])|[13579](?=[13579])", {$_ = $args[0].value[0]; "$_$($_ % 2)"})
}
function f($s)
{
$s -replace "[02468](?=[02468])", "$&0" -replace "[13579](?=[13579])", "$&1"
}
1回で済ますなら、
function f($s)
{
[RegEx]::Replace($s, "[02468](?=[02468])|[13579](?=[13579])", {$_ = $args[0].value[0]; "$_$($_ % 2)"})
}
645デフォルトの名無しさん
2025/02/17(月) 20:58:11.16ID: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");
}
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");
}
646デフォルトの名無しさん
2025/02/18(火) 10:32:01.38ID:Spp0fdd/ >>645
そうやればいいのか、なるほどね
そうやればいいのか、なるほどね
647デフォルトの名無しさん
2025/02/18(火) 17:51:16.96ID: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
条件付き挿入は汎用に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
648デフォルトの名無しさん
2025/02/19(水) 21:30:14.30ID: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になった。
>>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になった。
レスを投稿する
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 現役猟師・東出昌大、クマ被害続出も過熱する報道に「クマはそんな危ないもんじゃない」理由語る [muffin★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
