Trình trợ giúp tìm kiếm từ


12

Tôi đã thực hiện tìm kiếm từ thời gian gần đây, và tôi nghĩ rằng nó sẽ là như vậy dễ dàng hơn nhiều nếu tất cả các từ đọc từ trái sang phải. Nhưng viết lại tất cả các dòng mất rất nhiều nỗ lực! Vì vậy, tôi đang tranh thủ mã golf để giúp đỡ.

(Tuyên bố miễn trừ trách nhiệm: Câu chuyện trên có thể có hoặc không chính xác từ xa.)

Mã của bạn sẽ lấy một lưới hình chữ nhật và xuất tất cả các dòng thông qua nó theo cả hai hướng.

Đầu ra phải chứa tất cả 8 phép quay của lưới (hồng y và đường chéo chính), 'đọc tắt' từ trên xuống dưới, từ trái sang phải. (Điều này có nghĩa là mọi "hàng" sẽ được sao chép - một lần chuyển tiếp và một lần lùi.)

Các phân chia dòng có thể là một khoảng trắng hoặc ngắt dòng. Nếu bạn chọn khoảng trắng, các phân chia xoay lưới phải là ngắt dòng; mặt khác, các phân chia xoay lưới phải là hai ngắt dòng.

Ví dụ đầu vào (được lấy dưới dạng một mảng các ký tự, chuỗi nhiều dòng hoặc định dạng hợp lý khác)

ABCDE
FGHIJ
KLMNO
PQRST

Ví dụ đầu ra (sử dụng tùy chọn đầu tiên cho các bộ phận)

ABCDE FGHIJ KLMNO PQRST
E DJ CIO BHNT AGMS FLR KQ P
EJOT DINS CHMR BGLQ AFKP
T OS JNR EIMQ DHLP CGK BF A
TSRQP ONMLK JIHGF EDBCA
P QK RLF SMGA TNHB OIC JD E
PKFA QLGB RMHC SNID TOJE
A FB KGC PLHD QMIE RNJ SO T

Thứ tự của các phép quay "đọc tắt" không quan trọng miễn là tất cả tám hồng y và thẻ thông tin chính được thực hiện một lần.

Đây là , vì vậy mã ngắn nhất sẽ thắng. Tiêu chuẩn áp dụng.


Lưới chỉ chứa các chữ cái in hoa hay nó có thể là toàn bộ ASCII có thể in được?
Denker


@DigitalTrauma: Không, không thực sự - điều này không yêu cầu bạn tìm bất kỳ từ nào cả.
Deusovi 11/03/2016

Câu trả lời:


4

Python 3, 181 byte

def f(s):
 for k in [1,0]*4:
  b=list(zip(*[([' ']*(len(s)-1-n)*k+list(i)+[' ']*n*k)[::-1] for n,i in enumerate(s)]))
  print([' '.join(i).replace(' ','') for i in b])
  if k==0:s=b

Giải trình

def f(s):
 for k in [0]*4:                  # loop 4 times, we don't need the index so [0]*4 is shorter than range(4)
  l=len(s)-1                      # number of line

  # rotation of 45°
  a=[(['.']*(l-n)+list(i)+['.']*n)[::-1] for n,i in enumerate(s)]
  # tranform matrice :
  #  ABC      ..ABC      CBA..
  #  DEF  --> .DEF.  --> .FED.
  #  GHI      GHI..      ..IHG
  b=list(zip(*a))                 # transpose 
  #  CBA..      C..
  #  .FED.  --> BF.
  #  ..IHG      AEI
  #             .DH
  #             ..G
  print(' '.join(''.join(i).replace('.','') for i in b))

  # rotation of 90°
  a=[(list(i))[::-1] for n,i in enumerate(s)]
  # tranform matrice :
  #  ABC      CBA
  #  DEF  --> FED
  #  GHI      IHG
  b=list(zip(*a))                 # transpose 
  #  CBA       CFI
  #  FED   --> BEH
  #  IHG       ADG
  print(' '.join(''.join(i) for i in b))
  s=b

Các kết quả

