Last active
October 25, 2022 13:30
-
-
Save postspectacular/69a969906ba0226e57181bd9c0b0f4d2 to your computer and use it in GitHub Desktop.
NFT giveaway lottery code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { int, parseCSVSimple } from "@thi.ng/csv"; | |
import { readText } from "@thi.ng/file-io"; | |
import { pickRandom } from "@thi.ng/random"; | |
import { split } from "@thi.ng/strings"; | |
import { | |
comp, | |
distinct, | |
mapcat, | |
push, | |
repeat, | |
repeatedly, | |
run, | |
take, | |
trace, | |
transduce, | |
} from "@thi.ng/transducers"; | |
// CSV row format: address,numtokens | |
const addresses = transduce( | |
comp( | |
// parse CSV and coerce 2nd column to number | |
parseCSVSimple({ header: false, cols: [true, int()] }), | |
// repeat each row as many times as stated in 2nd column | |
mapcat(([addr, n]) => repeat(addr, n)) | |
), | |
// collect results as array | |
push(), | |
// pre-split into lines | |
split(readText("owners.csv")) | |
); | |
// pick unique winners | |
run( | |
// composed transducer: | |
comp( | |
// distinct/unique values only | |
distinct(), | |
// max number of results | |
take(32), | |
// side effect: output to console | |
trace() | |
), | |
// an infinite sequence of random samples | |
repeatedly(() => pickRandom(addresses)) | |
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
tz1aJNTKvCH7Rr9CxAJLkrgWfF7qdzvzcN69 | ||
---|---|---|
tz1Mw8qDtpeg2cwSVQDCQhgsXvG4T7NSLkQJ | ||
tz1gsoi2YoqkS7Z4VpBzZuH7tnjKqbDMSX4T | ||
tz1Zn99fL2u22sdioKZs3GbV2YRP12ktsiDE | ||
tz1VQVTRYijbXCZQ9dukcRhHbVFYepKZwhAR | ||
tz1KvLFwVtkMLcnRrtnRof4L8GKkL9LP2wtb | ||
tz1XqvtucEe9kweXdCMohPtr2FqQR6u1Fio1 | ||
tz1MQ4gnVPqFUbUz3emtzW1H58gevX7yAUrw | ||
tz1RRfSJ7m1MVRuPmL4qmXax1tbTkn5hrv6r | ||
tz1fTC3BXuCjQx1AJp6JNSL5GTuQ9yK9Q2df | ||
tz1PVDLTat9RRtfn6BbKxHbKR6RsjBEWL2dp | ||
tz1fQYbiJkwkjdU4PCs1cqefvQpDzC7sfqji | ||
tz1V9sRCDaG3fkEGgTJZKAbCspJGpEQn5hRG | ||
tz1b3aAcEichUhSc7D2AdaLqPmZNNhS4uQoC | ||
tz1cbJ2fHK4Tv7yES7Tq9dc9k8gXArnk7DyE | ||
tz1X4sxpgg5X6aag4Mf1TmdWTrDbx3jBFwyT | ||
tz1YxAN3rn85UQxevF7w78v66xHnSQQByo2j | ||
tz1SbgUQSHEvBkpJPA1z5k9CgJqzm1UTdiWf | ||
tz1cxVU19c4f5nc7uZaiqHjAy4WS1rQjxCMN | ||
tz1a2ZeWmyNQ8BiuFNTE4vmFEP9MBaP76QPX | ||
tz1PbXjffxCtufgUFYmQCRWjiNG3KAT1pzm8 | ||
tz1Uk6Cg2nwRCGaNDC8Lv9FzrCm57GE8dn5U | ||
tz1XjbEZZU13QPWnpPYQvSvf691TDcF7YQx4 | ||
tz1McPoo1KSxYJdAsQ2cTTjocJKus7us1QL4 | ||
tz1Sqhrj49cW9aTuwQrDa4mycnA7n5dDd7rF | ||
tz1XmqF5gnTjgE6Cxu5CzaT5H7vXiFfihe95 | ||
tz1ZR5JKcHzU8Xn5m3w3pMGHiYnHwQNPDkSm | ||
tz1RuGiZ1tEs6oLJrQfwpK3uKahn4oWGVQS9 | ||
tz1aB4WhspBPfLA6X4qSQPZCDKQkmmGobrCk | ||
tz1XRB5ggBLtYak1xHa33zZjWa3HyYGJG7hZ | ||
tz2Rc8qW6rF2tcrrKPzsBq2NJUtYYemaAs6E | ||
tz1aPiMrbcvmHSGKJGoGAB9BNj3MHaoD5n1x |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment