中間ストリング配列の反射


16

まず、文字の2次元配列で文字の反射を再定義することから始めましょう。

明確な小文字のアルファベット文字を持つ正方形の2次元配列の文字が与えられた場合、行列の文字の反射を、正方形の中心を通して文字を直接横切る文字と交換するように定義します。

このように、手紙の反射c

abcde
fghij
klmno
pqrst
uvwxy

構成になります

abwde
fghij
klmno
pqrst
uvcxy

ためcw切り替えられています。

さらにいくつかの例(上記と同じ元の構成):

キャラクターeを反映すると形成されます

 abcdu
 fghij
 klmno
 pqrst
 evwxy

キャラクターmを反映すると

 abcde
 fghij
 klmno
 pqrst
 uvwxy

キャラクターbを反映すると形成されます

 axcde
 fghij
 klmno
 pqrst
 uvwby

チャレンジ

個別の小文字を持つ2次元配列の文字が与えられた場合、指定された文字列の各文字を調べて、行列に「反映」します。

明確化:文字列の文字はfrom a-z、文字は一意であり、配列は少なくとも1x1から最大5x5です(明らかに、英語のアルファベットには26文字しかないため)。文字列の文字は2次元配列。文字列は最大100文字です。

入力

文字列s、整数N、そしてNxN文字の配列。

入力:

ac
2
ab
cd

出力:

dc
ba

*理由:最初に、を反映aしますd。次に、反映cしてbいるためにはc、入力文字列内の二文字です。


得点

  • 便利な方法で出力できます。
  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

現在の勝者


9
サンドボックスを有効に活用するには、30分では十分ではありません。
小麦ウィザード

3
問題ありません。
user202729

1
スタックスニペットリーダーボードもあります)
-user202729

6
50時間は、勝者を受け入れるには短すぎます。通常、1週間ほど待ちます。ただし、PPCGでは、回答を受け入れないことが一般的な方法です。これは、将来の回答を思いとどまらせるためです。
ハイパーニュートリノ

2
すべての例には、アルファベット順に文字があります。それは私たちができる仮定ではないと思いますか?また、私たちが持っている取るためにN、我々はそれを必要としない場合は、入力として?
スティーヴィーグリフィン

回答:


3

オクターブ85 68 66バイト

を使用evalすると、ループが内部にあるため、多くのバイトを節約できました!私はからインスピレーションを得たこの答えによってルイスMendo

@(c,N,A)eval"for C=c,A(flip(k))=A(k=[x=find(A==C),N^2+1-x]);end,A"

オンラインでお試しください!

説明:

f=@(c,N,A)          % Anonymous function that takes the three input variables
eval"...          % Evaluate the string and run it:
 for C=c,          % Loop over the character list 'c'
  .. x=find(A==C)   % Find the index where the character C is in A, and store it as 'x'
  .. k=[x,N^2+1-x]  % Create a vector with the index of C, and the index of its reflection
   A(flip(k))=A(k)  % Swap the elements in these positions
  end               % End loop
  A"                % Display the new 'A'

2

Python 2、76バイト

lambda s,a:[a[[i,~i][(s.count(c)+s.count(a[~i]))%2]]for i,c in enumerate(a)]

オンラインでお試しください!

入力を受け取ります:

  • s: ストリング
  • N:無視されます
  • a:結合された文字列

文字のフラットリストを返します


配列をリストとして取得する必要がある場合:

パイソン2111の 108 107 104バイト

lambda s,n,a:[[x[sum(map(s.count,x))%2]for i in range(n)for x in[[a[j][i],a[~j][~i]]]]for j in range(n)]

オンラインでお試しください!

入力を受け取ります:

  • s: ストリング
  • n:int
  • a:文字の2Dリスト

文字の2Dリストを返します


1

Java 10、126 123 116バイト

(s,n,m)->{for(var c:s)for(int N=n*n,i,j;N-->0;)if(m[i=N/n][j=N%n]==c){m[i][j]=m[n+~i][n+~j];m[n+~i][n+~j]=c;break;}}

バイトを節約するために新しい文字行列を返す代わりに、入力文字行列を変更します。

オンラインでお試しください。

説明:

(s,n,m)->{        // Method with the three parameters and no return-type
  for(var c:s)    //  Loop over the characters given
    for(int N=n*n,i,j;N-->0;)
                  //   Inner loop over the matrix
      if(m[i=N/n][j=N%n]==c){
                  //    If the current character and matrix-value are equals:
        m[i][j]=m[n+~i][n+~j];m[n+~i][n+~j]=c;
                  //     Swap the values in the matrix at indices [i, j] and [n-i-1, n-j-1]
        break;}}  //     Stop the inner loop (go to next iteration of the outer loop)

ダン、javaでコーディング!??!?!+1 Def
NL628

1

