lc-go/solutions/11/q1117/solution.go
2026-02-01 14:56:08 +09:00

38 lines
615 B
Go

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{}
}