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

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
9
(58): 9 2023/08/07(月)01:46 ID:PMO8D1QO(1/2) AAS
>>3 Perl5

for (<DATA>) {
 my %h = map{$_ => 1} grep{/[a-z]/i} split '';
 push @a, $_ if 26 == keys %h;
}
@s = sort{length($a) <=> length($b)} @a;
print $s[0];
__DATA__
The quick brown fox jumps over a lazy dog.
The jay, pig, fox, zebra and my wolves quack!
省10
10
(1): 2023/08/07(月)01:57 ID:PMO8D1QO(2/2) AAS
>>9 ゴメン、2行目に間違いあり…orz

 my %h = map{$_ => 1} grep{/[a-z]/i} split '';
 ↓正しくは
 my %h = map{$_ => 1} map{lc} grep{/[a-z]/i} split '';

実行結果は今回のテストデータだとたまたま同じ結果になる。
26: 9 2023/08/11(金)02:38 ID:4P/NDj/+(1/2) AAS
スレが伸びているので何かと思えば、オレほか一部の回答者がsortを使ったのが
そんなに気に入らなかったか、気に障ったか、
ざまぁみろw としか言いようがないが

後出しでケチつけてるのは出題者じゃないようだが
そしたらsortも、そしてminもあえて使わないバージョン、
書き方はいろいろあると思うけど:

>>3 Perl5
use List::Util 'first';
for (<DATA>) {
 my %h = map{lc $_ => 1} /([A-Za-z])/g;
省15
29: 9 2023/08/11(金)08:37 ID:4P/NDj/+(2/2) AAS
O(nlog(n))がダメかどうかは、データの規模および実行時間による
43
(2): 9 2023/08/16(水)13:32 ID:vjpqg3x7(1/2) AAS
AA省
44: 9 2023/08/16(水)13:42 ID:vjpqg3x7(2/2) AAS
>>43 typo orz
-h または --highres

-h または --highreso
45: 9 2023/08/16(水)19:12 ID:y9YJABkH(1) AAS
AA省
89: 9 2023/09/22(金)16:53 ID:8M97O6g7(1) AAS
>>85 Perl5

rename "abc$_.mp4", sprintf 'abc%03d.mp4',$_ for 1..20;

※abc1.mp4 abc2.mp4 .. abc20.mp4 があるとしています。
 また abc001.mp4 abc002.mp4 ... abc020.mp4 は既存かのチェックは省いています。
121
(1): 9 2023/10/08(日)20:24 ID:zYJ3wh+h(1) AAS
>>120
「もっとも効率がいいエレベーターの停止順序」とは?
1.停止回数がもっとも少ない
2.移動した階数の和が最も小さい
3.ほか
など、どのような指標?
188
(1): 9 2024/01/16(火)02:37 ID:SfyAs2IF(1/2) AAS
>>187 Perl5

use Time::Piece;
use Time::Seconds;
for (qw{00:00:00 23:59:59}) {
 $t = Time::Piece->strptime($_, '%T') + 1;
 print "入力:$_\n出力:", $t->strftime('%T'), "\n";
}

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

実行結果
~ $ perl 22_187_1秒後.pl
省4
189: 9 2024/01/16(火)02:38 ID:SfyAs2IF(2/2) AAS
>>188

use Time::Seconds;
これ要らなかった…orz
216: 9 2024/02/04(日)16:39 ID:jTY6zdRX(1/2) AAS
>>208 Perl5

use feature qw{:5.16 signatures};
no warnings qw(experimental::signatures);
@s = qw[a1=a2 b1=b2 b3=b2 c1=c2 e1=e2 a3=a4 c3=c4 e1=e3 a2=a4 c3=c1 b3=a4 c2=d1 a4=a5 d2=c1 b4=b3 d3=c3];
for (map{[sort /(\w+)=(\w+)/]} @s) {
 ($l, $r) = @$_;
 $g{$r} //= $g{$l} //= $g{$r} // $l;
 $h{$g{$r}} = $g{$l} if $g{$l} ne $g{$r};
}
$h{$k} = sub($e){$h{$e} ? __SUB__->($h{$e}) : $e}->($v) while ($k, $v) = each %h;
省9
217: 9 2024/02/04(日)18:22 ID:jTY6zdRX(2/2) AAS
>>208 宛てじゃなかった
>>206 の回答だったわ… orz
241
(1): 9 2024/02/16(金)02:56 ID:7jtCAGu+(1/2) AAS
>>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;
 }
