Skip to content

Latest commit

Β 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎴πŸͺ™ νŒλˆμ •μ‚° (pandon-settle)

친ꡬ 2~5λͺ…이 κ³ μŠ€ν†±Β·ν¬μ»€Β·ν›ŒλΌλ₯Ό ν•  λ•Œ,
λˆ„κ°€ λˆ„κ΅¬μ—κ²Œ μ–Όλ§ˆλ₯Ό 보내야 ν•˜λŠ”μ§€ 끝날 λ•Œ ν•œ ν™”λ©΄μ—μ„œ μ•Œλ €μ£ΌλŠ” μ›Ήμ•±

"동전은 없어도 계산은 μ •ν™•ν•˜κ²Œ"

μ„€μΉ˜ 없이 링크만 μ—΄λ©΄ λ©λ‹ˆλ‹€ Β· ν°μ—μ„œ "ν™ˆ 화면에 μΆ”κ°€"ν•˜λ©΄ μ•±μ²˜λŸΌ μ”λ‹ˆλ‹€

status players stack storage license


이게 λ­”κ°€μš”

μˆ μžλ¦¬μ—μ„œ κ³ μŠ€ν†± ν•œ 판 끝날 λ•Œλ§ˆλ‹€ λ²Œμ–΄μ§€λŠ” 일:

"μ•Ό μ§€κΈˆ λ‚΄κ°€ μ–Όλ§ˆ μžƒμ—ˆμ§€?"
"μ•„κΉŒ ν”Όλ°• κ·Έκ±° κ³„μ‚°ν–ˆλ‚˜?"
"잠깐만, 그럼 κ²°κ΅­ λˆ„κ°€ λˆ„κ΅¬ν•œν…Œ λ³΄λ‚΄λŠ” κ±°μ•Ό?"

νŒλˆμ •μ‚°μ€ 이걸 λŒ€μ‹ ν•΄ μ€λ‹ˆλ‹€. ν•œ 판 끝날 λ•Œλ§ˆλ‹€ λˆ„κ°€ λ‚¬λŠ”μ§€ + λͺ‡ 점인지 두 번만 νƒ­ν•˜λ©΄ μž”μ•‘μ΄ μ‹€μ‹œκ°„μœΌλ‘œ κ΅΄λŸ¬κ°€κ³ , 자리λ₯Ό νŒŒν•  λ•Œ "영희 β†’ 재호 12,400원" 처럼 μ†‘κΈˆ λͺ©λ‘μœΌλ‘œ λ”± λ–¨μ–΄μ§€κ²Œ 정리해 μ€λ‹ˆλ‹€.

μž”μ•‘μ˜ 합은 μ–Έμ œλ‚˜ 0μ΄λ―€λ‘œ, μ†‘κΈˆμ€ 인원 βˆ’ 1 건을 λ„˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 3λͺ…이면 2건, 5λͺ…이면 4κ±΄μž…λ‹ˆλ‹€.


ν˜„μž¬ μƒνƒœ

Important

λ™μž‘ν•©λ‹ˆλ‹€. npx serve public 으둜 λ„μ›Œμ„œ λ°”λ‘œ μΉ  수 있고, ν…ŒμŠ€νŠΈ 108κ°œκ°€ ν†΅κ³Όν•©λ‹ˆλ‹€ (npm test). λ¬Έμ„œλŠ” 두 편이고 역할이 λ‹€λ¦…λ‹ˆλ‹€.

  • SPEC.md β€” 무엇을 λ§Œλ“œλŠ”κ°€. 데이터 λͺ¨λΈΒ·κ³„μ‚° 곡식·화면 λͺ…μ„ΈΒ·κ²€μ¦λœ ν…ŒμŠ€νŠΈ κΈ°λŒ€κ°’
  • μ„€κ³„μ„œ β€” μ–΄λ–€ ꡬ쑰둜 λ§Œλ“€κ³  어디에 μ˜¬λ¦¬λŠ”κ°€. μ›Ήμ•± λŒ€ λ„€μ΄ν‹°λΈŒ μ•±, λͺ¨λ“ˆ 경계, μ €μž₯ 방식, Cloudflare 배포 ν˜•μƒ
  • docs/design/ β€” μ–΄λ–»κ²Œ λ³΄μ΄λŠ”κ°€. ν™”λ©΄ μ‹œμ•ˆκ³Ό λ””μžμΈ μ‹œμŠ€ν…œ (.dc.html)

