lc-go/solutions/11/q1117/solution.go

39 lines
702 B
Go

// Package q1117 implements a solution for https://leetcode.com/problems/building-h2o/
package q1117
type void struct{}
type H2O struct {
h, o, hRel chan void
}
func NewH2O() *H2O {
h := &H2O{
h: make(chan void, 2),
o: make(chan void, 2),
hRel: make(chan void, 2),
}
h.o <- void{}
return h
}
func (h *H2O) Hydrogen(releaseHydrogen func()) {
<-h.h
// releaseHydrogen() outputs "H". Do not change or remove this line.
releaseHydrogen()
h.hRel <- void{} // confirmation
}
func (h *H2O) Oxygen(releaseOxygen func()) {
<-h.o
// releaseOxygen() outputs "H". Do not change or remove this line.
releaseOxygen()
h.h <- void{}
h.h <- void{}
<-h.hRel
<-h.hRel
h.o <- void{}
}