省10
242: 9 2024/02/16(金)03:13 ID:7jtCAGu+(2/2) AAS
>>241

  last if keys %a;
 }
 @a = keys %a;



  last if @a = keys %a;
 }

とコンパクトに書けるんだった、まぁいいや
243
(1): 9 2024/02/16(金)14:47 ID:TIAwaOOw(1) AAS
>>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";
省1
246
(1): 9 2024/02/17(土)02:10 ID:K8P5qDCx(1) AAS
AA省
263: 9 2024/02/20(火)17:18 ID:X5uoFLgg(1) AAS
「どんなテストしたの?」
って質問だよ
362: 9 2024/06/11(火)14:41 ID:NjINqn/m(1) AAS
>>348 Perl5

($x = '04:05:06') =~ s/:/*/g;
print eval $x;
363
(3): 9 2024/06/13(木)14:34 ID:XgNTPGgf(1/3) AAS
>>349
> 「バイトが1だったら次の4バイトを読み込んで整数として出力し、」
正直、意味がわからんかった

例で見ると
1 1 0 0 0 → 1
1 128 0 0 0 → 128
ということだが

1に続く4バイトを加算して出力するって意味だったのかいな
368: 9 2024/06/13(木)17:03 ID:XgNTPGgf(2/3) AAS
>>365
ああそういうことか「4バイトを読み込んで整数」と書いてあるのはそういう意味だったのか
ならわかるかも。
オレは4バイト一個一個が整数だと捉えて、それを「4バイトを読み込んで整数」とは何のこっちゃと?になってたわ
369: 9 2024/06/13(木)17:07 ID:XgNTPGgf(3/3) AAS
すまんね68系で育ったもんですぐ連想できなんだ
483
(1): 9 01/20(月)01:11 ID:zWVP8H/r(1) AAS
>>474 Perl5

$s = '(100)(10)(1)[10000](5)(500)[1000][5000][1000][1000](10)(100)(50)(100)[1000]';
$h{$_} .= $_ for $s =~ /\(\d+\)|\[\d+\]/g;
use List::Util 'sum';
$v{$h{$_}} = sum($h{$_} =~ /\d+/g) for keys %h;
print "$_\n" for sort{$v{$b} <=> $v{$a}} keys %v;

実行結果
~ $ perl 22_474_value.pl
[10000]
[5000]
省7
484: 9 01/21(火)02:09 ID:Kvjf8jsk(1) AAS
>>483 Perl5

$_ = 'abc def ghi';
print join(' ' x 4, split) . "\n";
491: 9 01/24(金)01:44 ID:p08ruAfw(1) AAS
>>485 Perl5

for $n (1..3) {
 @cp = @s = qw(A B C);
 while(--$n) { @cp = map{ $p = $_; map{ "$p$_" } @s } @cp }
 print "@cp\n";
}

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

実行結果
~ $ perl 22_485_CartesianProd.pl
A B C
省2
492
(1): 9 01/24(金)17:38 ID:cg1ZmS3G(1) AAS
>>464 Perl5

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

A
B
AB
ABB
省18
494: 9 01/25(土)02:52 ID:wVQIyzpy(1) AAS
>>492
/g の gは不要で / でおkだった…orz
501
(1): 9 01/27(月)17:15 ID:cwZgX9Gy(1/3) AAS
Perl5

for (qw{T CG ATA CGGA ATGAT GTTGCA CCCCGGG ACTGCGAG ATCAGAATA TGCCATGACA}) {
 %h = (); $h{$_}++ for split '';
 print "$_ → ", (grep{1 < $h{$_}} keys %h), "\n";
}

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

実行結果
~ $ perl 22_500_dupe_char.pl
T →
CG →
省8
502: 9 01/27(月)21:20 ID:cwZgX9Gy(2/3) AAS
>>501 Coilotに入力して処理内容を問うてみたらちゃんと返してきてワラタ
外部リンク:copilot.microsoft.com
503: 9 01/27(月)21:22 ID:cwZgX9Gy(3/3) AAS
CopilotのURLをコピペしても他の人に内容を見せることはできなかったワ…orz
537
(3): 9 02/07(金)21:20 ID:dMuAEB5V(1/4) AAS
>510 Perl5

外部リンク:ideone.com
539: 9 02/07(金)23:00 ID:dMuAEB5V(2/4) AAS
>>537
しくった、これ一番短い範囲ではなく間違って一番長い範囲を検出してる。
サンプルデータではたまたま同じ解になるようで、間違いを見落としてしまった。

それから、一番長い(短いにすべきだったが)範囲の検索にわざわざ候補listをsortして[0]番目を
取得しているが無駄だし規模が大きくなると効率よくない

時間あったら直しますわ〜
540
(2): 9 02/07(金)23:02 ID:dMuAEB5V(3/4) AAS
>>538
あーでも527の方式がいまんとこ一番早いんだな、検証thx
541: 9 02/07(金)23:04 ID:dMuAEB5V(4/4) AAS
>>540 527 じゃなくて 537ね。スマソ
544
(2): 9 02/08(土)00:22 ID:vma3KbbM(1/2) AAS
>>510 Perl5、>>537 の修正版

外部リンク:ideone.com

修正点
>>537では間違って一番長い範囲を検出していたが、一番短い範囲に修正した。(サンプルデータではそれらの解はたまたま一致)
・パターンが3文字であることに依存する定数「2(=3 -1 )」をハードコードしている箇所があったので、パターン文字数次第で処理するように修正
・検出した候補文字列リストのうち一番短い物の検索のためにわざわざ候補リスト全体をsortするのをやめて
 reduceによって長さが一番短い文字列を検索するように修正

List::Utils は言語処理系にデフォルトで付属のコアモジュール、
List::MoreUtils はCPANのオプションノジュールだがideoneのperlにはインスコされていたので使っちゃいましたテヘペロ

なお、候補文字列リストを作らず、ループの最内ifの中で一番短い文字列だけを記録していく様に記述すれば
省2
545: 9 02/08(土)00:26 ID:vma3KbbM(2/2) AAS
>>544 List::Utils → List::Util ね。スマソ
547: 9 02/08(土)17:50 ID:HpUe4TZQ(1) AAS
>>510 Perl5、>>544 をもう一回だけ改良

外部リンク:ideone.com

改良点:
・検出された範囲の候補を一通りリストに蓄えて、あとでその中から最短のものを探す方式を止めて、
 範囲を検索するループ内のifでその時点までの最短な範囲の判定と記録を行うようにした。
・CPANモジュールList::MoreUtilsのminmaxを使わない。
・コアモジュールList::Utilはminだけ使う。reduceは使わない。

なんだかPerlのコードらしい感じが減って、ベタな感じのコードになってしまいました
563: 9 02/11(火)14:53 ID:mMj2PIa8(1) AAS
>>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;
省1
573: 9 02/11(火)23:36 ID:yxel6cu3(1) AAS
先に言えよって、感じw
581: 9 02/12(水)00:03 ID:yw0CaA/O(1/4) AAS
そういう条件は回答を見て思いついた後から言わず先に書くべきでは?
そうでなければ、与えられた短い文とテストデータから、
処理対象データの範囲や要求仕様を読み手が色々解釈しても仕方ないだろ。
後からいろいろ言って批判なんてでもってのほかだと思うが。
582: 9 02/12(水)00:05 ID:yw0CaA/O(2/4) AAS
出来たもの見て実はこういう条件がありましたってケチつけるのはクソクライアントと一緒だな
587: 9 02/12(水)00:28 ID:yw0CaA/O(3/4) AAS
「データが二個未満の場合にはnilを返す。」とか書いとくべき。
でもそういう細かい条件をちまちま指定した窮屈な課題は、つまんなくて回答を造る意欲が減るんだよな。

シンプルで純な課題に対してどういうエレガントでエッセンシャルな回答があるか考えるのが楽しいのであって、
細かいいろんな条件を守る周辺コードで固めるような作業はつまんないから趣味の世界ではやりたくないな
589: 9 02/12(水)00:33 ID:yw0CaA/O(4/4) AAS
ここはある意味、回答のコードでもって語るスレだからな
597: 9 02/13(木)17:35 ID:UAfabByi(1/3) AAS
>>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
省9
599
(1): 9 02/13(木)20:24 ID:UAfabByi(2/3) AAS
数学屋さんかいなw
i,jの「3 4」とか「6 7」は桁の位置をしていしているのではなく数値列の中にある数字を指定するんジャマイカ
とオレは解釈したが
602: 9 02/13(木)20:52 ID:UAfabByi(3/3) AAS
なんでこの人はコーデイングするのがこんなに早いんだろう…
616
(2): 9 02/15(土)10:36 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
617: 9 02/15(土)10:39 ID:1WENuqRv(2/2) AAS
AA省
633: 9 02/16(日)06:28 ID:GnMUCCm7(1/2) AAS
qa0m30Tb の回答はどれよ?
639: 9 02/16(日)15:45 ID:GnMUCCm7(2/2) AAS
回答のコードでもって語ってほしいなぁ
661: 9 02/28(金)03:12 ID:MEvV9q87(1) AAS
負の場合に表現可能なビット数を配慮しないとPython の int.bit_count()と同じ結果にならないんジャマイカじゃまいか
たぶんPythonの整数がbigintのせいだとおもう
絶対値とってpopcountとかやらないと意外とあれこれ書いてプチ長めのコードになりそうなおかん
677: 9 03/16(日)00:12 ID:8GU62dKf(1) AAS
>>670 Perl5

use bigint;
print $_ - reverse($_), "\n" for 12345, 4922235242952026704037113243122008064;

実行結果

$ perl 22_670_reverse_minus_biginit.pl
-41976
314233029528909399960910650696685770
682
(1): 9 03/18(火)16:05 ID:GYPHuJM6(1/5) AAS
>>680 Perl5、ナイーブな処理方式だと時間がかかり過ぎで最後まで解けないおそれがあるが、なかなかほかに回答者が現れないし、
出現傾向を見るだけでも…と思って、16進数の桁にa-fの現れる値をskipするナイーブな処理方法で。

$m = sprintf '%x', 9 x 15; # 10進で15桁まで
print $m . ' '. hex($m)."\n";
$m =~ s/[a-f]/9/g;
print "1 .. 0x$m\n";
print "".localtime."\n";
for (1 .. $m) {
 $d = hex($_);
 if (0 <= index($d, $_)) {
省6
683
(2): 9 03/18(火)16:07 ID:GYPHuJM6(2/5) AAS
>>682
実行結果 (改行数を減らすため適度につなげてます)
$ perl 22_680_hex_substr_1.pl
38d7ea4c67fff 999999999999999
1 .. 0x3897994967999
Tue Mar 18 09:15:31 2025
1, 0x1   2, 0x2   3, 0x3   4, 0x4   5, 0x5   6, 0x6   7, 0x7   8, 0x8   9, 0x9
357440, 0x57440   357441, 0x57441   357442, 0x57442   357443, 0x57443   357444, 0x57444
357445, 0x57445   357446, 0x57446   357447, 0x57447   357448, 0x57448   357449, 0x57449
1079653, 0x107965   1081713, 0x108171   1122966, 0x112296   1123079, 0x112307   1123080, 0x112308
省14
686
(2): 9 03/18(火)21:41 ID:GYPHuJM6(3/5) AAS
>>683
>やはり想定通り気の利いた高速解放が要りますテヘペロ。

そのヒントになるかいな…?
・16進数を10進数に変換すると桁数は同じまたは高々1桁増えるのみ(だともう、証明略)
・桁数が同じ場合、16進数と10進数が同じということはあり得ない、自明
・一桁増える場合は先頭または末尾に一桁増える。残りが16進数と同じ部分文字列であるかが評価対象となる
687: 9 03/18(火)21:42 ID:GYPHuJM6(4/5) AAS
>>685
あそうなんだ。じゃオレ様が一番乗りということでヨロ
ノシ
688: 9 03/18(火)21:52 ID:GYPHuJM6(5/5) AAS
>>686
>・一桁増える場合は先頭または末尾に一桁増える。残りが16進数と同じ部分文字列であるかが評価対象となる

二桁増える場合があるのでこれは誤りでした
691
(1): 9 03/19(水)16:33 ID:kDrq13vm(1) AAS
>>686
> ・桁数が同じ場合、16進数と10進数が同じということはあり得ない、自明

大間違い。16進数と10進数で桁数が同じ値のうち、一桁のものは、16進も10審も同じだった…orz

結局、高速解放はあるんだろうか?
あるいはコラッツ予想みたいに「無いかもしれない」類の、考えるだけ無駄な問題なのだろうか?
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.052s