λͺ…μ„Έ 11μž₯의 κΈ°λŒ€κ°’ ν‘œλŠ” κ·ΈλŒ€λ‘œ ν…ŒμŠ€νŠΈκ°€ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ β€” 계산을 κ³ μΉ  λ•Œ μ—¬κΈ°λΆ€ν„° λ³΄μ„Έμš”.

단계 μƒνƒœ
섀계 λͺ…μ„Έ (SPEC.md) βœ…
μ•„ν‚€ν…μ²˜Β·λ°°ν¬ μ„€κ³„μ„œ βœ…
μ •μ‚° μ•Œκ³ λ¦¬μ¦˜ settle.js + ν…ŒμŠ€νŠΈ βœ…
κ²Œμž„λ³„ 계산 rules.js + ν…ŒμŠ€νŠΈ βœ…
μ €μž₯/볡원 store.js βœ…
κ³ μŠ€ν†± μž…λ ₯ ν™”λ©΄ βœ…
μ •μ‚° ν™”λ©΄ Β· 곡유 ν…μŠ€νŠΈ βœ…
포컀 Β· ν›ŒλΌ ν™”λ©΄ βœ…
SVG λˆ„μ  κ·Έλž˜ν”„ Β· 톡계 βœ…
λ£° μ„€μ • ν™”λ©΄ βœ…
PWA (ν™ˆν™”λ©΄ μΆ”κ°€ / μ˜€ν”„λΌμΈ) βœ…
μ‹€μ œ ν°μ—μ„œ 확인 ⏳

해보기

pandon.blackpet.workers.dev λ₯Ό μ—΄λ©΄ λ°”λ‘œ μΉ  수 μžˆμŠ΅λ‹ˆλ‹€. 직접 돌리렀면:

npx serve public      # μ—΄μ–΄μ„œ λ°”λ‘œ 치기 (λΉŒλ“œ μ—†μŒ)
npm test              # 계산·저μž₯Β·κ·Έλž˜ν”„ 108개
npx wrangler deploy   # Cloudflare 배포. --env 없이 ν•œ 쀄

ν•œ νŒμ€ λˆ„κ°€ 났어? β†’ λͺ‡ 점? β†’ 확인 μ„Έ λ²ˆμž…λ‹ˆλ‹€. ν”Όλ°•Β·κ³ λ°• 같은 배수 칩은 μ „λΆ€ κΊΌμ§„ μ±„λ‘œ μ‹œμž‘ν•˜κ³ , 해당될 λ•Œλ§Œ λˆ„λ¦…λ‹ˆλ‹€.


섀계 원칙

이 ν”„λ‘œμ νŠΈμ—μ„œ νƒ€ν˜‘ν•˜μ§€ μ•ŠλŠ” κ²ƒλ“€μž…λ‹ˆλ‹€.

1. μž…λ ₯이 μ‰¬μš΄ 게 μ΅œμš°μ„ 

ν‰λ²”ν•œ ν•œ νŒμ€ 승자 νƒ­ β†’ 점수 νƒ­ β†’ 확인 μ„Έ 번으둜 λλ‚©λ‹ˆλ‹€. ν”Όλ°•Β·κ΄‘λ°•Β·κ³ λ°• 같은 배수 칩은 기본이 μ „λΆ€ κΊΌμ Έ 있고, 해당될 λ•Œλ§Œ λˆ„λ¦…λ‹ˆλ‹€. μƒˆ κΈ°λŠ₯이 νƒ­ 수λ₯Ό λŠ˜λ¦°λ‹€λ©΄ κΈ°λŠ₯을 λ„£λŠ” λŒ€μ‹  기본값을 λ‹€μ‹œ μ„€κ³„ν•©λ‹ˆλ‹€.

