-4

Perlを使用して一部の文字/ビットを循環シフトする必要があります

たとえば、次の入力 (文字列の反転) を使用します。

1010
1110
hello

私は取得する必要があります:

0101
0111
olleh

Perlを使用してこれを達成するにはどうすればよいですか?

4

2 に答える 2

3

循環シフトではなく、文字列を逆にしたいようです!

$string=reverse($string);
于 2012-09-17T20:56:23.717 に答える
1

ただし、本当に循環シフト値が必要な場合は、トレーニング用の任意のリストを使用してそれを実行する関数を簡単に作成できます。

#!/usr/bin/env perl

use strict;
use warnings;
use feature 'say';

# circular shift lists
sub circular {
    my ($i, @values) = @_;
    return @values[ map +($_ + $i) % @values => 0 .. $#values ];
}

say circular  4, 1 .. 9;                # 567891234
say circular -2, 1 .. 9;                # 891234567
say circular  3, split '' => 'hello';   # lohel

returnの行の説明のいくつかの単語circular:

return @values[ ... ];

hereの配列スライスを@values返します。つまり、インデックスのリストで評価し、値のリストを返します。

map ... => 0 .. $#values

ここでは、@values のすべてのインデックスから計算した値のリストを返しています。0 が最初で$#values最後です。

+($_ + $i) % @values

これが、これらのインデックスで行うことです。この+記号は、括弧が の引数の括弧ではないことを perl に伝えるためにのみ使用されますmap。インデックスに $i を追加し、> $#valuesそれが の長さでモジュロ除算されるのを防止し@valuesます。は 2 番目のオペランドをスカラー コンテキストで評価し、配列はスカラー コンテキストでその長さを評価するlength @valuesため、ここで呼び出すことは重要ではないことに注意してください。%

helloまたはのようなもの1110をリストに変換してスカラーに戻す簡単な演習として、あなたに任せます。

于 2012-09-18T09:41:14.637 に答える