x.x.x.x

| HOME | FrontPage | 記事編集 | RSS |

明日は試験でごわす   Perl

  1. 1. 設問
  2. 2. 解けなくても問題ないよ

Perlの。緊張で目から汗が。現在客先を担当するSEが酷いそうで、新しい人を簡単にテストさせて欲しいんだって。試験こんな感じかな。

1. 設問

実行環境はWindowsXP、Perl -v は5.8.8とする。

問1 文字列11c800b115a222234から連続する数値を削除して「c8b5a34」を表示しなさい。
(3行以内 / 1分以内)

正解は以下ですヽ( ´ ー ` )ノ

$sent = "11c800b115a222234";
$sent =~ s/(\d)\1//g;
print $sent;

問2 上のコードを改造し、連続する数値を一つだけ残し「1c80b15a234」を表示しなさい。
(3行以内 / 30秒以内)

正解は以下です。ヽ( ´ ー ` )ノ

$sent = "11c800b115a222234";
$sent =~ s/(\d)\1+/$1/g;
print $sent;

問3 上のコードを改造し、削除した数値の種類「4種類」を表示しなさい。
(3行以内 / 15秒以内)

正解は以下です。ヽ( ´ ー ` )ノ

$sent = "11c800b115a222234";
$cnt = $sent =~ s/(\d)\1+/$1/g;
print $cnt . '種類';

問4 上のコードをUTF8で記述し、処理結果「4種類」がShift_JISのコンソールに正しく表示されるよう修正しなさい。
(4行以内 / 30秒以内)

正解は以下です。ヽ( ´ ー ` )ノ

use utf8;
binmode(STDOUT, ':encoding(shiftjis)');
$sent = "11c800b115a222234";
print $sent =~ s/(\d)\1+/$1/g . '種類';
2. 解けなくても問題ないよ

実際は○行以内とか、○秒以内と決められているわけではなく、わからないことは随時調べれば良いし、昔はステップ数(コメントを除く行数)でお金が支払われたので、かえって冗長な方が良い場合もある。ただ↓こういうのや、

$sent = "11c800b115a222234";
$prev = '';
for(split(//, $sent)) {
    next if($prev eq $_);
    print;
    $prev = $_;
}

逆に↓こういうのは勘弁して欲しい。

$sent = "11c800b115a222234";
print join("$1", split(/(\d)\1+/, $sent));

まぁ試験終わったら内容を解説するよ。
客先主催のイベントだから、そんなにトンチの利いた難問は出ないけどね。

BlogMode speed member / 2008.02.12 12:14

These pages are designed for NN7 & IE6.
BBSWiki ver.1.50 Final blogmode.
Copyleft (!C) 2005-2007 SUICIDE BLONDE JP.
All Lefts Reserved.

Valid XHTML 1.0 Strict Valid CSS!