2. μ–΄λ‘μš΄ λ°©μ—μ„œ 보인닀

밀에 술 λ§ˆμ‹œλ©° λ³Έλ‹€λŠ” μ „μ œλΌ 닀크 ν…Œλ§ˆ κ³ μ •μž…λ‹ˆλ‹€. ν„°μΉ˜ νƒ€κ²Ÿμ€ μ΅œμ†Œ 56px, κΈˆμ•‘μ€ tabular-nums 둜 자릿수λ₯Ό κ³ μ •ν•΄μ„œ μˆ«μžκ°€ 갱신될 λ•Œ λ ˆμ΄μ•„μ›ƒμ΄ 흔듀리지 μ•ŠμŠ΅λ‹ˆλ‹€.

3. 룰은 ν•˜λ“œμ½”λ”©ν•˜μ§€ μ•ŠλŠ”λ‹€

κ³ μŠ€ν†±κ³Ό ν›ŒλΌλŠ” λͺ¨μž„λ§ˆλ‹€ 룰이 λ‹€λ¦…λ‹ˆλ‹€. ν”Όλ°• 배수, 3κ³ λΆ€ν„° 2λ°°, 점수 μƒν•œ, 독박 처리 λ°©μ‹κΉŒμ§€ μ „λΆ€ μ„€μ •μœΌλ‘œ λΉ μ Έ μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  κΈ°λ³Έκ°’λ§ŒμœΌλ‘œλ„ λ°”λ‘œ μ‹œμž‘ν•  수 있게 μ„€μ • 화면은 μ ‘ν˜€ μžˆμŠ΅λ‹ˆλ‹€. "판돈 계산은 정확성보닀 ν•©μ˜ κ°€λŠ₯성이 μ€‘μš”ν•˜λ‹€"λŠ” μ „μ œμž…λ‹ˆλ‹€.

4. 계산 κ²°κ³Όλ₯Ό λΌμš΄λ“œμ— λ°•μ•„ λ‘”λ‹€ β˜…

각 λΌμš΄λ“œλŠ” κ³„μ‚°λœ κΈˆμ•‘ λ³€ν™”λŸ‰(deltas)을 자기 μ•ˆμ— μΊμ‹œλ‘œ λ“€κ³  μžˆμŠ΅λ‹ˆλ‹€. μž”μ•‘μ€ λΌμš΄λ“œλ₯Ό 맀번 μ ‘μ–΄μ„œ κ΅¬ν•˜κ³ , λ”°λ‘œ μ €μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

export function balances(rounds, n) {
  const b = new Array(n).fill(0);
  for (const r of rounds) r.deltas.forEach((v, i) => (b[i] += v));
  return b;
}

덕뢄에 μ„Έ κ°€μ§€κ°€ 곡짜둜 λ”°λΌμ˜΅λ‹ˆλ‹€.

  • λ‚˜μ€‘μ— λ£° 섀정을 바꿔도 이미 λλ‚œ 판의 κΈˆμ•‘μ΄ 흔듀리지 μ•ŠλŠ”λ‹€
  • μž”μ•‘μ΄ 별도 μƒνƒœκ°€ μ•„λ‹ˆλ―€λ‘œ μƒνƒœ λΆˆμΌμΉ˜κ°€ μ›μ²œ λ΄‰μ‡„λœλ‹€
  • μ‹€ν–‰μ·¨μ†Œκ°€ rounds.pop() ν•œ μ€„λ‘œ λλ‚œλ‹€

5. 인원은 2~5λͺ…, 어디에도 3을 λ°•μ§€ μ•ŠλŠ”λ‹€

기본은 3λͺ…μ΄μ§€λ§Œ λ‘˜μ΄ 맞고λ₯Ό 쳐도, 닀섯이 λ‘˜λŸ¬μ•‰μ•„λ„ λ©λ‹ˆλ‹€. 계산 μ½”λ“œλŠ” 인원을 인자둜 λ°›κ³ , balances(rounds, n) 의 n μ—λŠ” 기본값을 두지 μ•ŠμŠ΅λ‹ˆλ‹€ β€” λΉ λœ¨λ Έμ„ λ•Œ 쑰용히 3인으둜 λ„λŠ” 것보닀 κ·Έ μžλ¦¬μ—μ„œ ν„°μ§€λŠ” 편이 λ‚«κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

