Hacker News
Show HN: Brain Frog – Can you be random enough for 11 lines of JavaScript?
47 points by AlexanderZ
ago
|
31 comments
hash0
|next
[-]
I got 50 hits in 100 tries. That being said, I did not particularly like hitting that poor frog :'( Yes, I am the kind of player who would never choose the rude option when talking to an NPC.
escanor
|next
|previous
[-]
pure random player:
(async function(punch, delay) {
async function sleep(ms) {
return new Promise((resolve, _) => {
setTimeout(resolve, ms)
})
}
for (let i = 0; i < 100; i++) {
punch(['L', 'R'][(Math.random() * 2) | 0])
await sleep(delay)
}
})(punch, 150)
"cheating" player: (async function(oracle, punch, delay) {
async function sleep(ms) {
return new Promise((resolve, _) => {
setTimeout(resolve, ms)
})
}
for (let i = 0; i < 100; i++) {
punch((i + 1) < oracle.minForPrediction ? ['L', 'R'][(Math.random() * 2) | 0] : oracle.predictNextPunch() === 'L' ? 'R' : 'L')
await sleep(delay)
}
})(oracle, punch, 150)
is it possible to do any better? i haven't fully read frog/oracle code
emrtnn
|root
|parent
|next
[-]
Less fancy hack here, intercept the prediction function on every punch and force the frog to take the opposite side.
const realPunch = punch;
punch = function(myMove) {
oracle.predictNextPunch = function() {
return myMove === 'L' ? 'R' : 'L';
};
realPunch(myMove);
};
escanor
|root
|parent
|previous
[-]
it is:
(async function(oracle, punch, delay) {
async function sleep(ms) {
return new Promise((resolve, _) => {
setTimeout(resolve, ms)
})
}
for (let i = 0; i < 100; i++) {
const state = oracle._state
const block = oracle.predictNextPunch()
oracle._state = state
punch(block === 'L' ? 'R' : 'L')
await sleep(delay)
}
})(oracle, punch, 150)
mike_hock
|next
|previous
[-]
You should make one where you can play against the branch predictors of various processors.
user-
|next
|previous
[-]
I am briefly in the top ten after completely misunderstanding the rules nicee
IdiotSavage
|next
|previous
[-]
If you want to see what a random distribution looks like:
jot -r 100 0 1 | rs -t 10
I noticed my "fake randomness" is lacking long sequences of the same key. I feel like I'm "predictable" when I press the same key 5 times in a row, yet that happens a lot in a truly random distribution.
jmpavlec
|next
|previous
[-]
Looks like the leaderboard was hacked unfortunately. Fun little concept.
ozyschmozy
|next
|previous
[-]
Why does a silly little online game need my email to send a one-time login code? What a strange experience
AlexanderZ
|root
|parent
[-]
because it doesn't? practice mode requires no login. if you want to play a ranked match then you'll need an account, how else could it work?