Tạo một chương trình hoặc hàm để làm xáo trộn một hình vuông các chữ số bằng cách lật (đảo quanh điểm trung tâm) chỉ các hàng và cột.
Đầu vào
Đầu vào sẽ là một lưới các chữ số 9x9 dưới dạng một chuỗi 9 dòng như sau:
986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378
Định dạng đầu vào này không thể thương lượng - mọi giải pháp "sáng tạo" với định dạng đầu vào sẽ được coi là không hợp lệ.
Đầu ra
Đầu ra phải là một danh sách các động tác lật, khi được áp dụng cho đầu vào theo thứ tự nhất định, sẽ tạo lại lưới đích.
Một đầu ra ví dụ (không phải là giải pháp cho ví dụ đầu vào trước đó):
28IF5D3EAB9G3
Định dạng đầu ra này cũng không thể thương lượng. Không nên có dòng mới hoặc khoảng trắng trong đầu ra, chỉ có các ký tự 1
- 9
và A
- I
(ký tự chữ thường được chấp nhận thay cho các ký tự chữ hoa nếu bạn thích).
Lưới đích (trạng thái bạn cần tạo lại) như sau:
123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
Các số 1
- 9
nên được sử dụng làm hướng dẫn để lật các hàng và các chữ cái A
- I
nên được sử dụng cho các cột. Điều này được hiển thị dưới đây với lưới ở trạng thái được khôi phục.
ABCDEFGHI
|||||||||
vvvvvvvvv
1 -> 123456789
2 -> 234567891
3 -> 345678912
4 -> 456789123
5 -> 567891234
6 -> 678912345
7 -> 789123456
8 -> 891234567
9 -> 912345678
Vì vậy, một 8
phương tiện lật hàng thứ hai từ dưới lên, và một F
phương tiện lật cột thứ sáu.
Trong trường hợp không có giải pháp nào khả thi, chương trình sẽ kết thúc mà không xuất ra bất cứ điều gì cả.
Ví dụ
Đầu vào:
987654321
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
Đầu ra:
1
Trong trường hợp này, chỉ có hàng trên cùng cần lật để trở về trạng thái mục tiêu.
Đầu vào:
123456788
234567897
345678916
456789125
567891234
678912343
789123452
891234561
912345679
Đầu ra:
I
Trong trường hợp này, chỉ cột cuối cùng (cột I
) cần lật để tạo lại trạng thái mục tiêu.
Đầu vào:
123456788
798765432
345678916
456789125
567891234
678912343
789123452
891234561
912345679
Đầu ra:
2I
Trong trường hợp này, chúng ta cần lật hàng 2
và sau đó lật cột I
để trở về trạng thái mục tiêu.
Ghi chú:
- Vui lòng bao gồm một ví dụ sử dụng trong câu trả lời của bạn.
- Đầu ra đưa ra không phải là chuỗi ngắn nhất sẽ trả về trạng thái mục tiêu - bất kỳ chuỗi nào trả về trạng thái mục tiêu sẽ hoạt động miễn là nó hoạt động (miễn là tôi có thể kiểm tra nó)
- Tôi sẽ nỗ lực để kiểm tra từng câu trả lời và nâng cao tất cả những câu hỏi có hiệu quả và rõ ràng đã có một nỗ lực chơi gôn.
- Đây là một cuộc thi kết thúc mở - tôi sẽ chấp nhận câu trả lời ngắn nhất vào tuần tới, nhưng nếu một câu trả lời hợp lệ mới hơn xuất hiện trong thời gian ngắn hơn thì tôi sẽ thay đổi câu trả lời được chấp nhận để phản ánh điều đó .
Tiền thưởng đã được đặt ở mức 200 danh tiếng cho câu trả lời ngắn nhất nhận được vào 23:59:59 (GMT) vào ngày 26/01/2014Tiền thưởng đã được trao cho Howard cho giải pháp GolfScript có ký tự 268 .
Kiểm tra
Vui lòng cung cấp đầu ra của chương trình cho ba lưới kiểm tra sau với câu trả lời của bạn:
986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378
927354389
194762537
319673942
351982676
567891234
523719844
755128486
268534198
812546671
813654789
738762162
344871987
341989324
567891234
576217856
619623552
194435598
926543271
Tôi đã tạo một chương trình Python nhỏ để tạo các lưới hợp lệ cho mục đích thử nghiệm:
import random
def output(array):
print '\n'.join([''.join(row) for row in array])
def fliprow(rownum, array):
return [row[::1-2*(rownum==idx)] for idx,row in enumerate(array)]
def flipcol(colnum, array):
return zip(*fliprow(colnum, zip(*array)))
def randomflip(array):
op=random.randint(0,1)
row=random.randint(0,9)
if(op==1):
return fliprow(row, array)
else:
return flipcol(row, array)
def jumble(array):
arraycopy=array
for i in range(10, 1000):
arraycopy=randomflip(arraycopy)
return arraycopy
startarray=[
['1','2','3','4','5','6','7','8','9'],
['2','3','4','5','6','7','8','9','1'],
['3','4','5','6','7','8','9','1','2'],
['4','5','6','7','8','9','1','2','3'],
['5','6','7','8','9','1','2','3','4'],
['6','7','8','9','1','2','3','4','5'],
['7','8','9','1','2','3','4','5','6'],
['8','9','1','2','3','4','5','6','7'],
['9','1','2','3','4','5','6','7','8']]
print output(jumble(startarray))
(-2, 4)
, (2, 4)
, (2, -4)
, hoặc (-2, -4)
.
A1
) và di chuyển nó đến B1
. Bạn có thể 1
đến vị trí B1
, nhưng nó sẽ là ô từ B9
chứ không phải ô từ A1
. Bởi vì chúng tôi chỉ cho phép lật toàn bộ hàng / cột, 1 trên cùng sẽ chỉ ở một trong bốn góc ngoài cùng. Nếu tôi nhầm quy tắc, xin vui lòng cho tôi biết.