κ³ μŠ€ν†±μ€ 4인뢀터 ν•œ λͺ…이 광을 νŒ”κ³  μ‰¬λ―€λ‘œ, λΌμš΄λ“œμ— sitout 을 λ‘¬μ„œ κ·Έ μ‚¬λžŒμ„ 0원 μ²˜λ¦¬ν•©λ‹ˆλ‹€. 기본은 전원 참여라 ν‰λ²”ν•œ 판의 νƒ­ μˆ˜λŠ” 인원이 λͺ‡μ΄λ“  κ·ΈλŒ€λ‘œμž…λ‹ˆλ‹€.

6. λΆˆλ³€μ‹μ€ μ½”λ“œκ°€ 지킨닀

λͺ¨λ“  λΌμš΄λ“œμ˜ deltas 합은 λ°˜λ“œμ‹œ 0이고, κΈΈμ΄λŠ” 인원과 κ°™λ‹€.

계산 ν•¨μˆ˜λŠ” λ°˜ν™˜ 직전에 이걸 κ²€μ‚¬ν•˜κ³ , μ–΄κΈ‹λ‚˜λ©΄ μ €μž₯ν•˜μ§€ μ•Šκ³  μ—λŸ¬λ₯Ό λ˜μ§‘λ‹ˆλ‹€. λͺ¨λ“  κΈˆμ•‘μ€ μ •μˆ˜(원 λ‹¨μœ„) 둜만 λ‹€λ£Ήλ‹ˆλ‹€ β€” λΆ€λ™μ†Œμˆ˜μ  κΈˆμ§€.


기술 μŠ€νƒ

μ˜λ„μ μœΌλ‘œ 아무것도 μ•ˆ μ”λ‹ˆλ‹€.

ν•­λͺ© κ²°μ • 이유
ν”„λ ˆμž„μ›Œν¬ μ—†μŒ (Vanilla JS + ES Modules) ν™”λ©΄ 5개짜리 앱에 λŸ°νƒ€μž„μ΄ ν•„μš” μ—†λ‹€
λΉŒλ“œ μ—†μŒ npx serve 둜 λ°”λ‘œ 뜨고, 정적 ν˜ΈμŠ€νŒ…μ— κ·ΈλŒ€λ‘œ μ˜¬λΌκ°„λ‹€
μƒνƒœ μ €μž₯ localStorage μ„œλ²„Β·λ‘œκ·ΈμΈΒ·κ³„μ • μ „λΆ€ μ—†μŒ
κ·Έλž˜ν”„ 인라인 SVG 직접 꺾은선 λͺ‡ κ°œμ— 차트 라이브러리 200KBλŠ” κ³Όν•˜λ‹€
ν…ŒμŠ€νŠΈ node --test 계산·저μž₯Β·κ·Έλž˜ν”„ 108개. DOM ν…ŒμŠ€νŠΈλŠ” μ—†κ³  화면은 눈으둜 λ³Έλ‹€
κΈ€κΌ΄ ν‘œμ œλ§Œ μ›Ήν°νŠΈ 본문은 μ‹œμŠ€ν…œ ν•œκΈ€ β€” μ˜€ν”„λΌμΈμ—μ„œ λ¨Όμ € λ– μ•Ό ν•œλ‹€
PWA manifest.json + sw.js ν™ˆν™”λ©΄ μΆ”κ°€ Β· μ˜€ν”„λΌμΈ λ™μž‘
배포 Cloudflare Workers 정적 μžμ‚° wrangler deploy ν•œ 쀄. Worker μ½”λ“œλŠ” ν•œ 쀄도 μ—†λ‹€

ꡬ쑰