Pythonの3122の 111バイト

lambda l,n,A:[[[A[a][b],A[~b][~a]][sum(map(l.count,[A[a][b],A[~b][~a]]))%2]for b in range(n)]for a in range(n)]

オンラインでお試しください!

文字の2D配列を返します。


これをさらにゴルフすることができるはずです。入力行列の変更は、Pythonの場合よりもJavaの方が短い方法はありません。し、使用して直接2バイト節約できます:へabn+~xn+~ya,b=n+~x,n+~y;A[x][y],A[a][b]=A[a][b],A[x][y]A[x][y],A[n+~x][n+~y]=A[n+~x][n+~y],A[x][y]
ケビンCruijssen

1

R74 61バイト

ジュゼッペのおかげで-13バイト。

function(s,n,m){for(x in s)m[v]=rev(m[v<-(i=x==m)|rev(i)]);m}

オンラインでお試しください!

として検索する文字のベクトルを入力します。マトリックスのsサイズはasでn、マトリックス自体はmです。最初の引数をstringとしてとることが絶対に必要な場合、それは面白さを台無しにします。


数値ではなく論理インデックスを使用して、61バイト
ジュゼッペ

うわー、それは大幅な改善です、ありがとう。
キリルL.

0

ゼリー15 14バイト

FW;Ṛi,C$¥¦/ṁḷY

オンラインでお試しください!

完全なプログラム。

説明:

FW;Ṛi、C $¥¦ /ṁḷYメインリンク。入力:['ab'、 'cd'](左)、 'ac'(右)。
FW                    F lattenとWをリストにラップします。現在の値= ['abcd']。
  ; 正しい引数で連結します。['abcd'、 'a'、 'c']
          /左から削減:
   R |適用のRでeverseを...
    i¥インデックス(右引数の左引数)...
     、C $およびその補数インデックス。

最後の操作では、さらに説明が必要です。f =を表しṚi,C$¥¦、次に値['abcd','a','c']を計算し('abcd' f 'a') f 'c'、次のように展開します:

RI、C $¥|関数F。左引数= 'abcd'および右引数= 'a'と仮定
Ṛ最初に、逆を計算します。「dcba」を取得します。
 i¥適用するインデックスを計算するには、まず「abcd」の「a」のインデックス
             is( 'abcd' i 'a')= 1(最初のインデックス)
  、C $その後、(1 C)= 0とペアになります(最後のインデックス)
      indicesインデックス0および1で「dcba」を「abcd」に適用します。

              a bc d
               d cb a
              ^ 1 ^ 0
              ====
              dbca

0

Retina 0.8.2、96バイト

+`^(.)(.*¶(.|¶)*)((.)((.|¶)*))?\1(?(4)|(((.|¶)*)(.))?)((?<-3>.|¶)*$(?(3).))
$2$11$9$1$6$5$12
1A`

オンラインでお試しください!文字列sと文字の配列を、整数のない改行区切り文字列として受け取りますN。説明:の各文字cs順番に処理されます。正規表現は、配列の両端から等距離にある2つの位置に一致します。cその1つはミラーで、もう1つはミラーmです。これらの文字は交換cされ、から削除されsます。

+`

の各文字をs順番に処理します。

^(.)

$1キャプチャしcます。

(.*¶(.|¶)*)

$3は、cまたはのいずれかの前にある配列内の文字のスタックをキャプチャしますm$2残りの部分とsこれらすべての文字をキャプチャします。

((.)((.|¶)*))?

もしm先行c$4値を持ち、$5キャプチャm$6キャプチャ文字間mc。スタックとして$7キャプチャ$6しますが、その値は使用されません。

\1

c 配列自体で一致するようになりました。

(?(4)|(((.|¶)*)(.))?)

もしがm既に一致しなかった場合、$8必要に応じて、その場合の値、キャプチャ$9から文字を捕捉cするm$10キャプチャ$9未使用であり、スタックとして$11キャプチャしますm。値は、ケース内のオプションであるcm同じ文字です。

((?<-3>.|¶)*$(?(3).))

$12cおよびのもう一方の接尾辞の文字をキャプチャしmます。バランスグループを使用して、深$12$3が深いことを確認します。つまり、プレフィックスとサフィックスは同じ長さです。

$2$11$9$1$6$5$12

作品は、その後、戻って一緒に入れている-最初の残りの部分sと配列の接頭辞は、その後、場合c先行しm、その後m途中、その後、その後c、その後、場合m先行しc、その後、その後中央をmサフィックス、。

1A`

今ではs、それが削除されて空になっています。


0

JavaScript、85バイト

文字列Sと配列Aを結合文字列として受け取ります。

([...S],[...A])=>S.map(c=>[A[j],A[i]]=[A[i=A.indexOf(c)],A[j=A.length+~i]])&&A.join``


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.