Toshi's Blog

[ブログ一覧]
 ● ブログトップページ
[ホームページリンク]
 ● ホームレコーディング 楽曲集/宅録/DTM
 ● 自作ギターエフェクター/ツール/パーツ
 ● A3サイズのNゲージ箱庭鉄道模型

ChatGPTに、このブログを処理するperlのスクリプトを作らせてみました

2024/08/20


ChatGPTに、このブログを処理するperlのスクリプトを作らせてみました
このブログは、一番下のフッタに示すように「Smatr Blog」のスクリプトを使わせていただいています。

このブログシステムはperlで書かれています。私は、一応perlは使えるのですが、perlでよく使う正規表現の書き方が難しく、わからない場合はWEBで探しながらスクリプトを作っています。

「ブログ一覧」ページの「良く読まれているブログ」に掲載する記事を選ぶために、アクセスログから読まれたブログの番号とタイトルを検索し、読まれた順に6つのブログを表示するようにしています。この際に、3つの仮想配列を1組にして、そのうちの1つの仮想配列の要素でソートする必要がありました。エクセルで、3列を対象にソートするようなイメージです。

このソートがを行わせるのが難しく、WEBを探しても見つけられませんでした。

そこで、ChatGPTに質問し、作ってもらいました。こんな感じです。
作成されたスクリプトを調整して実装しました。ちゃんと動きました。

ややこしい正規表現は、自分で考えたりWEBで調べたりするより、ChatGPTに聞いたほうが、遥かに効率的です。

ですが、明らかに間違っている回答をする場合もあり、「これは間違っていないか?」と聞くと、シラっと「ご指摘の通り間違っています」と回答したりするので、ちょっと笑ってしまいますが、注意が必要です。

<CharGPTに投げた質問>
以下の条件でクイックソートするプログラムをperlで作ってください。

仮想配列 @a, @b, @c がある
これらの参照リストの仮想配列 @list=(\@a, \@b, \@c); がある
このとき、@aの要素を使って、@listをソートしたい
昇順、降順を切り替えられるようにしたい


<作成されたスクリプト>
use strict;
use warnings;
# サンプルの仮想配列
my @a = (3, 1, 4, 1, 5);
my @b = qw(b1 b2 b3 b4 b5);
my @c = qw(c1 c2 c3 c4 c5);
# 仮想配列の参照リスト
my @list = (\@a, \@b, \@c);
# 昇順 or 降順を指定(1で昇順、-1で降順)
my $order = 1;  # 昇順なら1, 降順なら-1に設定
# クイックソートの実装
sub quicksort {
    my ($refs, $start, $end, $order) = @_;
    
    return if $start >= $end;
    my $pivot_index = partition($refs, $start, $end, $order);
    quicksort($refs, $start, $pivot_index - 1, $order);
    quicksort($refs, $pivot_index + 1, $end, $order);
}
sub partition {
    my ($refs, $start, $end, $order) = @_;
    
    my $pivot = $refs->[0][$end];
    my $i = $start - 1;
    for my $j ($start .. $end - 1) {
        if (($refs->[0][$j] * $order) <= ($pivot * $order)) {
            $i++;
            swap($refs, $i, $j);
        }
    }
    swap($refs, $i + 1, $end);
    return $i + 1;
}
sub swap {
    my ($refs, $i, $j) = @_;
    foreach my $arr_ref (@$refs) {
        ($arr_ref->[$i], $arr_ref->[$j]) = ($arr_ref->[$j], $arr_ref->[$i]);
    }
}

# クイックソート実行
quicksort(\@list, 0, $#a, $order);

# ソート結果の確認
print "Sorted arrays:\n";
print "a: @{$list[0]}\n";
print "b: @{$list[1]}\n";
print "c: @{$list[2]}\n";


「ソフトウエア開発」に関連するブログ


多く読まれたブログ



2024/08/20 20:20 | ブログ一覧