Published
Edited
Oct 2, 2019
1 fork
1 star
Insert cell
Insert cell
sample[4]
Insert cell
Insert cell
get$(`${sample[4]}/api/deck/new/shuffle/`)
.pluck('deck_id')
.flatMap(deck_id => obs.interval(100).take(52)
.flatMap( x => get$(`${sample[4]}/api/deck/${deck_id}/draw/`))
.pluck('cards')
.pluck('0')
.filter(card => !isNaN(card.value)))
.groupBy(card => card.suit.match(/SPADES|CLUBS/) ? "black" : "red")
.map(stream => stream.shareReplay())
.do(stream => stream.subscribe())
.concatAll()
.pluck('image')
.map(src => html`<img width=80 src=${src}>`)
.scan( (acc,image) => (acc.appendChild(image), acc), html`<div>`)
.value()
Insert cell
Insert cell
get$(`${sample[4]}/api/deck/new/shuffle/`)
.pluck('deck_id')
.flatMap( deck_id => obs.range(1,52)
.flatMap( x => get$(`${sample[4]}/api/deck/${deck_id}/draw/`), 5)
.pluck('cards')
.pluck('0')
.filter( card => !isNaN(card.value) )
.bufferCount(3)
.scan((acc, cards) => ({ n: acc.n+1, cards }), {n: 1} )
.groupBy(s => s.n % 2 + 1)
.take(2)
.map(stream => stream
.flatMap(s => obs.from(s.cards))
.flatMap(card =>
get$(`${sample[4]}/api/deck/${deck_id}/pile/${stream.key}/add/?cards=${card.code}`)
.map(x => card))
.pluck('image')
.map(src => html`<img width=80 src=${src}>`)
.scan((acc,image) => (acc.appendChild(image), acc), html`<div>Player ${stream.key}<br>`))
.map(stream => stream.shareReplay())
.do(stream => stream.subscribe())
.combineAll((x,y) => html`<div>${x}${y}`)
.finally(x => currentDeck.next(deck_id)))
.value()
Insert cell
// just to keep track of the piles we just prepared
currentDeck = new rx.BehaviorSubject()
Insert cell
currentDeck.values()
Insert cell
Insert cell
currentDeck.flatMap(deck_id => obs
.of(1,2)
.map(player => get$(`${sample[4]}/api/deck/${deck_id}/pile/${player}/list/`)
.pluck('piles')
.pluck(player)
.flatMap(pile => pile.cards)
.pluck('value')
.map(Number)).retry()
.zipAll(battle)
.filter(result => result.winner > 0)
.groupBy(result => result.winner)
.flatMap(results => results.pluck('value').sum() ))
.pairwise()
.map(pair => html`Player 1: ${pair[0]} <br> Player 2: ${pair[1]}`)
.value()
Insert cell
battle = (x,y) => x > y ? { winner: 1, value: x+y } : y > x ? { winner: 2, value: x+y } : {winner: 0 }
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more