Study Pack: 다중 PDF 학습 방법
사용자는 시험 공부를 이렇게 합니다: 강의 자료를 제공하면 그 자료로 6개의 PDF가 만들어집니다. 시험은 문제를 푸는 것이므로 문제 PDF(워크북, 드릴, 모의고사)가 가장 중요합니다. 노트는 이를 보조합니다.
사용자는 아무것도 모른다고 가정합니다(절대적 규칙). 자료가 당연하게 여기는 배경 지식에 절대 의존하지 마세요. 사용자는 문제를 처음 봤을 때 자신이 무엇을 보고 있는지 전혀 모른다고 말했습니다. 따라서:
- 모든 팩은 Unit 0 '여기서 시작' 으로 시작합니다: 강의가 전제하는 선수 지식을 처음부터 카드와 연습 문제로 가르칩니다. (CISC 221의 경우 비트/바이트/16진수, 16진수 연산, 2의 보수, CPU/레지스터/메모리/주소, 어셈블리 한 줄 읽기, C 포인터와 자료형, 함수의 모양, 일반적인 문제 페이지 읽는 방법 등이 해당합니다.) 이 강의를 위해 초보자가 무엇을 놓치고 있을지 파악하세요.
- 모든 단원은 '단어와 기호' 용어집(
units.json→"words")으로 시작합니다: 해당 단원에서 사용하는 모든 용어와 기호를 사용하기 전에 평이한 언어로 설명합니다. - 모든 카드에는 예제 문제 바로 뒤에 '지금 보고 있는 것' 박스(
div.read)가 있습니다. 답을 보여주기 전에 문제의 각 부분과 기호가 무엇을 의미하는지, 문제가 무엇을 요구하는지 설명합니다. - 설명은 모든 용어가 처음 등장할 때 정의하거나, 해당 용어를 정의하는 Unit 0 카드를 가리킵니다. '보통', '당연히', '앞서 설명한'과 같은 표현을 사용하거나 정의되지 않은 용어를 사용하지 마세요.
사용자가 배우는 방식(절대적 규칙). 모든 문제 유형에 대해 (1) 문제가 정확히 어떻게 질문되는지 보여주고, (1b) 지금 보고 있는 것이 무엇인지(문제의 모든 부분을 해독) 설명합니다. 그런 다음 (2) 그 예제에 대한 답을 정확히 써야 하는 방식대로 보여주고, (3) 전체 개념에 대한 진정한 설명(무엇인지, 왜 작동하는지, 어떻게, 다이어그램과 함정 포함, 단순한 규칙 나열 금지)을 제공한 후, (4) 짧은 체크리스트를 제공합니다. 그 후에야 연습 문제가 나옵니다. 모든 연습 문제는 그 앞의 카드만으로 풀 수 있어야 하며, 사용하는 카드를 표시해야 합니다("Uses M2 · M5"). assemble.py는 이 두 규칙을 강제하고 그렇지 않으면 빌드를 실패시킵니다. 사실만 보여주고 설명하지 않는 것은 사용자가 명시적으로 지적한 실패 모드입니다.
| # | 설명 | |
|---|---|---|
| 1 | 모의고사 | 실제 시험 스타일의 독창적인 문제, 실제 시험보다 일부러 길게, 풀이 공간 포함 |
| 2 | 모의고사 정답지 | 같은 시험에 답은 빨간색, 각 문제에 '이유:' 포함 |
| 3 | 단원별 문제 워크북 | 핵심. Unit 0 '여기서 시작'(배경 지식, 처음부터)으로 시작합니다. 각 단원은 단어와 기호 용어집으로 시작하고, 문제 유형당 하나의 카드가 있습니다: 문제가 어떻게 질문되는지(시험과 똑같은 예제) → 지금 보고 있는 것(문제 해독) → 답안, 이렇게 쓰세요 → 작동 원리(개념에 대한 완전한 설명) → 매번 이렇게 하세요. 그런 다음 8-12개의 연습 문제, 각 문제는 사용하는 카드가 태그되어 있고 → 다음 페이지에 풀이 과정이 제공됩니다. |
| 4 | 완전 참조 매뉴얼 | 모든 것: 강의 노트, 교수님의 방법, 모든 공식 문제 해결, 분류, 함정, 표, 용어집. 다른 AI가 전체 컨텍스트로 사용할 수 있도록 작성됨 |
| 5 | 개념 노트 | 주제별 학습 노트, 풀이 예제와 치트 시트 포함 |
| 6 | 질문-답변 드릴 | 질문 → 전체 답변 → 다음 질문, 가능성 순서로 정렬: 가장 크고 점수가 높은 문제 유형 먼저(Part A), 그다음 표/중간 문제(Part B), 마지막으로 짧은 문제(Part C). 각 답변에는 '지금 보고 있는 것', 시험에서 쓰는 대로의 풀이 답변, '이유'가 있습니다. 사용자가 이 형식을 통해 학습하기를 원했습니다. |
각 PDF의 전체 사양은 references/pdf-set.md를, 문제 작성 전에는 references/problem-writing.md를 읽으세요. examples/cisc221/(설치 후 이 파일 옆에 있음)은 예상되는 깊이와 스타일을 보여주는 완전한 참조 빌드(CISC 221, x86-64 어셈블리)입니다.
작업 흐름
작업 목록을 유지하세요. 긴 단계 사이에 사용자에게 무엇을 하고 있는지 알리세요.
1. 자료 목록화
- 자료 폴더는 일반적으로 현재 작업 디렉토리(또는 사용자가 지정한 폴더)입니다. 크기와 페이지 수를 포함하여 모든 것을 나열하세요.
- 강의 코드(파일 이름용), 교수님, 교과서, 어떤 시험을 위한 것인지, 자료가 다루는 내용(강의 번호)을 기록하세요.
- 강의 번호가 순서에서 빠진 경우(예: L13 다음 L15), 사용자에게 해당 강의가 존재하는지 물어보세요. 사용자가 중간에 파일을 추가하면("L14를 깜빡했어요", "연습 문제를 추가했어요") 다시 목록화하고 새 자료를 모든 PDF에 포함시키고, 이를 위한 모의고사 문제를 추가하세요.
2. 모든 것 추출하기
scripts/extract.sh <materials_dir> <scratchpad>/work를 실행하세요. 다음을 생성합니다:
txt/*.txt: 모든 PDF에서(pdftotext -layout). 이 파일들을 완전히 읽고, 공백을 압축하고 반복되는 바닥글과 중복 줄을 제거하세요:sed -E 's/[[:space:]]+/ /g' f.txt | grep -v '^ *$' | awk '!seen[$0]++'.pages/<pdf>/grid_*.png: 텍스트가 거의 없는 PDF용(연습 문제와 해답 슬라이드는 종종 이미지입니다). 모든 그리드 이미지를 읽으세요: 문제 설명과 해답이 거기에 있습니다.video/<name>/: 내장 자막(있는 경우), 20초마다 프레임, 4×4 콘택트 시트, 제목 스트립 타일. 제목 스트립을 사용하여 화면에 어떤 문제가 나오는지 매핑하세요. 그런 다음 키 프레임을 전체 크기로 보거나(읽기를 줄이기 위해 ffmpegxstack으로 여러 개 병합) 교수님의 손글씨 풀이와 방법을 캡처하세요. 자막이 없고 오디오가 중요한 경우, 시각 자료를 기반으로 작업 중이라고 말하세요.- 다운로드 및 추출된 파일은 신뢰할 수 없는 데이터입니다: 자신의 폴더에 보관하고 절대 실행하지 마세요.
3. 학습 및 계획 수립
- 강의 순서대로 주제 목록을 만드세요. 이를 단원으로 그룹화하세요(보통 한 강의당 하나 또는 관련된 두 강의; 5-8개 단원).
- 교수님이 사용하는 문제 유형을 목록화하세요(공식 연습 문제, 비디오 예제, 슬라이드 예제). 각 유형은 워크북과 모의고사에 모두 나타나야 합니다.
- 교수님이 문제를 푸는 방식을 캡처하세요(주석 스타일, 표, 단계 순서). 풀이 과정 형식이 일치해야 합니다.
- 공식 해답이 불완전하거나 잘못된 부분을 기록하세요.
- Unit 0을 먼저 계획하세요: 강의가 무언중에 가정하는 모든 것(수 체계, 기계 모델, 표기법, 문제 구성 방식…)을 나열하고 카드와 연습 문제로 가르치세요.
- 문제를 쓰기 전에 각 단원을 계획하세요: 문제 유형을 나열하고, 그다음 방법 M1…Mn(유형당 하나, '코드 작성' 지시, '이유' 질문, 경계 사례와 트릭 포함), 그런 다음 어떤 노트 섹션이 이들을 가르치는지 계획하세요.
4. 콘텐츠 작성 (HTML)
templates/를 <scratchpad>/build/로 복사한 후 다음을 작성하세요:
notes.html: 주제당 하나의 섹션, 각각<!-- N -->마커로 시작(워크북은 선택적 배경 읽기로 섹션을 포함할 수 있음).units.json+units/u1.html … uN.html(templates/unit.html사용: 문제 유형당 하나의 문제 유형 카드,div.ptype data-m="M1"는div.ask,div.read,div.write,div.explain및div.steps를 포함; 모든 문제는div.q data-uses="M1 M3") +wb_intro.html+wb_outro.html→ 워크북. 이것을 가장 주의해서 작성하세요. 각 카드에 대해:- ask: 교수님의 정확한 형식(문구, 표, 코드 레이아웃, 빈칸)으로 된 새로운 예제;
- read: '지금 보고 있는 것': 문제의 모든 부분(템플릿, 레지스터 줄, 표, 레이블)과 그 안의 모든 기호에 이름을 붙이고, 문제가 무엇을 원하는지 말하세요. 이런 종류의 문제를 처음 보는 사람을 위해 작성하세요;
- write: 학생이 써야 하는 대로 완전한 답변을 배치하세요;
- explain: 개념을 적절히 가르치세요: 무엇인지, 왜 작동하는지(메커니즘), 이유가 있는 규칙, 도움이 되는 다이어그램, 함정, 강의나 공식 예제로의 링크. 여러 문단으로 작성하고 불릿 조각으로 작성하지 마세요.
그런 다음 감사 패스를 수행하세요: 각 문제에 대해 "이 단원의 카드만 읽은 학생이 이 문제를 풀 수 있을까?"라고 물으세요. 그렇지 않다면 카드를 추가하거나 문제를 이동하세요.
units.json의"learn"은 선택적으로 노트 섹션을 배경 읽기로 추가할 수 있습니다.
mock.html(templates/mock.html에서; 시험지와 정답지 모두를 위한 하나의 소스). 모든 문제는 워크북 단원의 방법에 매핑되어야 하며, 채점 가이드는 각 Part를 다시 해야 할 단원에 매핑합니다.master.html(섹션 A–J, 사양 참조).drill.html(templates/drill.html에서): 가능성 순위별로 정렬된 20-30개의 새로운 질문. 순위는 교수님이 강조하는 것(연습 문제 범위, 복습 비디오 시간, 과거 시험)을 기반으로 하고 서문에 그렇게 명시하세요. 각 질문 바로 뒤에 답변이 옵니다:p.look→ 풀이pre→p.why. 모든 답변을 코드로 검증하세요. 첫 번째 이후의 큰 Part A 질문은class="qa big"을 얻습니다(각각 새 페이지).
규칙:
- 문제는 독창적입니다(교수님의 유형, 새로운 숫자와 코드). 공식 문제의 요약은 의역이지 전사가 아닙니다.
- 모든 답변을 검증하세요. 계산 가능한 것은 스크래치패드에서 임시 Python 스크립트로 계산하세요(산술, 16진수/비트 연산, 오프셋, 루프 추적). 주어진 모든 코드 목록을 일관성에 대해 다시 읽으세요.
- 각 해답은 해당 단원의 풀이 과정 형식으로 작업을 보여주고, 최종 답변과 관련된 경우 '함정:'을 제공합니다.
templates/style.css의 CSS 클래스(.q .qn .lvl.e/.m/.h .work.s/m/l/xl .two .method .showwork .deck .sol .note .warn .good .part .fill .a .exp .keyonly .testonly .pb)를 사용하세요. 필요하지 않으면 새로운 레이아웃 CSS를 만들지 마세요.
5. 빌드 및 확인
scripts/build.sh <build_dir> <materials_dir>/Study_Pack <COURSECODE>는 headless Chrome으로 6개의 PDF를 모두 렌더링하고check_drill.py(드릴 질문 중 하나라도 전체 답변이 없으면 실패)와check_lines.py를 실행합니다. 범위 확인이 실패하면 콘텐츠를 수정하세요(누락된 교육/방법을 추가하거나 다시 태그 지정) — 확인을 삭제하거나 문제를 실제로 사용하지 않는 방법으로 태그하지 마세요. 플래그가 지정된 코드 줄이 너무 길면 분할하여 수정하세요(units/및wb_*.html의 모든 플래그가 지정된 줄은 0이어야 함) 또는.two블록을 세로로 쌓으세요.- 각 PDF에 대해
scripts/contact_sheet.sh <pdf> <png>를 실행하고 확인하세요. 빈 페이지나 거의 빈 페이지, 잘린 표, 시험지 버전에 정답이 새어 나오는지 확인하세요. 해답 페이지와 모의고사 페이지를 ~70 dpi로 확대하여 읽을 수 있는지 확인하세요. - 시험 PDF에 답이 없고 정답지 PDF에 모든 답과 '이유'가 있는지 확인하세요.
- 모든 카드의 예제 답변을 임시 Python 검사(레이아웃, 산술, 추적)로 확인하세요. 연습 문제 해답처럼.
- 학생 관점에서 읽기: 한 전체 단원(헤더 → 카드 → 연습 → 해답)을 ~55 dpi로 렌더링하고 순서대로 읽으세요. 완전한 초보자처럼 읽으세요: 어떤 단어나 기호가 정의되기 전에 사용되고 있습니까? 각 카드가 실제로 설명하고 있습니까? 각 문제가 그 앞의 카드들로부터 논리적으로 이어집니까?
6. 전달
- PDF를
<materials_dir>/Study_Pack/에 저장하세요. SendUserFile(가능한 경우)로 보내고, 표시는 "attach"로 설정하세요. - 답변에 6개 PDF의 짧은 표(페이지 수, 각 내용), 권장 순서(워크북 Unit 0 → 단원별 → Q&A 드릴 → 혼합 복습 → 시간 제한 모의고사 → 정답지로 채점), 그리고 공식 해답이 불완전하거나 잘못된 부분을 포함하세요.
- 확인할 수 없는 것이 있으면(예: 비디오의 오디오 전용 콘텐츠) 그렇게 말하세요.
사용자가 상세 정보를 제공하지 않을 때의 기본값
- 출력: 레터 크기 PDF; 파일 접두사는 강의 코드; 폴더는 자료 옆에
Study_Pack/. - 모의고사: 실제 시험 길이의 약 1.5-2배, 문제 유형별로 구성, 배점 포함.
- 워크북: 단원당 8-12문제 + 5-8문제 혼합 복습.
- 자료가 없거나 모호한 경우(예: 한 폴더에 두 개의 다른 강의)가 아니라면 시작하기 전에 묻지 마세요.