add new solutions

This commit is contained in:
Yiyang Kang 2026-02-01 14:56:08 +09:00
parent 67cad91898
commit 51975f3386
Signed by: kkyy
SSH key fingerprint: SHA256:lJSbAzC3MvrSORdvIVK6h/3g+rVKJNzM7zq0MgA9WKY
24 changed files with 933 additions and 14 deletions

View file

@ -0,0 +1,53 @@
package q1116
type void struct{}
type ZeroEvenOdd struct {
n int
c0, c1, c2 chan void
}
func NewZeroEvenOdd(n int) *ZeroEvenOdd {
zeo := &ZeroEvenOdd{
n: n,
c0: make(chan void, 1),
c1: make(chan void, 1),
c2: make(chan void, 1),
}
zeo.c0 <- void{}
return zeo
}
func (z *ZeroEvenOdd) Zero(printNumber func(int)) {
for i := range z.n {
<-z.c0
printNumber(0)
if (i+1)%2 == 0 {
z.c2 <- void{}
} else {
z.c1 <- void{}
}
}
}
func (z *ZeroEvenOdd) Even(printNumber func(int)) {
for i := range z.n {
if (i+1)%2 != 0 {
continue
}
<-z.c2
printNumber(i + 1)
z.c0 <- void{}
}
}
func (z *ZeroEvenOdd) Odd(printNumber func(int)) {
for i := range z.n {
if (i+1)%2 == 0 {
continue
}
<-z.c1
printNumber(i + 1)
z.c0 <- void{}
}
}