agentsclimarketplace

Human to code translation skill

Skill cskwork/human-to-code-translation-skill

Use when solving or teaching an algorithm / coding-test problem and you need to bridge how a human intuitively solves it with how to express it as code (Python, Java, C). Triggers — "머릿속으론 풀리는데 코드가 안 써져", 알고리즘 문제를 코드로 옮기기, 입문자에게 풀이 설명, 사람 풀이 → 코드 번역, off-by-one/무한루프/경계조건이 자꾸 틀릴 때.From its SKILL.md

Install
npx -y skills add cskwork/human-to-code-translation-skill

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

8.0 KB, ~3.2k tokens by cl100k_base, as published. Nobody here has run it

Human-to-Code Translation

Overview

알고리즘에서 진짜 어려운 건 "푸는 것"이 아니라, 사람이 머릿속으로 자연스럽게 하는 일을 기계가 따라 할 수 있는 형태로 옮기는 것이다. 사람은 패턴 매칭과 "그냥 보면 아는" 도약으로 풀지만, 기계는 모든 단계가 명시적이어야 하고, 머릿속에 담아둔 것이 변수로 꺼내져야 하며, 반복·조건·멈춤이 코드로 적혀야 한다.

핵심 원리: 코드는 갑자기 튀어나오지 않는다. 말 → 손풀이 → 규칙 → 변수/흐름 → 코드 순으로 번역된다. 이 다리의 의미는 언어와 무관하고(같음), 달라지는 건 문법뿐이다.

When to Use

  • 알고리즘 / 코딩테스트 문제를 풀거나 가르칠 때 (시키지 않아도, 풀이를 설명할 땐 이 파이프라인을 적용)
  • "사람으로는 풀겠는데 코드로 못 옮기겠다" 는 상황
  • off-by-one, 무한 루프, 경계/종료 조건이 자꾸 틀릴 때 (대부분 손풀이·트레이싱 생략이 원인)
  • 입문자에게 "이 코드가 왜 이렇게 되는지" 를 설명해야 할 때

When NOT to use: 이미 자명한 한 줄짜리, 또는 라이브러리 한 번 호출로 끝나는 일. 번역할 "사람의 풀이"가 없으면 이 스킬은 불필요하다.

The Translation Pipeline (항상 이 순서로)

  1. 사람 말로 다시 쓴다. 문제를 일상어로 옮기고, 손으로 풀 작은 구체 예제를 하나 정한다. (예: 배열 5칸, target 하나)
  2. 손으로 풀며 "내가 실제로 한 일"을 관찰한다. 답을 먼저 구하지 말고, 답에 이르는 절차를 본다. 종이에 적어라.
  3. 암묵지를 명시화한다. "가운데를 본다", "큰 걸 고른다" 같은 그냥 아는 행동을 정확한 규칙으로 쪼갠다. (가운데 = (low+high)//2? 정수 나눗셈? 같은 값이면?)
  4. 머릿속 상태를 변수/자료구조로 꺼낸다. "내가 기억하고 있는 게 뭐지?"를 묻는다. 그 답이 곧 변수와 자료구조다. (아래 매핑표)
  5. 반복·조건·종료를 제어 흐름으로 옮긴다. "~할 때까지" → while + 종료 조건, "~이면" → if, "하나씩" → for. 언제 멈추는지를 반드시 명시한다(무한 루프 방지).
  6. 규칙을 코드로 받아쓰고, 손으로 트레이싱해 검증한다. 규칙 한 줄 ≈ 코드 한 줄. 그다음 "없는 값 / 맨 끝 / 빈 입력" 경계를 표로 돌려본다.

핵심 매핑표: 사람의 머릿속 행동 → 기계 구성요소

이 표가 4단계(상태 → 변수)의 사전이다. "사람의 표현"을 보고 오른쪽을 떠올려라.

사람의 표현 / 머릿속 행동기계 구성요소
"기억해 둔다 / 머릿속에 담아둔다"변수 (variable)
"쭉 훑어본다 / 하나씩 차례로 본다"for 반복문
"~인 동안 계속 / ~할 때까지"while + 종료 조건
"가장 큰/작은 걸 고른다"max/min 추적 변수 + 비교
"지금까지 중 제일 ~"누적 변수 (running best/sum)
"본 적 있나? / 중복인가?"집합(set) / 딕셔너리 membership
"이름표 붙여 분류해 모은다"딕셔너리/맵 그룹핑
"짝을 맞춘다 / 가장 최근 것부터 되돌린다"스택(stack)
"줄 세워 들어온 순서대로 처리"큐(queue)
"양쪽 끝에서 가운데로 좁혀온다"투 포인터 (두 인덱스 변수)
"경우를 나눠서"if / elif / else
"표를 그려 칸을 채워나간다"2차원 배열 / DP 테이블
"n번 똑같이 한다"for i in range(n)
"더 작은 같은 문제로 쪼갠다"재귀 (recursion)

Worked Example: 정렬된 배열에서 값 찾기

1) 사람 말로 + 작은 예제: "작은 수부터 정렬된 줄에서 target의 자리 번호를 찾아라. 없으면 -1." 예제: [2,5,8,12,19], target=12.