pandon-settle/
β”œβ”€β”€ SPEC.md                   ← κΈ°λŠ₯ λͺ…μ„Έ
β”œβ”€β”€ docs/superpowers/specs/   ← μ•„ν‚€ν…μ²˜Β·λ°°ν¬ μ„€κ³„μ„œ
β”œβ”€β”€ docs/design/              ← ν™”λ©΄ μ‹œμ•ˆΒ·λ””μžμΈ μ‹œμŠ€ν…œ (.dc.html)
β”œβ”€β”€ wrangler.jsonc            ← Cloudflare 배포 ν˜•μƒ
β”œβ”€β”€ public/                   ← 이 ν΄λ”λ§Œ λ°°ν¬λœλ‹€ (전체 120KB)
β”‚   β”œβ”€β”€ index.html
β”‚   β”œβ”€β”€ styles.css            ← 토큰과 μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ manifest.json
β”‚   β”œβ”€β”€ sw.js                 ← μ˜€ν”„λΌμΈ. 앱은 network-first, 글꼴은 cache-first
β”‚   β”œβ”€β”€ icon.svg Β· icon-{180,192,512,maskable}.png
β”‚   └── src/
β”‚       β”œβ”€β”€ rules.js          ← κ²Œμž„λ³„ μ μˆ˜β†’κΈˆμ•‘ (순수 ν•¨μˆ˜)
β”‚       β”œβ”€β”€ settle.js         ← μ†‘κΈˆ μ •μ‚° (순수 ν•¨μˆ˜)
β”‚       β”œβ”€β”€ store.js          ← μƒνƒœ + localStorage. μ €μž₯μ†Œλ₯Ό μ£Όμž…λ°›λŠ”λ‹€
β”‚       β”œβ”€β”€ chart.js          ← SVG λˆ„μ  κ·Έλž˜ν”„ (순수 ν•¨μˆ˜)
β”‚       └── ui.js             ← ν™”λ©΄ λ Œλ”λ§ Β· 이벀트
└── test/                     ← λ°°ν¬λ˜μ§€ μ•ŠμŒ
    β”œβ”€β”€ helpers.js            ← λͺ¨λ“  μΌ€μ΄μŠ€μ— κ±Έλ¦¬λŠ” 곡톡 λΆˆλ³€μ‹
    β”œβ”€β”€ settle.test.js Β· rules.test.js Β· store.test.js Β· chart.test.js

rules.js Β· settle.js Β· chart.js λŠ” DOM을 μ ˆλŒ€ μ°Έμ‘°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 순수 ν•¨μˆ˜λ§Œ export ν•©λ‹ˆλ‹€. store.js λŠ” μ €μž₯μ†Œλ₯Ό 인자둜 λ°›μœΌλ―€λ‘œ(createStore({ storage })) λΈŒλΌμš°μ € 없이도 μ €μž₯ μ‹€νŒ¨Β·λ°μ΄ν„° 손상 같은 경둜λ₯Ό ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.


μ§€μ›ν•˜λŠ” κ²Œμž„

🎴 κ³ μŠ€ν†±β™ οΈ ν¬μ»€πŸƒ ν›ŒλΌ

μŠΉμžκ°€ λ‚˜λ¨Έμ§€ μ°Έμ—¬μž κ°κ°μ—κ²Œ λ°›λŠ” ꡬ쑰

  • κ³  횟수 (3κ³ λΆ€ν„° 2λ°°μ”©)
  • 흔듀기 배수
  • νŒ¨μžλ³„ ν”Όλ°• Β· κ΄‘λ°• Β· 멍박
  • κ³ λ°• (μ™ΈμΉœ μ‚¬λžŒμ΄ μ „λΆ€ 뒀집어씀)
  • 빠짐 (4~5인, κ΄‘ νŒ”κ³  μ‰¬λŠ” μ‚¬λžŒ)
  • 점수 μƒν•œ μ˜΅μ…˜

