Xây dựng một bộ giải tự do ít di chuyển nhất


54

Trong trò chơi Freecell, bạn có nhiệm vụ xây dựng bốn cọc móng phù hợp từ ace đến vua, trên một bố cục nơi bạn xây dựng xuống dưới với màu sắc xen kẽ. Tuy nhiên, bạn chỉ có thể tạo một thẻ một lần, do đó bạn được cấp bốn "ô miễn phí" mỗi thẻ có thể chứa một thẻ để giúp bạn di chuyển toàn bộ chuỗi. Ý tưởng là bạn dệt các thẻ riêng lẻ vào và ra khỏi các ô miễn phí theo yêu cầu để giúp bạn giải quyết trò chơi.

Nhiệm vụ của bạn là xây dựng một chương trình sẽ giải quyết những trò chơi này trong một vài động tác có thể.

Chương trình của bạn sẽ lấy đầu vào là một chuỗi gồm 52 thẻ, theo định dạng sau:

2S 9H 10C 6H 4H 7S 2D QD KD QC 10S AC ...

Mà sẽ được xử lý trong bố trí ban đầu theo thứ tự này:

01 02 03 04 05 06 07 08
09 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52

Và trả về một danh sách các động thái để giải quyết trò chơi. Mỗi di chuyển sẽ ở định dạng này:

  • Một số đại diện cho số cọc ( 1thông qua 8) hoặc một ô miễn phí ( Ađến D), đại diện cho cọc nguồn.
  • Một số hoặc chữ cái khác đại diện cho cọc đích hoặc ô tự do, hoặc Fcho nền tảng của bộ đồ đó.

Đầu ra sẽ trông giống như thế này:

18 28 3A 8B 8C 85 B5 35 4F etc.

Một khi thẻ được đặt vào nền tảng, nó không thể được gỡ bỏ. Vì chỉ có một thẻ được di chuyển cùng một lúc, nên việc di chuyển một chuỗi 3 thẻ yêu cầu 5 lần di chuyển và một chuỗi 5 thẻ yêu cầu 9 lần di chuyển.

Nếu một trò chơi không thể giải quyết được, chương trình của bạn sẽ chỉ ra như vậy. Tuy nhiên, chương trình của bạn phải có khả năng giải quyết bất kỳ trò chơi có thể giải được.

Chương trình của bạn sẽ được đánh giá dựa trên 32.768 giao dịch được tìm thấy trong chương trình Microsoft FreeCell ban đầu. Để có hiệu lực, chương trình của bạn phải giải quyết thành công mọi giao dịch ngoại trừ giao dịch # 11.982 , không thể giải quyết được. Điểm của bạn sẽ là tổng số lần di chuyển cần thiết để giải quyết 32.767 giao dịch này, với mã ngắn hơn là một điểm dừng.


Một tệp có tất cả các sàn theo định dạng theo yêu cầu kỹ thuật ở trên có sẵn để tải xuống tại đây (tệp 5,00 MB): https://github.com/joezeng/pcg-se-files/raw/master/freecell_decks


1
Bây giờ tôi chỉ cần lấy bộ tạo số ngẫu nhiên mà họ đã sử dụng để tạo 32.768 trò chơi đó. : S
Joe Z.

3
Các máy phát điện là ở đây: rosettacode.org/wiki/Deal_cards_for_FreeCell
nutki

1
Đó là một điểm hay. Làm thế nào bạn sẽ đối phó với trường hợp trong đó, hai thẻ có cùng màu và số (chẳng hạn như 7C và 7S) đều ở trong các ô miễn phí? Sau đó, nếu bạn chuyển từ "C" sang số 8 màu đen, đó có thể là một trong hai thẻ đó.
Joe Z.

2
Bạn có thể có thể nhận được một số câu trả lời bằng cách loại bỏ hạn chế rằng tất cả các giao dịch có thể giải quyết phải được giải quyết bằng cách gửi. Sau đó, điểm số dựa trên số lượng giao dịch được giải quyết, sau đó bằng cách di chuyển ít nhất.
mbomb007

1
các thẻ có thể được lập chỉ mục 0 không?
tuskiomi

Câu trả lời:


22

C 64.643 byte, Điểm: ~ 6,5 triệu

Đoạn mã sau đây (lịch sự của Mego) xuất tất cả mã dưới dạng một tệp C độc lập:

Tải về nguồn gốc ở đây . Sử dụng GCC và chạy makesau đó sử dụng hướng dẫn trong readme.

Định dạng của tôi rất tệ (tất cả các tệp khác nhau nằm trong một khối mã) và điều này có thể được đánh gôn nhiều hơn (12k byte tho). Bất kỳ trợ giúp sẽ được yêu thương!

Một số mã không phải của tôi. Tôi đã sử dụng nó từ một nguồn không có bản quyền. Tuy nhiên, tôi đã sửa phương thức nhập / xuất trong thử thách (một nhiệm vụ dài vì tôi kinh khủng ở C (5 giờ). Tôi cũng đã phải viết lại nhiều mã và gỡ lỗi mọi thứ. Rất cám ơn bố tôi đã giúp đỡ và trở thành một con vịt cao su (và chỉ ra lỗi quản lý bộ nhớ của tôi) và cho tất cả mọi người trên TNB, người đã xử lý những lời giận dữ của tôi về segfaults và C.


Bạn có thể sử dụng điều này để vượt qua giới hạn độ dài câu trả lời và có tất cả mã của bạn trong câu trả lời, thay vì cần tải xuống bên ngoài.
Mego

@Mego ý tôi là vâng nhưng nó có trong một số tập tin
Christopher

Thật dễ dàng để kết hợp nhiều tệp C thành một.
Mego

Đây là một đoạn ngăn xếp hiển thị mã được kết hợp thành một tệp duy nhất.
Mego

@mego bạn có thể chỉnh sửa nó trong? Trên di động
Christopher
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.