1 수능시험

인터넷에 공개된 “2020학년도 대학수학능력시험 문제 및 정답” PDF 문제를 풀어보자.

  • 가형은 의과대학, 대부분의 자연과학대학, 공과대학, 수학교육과, 과학교육과에 지원코자 한다면 필수적으로 응시해야 한다. 이과 교육과정 내용을 바탕으로 문제가 출제되고, 응시자는 99% 이상이 이과생이며 극소수의 문과생들이 응시한다.
library(tidyverse)
library(pdftools)
library(magick)

exam_pdf <- image_read_pdf("data/math_2020_2_1.pdf", page = 28)

exam_pdf %>% 
  image_scale("700") %>% 
  image_draw()

2 수식 추출

mathpix 소프트웨어를 사용하면 PDF 문서에서 수식을 추출하여 \(\LaTeX\)으로 쉽게 변환시킬 수 있다.

\[ 16 \times 2^{-3} \]

3 \(\LaTeX\) → Sympy 표현식

앞서 추출한 \(\LaTeX\) 수식표현을 Sympy 표현식으로 바꿔야한다. 이를 위해서 latex2sympy를 설치해서 사용하면 되지만, 파이썬 2로 작성되어 있어 파이썬3를 많이 사용해서 이를 확인할 필요가 있다.

$ pip install latex2sympy3==0.1.1

4 Sympy 풀기

파이썬 표현식으로 작성하고 나서 이를 Sympy 문법 값을 구하는 N()을 사용해서 해를 구한다.

from sympy import *

N(16 * 2**(- 3))
2.00000000000000

5 R/Sympy 코드 변환

5.1 \(\LaTeX\) → R

latex2r 팩키지의 도움으로 \(\LaTeX\) 코드를 R 코드로 변환시킨다.

# devtools::install_github("tomicapretto/latex2r")
library(latex2r)

r_expr <- latex2r("16 \\times 2^{-3}")

R에서 Sympy를 통해 문제를 풀 수 있는 팩키지가 caracas, rSympy가 있다. caracas를 사용해서 문제를 풀면 다음과 같다.

library(caracas)

caracas::eval_to_symbol(r_expr)
[caracas]: 2.0

rSympy를 사용해서 문제를 풀면 다음과 같다. ^**으로 바꿔 파이썬 표현식에 맞춰 넣어주면 rSympy로 해를 구할 수 있다. rJavaTools오류로 R마크다운 컴파일 오류지만 인터랙티브 계산은 됨!!!

library(rSymPy)

sympy("16 * 2 ** (- 3)")

6 손으로 풀기

몇가지 방식으로 손으로 풀 수 있다.

\(16 \times 2^{-3} = \frac{16}{2^3} = \frac{2^4}{2^3} = 2^{4-3} = 2\)

\(16 \times 2^{-3} = \frac{16}{2^3} = \frac{16}{8} = 2\)

7 SymPy Gamma vs Wolfram Alpha

SymPy GammaWolfram Alpha의 오픈소스 버전으로 보면 된다.

 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com