법학적성시험(로스쿨 입학 시험)

21년도 추리논중 과목 최저 정답률(약 30%)문제
--


아래와 같이 그림 없이도 이해 가능하게 프롬프트 작성

--

아래 조건들로부터 추론한 보기 ㄱ, ㄴ, ㄷ 중 옳은 것은?


조건: 크기가 모두 같고 번호가 한개씩 적혀있는 빈 상자 12개가 일렬로 나열되어있다.

상자의 번호는 좌측에서부터 1, 2, 3, 4 하나씩 커지며 가장 우측에는 12번 상자가 위치한다.

이 중 5개의 상자에 5개의 구슬 A, B, C, D, E를 담는다.

한 개의 상자에는 한 개의 구슬만 담을 수 있다.

서로 다른 두 상자 사이에 놓여 있는 상자의 개수를 그 두 상자의 '거리'로 정의한다.

예를 들면 4번 상자와 8번 상자의 거리는 3이다.

구슬이 담겨 있는 임의의 두 상자의 거리는 모두 다르다.

구슬 A와 D가 각각 담겨 있는 두 상자 사이에 구슬이 담겨있는 상자는 한 개뿐이다.

구슬 A와 E가 각각 담겨 있는 두 상자의 거리는 0이다. 구슬 B와 D가 각각 담겨있는 두 상자의 거리는 1이다.

구슬 C와 E가 각각 담겨있는 두 상자의 거리는 2이다.


보기 ㄱ: 구슬 A와 B가 각각 담겨 있는 두 상자 사이에는 구슬이 담겨 있는 상자가 없다.

보기 ㄴ: 구슬 C가 담겨있는 상자의 번호는 구슬 D가 담겨있는 상자의 번호보다 크다.

보기 ㄷ: 7번 상자와 8번 상자는 모두 비어있다. 


정답 미리 공개: ㄱ     <- <- 드래그

--

풀이 결과

1트

조건 4, 5를 풀이 1부터 위배해버림.


결과적으로 ㄴ만 옳다고 출력.

힌트 안주고 쌩으로 리트 시킴

--

2트 

1트와 똑같이 나옴

힌트 줌 (하나의 상자에는 하나밖에 못 들어간다는 사실 명시)

--

3트

거리를 다 구해놓고

모든 거리가 다르지 않은데 다르다고 헛소리함. (이것도 ㄴ이라고 주장)

이에 대해 지적하고 리트.

--

 4트

또 헛소리하면서 ㄴ이라고 해서

무작위로 찍지말고 모든 경우의 수 검토하라고 함.

그러니까 갑자기 시키지도 않은 코딩 시작 ㅋㅋ



근데 갑자기 렉걸려서 튕겨버려서

--

위에 친 맨 처음 프롬프트에

코딩을 통해서 모든 경우의 수를 검토해라 명 추가


찐 4트

(코딩 시키면 렉이 심해지는지 몇번 더 튕김)

코딩을 아래와 같이 하면서 정답을 ㄱ, ㄴ이라고 말함(결과적으로는 오답)


from itertools import combinations, permutations


# 조건에 맞는지 확인하는 함수

def is_valid(arrangement):

    indices = {name: arrangement.index(name) for name in 'ABCDE'}


    # 서로 다른 두 상자 사이의 거리 계산

    def distance(x, y):

        return abs(indices[x] - indices[y]) - 1


    # 조건 확인

    if distance('A', 'D') != 1:

        return False

    if distance('A', 'E') != 0:

        return False

    if distance('B', 'D') != 1:

        return False

    if distance('C', 'E') != 2:

        return False


    # 임의의 두 상자 사이의 거리가 모두 달라야 함

    distances = set(distance(x, y) for x, y in combinations('ABCDE', 2))

    return len(distances) == 10


# 12개의 상자 중 5개를 고르고 그 안에 구슬을 배치

boxes = list(range(12))

all_combinations = combinations(boxes, 5)

all_permutations = []


for combination in all_combinations:

    empty_boxes = [i for i in range(12) if i not in combination]

    for perm in permutations('ABCDE'):

        arrangement = [''] * 12

        for idx, box in enumerate(combination):

            arrangement[box] = perm[idx]

        all_permutations.append(arrangement)


# 조건에 맞는 경우를 찾음

valid_arrangements = [arr for arr in all_permutations if is_valid(arr)]


# 보기의 진위 여부를 확인

def check_ㄱ(arrangement):

    index_A = arrangement.index('A')

    index_B = arrangement.index('B')

    between = [arrangement[i] for i in range(min(index_A, index_B) + 1, max(index_A, index_B))]

    return all(x == '' for x in between)


def check_ㄴ(arrangement):

    index_C = arrangement.index('C')

    index_D = arrangement.index('D')

    return index_C > index_D


def check_ㄷ(arrangement):

    return arrangement[6] == '' and arrangement[7] == ''


# 보기의 결과를 반환

def evaluate(arrangements):

    result_ㄱ = all(check_ㄱ(arr) for arr in arrangements)

    result_ㄴ = all(check_ㄴ(arr) for arr in arrangements)

    result_ㄷ = all(check_ㄷ(arr) for arr in arrangements)

    return result_ㄱ, result_ㄴ, result_ㄷ


# 정답 확인

result_ㄱ, result_ㄴ, result_ㄷ = evaluate(valid_arrangements)

print(f"보기 ㄱ: {result_ㄱ}")

print(f"보기 ㄴ: {result_ㄴ}")

print(f"보기 ㄷ: {result_ㄷ}")


===

결과적으론 추론은 아직도 못하는듯?