simple β€” λ”΄ μ‚¬λžŒκ³Ό κΈˆμ•‘λ§Œ λ„£μœΌλ©΄ λ‚˜λ¨Έμ§€κ°€ λ‚˜λˆ μ„œ λΆ€λ‹΄ν•©λ‹ˆλ‹€. λ‚¨λŠ” 1원은 기본적으둜 λ”΄ μ‚¬λžŒμ΄ 덜 λ°›μŠ΅λ‹ˆλ‹€(μ„€μ •μœΌλ‘œ λ°”κΏ€ 수 있음).

detail λͺ¨λ“œ(nβˆ’1λͺ…λ§Œ λ„£κ³  λ‚˜λ¨Έμ§€λŠ” μžλ™ 계산)λŠ” 계산 μ½”λ“œμ— λ“€μ–΄ μžˆμ§€λ§Œ 화면은 아직 μ—†μŠ΅λ‹ˆλ‹€ β€” 포컀λ₯Ό μ‹€μ œλ‘œ μ–΄λ–»κ²Œ μΉ˜λŠ”μ§€ μ •ν•˜κ³  λ§Œλ“­λ‹ˆλ‹€ (SPEC.md 12μž₯ 1번).

νŒ¨μžκ°€ 손에 남은 μΉ΄λ“œ 점수만큼 μ§€λΆˆ

  • μž”μ—¬μ μˆ˜ (A=1, JΒ·QΒ·K=11Β·12Β·13)
  • 독박 Β· μŠ€ν†±λ°•
  • ν›ŒλΌ Β· 7ν¬μΉ΄λ“œ Β· λŒ€λΉ΅/μ†ŒλΉ΅ λ³΄λ„ˆμŠ€

μž”μ—¬μ μˆ˜κ°€ 20~80κΉŒμ§€ λ‚˜μ™€μ„œ 점당 κΈˆμ•‘μ„ κ²Œμž„λ³„λ‘œ λΆ„λ¦¬ν•©λ‹ˆλ‹€ (κΈ°λ³Έ 10원).

계산 μ˜ˆμ‹œ β€” κ³ μŠ€ν†±, 점당 100원

μž¬ν˜Έκ°€ 7점에 2고둜 났고, μ² μˆ˜κ°€ ν”Όλ°•

κ³΅ν†΅μ μˆ˜ = 7점 + 2κ³  = 9점

철수  9 Γ— 2(ν”Όλ°•) Γ— 100 =  1,800원 μ§€λΆˆ
영희  9 Γ—          Γ— 100 =    900원 μ§€λΆˆ
재호                      = +2,700원 νšλ“

β†’ deltas: [+2700, -1800, -900] (합계 0 βœ…)


μ •μ‚° μ•Œκ³ λ¦¬μ¦˜

μž”μ•‘ 합이 0μ΄λ―€λ‘œ 그리디 맀칭은 ν•œ 번 돌 λ•Œλ§ˆλ‹€ μ΅œμ†Œ ν•œ μ‚¬λžŒμ„ μ†Œμ§„μ‹œν‚΅λ‹ˆλ‹€.

export function settle(balances) {
  const plus  = balances.map((v,i)=>({i,v})).filter(x=>x.v>0).sort((a,b)=>b.v-a.v);
  const minus = balances.map((v,i)=>({i,v})).filter(x=>x.v<0).sort((a,b)=>a.v-b.v);
  const out = [];
  let p = 0, m = 0;
  while (p < plus.length && m < minus.length) {
    const amt = Math.min(plus[p].v, -minus[m].v);
    out.push({ from: minus[m].i, to: plus[p].i, amount: amt });
    plus[p].v -= amt;  minus[m].v += amt;
    if (plus[p].v === 0) p++;
    if (minus[m].v === 0) m++;
  }
  return out;   // length <= 인원 - 1
}
μž”μ•‘ κ²°κ³Ό μ†‘κΈˆ
[+400, +1150, -1550] μ˜ν¬β†’μ² μˆ˜ 1,150 / μ˜ν¬β†’μž¬ν˜Έ 400
[+3000, -3000, 0] μ² μˆ˜β†’μž¬ν˜Έ 3,000 (1건)
[+3000, -3000] 2인은 μ–Έμ œλ‚˜ 1건
[+5000, +2000, -1000, -2000, -4000] 5인은 4건 (= μΈμ›βˆ’1)
[0, 0, 0] μ—†μŒ

