38 lines
615 B
Go
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{}
|
|
}
|