2) 손풀이 관찰: 사전을 찾듯 가운데를 펴고, target이 더 크면 왼쪽 절반을 통째로 버린다. 가운데(8) < 12 → 오른쪽만. 남은 가운데(12) = 12 → 3번. 두 번 만에.

3) 암묵지 명시화: "가운데" = (low+high)//2 (정수 나눗셈). "버린다" = 가운데는 이미 확인했으니 mid±1로 구간을 줄인다(중복 검사 방지).

4) 상태 → 변수: 내가 머릿속에 쥐고 있는 건 "아직 볼 구간의 양 끝" — 두 손가락. → 매핑표 "양쪽 끝에서 좁혀온다" → 두 인덱스 low, high.

5) 흐름 + 종료: "두 손가락이 안 엇갈리는 동안" → while low <= high. 엇갈리면(low > high) 구간이 비었다는 뜻 → 종료 후 -1.

6) 코드 + 트레이싱. 다리(low/high/mid 로직)는 세 언어에서 동일하다. 달라지는 건 문법 표면뿐:

# Python: 길이는 len(), 정수 나눗셈 //
def search(arr, target):
    low, high = 0, len(arr) - 1
    while low <= high:
        mid = (low + high) // 2
        if arr[mid] == target:   return mid
        elif arr[mid] < target:  low = mid + 1   # 답은 오른쪽
        else:                    high = mid - 1  # 답은 왼쪽
    return -1
// Java: 길이는 .length, mid는 오버플로 안전식
int search(int[] arr, int target) {
    int low = 0, high = arr.length - 1;
    while (low <= high) {
        int mid = low + (high - low) / 2;
        if (arr[mid] == target) return mid;
        else if (arr[mid] < target) low = mid + 1;
        else high = mid - 1;
    }
    return -1;
}
/* C: 배열 길이를 인자로 따로 받아야 함 */
int search(int arr[], int n, int target) {
    int low = 0, high = n - 1;
    while (low <= high) {
        int mid = low + (high - low) / 2;
        if (arr[mid] == target) return mid;
        else if (arr[mid] < target) low = mid + 1;
        else high = mid - 1;
    }
    return -1;
}

번역의 교훈: 의미(가운데 비교 → 절반 버리기)는 셋 다 똑같다. 차이는 길이 얻는 법(len() / .length / 인자), 오버플로 주의(Java·C는 low+(high-low)/2), 타입 명시뿐이다. 다리를 한 번 놓으면 언어는 갈아끼우면 된다.

트레이싱(없는 값 target=7): low,high0,4 → 0,1 → 1,1 → 2,1로 가다 low>high라 종료 → -1. 손으로 돌려 확인.

더 많은 예제(스택·해시·DP로의 번역): worked-examples.md 참고.

Common Mistakes (이 단계를 건너뛰면 거의 항상 틀린다)

실수결과 / 고치는 법
손풀이 없이 바로 코드경계·종료 조건 틀림. 작은 예제로 손풀이 먼저(2단계).
암묵지를 그대로 둠 ("가운데를 본다")mid 계산·정수 나눗셈·off-by-one 누락. 3단계로 규칙화.
종료 조건 안 정함무한 루프. "언제 멈추나"를 변수 조건으로 명시(5단계).
머릿속 상태를 변수로 안 뺌기계는 기억 못 함. 매핑표로 변수/자료구조 도출(4단계).
트레이싱 생략경계 버그. "없는 값/맨 끝/빈 입력"을 표로 손 트레이싱(6단계).
외운 알고리즘으로 점프문제가 살짝 다르면 깨짐. 먼저 이 문제 고유 손풀이로 구조 확인.

Red Flags — STOP

  • 문제를 읽자마자 코드부터 타이핑하고 있다 → 1~2단계로 돌아가라.
  • "대충 이진 탐색이네" 하고 외운 코드를 붙여넣는다 → 이 문제의 손풀이부터.
  • while 안에서 low/high(또는 종료 변수)가 매번 바뀌는지 확인 안 했다 → 무한 루프 위험.
  • 예제 하나 손으로 안 돌려보고 "맞다"고 한다 → 트레이싱 전엔 미완성.

What ships with it: 21 files

1781.6 KB alongside SKILL.md

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.