Phản xạ mảng trung gian


16

Hãy bắt đầu bằng cách xác định lại sự phản chiếu của một ký tự trong một mảng các ký tự 2 chiều:

Đưa ra một mảng 2 ký tự vuông với các chữ cái chữ cái viết thường, xác định sự phản chiếu của một chữ cái trong ma trận khi hoán đổi nó với ký tự trực tiếp từ nó qua tâm của hình vuông.

Do đó, một sự phản ánh của bức thư ctrong

abcde
fghij
klmno
pqrst
uvwxy

sẽ dẫn đến cấu hình

abwde
fghij
klmno
pqrst
uvcxy

bởi vì cwđã được chuyển đổi

Một số ví dụ khác (có cùng cấu hình ban đầu như trên):

Phản ánh nhân vật esẽ hình thành

 abcdu
 fghij
 klmno
 pqrst
 evwxy

Phản ánh nhân vật msẽ làm

 abcde
 fghij
 klmno
 pqrst
 uvwxy

Phản ánh nhân vật bsẽ hình thành

 axcde
 fghij
 klmno
 pqrst
 uvwby

Các thách thức

Đưa ra một mảng 2 ký tự với các chữ cái viết thường, đi qua từng ký tự trong một chuỗi đã cho và "phản ánh" nó trong ma trận.

Làm rõ: Các chữ cái trong chuỗi là từ a-z, các chữ cái là duy nhất và mảng ít nhất là 1x1 và nhiều nhất là 5x5 (rõ ràng, vì chỉ có 26 ký tự trong bảng chữ cái tiếng Anh.) Các ký tự trong chuỗi được đảm bảo là trong mảng 2-d. Chuỗi dài tối đa 100 ký tự.

Đầu vào

Một chuỗi s, một số nguyên Nvà sau đó là mộtNxN mảng các ký tự.

Thí dụ

Đầu vào:

ac
2
ab
cd

Đầu ra:

dc
ba

* Lý do: Đầu tiên, phản ánh avới d. Sau đó, phản ánh cvới bclà chữ cái thứ hai trong chuỗi đầu vào.


Chấm điểm

  • Đầu ra có thể được đưa ra bởi bất kỳ phương pháp thuận tiện .
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Người chiến thắng hiện tại


9
Nửa giờ không thực sự đủ thời gian để sử dụng bất kỳ ý nghĩa nào trong hộp cát.
Phù thủy lúa mì

3
Không có vấn đề, nó có vẻ tốt.
dùng202729

1
(chúng tôi cũng có bảng xếp hạng Stack snippet )
user202729

6
50 giờ là một khoảng thời gian quá ngắn để chấp nhận người chiến thắng; thông thường bạn muốn đợi một tuần hoặc lâu hơn. Tuy nhiên, trên PPCG, thực tế phổ biến là không chấp nhận bất kỳ câu trả lời nào vì điều đó không khuyến khích các câu trả lời trong tương lai và chúng tôi muốn giữ cho các thách thức mở mãi mãi.
HyperNeutrino

2
Tất cả các ví dụ bạn có các ký tự theo thứ tự bảng chữ cái. Tôi cho rằng đó không phải là một giả định chúng ta có thể thực hiện? Ngoài ra, chúng ta phải lấy Nlàm đầu vào nếu chúng ta không cần nó không?
Stewie Griffin

Câu trả lời:


3

Octave , 85 68 66 byte

Sử dụng eval, với một vòng lặp bên trong nó đã tiết kiệm rất nhiều byte! Tôi lấy cảm hứng từ câu trả lời này của Luis Mendo !

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

Hãy thử trực tuyến!

Giải trình:

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 byte

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

Hãy thử trực tuyến!

Đưa đầu vào:

  • s: chuỗi
  • N: mặc kệ
  • a: tham gia chuỗi ký tự

Trả về một danh sách phẳng các ký tự


Nếu tôi phải lấy mảng làm danh sách:

Python 2 , 111 108 107 104 byte

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)]

Hãy thử trực tuyến!

Đưa đầu vào:

  • s: chuỗi
  • n: int
  • a: Danh sách 2D của ký tự

Trả về danh sách ký tự 2D


1

Java 10, 126 123 116 byte

(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ửa đổi ma trận ký tự đầu vào thay vì trả về một ma trận mới để lưu byte.

Hãy thử trực tuyến.

Giải trình:

(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)

Dang, mã hóa trong java! ??!?! +1 Def
NL628

1

Python 3 , 122 111 byte

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)]

Hãy thử trực tuyến!

Trả về một mảng 2D của ký tự.


