가장 적은 이동 프리셀 솔버 구축


54

프리셀 게임에서는 에이스부터 킹까지 4 가지 기초 더미를 만드는 작업을해야합니다. 그러나 한 번에 하나의 카드 만 만들 수 있으므로 각 시퀀스를 이동하는 데 도움이되는 하나의 카드를 포함 할 수있는 4 개의 "무료 셀"이 제공됩니다. 아이디어는 게임을 해결하는 데 도움이되도록 필요에 따라 자유 셀 안팎으로 개별 카드를 짜는 것입니다.

당신의 임무는 가능한 최소한의 움직임으로 이러한 게임을 해결하는 프로그램을 구축하는 것입니다.

프로그램은 다음과 같은 형식으로 52 장의 카드를 입력으로받습니다 :

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

다음 순서로 초기 레이아웃에서 처리됩니다.

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

그리고 게임을 해결하기 위해 이동 목록을 반환합니다. 각 이동은 다음 형식으로 이루어집니다.

  • 소스 파일을 나타내는 파일 번호 ( 1~ 8) 또는 자유 셀 ( A~ D)을 나타내는 번호입니다.
  • 대상 더미 또는 자유 세포를 나타내는 또 다른 숫자 또는 문자, 또는 F해당 소송의 기초.

결과는 다음과 같습니다.

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

카드를 파운데이션에 넣은 후에는 카드를 제거 할 수 없습니다. 한 번에 하나의 카드 만 이동하기 때문에 3 장의 카드를 이동하려면 5 이동이 필요하고 5 장의 카드는 9 이동이 필요합니다.

게임을 해결할 수없는 경우 프로그램에 해당 내용이 표시되어야합니다. 그러나 프로그램은 모든 해결 가능한 게임을 해결할 수 있어야합니다.

귀하의 프로그램은 원래 Microsoft FreeCell 프로그램에서 발견 된 32,768 개의 거래에서 심사됩니다. 프로그램이 유효하려면 거래 # 11,982를 제외한 모든 거래를 성공적으로 해결해야합니다 . 이 32,767 건의 거래를 해결하는 데 걸리는 총 횟수는 점수가 짧을수록 점수가 매겨집니다.


위 사양에 필요한 형식으로 모든 데크가있는 파일은 여기에서 다운로드 할 수 있습니다 (5.00MB 파일) : https://github.com/joezeng/pcg-se-files/raw/master/freecell_decks


1
이제 32,768 개의 게임을 생성하는 데 사용했던 난수 생성기를 빼면됩니다. : S
Joe Z.

3
생성기는 여기에 있습니다 : rosettacode.org/wiki/Deal_cards_for_FreeCell
nutki

1
그건 좋은 지적이야. 예를 들어 같은 색상과 숫자 (예 : 7C 및 7S)의 두 카드가 모두 자유 셀에있는 경우를 어떻게 처리 하시겠습니까? 그런 다음 "C"에서 검은 색 8로 이동하면 두 카드 중 하나 일 수 있습니다.
Joe Z.

2
제출 가능한 모든 거래를 해결해야한다는 제한 사항을 제거하여 답변을 얻을 수 있습니다. 그런 다음 해결 된 거래 수를 기준으로 점수를 매긴 다음 움직임을 최소화합니다.
mbomb007

1
카드를 0 인덱스 할 수 있습니까?
tuskiomi

답변:


22

C 64,643 바이트, 점수 : ~ 650 만

다음 Stack Snippet (Mego 제공)은 모든 코드를 단일 독립형 C 파일로 출력합니다.

여기에서 원본 소스를 다운로드하십시오 . GCC make를 사용하고 readme의 지침을 사용하여 실행하십시오 .

내 형식이 잘못되었습니다 (다른 모든 파일이 하나의 코드 블록에 있음). 더 많은 골프를 치기 쉽습니다 (12k 바이트). 어떤 도움이라도 사랑받을 것입니다!

일부 코드는 내 것이 아닙니다. 저작권이없는 출처에서 사용했습니다. 그러나 입력 / 출력 방법을 도전 과제로 수정했습니다 (C (5ish hours)에서 끔찍한 이후 긴 작업). 또한 많은 코드를 다시 작성하고 모든 것을 디버깅해야했습니다. 고무 덕을 도와주고 (메모리 관리 오류를 지적한) 아빠와 세그 볼트와 C에 대한 분노한 분노를 다룬 TNB의 모든 분들께 감사드립니다.


이것을 사용 하여 답변 길이 제한을 극복하고 외부 다운로드가 필요하지 않고 답변 내에 모든 코드를 가질 수 있습니다.
Mego

@ Mego 그래 그래 의미하지만 그것은 여러 파일에 있습니다
Christopher

여러 C 파일을 하나의 파일로 쉽게 결합 할 수 있습니다.
Mego

다음 은 코드를 단일 파일로 결합한 스택 스 니펫입니다.
Mego

@mego 편집 할 수 있습니까? 모바일에서
Christopher
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.