workload 4개, 추상 표현 4개, scale 4개의 64상태에서 invariant·총비용·observer validity를 비교하되 추상 표현을 언어 타입이나 성능 보장으로 등치하지 않는다. 이를 생략하면 64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다.에서도 이름과 평균적 인상만으로 그럴듯한 선택을 만들 수 있지만, 반증 가능한 sequence 결정은 남길 수 없습니다.
아직 답을 몰라도 괜찮아요. 아래 작은 예시를 보고 먼저 예상해 보세요.
01 · 같이 연습해요
작은 문제부터 하나씩 직접 풀어봐요
먼저 예상하고, 한 단계씩 확인하고, 막힌 곳을 고쳐 봐요. 도움을 열어도 괜찮아요. 도움을 본 문제는 나중에 모양을 바꿔 다시 풀어보면 됩니다.
연습에서 작성 중인 답0 / 8
01
찾아보기 · 기초
al64 recognize · Gold 64상태 sequence 변이 관측소: 64-state matrix·abstract representation·mutation anatomy 표식 중 “workload 4개, 추상 표현 4개, scale 4개의 64상태에서 invariant·총비용·observer validity를 비교하되 추상 표현을 언어 타입이나 성능 보장으로 등치하지 않는다.”과 일치하는 계약을 고른다.
상황
순서와 중복을 그대로 보존하는 센서 표본 sequence를 고른다. 최대 길이는 알 수 없고, 예상 operation mix는 index read 70%, tail append 25%, middle insert/delete 5%다. 원소의 메모리 주소가 안정적일 필요는 없다.
문제
고정 배열·동적 배열·tail pointer가 있는 단일 연결 리스트의 계약과 비용을 표로 분류하고 기본 표현 하나를 고르세요. 선택이 뒤집히는 조건도 하나 제시하며, 어떤 표현도 모든 workload에서 항상 우월하다고 주장하지 마세요.
제공 자료
모든 후보는 insertion order와 duplicate value를 보존해야 하며 index는 0부터 시작한다.
고정 배열은 정해진 capacity 안에서 index read가 O(1)이지만 capacity를 넘는 append를 자체적으로 수용하지 못한다.
동적 배열은 index read가 O(1), append가 amortized O(1)이고, middle edit는 이동 원소 수에 비례한다.
tail pointer가 있는 단일 연결 리스트는 tail append가 O(1)이지만 kth index 탐색은 O(k)이며, 위치를 먼저 찾아야 하는 middle edit는 O(n)일 수 있다.
연속 저장의 순차 scan은 locality에 유리할 가능성이 있지만 실제 시간은 runtime과 측정 조건에 의존한다.
정답 대신 4단계 힌트 보기
관찰
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다. 직전까지 참이었던 sequence 불변식과 처음 달라진 observer를 찾으세요.
개념
64-state matrix·abstract representation·mutation anatomy를 의미·비용·유효성으로 나눠 적으세요.
다음 도움
내 생각을 먼저 적고 ‘내 답과 맞춰 볼 기준 보기’을 누르면, 풀 순서와 더 자세한 도움을 열어 드려요.
정답과 비교
02
먼저 생각하기 · 기초
al64 predict · Gold 64상태 sequence 변이 관측소: “64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다.” 조건에서 상태·비용·observer 유효성을 실행 전에 봉인한다.
상황
언어 library와 분리된 toy dynamic array D를 예측한다. D는 size 0, capacity 2, epoch 0에서 시작하며 A부터 G까지 일곱 값을 차례로 append한다.
문제
각 append 뒤 size·capacity·누적 reallocation copy 수·epoch을 표로 예측하세요. 한 append의 worst cost와 일곱 append의 amortized 결론을 분리하고, resize 전에 얻은 handle의 상태도 판정하세요.
제공 자료
append 직전 size=capacity이면 capacity를 정확히 두 배로 늘리고 기존 size개 원소를 새 storage로 복사한 뒤 새 값을 쓴다.
reallocation copy 수는 기존 원소 복사만 센다. 새 값 일곱 개를 쓰는 비용은 별도다.
reallocation 때마다 epoch이 1 증가하며 이전 epoch의 모든 storage handle은 stale이 된다.
capacity가 남아 있는 append는 size만 1 증가시키고 copy 수와 epoch을 바꾸지 않는다.
toy contract의 결과를 Python list, Java ArrayList, C++ vector의 정확한 growth factor로 일반화하지 않는다.
정답 대신 4단계 힌트 보기
관찰
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다. 직전까지 참이었던 sequence 불변식과 처음 달라진 observer를 찾으세요.
개념
64-state matrix·abstract representation·mutation anatomy를 의미·비용·유효성으로 나눠 적으세요.
다음 도움
내 생각을 먼저 적고 ‘내 답과 맞춰 볼 기준 보기’을 누르면, 풀 순서와 더 자세한 도움을 열어 드려요.
움직임과 비교
03
순서 따라가기 · 익힌 것을 써보기
al64 trace · Gold 64상태 sequence 변이 관측소: 64-state matrix → abstract representation → mutation anatomy 순서로 64셀 state matrix·mutation traces·claim-level source ledger·accept/revise/reject memo가 만들어질 때까지 상태 전이를 추적한다.
상황
Python-list profile에서 a=[[1],[2]], b=a, c=a.copy()를 만든 뒤 b.append([3]), c[0].append(9), c[1]=[8]을 순서대로 실행한다.
문제
각 문장 뒤 a·b·c의 outer object 관계와 보이는 값을 추적하고 최종 상태를 적으세요. 이어서 C++ profile의 vector<vector<int>>에서 auto b=a와 auto& c=a가 왜 같은 alias graph가 아닌지 설명하세요.
제공 자료
Python profile에서 b=a는 같은 outer list를 가리키고 a.copy()는 새 outer list를 만들지만 기존 child object references를 복사한다.
c[1]=[8]은 c의 두 번째 slot만 새 child로 교체하며 a의 두 번째 slot은 바꾸지 않는다.
C++ profile에서 vector의 copy construction은 elements를 value-copy하고 auto&는 원본 object의 reference를 만든다.
두 profile의 결과는 각 언어 계약에 한정하며 shallow, deep, alias라는 단어만으로 실행 결과를 추측하지 않는다.
정답 대신 4단계 힌트 보기
관찰
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다. 직전까지 참이었던 sequence 불변식과 처음 달라진 observer를 찾으세요.
개념
64-state matrix·abstract representation·mutation anatomy를 의미·비용·유효성으로 나눠 적으세요.
다음 도움
내 생각을 먼저 적고 ‘내 답과 맞춰 볼 기준 보기’을 누르면, 풀 순서와 더 자세한 도움을 열어 드려요.
움직임과 비교
04
내 말로 설명하기 · 익힌 것을 써보기
al64 explain · Gold 64상태 sequence 변이 관측소: workload 4개, 추상 표현 4개, scale 4개의 64상태에서 invariant·총비용·observer validity를 비교하되 추상 표현을 언어 타입이나 성능 보장으로 등치하지 않는다.이 필요한 이유와 64셀 state matrix·mutation traces·claim-level source ledger·accept/revise/reject memo만으로는 보장할 수 없는 범위를 설명한다.
상황
C++ sequence profile을 검토한다. vector v는 size=4, capacity=4이고 iterator i는 index 1, reference r은 index 0 원소를 가리킨다. 먼저 v.push_back(50)을 수행한다. 다음 독립 장면에서는 size=5, capacity=8인 vector의 index 1에 insert하며 iterator j는 기존 index 3을 가리킨다.
문제
두 장면에서 i·r·j의 유효성을 설명하고, 같은 위치 편집을 std::list로 수행할 때의 차이와 연속 저장의 locality caveat를 적으세요. 마지막으로 이 설명을 Python list 순회 규칙으로 그대로 옮기면 안 되는 이유를 쓰세요.
제공 자료
이 C++ profile에서 vector reallocation은 그 vector 원소를 가리키는 모든 iterator·reference·pointer를 invalid하게 만든다.
reallocation 없는 vector insert는 insertion point보다 앞의 iterator/reference는 유지하지만 insertion point와 그 뒤, 기존 end를 invalid하게 만든다.
이 C++ profile에서 std::list insert는 기존 element iterator/reference를 invalid하게 만들지 않고 erase는 지운 element의 것만 invalid하게 만든다.
연속 저장은 순차 접근의 locality에 유리할 가능성이 있고 linked nodes는 pointer traversal이 필요하지만, wall-clock 우위는 측정 전 확정하지 않는다.
이 과제의 Python profile은 구조 변경 중 list iteration 결과에 의존하지 않는다고 계약한다. C++ iterator invalidation 표를 Python에 그대로 대입하지 않는다.
정답 대신 4단계 힌트 보기
관찰
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다. 직전까지 참이었던 sequence 불변식과 처음 달라진 observer를 찾으세요.
개념
64-state matrix·abstract representation·mutation anatomy를 의미·비용·유효성으로 나눠 적으세요.
다음 도움
내 생각을 먼저 적고 ‘내 답과 맞춰 볼 기준 보기’을 누르면, 풀 순서와 더 자세한 도움을 열어 드려요.
동일한 logical sequence [A,B,C]를 두 구현으로 유지한다. dynamic array는 size=3, capacity=4, storage=[A,B,C,_]이고, doubly linked list는 head=A, tail=C, A↔B↔C, size=3이다.
문제
insertFront(X), append(Y), eraseValue(B), eraseFront를 차례로 적용하는 state worksheet를 완성하세요. 각 단계에서 logical sequence, array size/capacity/copy/shift, list head/tail/link update, 지운 node handle 상태와 불변식 검사를 적으세요.
제공 자료
dynamic array는 full일 때 append 전에 capacity를 두 배로 늘리고 기존 size개를 복사한다. insert와 erase의 shift는 slot assignment 수로 센다.
doubly linked list는 head와 tail을 유지하며 이미 찾은 node의 insert/erase link update는 O(1)이다. node를 value로 찾는 traversal은 별도다.
array 불변식은 0≤size≤capacity이고 logical elements가 storage[0..size-1]에 순서대로 존재한다.
list 불변식은 empty일 때 head=tail=null, non-empty일 때 head.prev=null·tail.next=null이고 forward/backward traversal이 같은 size와 역순을 만든다.
erase된 node의 handle만 invalid하며 surviving node handle의 규칙은 이 worksheet의 linked-list contract를 따른다.
정답 대신 4단계 힌트 보기
관찰
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다. 직전까지 참이었던 sequence 불변식과 처음 달라진 observer를 찾으세요.
개념
64-state matrix·abstract representation·mutation anatomy를 의미·비용·유효성으로 나눠 적으세요.
다음 도움
내 생각을 먼저 적고 ‘내 답과 맞춰 볼 기준 보기’을 누르면, 풀 순서와 더 자세한 도움을 열어 드려요.
답과 설명 함께 비교
06
틀린 곳 고치기 · 익힌 것을 써보기
al64 debug · Gold 64상태 sequence 변이 관측소: AI가 만든 분석에 “64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다.”를 주입하고 최초 잘못된 가정만 수정한다.
상황
AI 초안이 Python 함수 `drop_negative(items)`를 제안했다: `for item in items: if item < 0: items.remove(item); return items`. 설명은 모든 음수를 제거하고 새 list를 반환하며 O(n)이고 C++ vector로 줄 단위 번역해도 같다고 주장한다.
문제
초안의 correctness·mutation/alias·complexity·언어 전이 주장을 각각 audit하세요. 실행 전에 최소 반례를 쓰고, non-mutating Python 수정안과 in-place 수정안을 각각 제시한 뒤 계약과 비용을 비교하세요.
제공 자료
Python profile에서 list.remove(value)는 첫 일치 원소를 지우고 뒤 원소를 왼쪽으로 이동시키며 같은 list object를 바꾼다.
이 profile의 for loop가 다음 index로 진행하는 동안 현재 list에서 원소를 지우면 인접한 원소가 검사되지 않을 수 있다.
remove의 search와 shift는 list 길이에 비례할 수 있어 loop 안에서 반복하면 worst O(n²)가 된다.
non-mutating 수정안은 `[item for item in items if item >= 0]`이며 새 outer list를 만든다.
C++ vector erase는 erased point 이후 iterator를 invalid하게 할 수 있으므로 Python loop behavior를 동일하다고 간주하지 않는다.
정답 대신 4단계 힌트 보기
관찰
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다. 직전까지 참이었던 sequence 불변식과 처음 달라진 observer를 찾으세요.
개념
64-state matrix·abstract representation·mutation anatomy를 의미·비용·유효성으로 나눠 적으세요.
다음 도움
내 생각을 먼저 적고 ‘내 답과 맞춰 볼 기준 보기’을 누르면, 풀 순서와 더 자세한 도움을 열어 드려요.
답과 설명 함께 비교
07
직접 만들기 · 새 문제
al64 implement · Gold 64상태 sequence 변이 관측소: 각 셀의 pre/post-state, locate/move/allocate cost, observer disposition과 보장 수준을 완성한다.을 frozen synthetic sequence에 적용해 64셀 state matrix·mutation traces·claim-level source ledger·accept/revise/reject memo를 생성한다.
상황
language-neutral SEQ-SIM/1 evaluator를 구현한다. evaluator는 toy dynamic array의 operation trace를 실행하고 각 단계의 state, copy/shift count, handle validity와 invariant verdict를 재현 가능하게 반환한다.
문제
순수 함수 `evaluate(initialCapacity, initialValues, operations)`를 구현하세요. 입력 validation, operation별 state transition, deterministic output schema, 불변식 검사, error precedence를 포함하고 세 공개 review case의 결과를 설명하세요.
제공 자료
initialCapacity는 1 이상의 정수이고 initialValues.length≤initialCapacity여야 한다. 위반하면 INITIAL_CONTRACT_ERROR이며 operation을 실행하지 않는다.
operations는 append(value), insert(index,value), erase(index), get(index), mark(name,index)다. mutation index 범위는 insert 0..size, erase/get/mark 0..size-1이다.
full mutation은 capacity를 두 배로 늘려 기존 size개를 copy하고 epoch을 1 올린다. insert shift는 index..size-1, erase shift는 index+1..size-1의 slot assignment 수다.
mark는 현재 element의 name·index·epoch을 저장한다. reallocation은 모든 기존 mark를 invalid하게 하고, reallocation 없는 insert/erase는 mutation index와 그 뒤의 mark를 invalid하게 한다.
잘못된 operation index는 INVALID_INDEX를 기록하고 state와 counters를 바꾸지 않는다. 매 단계 뒤 0≤size≤capacity와 occupied-prefix order를 검사하며 실패하면 INVARIANT_ERROR가 우선한다.
정답 대신 4단계 힌트 보기
관찰
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다. 직전까지 참이었던 sequence 불변식과 처음 달라진 observer를 찾으세요.
개념
64-state matrix·abstract representation·mutation anatomy를 의미·비용·유효성으로 나눠 적으세요.
다음 도움
내 생각을 먼저 적고 ‘내 답과 맞춰 볼 기준 보기’을 누르면, 풀 순서와 더 자세한 도움을 열어 드려요.
정답과 비교
08
새 문제에 써보기 · 새 문제
al64 transfer · Gold 64상태 sequence 변이 관측소: 교차 언어 sequence architecture shiproom·AI 생성 선택 감사로 판단을 옮겨 보존할 sequence semantics와 달라지는 비용·수명 규칙을 방어한다.
상황
오프라인 annotation timeline의 sequence layer를 설계한다. 최대 200,000 records, insertion order와 duplicate text 보존, append 90%, indexed page/scan 9%, stable logical ID에 의한 delete 1%다. 원소의 물리 주소 안정성은 요구하지 않으며 memory budget은 64 MiB다.
문제
AI 도구를 끈 상태에서 먼저 계약·후보·네 가지 boundary test·초기 선택을 기록하세요. 그 뒤 AI가 제안한 singly linked list와 dynamic array+tombstone 두 안을 같은 evidence로 audit하고, 선택·compaction trigger·언어별 구현 주의점·선택이 뒤집히는 조건을 작성하세요.
dynamic array+tombstone은 append와 indexed scan을 연속 logical slots에서 수행하고 delete는 mark만 바꾸며, compaction 때 surviving records를 순서대로 복사한다.
tail pointer와 ID→(predecessor,node) lookup을 함께 일관되게 유지하는 singly linked list는 해당 predecessor가 유효할 때 delete와 append가 O(1)이다. ID→node만 있으면 predecessor 탐색이 필요하며 indexed page와 full scan에도 traversal과 node overhead가 든다.
초기 review trigger는 tombstone ratio가 20%를 넘거나 modeled live+tombstone bytes가 64 MiB의 80%를 넘을 때 compaction을 검토하는 것이다. 이 수치는 검증할 정책이지 보편 상수가 아니다.
Python list, JavaScript Array, C++ vector는 mutation·copy·handle 규칙이 다르다. stable logical ID를 외부 계약으로 쓰고 physical index·reference는 mutation 뒤 재검증한다.
AI-off evidence에는 empty, singleton delete, full modeled load, adjacent tombstones가 포함되어야 하며 결과는 review 상태이지 배포·숙련 인증이 아니다.
정답 대신 4단계 힌트 보기
관찰
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다. 직전까지 참이었던 sequence 불변식과 처음 달라진 observer를 찾으세요.
개념
64-state matrix·abstract representation·mutation anatomy를 의미·비용·유효성으로 나눠 적으세요.
다음 도움
내 생각을 먼저 적고 ‘내 답과 맞춰 볼 기준 보기’을 누르면, 풀 순서와 더 자세한 도움을 열어 드려요.
설명 기준과 비교
8개 답이 남았습니다.
02 · 막힌 곳을 찾아요
틀린 답에서 생각이 갈라진 첫 지점 찾기
헷갈림 01
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다.
겉으로 보이는 막힘
Gold 64상태 sequence 변이 관측소 코드가 일부 예시는 통과하지만 크기·순서·별칭·유효성 중 하나를 재현할 수 없다.
막힌 까닭
workload 4개, 추상 표현 4개, scale 4개의 64상태에서 invariant·총비용·observer validity를 비교하되 추상 표현을 언어 타입이나 성능 보장으로 등치하지 않는다.을 구현 전에 봉인하지 않았다.
다시 해보는 방법
각 셀의 pre/post-state, locate/move/allocate cost, observer disposition과 보장 수준을 완성한다.에서 pre/post-state와 허용 연산을 고정하고 64셀 state matrix·mutation traces·claim-level source ledger·accept/revise/reject memo를 다시 만든다.
교차 언어 sequence architecture shiproom·AI 생성 선택 감사의 실제 operation mix가 바뀌면 선택 판정이 뒤집힌다.
막힌 까닭
primitive operation과 worst·amortized·observed 층을 분리하지 않았다.
다시 해보는 방법
64셀 state matrix·mutation traces·claim-level source ledger·accept/revise/reject memo에 총비용 ledger와 결정이 바뀌는 최소 workload를 추가한다.
헷갈림 03
mutation anatomy observer가 남아 있다는 이유만으로 owner 변이 뒤에도 유효하다고 가정한다.
겉으로 보이는 막힘
stale index·iterator·reference·view가 잘못된 원소를 가리키거나 사전조건을 위반한다.
막힌 까닭
구조 변경 전후의 invalidation·lifetime 계약을 기록하지 않았다.
다시 해보는 방법
64상태의 fixed/growable/linked/view 축을 모든 언어에 직접 매핑하고 N/A·copy·backed·borrow 차이를 지운다. fixture에서 observer set을 재검증하고 무효 observer를 재획득하거나 사용을 거절한다.
03 · 내게 맞는 도움 고르기
같은 목표를 원하는 도움만큼 연습해요
안내 받으며
안내형
64-state matrix · abstract representation · mutation anatomy 카드와 pre/post-state 표를 제공하고 색상 외에도 owner·size·capacity·validity label을 표시한다.
네 workload, 네 추상 표현, 네 scale을 조합한 64상태에서 이동·탐색·할당·observer 유효성을 비교하되 언어별 컨테이너 동치나 속도를 보장하지 않는 배열·리스트 변이 관측도에서 색상뿐 아니라 owner·size·capacity·link·observer·claim-level을 문자와 선 종류로 함께 표시한다.혼자 해보기
내 힘으로
Gold 64상태 sequence 변이 관측소의 미공개 sequence에서 계약·총비용·observer 유효성을 독립 재구성하는 능력의 처음 보는 frozen synthetic sequence를 AI 없이 먼저 분석하고 pre/post-state·총비용·observer 판정을 봉인한 뒤 실행 관찰과 대조한다.
공식 정의·API 문법·도구 사용법은 열 수 있지만 해당 변형의 최종 sequence, exact move/link count, invalidation verdict, hidden fixture와 최종 candidate는 먼저 제공하지 않는다.더 도전하기
심화형
교차 언어 sequence architecture shiproom·AI 생성 선택 감사에서 element cost·allocator·alias graph 중 두 축을 추가하고 선택이 바뀌는 최소 workload를 찾는다.
더 정밀한 상태·메모리 ledger는 오류 탐지력을 높이지만 문서 비용도 늘리므로 decision-changing invariant와 observer를 우선 기록한다.