>>> f(['ABCDE','FGHIJ','KLMNO','PQRST'])
['E', 'DJ', 'CIO', 'BHNT', 'AGMS', 'FLR', 'KQ', 'P']
['EJOT', 'DINS', 'CHMR', 'BGLQ', 'AFKP']
['T', 'OS', 'JNR', 'EIMQ', 'DHLP', 'CGK', 'BF', 'A']
['TSRQP', 'ONMLK', 'JIHGF', 'EDCBA']
['P', 'QK', 'RLF', 'SMGA', 'TNHB', 'OIC', 'JD', 'E']
['PKFA', 'QLGB', 'RMHC', 'SNID', 'TOJE']
['A', 'FB', 'KGC', 'PLHD', 'QMIE', 'RNJ', 'SO', 'T']
['ABCDE', 'FGHIJ', 'KLMNO', 'PQRST']

>>> f(['ABCDEF','GHIJKL','MNOPQR','STUVWX'])
['F', 'EL', 'DKR', 'CJQX', 'BIPW', 'AHOV', 'GNU', 'MT', 'S']
['FLRX', 'EKQW', 'DJPV', 'CIOU', 'BHNT', 'AGMS']
['X', 'RW', 'LQV', 'FKPU', 'EJOT', 'DINS', 'CHM', 'BG', 'A']
['XWVUTS', 'RQPONM', 'LKJIHG', 'FEDCBA']
['S', 'TM', 'UNG', 'VOHA', 'WPIB', 'XQJC', 'RKD', 'LE', 'F']
['SMGA', 'TNHB', 'UOIC', 'VPJD', 'WQKE', 'XRLF']
['A', 'GB', 'MHC', 'SNID', 'TOJE', 'UPKF', 'VQL', 'WR', 'X']
['ABCDEF', 'GHIJKL', 'MNOPQR', 'STUVWX']

với đầu ra sạch hơn (189 byte)

j=' '.join
def f(s):
 for k in [1,0]*4:
  b=list(zip(*[([' ']*(len(s)-1-n)*k+list(i)+[' ']*n*k)[::-1] for n,i in enumerate(s)]))
  print(j(j(i).replace(' ','') for i in b))
  if k==0:s=b

.

>>> f(['ABCDE','FGHIJ','KLMNO','PQRST'])
E DJ CIO BHNT AGMS FLR KQ P
EJOT DINS CHMR BGLQ AFKP
T OS JNR EIMQ DHLP CGK BF A
TSRQP ONMLK JIHGF EDCBA
P QK RLF SMGA TNHB OIC JD E
PKFA QLGB RMHC SNID TOJE
A FB KGC PLHD QMIE RNJ SO T
ABCDE FGHIJ KLMNO PQRST

Làm thế nào để bạn tranforme một ma trận? (mã khối 2)
Máy

@CatsAreFluffy Tôi đã thêm một bước giải thích
Erwan

Tôi khá chắc chắn tranforme không phải là một từ. (biến đổi?)
Máy

@CatsAreFluffy ^^ ok, tôi nghĩ rằng rõ ràng tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi
Erwan

Câu trả lời rất hay!
Timtech

1

MATL , 40 byte

t!tP!tP!GXKZyqXI"IZ}w_w2$:"K@2$Xd!]K!XKx

Đầu vào là một mảng char 2D trong ký hiệu Matlab:

['ABCDE'; 'FGHIJ'; 'KLMNO'; 'PQRST']

Đầu ra chứa mỗi "từ" trên một dòng riêng biệt.

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

t          % input 2D char array. Duplicate. The original copy will produce
           % the words left to right when displayed
!          % transpose. This will produce the words up to down
tP!        % duplicate, flip upside down, transpose. This will produce the
           % words right to left
tP!        % Same. This will produce the words down to up 
GXK        % push input again. Copy to clipboard K
Zy         % get size (length-2 vector; [4 5] in the example)
q          % decrement by 1 (gives  [3 4] in the example)
XI         % copy to clipboard I
"          % loop: do this twice, consuming the decremented length-2 vector
  I        %   push decremented size vector again
  Z}       %   split into its two elements (pushes 3 and 4 in the example)
  w_w      %   swap, negave, swap (results in -3, 4 in the example)
  2$:      %   binary range: indices of diagonals  ([-3 -2 -1 0 1 2 3 4]
           %   in the first iteration in the example, [-4 -3 -2 -1 0 1 2 3]
           %   in the second)
  "        %   for each
    K      %     push input (first iteration) or its tranposed version (second)
    @      %     push index of diagonal
    2$Xd!  %     extract that diagonal as a row vector
  ]        %   end for each
  K!XKx    %   update clipboard K with transposed version for next iteration
           % end loop. Display
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.