이 글은 Today I Learn 시리즈의 249번째 기록입니다. (총 252개)

그림 113종이 한꺼번에 왔다

한 판만 다시 만들 계획이었다

계획은 503탄 하나였다. 고양이가 너무 쉬워서 새 그림을 받으면 그 레벨만 다시 만들고 끝낼 생각이었다. 앞선 TIL 28에서 정리해 둔 방식이다 — 레벨 파일을 지우면 그 번호만 다시 만들어진다.

그런데 그림을 그려 준 사람이 고양이만 보낸 게 아니라 1600탄에 쓰인 도안 113종을 한꺼번에 다듬어 보냈다. 그중 대부분이 이미 출시한 1500탄에 쓰인 것들이었다.

한 장이면 부분 교체지만 113종이면 전체 교체다. 부분 교체로 쓰려던 방법이 규모 때문에 그대로 무너졌다.

  • 같은 작업도 개수가 늘면 방법이 바뀐다. “이건 이렇게 고치면 된다”는 판단에는 몇 개까지라는 조건이 붙어 있다
  • 남에게 맡긴 일은 내가 요청한 범위로 돌아오지 않을 수 있다. 돌아온 양에 맞는 방법을 다시 고르는 게 먼저다

안전한 쪽을 고르려다 다른 게 꺼졌다

이미 만든 레벨을 건드리지 않는 동결 모드가 있다. 앞선 TIL 28에서 한국 도안 19종을 지키려고 그 번호를 손대지 않기로 했던 그 모드다.

이번엔 그 모드가 오히려 걸렸다. 동결로 뽑으면 한국 도안을 8·24·40탄처럼 고르게 흩는 처리가 아예 돌지 않는다. 반대로 1500만 통째로 뽑으면 501600탄이 쓰는 그림을 또 가져가 같은 그림이 두 번 나온다.

어느 쪽도 공짜가 아니라서 1~600을 한 번에 뽑았다.

  • 안전 모드는 위험한 것만 끄지 않는다. 같이 꺼지는 것이 무엇인지 보고 고른다
  • 선택지가 둘 다 손해면 손해의 종류를 비교한다. 한쪽은 그림이 겹치고 한쪽은 배치가 무너진다

검토하는 사람이 보던 번호가 전부 바뀌었다

501~600탄 도안은 그려 준 사람이 보고 있는 중이었다. 다시 뽑으면 배정이 밀려 그 사람이 보던 번호가 달라진다.

그래서 고양이 그림까지 받고 한 번에 뽑기로 했다. 오늘 뽑고 내일 또 뽑으면 검토가 두 번 흔들린다. 그렇게 몰았는데도 새로 봐야 하는 도안이 96종 나왔다.

  • 남이 보고 있는 목록을 흔드는 작업은 몰아서 한 번에 한다. 우리는 한 번 더 돌리는 것이지만 그 사람은 처음부터 다시 보는 것이다

고양이가 25탄에 가 있었다

다시 뽑고 나니 고양이는 25탄에 있었다. 503탄에는 다른 그림이 들어갔다.

앞선 TIL 8에서 도안 열 종이 빠지며 번호와 그림의 짝이 밀렸을 때 “번호로 지목할 수 없다”고 적었는데, 이번엔 그걸 알고도 같은 자리에 섰다. 번호를 지키려면 한국 도안 19종처럼 자리를 못 박아야 하는데, 고양이는 그렇게 해 두지 않았으니 난이도에 맞는 자리로 갔다.

  • 한 번 겪은 함정은 다음에 자동으로 피해지지 않는다. 그때 쓴 대책(자리 못 박기)을 이번 대상에 적용했는지가 갈랐다
  • 자리를 지킬 것과 맡길 것은 그림을 넣는 시점에 정한다. 뽑고 나서는 못 고른다

그림을 고르는 자리가 난이도를 정한다

예전 고양이는 한 색이 그림의 78%였다. 그러면 바구니 대부분이 같은 색이라 순서를 고민할 게 없어서 봇이 100% 깼다. 새로 받은 그림은 색이 여섯으로 갈렸고 클리어율이 0.79로 떨어졌다.

앞선 TIL 1·3에서 “어려워지지 않는 도안이 있다”, “도안이 난이도의 절반을 이미 정해 버린다”고 적었다. 그때는 알아 둔 성질이었고 이번엔 값을 치렀다 — 출시한 뒤에 알아서 500판을 다시 뽑았다.

