Algorithm
Problem Name: 1116. Print Zero Even Odd
You have a function printNumber that can be called with an integer parameter and prints it to the console.
- For example, calling
printNumber(7)prints7to the console.
You are given an instance of the class ZeroEvenOdd that has three functions: zero, even, and odd. The same instance of ZeroEvenOdd will be passed to three different threads:
- Thread A: calls
zero()that should only output0's. - Thread B: calls
even()that should only output even numbers. - Thread C: calls
odd()that should only output odd numbers.
Modify the given class to output the series "010203040506..." where the length of the series must be 2n.
Implement the ZeroEvenOdd class:
ZeroEvenOdd(int n)Initializes the object with the numbernthat represents the numbers that should be printed.void zero(printNumber)CallsprintNumberto output one zero.void even(printNumber)CallsprintNumberto output one even number.void odd(printNumber)CallsprintNumberto output one odd number.
Example 1:
Input: n = 2 Output: "0102" Explanation: There are three threads being fired asynchronously. One of them calls zero(), the other calls even(), and the last one calls odd(). "0102" is the correct output.
Example 2:
Input: n = 5 Output: "0102030405"
Constraints:
1 <= n <= 1000
Code Examples
#1 Code Example with Python Programming
Code -
Python Programming
import threading
class ZeroEvenOdd:
def __init__(self, n):
self.n = n
self.z = threading.Semaphore()
self.e = threading.Semaphore()
self.o = threading.Semaphore()
self.e.acquire()
self.o.acquire()
self.cur = 1
# printNumber(x) outputs "x", where x is an integer.
def zero(self, printNumber: 'Callable[[int], None]') -> None:
for _ in range(self.n):
self.z.acquire()
printNumber(0)
if self.cur % 2:
self.o.release()
else:
self.e.release()
def even(self, printNumber: 'Callable[[int], None]') -> None:
for _ in range(self.n // 2):
self.e.acquire()
printNumber(self.cur)
self.cur += 1
self.z.release()
def odd(self, printNumber: 'Callable[[int], None]') -> None:
for _ in range(self.n // 2 + self.n % 2):
self.o.acquire()
printNumber(self.cur)
self.cur += 1
self.z.release()
Copy The Code &
Try With Live Editor
Input
Output