중간 문자열 배열 반영


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 차원 문자 배열이 주어지면 주어진 문자열에서 각 문자를 살펴보고 행렬에 "반영"하십시오.

설명 : 문자열의 문자는 a-z 이며 문자는 고유하며 배열은 1x1 이상 5x5입니다 (분명히 영어 알파벳은 26 문자뿐이므로). 문자열의 문자는 다음과 같습니다. 2 차원 배열에서 문자열은 최대 100 자입니다.

입력

문자열 s, 정수 N, aNxN 문자 배열.

입력:

ac
2
ab
cd

산출:

dc
ba

* 이유 : 먼저와을 반영 a하십시오 d. 그런 다음 cwith를 입력 문자열의 두 번째 문자 b이므로 반영하십시오 c.


채점

  • 편리한 방법으로 출력 가능 .
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

현재 우승자


9
30 분이면 샌드 박스에서 의미있는 사용을하기에 충분한 시간이 아닙니다.
Post Rock Garf Hunter

3
문제 없습니다, 좋아 보입니다.
user202729

1
(또한 우리는이 스택 조각 리더)
user202729

6
50 시간은 우승자를 받기에는 시간이 너무 짧습니다. 일반적으로 일주일 정도 기다립니다. 그러나 PPCG에서는 미래의 답변을 방해하고 답변을 영원히 공개하기를 원하므로 답변을받지 않는 것이 일반적입니다.
HyperNeutrino

2
모든 예제는 알파벳 순서로 문자를 갖습니다. 우리가 할 수있는 가정이 아니라고 생각합니까? 또한, 우리가 취할 N우리가 필요하지 않은 경우 입력으로?
Stewie Griffin

답변:


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

파이썬 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: 조인 된 문자열

간단한 문자 목록을 반환합니다


나는 경우 목록으로 배열을 위해 :

파이썬 (2) , 111 (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

자바 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)

댕, 자바 코딩! ??!?! +1 데프
NL628

1

파이썬 3 , 122 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 배열을 반환합니다.


당신은 이것을 더 골프화 할 수 있어야한다. 입력 행렬을 수정하는 것이 파이썬보다 자바에서 더 짧을 수는 없다. ab및 사용 n+~xn+~y: 직접 2 바이트 저장 a,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

아르 자형 , 74 61 바이트

주세페 덕분에 -13 바이트.

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

온라인으로 사용해보십시오!

로 검색 할 문자 벡터 s, 행렬 크기 n및 행렬 자체를 입력 m합니다. 첫 번째 인수를 string 으로 취해야하는 경우 절대적으로 재미를 망칠 것입니다.


숫자 인덱스 대신 논리 인덱스를 사용하여 61 바이트로
Giuseppe

와, 정말 고마워요. 고마워요.
Kirill L.

0

젤리 , 15 14 바이트

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

온라인으로 사용해보십시오!

전체 프로그램.

설명:

FW; Ṛi, C $ ¥ ¦ / ṁḷY 메인 링크. 입력 : [ 'ab', 'cd'] (왼쪽), 'ac'(오른쪽).
FW                    F latten and W 목록에서 랩을. 현재 값 = [ 'abcd'].
  ; 올바른 논증으로 연결하십시오. [ 'abcd', 'a', 'c']
          / 왼쪽에서 줄이십시오.
   R | 적용 R의 에서 EVERSE을 ...
    색인 (왼쪽 인수의 오른쪽 인수) ...
     , C $ 및 해당 보완 지수.

마지막 작업에는 더 많은 설명이 필요합니다. f = Ṛi,C$¥¦를 표시 한 다음 value ['abcd','a','c']를 계산 하면 다음 ('abcd' f 'a') f 'c'과 같이 확장됩니다.

Ṛi, C $ ¥ ¦ 기능 f . 왼쪽 인수 = 'abcd'이고 오른쪽 인수 = 'a'라고 가정하십시오.
Ṛ 먼저, 반대로 계산하십시오. 'dcba'를 가져옵니다.
 i ¥ 적용 할 지수를 계산하려면 먼저 'abcd'에서 'a'의 색인
             ( 'abcd'i 'a') = 1입니다. (첫 번째 색인)
  , C $ 그런 다음 (1 C) = 0과 쌍을 이룹니다. (마지막 인덱스)
      ¦ 지수 0과 1에서 'abba'에 'dcba'를 적용하십시오.

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

0

레티 나 0.8.2 , 96 바이트

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

온라인으로 사용해보십시오! s정수없이 문자열 과 문자 배열을 줄 바꿈으로 구분 된 문자열로 취합니다 N. 설명 : 각 문자 cs차례로 처리됩니다. 정규식은 배열의 끝에서 같은 거리에있는 두 위치를 찾습니다. 그중 하나는 c거울이고 다른 하나는 거울 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).))

$12캡처의 다른 접미 문자 cm . 확인하기 위해 사용되는 균형 그룹은 $12만큼 같습니다 $3즉, 깊은이었다 접두사와 접미사가 같은 길이입니다.

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

조각은 다시 함께 넣어 - 최초의 나머지 부분 s과 배열의 접두사를, 다음 경우 c덧붙일 m다음 m다음 중간, 다음 c, 다음 경우 m덧붙일c 중간 다음 다음 m다음의 접미사.

1A`

이제 s비어 있습니다. 삭제되었습니다.


0

자바 스크립트, 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.