3λͺ… μ΄ν•˜μ—μ„œλŠ” 이게 κ³§ μ΅œμ†Œ κ±΄μˆ˜μž…λ‹ˆλ‹€. 4λͺ… μ΄μƒμ—μ„œ 더 쀄이렀면 μž”μ•‘μ΄ λ”± λ§žμ•„λ–¨μ–΄μ§€λŠ” 쑰합을 λ’€μ Έμ•Ό ν•˜λŠ”λ°, κ·Έ μ΅œμ ν™”λŠ” ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” "큰 μ‚¬λžŒλΆ€ν„° 큰 μ‚¬λžŒμ—κ²Œ" κ°€ μˆ μžλ¦¬μ—μ„œ μ„€λͺ…ν•˜κΈ° κ°€μž₯ μ‰¬μš΄ μˆœμ„œμ΄κ³ , 이 앱은 정확성보닀 ν•©μ˜ κ°€λŠ₯성을 λ¨Όμ € λ΄…λ‹ˆλ‹€.


κ²°κ³Ό ν™”λ©΄

정산이 λλ‚˜λ©΄ 이런 ν…μŠ€νŠΈλ₯Ό κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ (navigator.share λ˜λŠ” ν΄λ¦½λ³΄λ“œ 볡사).

🎴πŸͺ™ νŒλˆμ •μ‚° Β· 8/24 Β· κ³ μŠ€ν†± 24판

πŸ€‘ 재호  +12,400
😏 철수   +3,100
🫠 영희  -15,500

πŸ’Έ μ •μ‚°
영희 β†’ 재호  12,400원
영희 β†’ 철수   3,100원

μž”μ•‘μ— 따라 이λͺ¨μ§€κ°€ μžλ™μœΌλ‘œ λΆ™μŠ΅λ‹ˆλ‹€ β€” 1λ“± πŸ€‘ / μ†Œν­ 이득 😏 / λ³Έμ „ 😐 / μ†Œν­ 손싀 πŸ˜₯ / 꼴찌 🫠 μ—λŠ” πŸ‘‘ 였늘의 호ꡬ 왕관이 μ”Œμ›Œμ§‘λ‹ˆλ‹€. 직전 νŒμ—μ„œ 배수λ₯Ό λ§žμ•˜μœΌλ©΄ πŸ’€ κ°€ λ”°λΌλΆ™μŠ΅λ‹ˆλ‹€.

여기에 μ‚¬λžŒλ§ˆλ‹€ ν•œ 쀄씩 κ·Έλ €μ§€λŠ” SVG λˆ„μ  κ·Έλž˜ν”„μ™€ 졜고 ν•œ 판 / 승λ₯  / ν”Όλ°• μ΅œλ‹€ 같은 였늘의 기둝이 ν•¨κ»˜ λ‚˜μ˜΅λ‹ˆλ‹€.


아직 μ•ˆ μ •ν•œ 것

