본문으로 건너뛰기

시안 페이지예요. 이벤트, 이름, 난수는 모두 예시예요.

단계
참가자
당첨자

Aperture Pro 경품 추첨: 프로모션 코드 5개

Tickmark · 경품 추첨

Reddit 스레드 참가자 중 5명이 손목 위의 카메라 렌즈, Aperture Pro의 Google Play 코드를 받아요. 공개된 난수가 당첨자를 골랐기 때문에 저희가 고를 수 없었고, 누구나 결과를 확인할 수 있어요.

drand 34,444,612 라운드로 추첨: 99명 중 5명 당첨

부품이나 아래 단계를 누르면 안을 볼 수 있어요. 드래그로 이동, 핀치나 Ctrl+스크롤로 확대.

모든 단계가 공개돼요

기계가 추첨 과정을 그대로 보여 줘요. 단계마다 입력을 읽을 수 있고, 결과는 이 페이지에서 직접 다시 계산할 수 있어요.

난수가 생기기 전에 명단을 잠그기 때문에, 둘 중 어느 쪽도 다른 쪽에 맞춰 바꿀 수 없어요.

당첨자

점수가 작은 순서예요. 당첨자가 7일 안에 답하지 않으면 코드는 다음 예비 당첨자에게 가요.

  1. 1u/wristcheckwed점수 017dc6cb8af0b2fc34…코드 보냄
  2. 2u/frost_lume51점수 03a8fabd9a1c6db0e0…코드 보냄
  3. 3u/hazel_orbit61점수 042cc563d7a2956ad2…코드 보냄
  4. 4u/brightsundial점수 043e8bce8b23d72a3b…코드 보냄
  5. 5u/brisk_glow17점수 0523e797c70e6ed2ce…답장 기다리는 중
예비 당첨자6u/pixel_strap297u/lunar_glow8u/onyx_dial60

직접 확인하기

브라우저 안에서 돌아가요. 명단과 drand 라운드 페이지의 서명을 붙여 넣으면 같은 당첨자가 나와요.

Node로 같은 확인하기 (패키지 없음)

// node draw.mjs <signature or randomness> <winners> < entrants.txt
import { createHash } from "node:crypto";
import { readFileSync } from "node:fs";
const [v, n] = [process.argv[2].trim().toLowerCase(), Number(process.argv[3])];
const sha = (s) => createHash("sha256").update(s).digest("hex");
// a 96-hex quicknet signature: the randomness is SHA-256 of its bytes
const r = v.length === 96 ? createHash("sha256").update(Buffer.from(v, "hex")).digest("hex") : v;
const names = [...new Set(readFileSync(0, "utf8").split(/\r?\n/)
  .map((s) => s.trim().toLowerCase()).filter(Boolean))].sort();
console.log("list", sha(names.join("\n")));
names.map((u) => [sha(`${r}:${u}`), u]).sort()
  .forEach(([h, u], i) => console.log(i + 1, i < n ? "WIN" : "   ", u, h));

규칙

  • 참가 방법: 마감 전에 Reddit 스레드에 댓글을 남기면 돼요(다른 댓글에 단 답글은 제외). 따로 살 필요는 없어요.
  • 계정당 한 번만 참가할 수 있어요. 마감 시각 기준으로 만든 지 30일이 안 된 계정과, 마감 전에 지운 댓글은 명단에 들어가지 않아요.
  • 리뷰는 필요 없어요. Google Play에서 앱을 평가하거나 리뷰를 써도 당첨 확률은 바뀌지 않고, 저희도 요청하지 않아요.
  • 경품: Aperture Pro(Wear OS 5 이상 워치페이스) Google Play 프로모션 코드 1개를 Reddit 메시지로 보내 드려요.
  • 당첨자는 7일 안에 답해 주세요. 그 뒤에는 코드가 다음 예비 당첨자에게 가요.