그래서 절차를 바꿨다. 도안은 출시 전에 검토해서 넣는다. 새 구간은 생성한 다음 검토를 받고, 고칠 것을 반영한 뒤에 낸다. 그림을 고를 때 예쁜지만 보지 않고 “여기서 고민할 게 생기나”를 같이 본다.

  • 알고 있는 성질과 절차로 박아 둔 성질은 다르다. 값을 치르기 전까지는 앞엣것으로 남는다
  • 뒤에서 고치는 비용이 큰 것일수록 앞 단계에 검사를 붙인다. 이 경우엔 사람 눈이 그 검사다

Series: Today I Learn

1 | C++ 자료형(Data Type) 2 | MD5 vs pHash 3 | C++에서 함수의 선언과 정의 4 | Tkinter padx, pady 5 | 메모리와 포인터 변수 6 | Call by Value, Call by Reference, Call by Pointer 비교 7 | const 8 | Gemfile — Jekyll 프로젝트의 의존성 파일 9 | kramdown-parser-gfm — Jekyll의 GFM 파서 10 | 파서(Parser) 11 | AHU vs OHU 12 | I might try it vs I'll try it 뉘앙스 차이 13 | SESSION_EXPIRE_AT_BROWSER_CLOSE=True 14 | configuration key 15 | Git stash vs discard 16 | subprocess.Popen으로 Windows 탐색기에 명령어를 전달 17 | Post 잔디 분석하기 18 | Google Sheets Sync 최적화 19 | DSL (Domain Specific Language)과 GPL (General Purpose Language) 20 | 마크다운 표 그리는 방법 21 | 쿼리 파라미터(Query Parameter). 기존 QR코드 재활용 22 | Django 보안 취약점 점검 및 수정 23 | OOP Object-Oriented Programming 객체 지향 프로그래밍 24 | Fernet 대칭 암호화 25 | Jekyll 코드블록 안의 Liquid 태그 26 | 습관만들기 Pawbit TIL 1 27 | insertOnConflictUpdate vs DoUpdate(target) 28 | 세션 필터 29 | 아코디언(Accordiaon) UI를 펼친상태로 만들기 30 | input의 step 31 | 습관만들기 Pawbit TIL 2 32 | 습관만들기 Pawbit TIL 3 33 | Word Cloud 34 | Google Sheets를 데이터 버스로(with AppSheet) 35 | Django 모델 텍스트 필드 자동 수집 패턴 36 | localStorage로 섹션 토글 상태 유지 37 | 순차 ID 생성(`select_for_update()` + `max()` 조합) 38 | 역참조 검색과 distinct() 39 | xlsx 다운로드와 로딩 오버레이 충돌 40 | Android 파일 공유 MIME 타입 41 | AssetManifest — Flutter 빌드 타임 asset 목록 런타임 조회 42 | 크레센도 Phaser + TypeScript TIL 1 43 | 크레센도 Phaser + TypeScript TIL 2 44 | 크레센도 Phaser + TypeScript TIL 3 45 | 크레센도 Phaser + TypeScript TIL 4 46 | 크레센도 Phaser + TypeScript TIL 5 47 | 여둘까 Office Layout TIL 1 48 | 습관만들기 Pawbit TIL 4 49 | 여둘까 Office Layout TIL 2 50 | 여둘까 Office Layout TIL 3 51 | 크레센도 Phaser + TypeScript TIL 6 52 | UTF-8 BOM과 PowerShell 파일 쓰기 53 | 소리꽃 KeyBloom TIL 1 54 | 습관만들기 Pawbit TIL 5 55 | 여둘까 Office Layout TIL 4 56 | 소리꽃 KeyBloom TIL 2 57 | 소리꽃 KeyBloom TIL 3 58 | 메트로놈 Simple Metronome TIL 1 59 | 소리꽃 KeyBloom TIL 4 60 | 메트로놈 Simple Metronome TIL 2 61 | 소리꽃 KeyBloom TIL 5 62 | 습관만들기 Pawbit TIL 6 63 | 크레센도 Phaser + TypeScript TIL 7 64 | 메트로놈 Simple Metronome TIL 3 65 | 소설 타임라인 관리 도구 Lumior TIL 1 66 | 습관만들기 Pawbit TIL 7 67 | 정적 블로그 SEO 정비와 Pagefind 검색 도입 68 | 크레센도 Phaser + TypeScript TIL 8 69 | 메트로놈 Simple Metronome TIL 4 70 | 습관만들기 Pawbit TIL 8 71 | 안드로이드 AudioTrack 연속 재생, 실측 피커 정렬, 카메라 토치 플래시 72 | 메트로놈 Simple Metronome TIL 5 73 | 모래게임 Sandrop TIL 1 74 | 습관만들기 Pawbit TIL 9 75 | 메트로놈 Simple Metronome TIL 6 76 | 모래게임 Sandrop TIL 2 77 | 모래게임 Sandrop TIL 3 78 | 습관만들기 Pawbit TIL 10 79 | 습관만들기 Pawbit TIL 11 80 | 메트로놈 Simple Metronome TIL 7 81 | 모래게임 Sandrop TIL 5 82 | 모래게임 Sandrop TIL 4 83 | 습관만들기 Pawbit TIL 12 84 | 모래게임 Sandrop TIL 6 85 | 소리꽃 KeyBloom TIL 6 86 | 모래게임 Sandrop TIL 7 87 | 모래게임 Sandrop TIL 8 88 | 소리꽃 KeyBloom TIL 7 89 | 모래게임 Sandrop TIL 9 90 | 소리꽃 KeyBloom TIL 8 91 | 모래게임 Sandrop TIL 10 92 | 소리꽃 KeyBloom TIL 9 93 | 콘티온 ContiOn TIL 1 94 | 소리꽃 KeyBloom TIL 10 95 | 콘티온 ContiOn TIL 2 96 | 습관만들기 Pawbit TIL 13 97 | 콘티온 ContiOn TIL 3 98 | 룸톤 Roomtone TIL 1 99 | 모래게임 Sandrop TIL 11 100 | 소리꽃 KeyBloom TIL 11 101 | 여둘까 Office Layout TIL 5 102 | 모래게임 Sandrop TIL 12 103 | 모래게임 Sandrop TIL 13 104 | 콘티온 ContiOn TIL 4 105 | 모래게임 Sandrop TIL 14 106 | 소리꽃 KeyBloom TIL 12 107 | 습관만들기 Pawbit TIL 14 108 | 모래게임 Sandrop TIL 15 109 | 모래게임 Sandrop TIL 16 110 | 소리꽃 KeyBloom TIL 13 111 | 온실 GreenHouse TIL 1 112 | 콘티온 ContiOn TIL 5 113 | 모래게임 Sandrop TIL 17 114 | 소리꽃 KeyBloom TIL 14 115 | 온실 GreenHouse TIL 2 116 | 콘티온 ContiOn TIL 6 117 | 모래게임 Sandrop TIL 18 118 | 콘티온 ContiOn TIL 7 119 | 모래게임 Sandrop TIL 19 120 | 소리꽃 KeyBloom TIL 15 121 | 룸톤 Roomtone TIL 2 122 | 모래게임 Sandrop TIL 20 123 | 모래게임 Sandrop TIL 21 124 | 소리꽃 KeyBloom TIL 16 125 | 소리꽃 KeyBloom TIL 17 126 | 소리꽃 KeyBloom TIL 18 127 | 여둘까 Office Layout TIL 6 128 | 소리꽃 KeyBloom TIL 19 129 | 소리꽃 KeyBloom TIL 20 130 | 콘티온 ContiOn TIL 8 131 | 콘티온 ContiOn TIL 9 132 | 로그스톤 상표 셀프 출원 TIL 1 133 | 소리꽃 KeyBloom TIL 21 134 | 로그스톤 샵 LogStone Shop TIL 1 135 | 소리꽃 KeyBloom TIL 22 136 | 로그스톤 샵 LogStone Shop TIL 2 137 | 룸톤 Roomtone TIL 3 138 | 소리꽃 KeyBloom TIL 23 139 | 모래게임 Sandrop TIL 22 140 | 모래게임 Sandrop TIL 23 141 | 소리꽃 KeyBloom TIL 24 142 | 로그스톤 샵 LogStone Shop TIL 3 143 | 모래게임 Sandrop TIL 24 144 | 소리꽃 KeyBloom TIL 25 145 | 모래게임 Sandrop TIL 25 146 | MiniMacro TIL 1 147 | 룸톤 Roomtone TIL 4 148 | 모래게임 Sandrop TIL 26 149 | 콘티온 ContiOn TIL 10 150 | Astro가 무엇인지, 왜 옮기는지 151 | 룸톤 Roomtone TIL 5 152 | 룸톤 Roomtone TIL 6 153 | 모래게임 Sandrop TIL 27 154 | 소리꽃 KeyBloom TIL 26 155 | MiniMacro TIL 2 156 | 로그스톤 샵 LogStone Shop TIL 4 157 | 메트로놈 Simple Metronome TIL 8 158 | 모래게임 Sandrop TIL 28 159 | 여둘까 Office Layout TIL 7 160 | 룸톤 Roomtone TIL 7 161 | 메트로놈 Simple Metronome TIL 9 162 | 블로그 Astro 이관 TIL 163 | 여둘까 Office Layout TIL 8 164 | 로그스톤 샵 LogStone Shop TIL 5 165 | 모래게임 Sandrop TIL 29 166 | 오픈데이 Openday TIL 1 167 | 로그스톤 샵 LogStone Shop TIL 6 168 | 모래게임 Sandrop TIL 30 169 | 오픈데이 Openday TIL 2 170 | 모래게임 Sandrop TIL 31 171 | Unreal Engine MCP TIL 1 172 | 모래게임 Sandrop TIL 32 173 | 소리꽃 KeyBloom TIL 27 174 | 콘티온 ContiOn TIL 11 175 | 오픈데이 Openday TIL 3 176 | 로그스톤 샵 LogStone Shop TIL 7 177 | 모래게임 Sandrop TIL 33 178 | 소리꽃 KeyBloom TIL 28 179 | 오픈데이 Openday TIL 4 180 | 여둘까 Office Layout TIL 9 181 | 오픈데이 Openday TIL 5 182 | ScorePlayer TIL 1 183 | 모래게임 Sandrop TIL 34 184 | BuildingHub TIL 1 185 | ScorePlayer TIL 2 186 | 여둘까 Office Layout TIL 10 187 | BuildingHub TIL 2 188 | ScorePlayer TIL 3 189 | Unreal Engine MCP TIL 2 190 | 궁 미로 PalaceMaze TIL 1 191 | 메트로놈 Simple Metronome TIL 10 192 | 메트로놈 Simple Metronome TIL 11 193 | 오픈데이 Openday TIL 6 194 | BuildingHub TIL 3 195 | ScorePlayer TIL 4 196 | Obsidian vault에서 코드만 빼기 — directory junction 197 | 여둘까 Office Layout TIL 11 198 | 오픈데이 Openday TIL 7 199 | URL은 바뀔 수 있는 것에 묶지 않는다 200 | 도구는 기능이 아니라 내 일에 맞는지로 고른다 201 | 돌이키기 힘든 변경은 작게 먼저 확인한다 202 | 궁 미로 PalaceMaze TIL 2 203 | 궁 미로 PalaceMaze TIL 3 204 | 소리꽃 KeyBloom TIL 29 205 | 오픈데이 Openday TIL 8 206 | 룸톤 Roomtone TIL 8 207 | BuildingHub TIL 4 208 | ScorePlayer TIL 5 209 | 로그스톤 샵 LogStone Shop TIL 8 210 | 여둘까 Office Layout TIL 12 211 | 오픈데이 Openday TIL 9 212 | BuildingHub TIL 5 213 | MiniMacro TIL 3 214 | 룸톤 Roomtone TIL 10 215 | 룸톤 Roomtone TIL 9 216 | 소리꽃 KeyBloom TIL 30 217 | 오픈데이 Openday TIL 10 218 | 여둘까 Office Layout TIL 13 219 | 오픈데이 Openday TIL 11 220 | 룸톤 Roomtone TIL 11 221 | 소리꽃 KeyBloom TIL 31 222 | 궁 미로 PalaceMaze TIL 4 223 | 룸톤 Roomtone TIL 12 224 | 로그스톤 샵 LogStone Shop TIL 9 225 | 룸톤 Roomtone TIL 13 226 | 로그스톤 샵 LogStone Shop TIL 10 227 | 룸톤 Roomtone TIL 14 228 | 소리꽃 KeyBloom TIL 32 229 | 룸톤 Roomtone TIL 15 230 | 룸톤 Roomtone TIL 16 231 | 로그스톤 샵 LogStone Shop TIL 11 232 | 룸톤 Roomtone TIL 17 233 | 룸톤 Roomtone TIL 18 234 | 메트로놈 Simple Metronome TIL 12 235 | 콘티온 ContiOn TIL 12 236 | 소리꽃 KeyBloom TIL 33 237 | 온실 GreenHouse TIL 3 238 | 로그스톤 샵 LogStone Shop TIL 12 239 | 룸톤 Roomtone TIL 19 240 | 모래게임 Sandrop TIL 35 241 | 여러 세션을 INBOX 하나로 굴리기 242 | 궁 미로 PalaceMaze TIL 5 243 | CS2 Practice Host TIL 1 244 | 룸톤 Roomtone TIL 20 245 | 여둘까 Office Layout TIL 14 246 | 로그스톤 샵 LogStone Shop TIL 13 247 | 룸톤 Roomtone TIL 21 248 | 여둘까 Office Layout TIL 15 249 | 모래게임 Sandrop TIL 36 읽는 중 250 | 룸톤 Roomtone TIL 22 251 | 룸톤 Roomtone TIL 23 252 | 모래게임 Sandrop TIL 37