쳐보고 μ •ν•˜λ €κ³  μΌλΆ€λŸ¬ 남겨 λ‘” κ²ƒλ“€μž…λ‹ˆλ‹€. μžμ„Έν•œ 배경은 SPEC.md 12μž₯에 μžˆμŠ΅λ‹ˆλ‹€.

  • 포컀λ₯Ό μ‹€μ œλ‘œ μ–΄λ–»κ²Œ μΉ˜λŠ”κ°€. 칩을 μ“΄λ‹€λ©΄ νŒλ§ˆλ‹€ 넣을 게 μ•„λ‹ˆλΌ "끝날 λ•Œ μ΅œμ’… μΉ© 개수만"이 μ••λ„μ μœΌλ‘œ νŽΈν•˜κ³ , 그러면 포컀 화면이 μ™„μ „νžˆ λ‹¬λΌμ§‘λ‹ˆλ‹€. κ·Έλ•ŒκΉŒμ§€ simple λͺ¨λ“œλ§Œ μ”λ‹ˆλ‹€.
  • 고박일 λ•Œ 개인 배수. μ§€κΈˆμ€ κ³ λ°•μž 본인 배수만 μ μš©ν•©λ‹ˆλ‹€.
  • 5인 κ³ μŠ€ν†±μ„ 정말 κ·Έλ ‡κ²Œ μΉ˜λŠ”κ°€. 전톡 룰이라면 4인뢀터 ν•œ λͺ…이 광을 νŒ”κ³  μ‰¬λ―€λ‘œ 5인은 두 λͺ…이 μ‰¬λŠ” μ…ˆμž…λ‹ˆλ‹€. sitout 이 μ—¬λŸ¬ λͺ…을 λ°›κΈ΄ ν•˜μ§€λ§Œ ν™•μΈλœ λ°”λŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • 판 도쀑 인원 λ³€κ²½. 늦게 온 μΉœκ΅¬κ°€ λΌλŠ” 경우. μ§€κΈˆμ€ 판이 μ‹œμž‘λ˜λ©΄ 인원 κ³ μ •μž…λ‹ˆλ‹€.

남은 일

μ‹€μ œ ν°μ—μ„œ 확인 β€” ν™ˆ 화면에 μΆ”κ°€ β†’ λΉ„ν–‰κΈ° λͺ¨λ“œ β†’ λœ¨λŠ”κ°€. λ°μŠ€ν¬ν†± λΈŒλΌμš°μ €μ—μ„œλŠ” μ„œλ²„λ₯Ό λ‚΄λ¦° μ±„λ‘œ λœ¨λŠ” κ²ƒκΉŒμ§€ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.


ν•˜μ§€ 말 것

λͺ…μ„Έ 13μž₯에 λͺ» λ°•μ•„ λ‘” κΈˆμ§€ μ‚¬ν•­μž…λ‹ˆλ‹€.

  • ❌ μ„œλ²„ Β· 둜그인 Β· νšŒμ›κ°€μž… β€” 이 μ•±μ˜ 쑴재 μ΄μœ κ°€ μ‚¬λΌμ§‘λ‹ˆλ‹€
  • ❌ 차트 라이브러리 λ„μž… β€” 꺾은선 λͺ‡ κ°œμ— λ²ˆλ“€ 200KBλŠ” κ³Όν•©λ‹ˆλ‹€
  • ❌ 계산 κ²°κ³Όλ₯Ό μž”μ•‘ λ³€μˆ˜μ— λˆ„μ  μ €μž₯ β€” λ°˜λ“œμ‹œ rounds μ—μ„œ 맀번 κ³„μ‚°ν•©λ‹ˆλ‹€
  • ❌ 배수 κ·œμΉ™ ν•˜λ“œμ½”λ”© β€” μ „λΆ€ rules 섀정을 거쳐야 ν•©λ‹ˆλ‹€
  • ❌ μž…λ ₯ 단계 μΆ”κ°€ β€” μƒˆ κΈ°λŠ₯이 νƒ­ 수λ₯Ό λŠ˜λ¦°λ‹€λ©΄ 기본값을 λ‹€μ‹œ μ„€κ³„ν•©λ‹ˆλ‹€
  • ❌ 계산 μ½”λ“œμ— 인원 μƒμˆ˜ 3 β€” 인원은 μ–Έμ œλ‚˜ players.length μ—μ„œ 흘러 λ“€μ–΄μ˜΅λ‹ˆλ‹€

λΌμ΄μ„ μŠ€

MIT

About

🎴πŸͺ™ 친ꡬ 3λͺ…이 κ³ μŠ€ν†±Β·ν¬μ»€Β·ν›ŒλΌ μΉ  λ•Œ λˆ„κ°€ λˆ„κ΅¬μ—κ²Œ μ–Όλ§ˆλ₯Ό 보낼지 μ •μ‚°ν•΄μ£ΌλŠ” μ›Ήμ•± β€” λΉŒλ“œ μ—†μŒ, μ„œλ²„ μ—†μŒ, Vanilla JS

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages