가장 친한 친구가 직소 퍼즐을 모으기 시작했고, 수집한 퍼즐의 자세한 목록을 만들고 싶어 해요. 전체 조각 수, 행과 열의 개수, 테두리 조각과 안쪽 조각의 개수, 가로세로 비율, 퍼즐 형식 같은 정보를 기록하려고요. 두 사람의 힘을 합쳐도 조각이 천 개나 되는 직소 퍼즐 하나를 맞추는 데 몇 시간이 걸려요. 게다가 그다음에는 행과 열을 세고 나머지 숫자들을 직접 계산해야 하죠. 조각이 수천 개에 달하는 더 큰 퍼즐들은 이제 꽤 막막해 보여요. "분명 더 나은 방법이 있을 거예요!" 하고 외치며, 문제를 해결하려고 컴퓨터 앞에 앉아요.
직소 퍼즐에 대한 일부 정보가 주어졌을 때, 빠진 조각을 채워요.
정보가 부족해 세부 사항을 완성할 수 없거나 주어진 부분들이 서로 모순된다면, 사용자에게 알려야 해요.
직소 퍼즐에 대한 전체 정보는 다음 항목들로 이루어져 있어요:
pieces: 조각의 총개수border: 가장자리 조각의 개수inside: 안쪽(가장자리가 아닌) 조각의 개수rows: 행의 개수columns: 열의 개수aspectRatio: 열과 행의 가로 세로 비율format: 퍼즐 형식으로, portrait, square, landscape 중 하나예요이 연습 문제에서는 조각이 정사각형이라고 가정해도 돼요. 그러면 형식은 가로 세로 비율에서 도출할 수 있어요:
portrait예요square예요landscape예요조각이 6개인 세로형 직소 퍼즐로, 모든 조각이 가장자리 조각이고 안쪽 조각은 하나도 없어요. 열이 2개, 행이 3개예요. 가로 세로 비율은 0.666666... (2/3)이에요.
조각이 9개인 정사각형 직소 퍼즐로, 가운데에 있는 하나를 제외한 모든 조각이 가장자리 조각이고, 그 하나는 안쪽 조각이에요. 열이 3개, 행이 3개예요. 가로 세로 비율은 1.0 (3/3)이에요.
조각이 12개인 가로형 직소 퍼즐로, 10개는 가장자리 조각이고 2개는 안쪽 조각이에요. 열이 4개, 행이 3개예요. 가로 세로 비율은 1.333333... (4/3)이에요.
주어진 정보만으로 퍼즐 하나를 확정하기에 충분하지 않다면, "Insufficient data"라는 메시지와 함께 오류를 발생시켜요.
주어진 정보가 서로 모순된다면, "Contradictory data"라는 메시지와 함께 오류를 발생시켜요.
Exercism에 가입하고 Emacs Lisp 트랙을 연습 문제 103개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.