Skip to content

Instantly share code, notes, and snippets.

View vimiomori's full-sized avatar
🏠
Working from home

Vi Mio vimiomori

🏠
Working from home
  • 23:23 (UTC -12:00)
View GitHub Profile
# https://medium.com/@vivian.muchen/implementing-your-own-time-based-otp-generator-3b971a31330b
import hmac
import base64
counter = 0
secret = base64.b32encode(b"password")
interface Item {
use()
}
class Pokeball implements Item { // low-level classes depend on abstractions
use()
}
class Medicine implements Item {
use()
class Pokeball { // low-level class
use()
}
class Trainer { // high-level class
usePokeball(pokeball: Pokeball) { // dependency on lower level class
pokeball.use()
}
}
interface Trainer {
choosePokemon(p: Pokemon)
}
interface SkilledTrainer extends Trainer {
switchPokemon(p: Pokemon)
}
class AceTrainer implements SkilledTrainer {
choosePokemon(p) {}
interface Trainer {
choosePokemon(p: Pokemon)
switchPokemon(p: Pokemon)
}
class AceTrainer implements Trainer {
choosePokemon(p) {}
switchPokemon(p) {}
}
class Pokemon {}
class EvolvablePokemon extends Pokemon {
evolve()
}
class Ditto extends Pokemon {}
class Blastoise extends EvolvablePokemon {}
class Pokemon {
evolve()
}
class Ditto extends Pokemon {}
class PokemonType {
name string
strongAgainstList Array<string>
getName(): string {
return this.name
}
getStrongAgainstList(): Array<string> {
return this.strongAgainstList
}
class Pokemon {
getType()
beats(enemyPokemon: Pokemon) {
if (this.getType() == "Fighting" && enemyPokemon.getType() == "Normal") {
return true
} else {
return false
}
}
}
class Pokemon {
getName()
getGeneration()
getEvolutions()
}
class PokemonProfile {
print(pokemon: Pokemon)
}