Skip to content

Instantly share code, notes, and snippets.

View MarcoWorms's full-sized avatar
:shipit:
undefined

Marco Guaspari Worms MarcoWorms

:shipit:
undefined
View GitHub Profile
const { head } = require('ramda')
const drawFromTop = draw(head)
const { card, newDeck } = drawFromTop(deck)
const draw = curry((cardPicker, deck) => {
const card = cardPicker(deck)
const newDeck = without(card, deck)
return { card, newDeck }
})
const randomElement = array =>
array[Math.floor(Math.random() * array.length)]
draw(randomElement, deck)
const last = array => array[array.length - 1]
const { card, newDeck } = draw(last, deck)
const head = array => array[0]
const { card, newDeck } = draw(head, deck)
const draw = (cardPicker, deck) => {
// 1. We want to know what card we drew
const card = cardPicker(deck)
// 2. We want the new deck without the drawn card
const newDeck = without(card, deck)
return { card, newDeck }
}
const without = (element, array) => array.filter(e => e !== element)
// Watch out because on this one the "element" is not an array like the Ramda function.
const { without } = require('ramda')
const card = deck[0] // 1. Card
const newDeck = without([card], deck) // 2. Remaining deck
const deck = [
{ name: 'Fireball', damage: 6, cost: 2 },
{ name: 'Thunderstorm', damage: 10, cost: 3 },
{ name: 'Ice Razors', damage: 30, cost: 7 },
]
const thisIsADeck = [
'this is a card',
3464562456, // this is also a card,
{ attack: `i'm a property of a card!` }, // another card
[
`I'm an element inside a card.`,
`I'm not a card because I'm not in the root level`,
`The card in this case is the whole array containing these phrases`,
],
]