Bạn sẽ có thể chơi gôn này hơn nữa .. Không có cách nào sửa đổi ma trận đầu vào trong Java ngắn hơn trong Python ..; p Để bạn bắt đầu (và làm cho nó ngắn hơn 1 byte thay vì dài hơn 1 byte so với câu trả lời Java của tôi): Xóa các abvà sử dụng n+~xn+~ytrực tiếp tiết kiệm 2 byte: 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]
Kevin Cruijssen

1

R , 74 61 byte

-13 byte nhờ Giuseppe.

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

Hãy thử trực tuyến!

Nhập một vectơ ký tự để tìm kiếm theo s, kích thước của ma trận nvà chính ma trận là m. Nếu nó là hoàn toàn cần thiết để lấy đối số đầu tiên là chuỗi , điều đó sẽ làm hỏng rất nhiều niềm vui.


Sử dụng các chỉ số logic thay vì số, tôi đánh gôn xuống còn 61 byte
Giuseppe

Wow, đó là một cải tiến lớn, cảm ơn rất nhiều.
Kirill L.

0

Thạch , 15 14 byte

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

Hãy thử trực tuyến!

Chương trình đầy đủ.

Giải trình:

FW; i, C $ ¥ / ṁḷY Liên kết chính. Đầu vào: ['ab', 'cd'] (trái), 'ac' (phải).
FW                    F latten và W rap nó trong một danh sách. Giá trị hiện tại = ['abcd'].
  ; Nối nó với lý lẽ đúng. ['abcd', 'a', 'c']
          / Giảm từ trái:
   Áp dụng  everse tại ...
    i index chỉ mục (của đối số bên phải trong đối số bên trái) ...
     , C $ và chỉ số bổ sung của nó.

Các hoạt động cuối cùng cần giải thích thêm. Suy ra f = Ṛi,C$¥¦, sau đó cho giá trị ['abcd','a','c']nó tính toán ('abcd' f 'a') f 'c', mở rộng thành:

I, C $ ¥ ¦ Hàm f . Giả sử đối số bên trái = 'abcd' và đối số bên phải = 'a'
Đầu tiên, tính toán ngược lại. Nhận 'dcba'.
 i Để tính toán các chỉ số để áp dụng, đầu tiên chỉ số 'a' trong 'abcd'
             là ('abcd' i 'a') = 1. (chỉ mục đầu tiên)
  , C $ Sau đó ghép với (1 C) = 0. (chỉ mục cuối cùng)
      Áp dụng 'dcba' cho 'abcd' tại các chỉ số 0 và 1:

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

0

Võng mạc 0.8.2 , 96 byte

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

Hãy thử trực tuyến! Lấy chuỗi svà mảng ký tự thành một chuỗi phân cách dòng mới mà không có số nguyên N. Giải thích: Mỗi ký tự ccủa sđược xử lý lần lượt. Regex khớp với hai vị trí cách đều nhau từ hai đầu của mảng, trong đó một vị trí cvà cái kia là gương của nó m. Những nhân vật này được hoán đổi và cđược gỡ bỏ s.

+`

Xử lý slần lượt từng nhân vật .

^(.)

$1chụp c.

(.*¶(.|¶)*)

$3chụp một chồng các ký tự trong mảng có tiền tố một choặc m. $2chụp phần còn lại scộng với tất cả các nhân vật này.

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

Nếu có mtrước c, $4có giá trị, $5chụp m$6 bắt các ký tự giữa mc. $7chụp $6như một ngăn xếp nhưng giá trị của nó không được sử dụng.

\1

c bây giờ được khớp trong mảng.

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

Nếu mchưa được khớp, thì $8tùy chọn bắt một giá trị, trong trường hợp đó, $9bắt các ký tự từ cđến m, $10chụp $9như một ngăn xếp không được sử dụng và $11chụpm . Giá trị là tùy chọn trong trường hợp cmlà cùng một ký tự.

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

$12bắt các nhân vật ở hậu tố khác cm . Một nhóm cân bằng được sử dụng để đảm bảo $12dài như $3sâu, tức là tiền tố và hậu tố có cùng độ dài.

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

Các mảnh sau đó được đặt lại với nhau - đầu tiên là phần còn lại svà tiền tố của mảng, sau đó nếu được đặt ctrước mthì msau đó ở giữa, sau đó c, nếu được đặt mtrướcc sau đó giữa sau đó m, sau đó hậu tố.

1A`

Bây giờ slà trống nó bị xóa.


0

JavaScript, 85 byte

Lấy chuỗi Svà một mảng Alà chuỗi đã nối.

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


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.