일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- highlight.js
- 코드블럭
- multiprocessing
- HTML
- Python
- 하이라이트
- 구현
- 우리FIS
- 금결원
- 진행 상황
- DataFrame
- line number
- CSS
- 티스토리
- 필기
- idxmax
- Windows
- pywinauto
- 멀티 로그인
- 웹크롤링
- 의사 클래스
- 퀀트
- 파이썬
- freeze_support
- pycharm
- Tistory
- 금융결제원
- idxmin
- QueueHandler
- OpenAPI+
- Today
- Total
맨땅에 헤딩하는 사람
Python 도식추리 문제 출제 프로그램 본문
목디스크가 걸려서 예전에 만들어놨던 프로그램을 지금 업로드한다.
물론 GSAT은 떨어졌다. 목디스크가 걸려서 프로그램을 만들어놓고 제대로 연습도 못했다. ㅠㅠ
여하튼 코드를 공개하고 필요한 사람이 있으면 도움이 됐으면 하는 바람이다.
도식추리문제란 직무적성검사에서 항상 출제되는 유형의 문제이다.
다음과 같이 어떤 도형이 문자열의 순서를 바꾸거나 문자를 증감시키는 조건을 파악하여 주어지는 문자열이 해당 도형에서 어떤 문자열로 바뀌는 지를 추리하는 문제다. 유형에 익숙해지면 시간 단축을 꼭 해야하는 거저주는 문제로 대표되는데 이를 위해 훈련이 필요하다 판단하여 간단한 파이썬 프로그램을 만들었다.
프로그램은 그림 2와 같이 진행된다. LOCATION은 위치 바꾸기, OPERATION은 증감이다. 각 모드를 선택할 수 있고 ALL은 두 가지가 혼합되어 출제되는 형식이다.
코드는 다음과 같다.
import string
import time
from enum import IntEnum, unique
import random
@unique
class Mode(IntEnum):
LOCATION = 1
OPERATION = 2
ALL = 3
if __name__ == '__main__':
mode = int(input('Select Mode (LOCATION:1, OPERATION:2, ALL:3) '))
mode_list = (Mode.LOCATION, Mode.OPERATION)
mode_all = None
word_list = string.ascii_uppercase #ABCDEFG...XYZ
problem_type = ('src', 'des', 'ans')
print("\nYou have to put answer in this rule")
print("[TYPE1] ? → -4-30-3 → WWYC : AZYF")
print("[TYPE2] AZYF → -4-30-3 → ? : WWYC")
print("[TYPE3] AZYF → ? → WWYC : -4-30-3")
print("It is also same on LOCATION Mode\n")
print("If you want to quit, input 'q'.")
while True:
if mode == Mode.ALL:
mode_all = random.choice(mode_list)
src = []; des = []; answer = []
while True:
word = random.choice(word_list)
if word not in src:
src.append(word)
if len(src) == 4:
break
if mode == Mode.LOCATION or mode_all == Mode.LOCATION:
str_mode = 'LOCA'
answer = [1, 2, 3, 4]
random.shuffle(answer)
des = [None for none in range(4)]
for i, value in enumerate(answer):
'''
number that change location is a way from source to destination
if you wanna change direction from destination to source,
you should change below code like
src[i] = des[value-1]
'''
des[i] = src[value-1] # i starts 0, value starts 1
elif mode == Mode.OPERATION or mode_all == Mode.OPERATION:
str_mode = 'OPER'
for i in range(4):
num = random.randint(-5,5) # -5 <= num <= 5
word = ord(src[i]) + num
if word < ord('A'):
word = ord('Z') - (ord('A') - word - 1)
elif word > ord('Z'):
word = ord('A') + (word - ord('Z') - 1)
des.append(chr(word))
answer.append(num)
str_src = ''; str_des = ''; str_ans = ''
for i in range(4):
str_src = str_src + src[i]
str_des = str_des + des[i]
str_ans = str_ans + str(answer[i])
p_type = random.choice(problem_type)
start = time.time()
if p_type == 'src':
input_answer = input('[{}] ? → {} → {} : '.format(str_mode, str_ans, str_des))
if input_answer == 'q':
break
end = time.time()
if input_answer == str_src:
print('Correct! It took {:.2f} second(s).'.format(end-start))
else:
print('Wrong! It took {:.2f} second(s).'.format(end-start))
print('Answer is {}.'.format(str_src))
elif p_type == 'des':
input_answer = input('[{}] {} → {} → ? : '.format(str_mode, str_src, str_ans))
if input_answer == 'q':
break
end = time.time()
if input_answer == str_des:
print('Correct! It took {:.2f} second(s).'.format(end-start))
else:
print('Wrong! It took {:.2f} second(s).'.format(end-start))
print('Answer is {}.'.format(str_des))
else:
input_answer = input('[{}] {} → ? → {} : '.format(str_mode, str_src, str_des))
if input_answer == 'q':
break
end = time.time()
if input_answer == str_ans:
print('Correct! It took {:.2f} second(s).'.format(end-start))
else:
print('Wrong! It took {:.2f} second(s).'.format(end-start))
print('Answer is {}.'.format(answer))
위치 바꾸기 문제(LOCATION)는 두 가지의 위치 처리 방법이 있다.
가령, ABCD → ★ → ADBC 일 때 ★이 두 가지의 답으로 정의될 수 있다.
(1) ★ : 1342
(2) ★ : 1423
이는 시작 문자열을 기준으로 할 것이냐, 바뀐 문자열을 기준으로 할 것인가에 따라 다르게 나뉘는데 본인한테 편한 방법을 이용하면 된다. 나는 (2)의 방법을 선호한다. 위 코드는 (2)를 기준으로 작성되었으며 만약 (1)로 하고 싶다면 코드에서 "number that change ... src[i] = des[value-1]" 로 되어있는 부분에 맞춰 아래 코드를 수정하면 된다.
'파이썬 > 구현' 카테고리의 다른 글
Python Selenium을 이용한 로또 당첨 판매점 동적 웹크롤링 (0) | 2020.07.10 |
---|