중간 문자열 배열 반영


16

2 차원 문자 배열에서 문자 의 반사 를 재정 의하여 시작하겠습니다 .

고유 한 소문자 알파벳 문자를 가진 2 차원 문자의 제곱이 주어지면, 문자를 정사각형 중심을 가로 질러 문자를 가로 질러 직접 바꾸는 것으로 행렬에서 문자의 반사를 정의하십시오.

따라서, 문자의 반사 c에

abcde
fghij
klmno
pqrst
uvwxy

구성 결과

abwde
fghij
klmno
pqrst
uvcxy

c과 w가 전환 되었기 때문 입니다.

몇 가지 예 (위와 동일한 원래 구성으로) :

캐릭터를 반영하면 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 배열을 반환합니다.


당신은 이것을 더 골프화 할 수 있어야한다. 입력 행렬을 수정하는 것이 파이썬보다 자바에서 더 짧을 수는 없다. a과 b및 사용 n+~x과 n+~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. 설명 : 각 문자 c의 s차례로 처리됩니다. 정규식은 배열의 끝에서 같은 거리에있는 두 위치를 찾습니다. 그중 하나는 c거울이고 다른 하나는 거울 m입니다. 이 문자들은 서로 바뀌고 c에서 제거됩니다 s.

+`

각 문자를 s차례로 처리합니다.

^(.)

$1캡처합니다 c.

(.*¶(.|¶)*)

$3배열에서 c또는 중 하나를 앞에 붙이는 문자 스택을 캡처합니다 m. $2나머지 s문자와 이러한 문자를 모두 캡처합니다 .

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

경우 m선행 c, $4값,이 $5캡처 m와 $6캡처 문자 사이를m 와 c. 스택으로 $7캡처 $6하지만 해당 값은 사용되지 않습니다.

\1

c 배열 자체에서 일치합니다.

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

경우 m이미 일치하지 한 후, $8임의로 케이스되는 값 캡처 $9로부터 문자를 캡처 c하는 m, $10캡처 $9미사용이고 스택으로 $11캡처 m. 이 경우 값은 선택 사항입니다c 과 m같은 문자입니다.

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

$12캡처의 다른 접미 문자 c및m . 확인하기 위해 사용되는 균형 그룹은 $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.