트랙
/
Prolog
Prolog
/
연습 문제
/
이진 퍼즐
이진 퍼즐

이진 퍼즐

보통

소개

요즘 할머니는 바이너리 퍼즐 풀이에 푹 빠져 있어요. 실력이 점점 늘고 있긴 하지만, 그래도 꽤 자주 막히곤 하죠. 다정한 손주답게, 어떤 바이너리 퍼즐이든 풀어 주는 작은 애플리케이션을 만들어 보기로 해요. 그러면 할머니께 다음 수에 대한 힌트를 드릴 수 있거든요.

지침

이번 과제는 이진 퍼즐을 푸는 거예요. 모든 이진 퍼즐에는 해답이 정확히 _하나_뿐이고, 그 해답은 다음 규칙들을 적용해서 찾을 수 있어요:

  1. 모든 칸에는 0 또는 1이 들어 있어야 해요.
  2. 같은 숫자가 세 개 이상 나란히 붙어 있을 수 없어요. 따라서 인접한 두 칸에 같은 숫자가 들어 있으면, 그 옆 칸에는 다른 숫자가 들어가야 해요.
  3. 각 행과 각 열에는 0과 1이 같은 개수씩 들어가야 해요.
  4. 각 행과 각 열은 서로 달라야 해요.

아직 완성되지 않은 퍼즐이 0과 1로 이루어진 행들의 형태로 주어지고, 아직 모르는 값은 자리 표시자(_)로 표시되어 있어요. 목표는 이진 퍼즐의 규칙을 정의하는 거예요. 그러면 테스트가 자리 표시자에 들어갈 값을 알아낼 수 있어요(여러분이 직접 값을 채우는 게 아니에요). 구현에는 Prolog의 유한 영역 제약 논리 프로그래밍(CLP(FD))을 사용해야 해요. 이런 종류의 작업에 딱 맞는 도구죠.

Note

시작하는 데 도움이 되도록, 스텁 파일에는 이미 다음을 통해 clpfd 라이브러리가 포함되어 있어요:

:- use_module(library(clpfd)).
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Prolog Exercism

이진 퍼즐 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Prolog 트랙을 연습 문제 109개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.