ウィークリーチャレンジ131


ChallengeMy solutions

タスク #1 › 連続配列



仕事



投稿者: マーク・アンダーソン

一意の正の整数の並べ替えられたリストが与えられます.

配列が連続した整数である配列のリストを返すスクリプトを作成します.

私の解決策



これはかなり簡単なので、多くの説明は必要ありません.タスクはリストが順序付けられており、一意であると言っていますが、とにかくこれを行います.誰かがどのような入力を提供するかは決してわかりません!
@output をシードします.最初の番号の配列.次に、各番号を配列から削除します.その数値が @output の最後の配列の最後の数値よりも 1 つ多い場合、既存の行に値を追加します.そうでない場合、これは新しいシーケンスであることを意味するため、配列に新しい行を追加します.

次に map を使用して、要求された形式で結果を表示します.




 ./ch-1.pl 1 2 3 6 7 8 9
([1, 2, 3], [6, 7, 8, 9])

$ ./ch-1.pl 11 12 14 17 18 19
([11, 12], [14], [17, 18, 19])

$ ./ch-1.pl 2 4 6 8
([2], [4], [6], [8])

$ ./ch-1.pl 1 2 3 4 5
([1, 2, 3, 4, 5])


タスク 2 › ペアを見つける



仕事



投稿者: Yary

区切り文字のペアの文字列と検索する文字列が与えられます.

2 つの文字列を返すスクリプトを作成します.1 つ目は「開始文字」セットに一致する任意の文字を含み、2 つ目は「終了文字」セットに一致する任意の文字を含みます.

私の解決策



これに取り組む方法はいくつかありますが、私の選択は主に例の出力に基づいています.このために、最初の文字列 (区切り文字部分) を取得し、一度に 2 文字ずつ処理して $open に追加します.と $closeストリング.文字が英数字でない場合は、逆引用符でエスケープします. perlre 「他の正規表現言語とは異なり、英数字以外のバックスラッシュ記号はありません.したがって、 \\\(\)\[\]\{ 、または\} は常に、メタ文字ではなくリテラル文字として解釈されます"

次に、この正規表現文字列 ( [^] でラップ) を使用して、パターンに一致しない文字を削除し、結果を表示します.






$ ./ch-2.pl '""[]()' '"I like (parens) and the Apple ][+" they said.'
"(["
")]"

$ ./ch-2.pl '**//<>' '/* This is a comment (in some languages) */ <could be a tag>'
/**/<
/**/>