Problem p00642 - Generation 3

Orig Description

Problem F: Ben Toh
As usual, those who called wolves get together on 8 p.m. at the supermarket. The thing they want is only one, a box lunch that is labeled half price. Scrambling for a few discounted box lunch, they fiercely fight every day. And those who are blessed by hunger and appetite the best can acquire the box lunch, while others have to have cup ramen or something with tear in their eyes.
A senior high school student, Sato, is one of wolves. A dormitry he lives doesn't serve a dinner, and his parents don't send so much money. Therefore he absolutely acquire the half-priced box lunch and save his money. Otherwise he have to give up comic books and video games, or begin part-time job.
Since Sato is an excellent wolf, he can acquire the discounted box lunch in 100% probability on the first day. But on the next day, many other wolves cooperate to block him and the probability to get a box lunch will be 50%. Even though he can get, the probability to get will be 25% on the next day of the day. Likewise, if he gets a box lunch on a certain day, the probability to get on the next day will be half. Once he failed to get a box lunch, probability to get would be back to 100%.
He continue to go to supermaket and try to get the discounted box lunch for n days. Please write a program to computes the expected value of the number of the discounted box lunches he can acquire.
Input
Input consists of several datasets.
Input for a single dataset is given as a single integer n.
Input terminates with a dataset where n = 0.
Output
For each dataset, write a line that contains an expected value. You may print any number of digits after the decimal point. Answers that have an error less than 1.0e-2 will be accepted.
Constraints
1 ≤ n ≤ 100,000
Sample Input
1
2
3
0
Output for the Sample Input
1.00000000
1.50000000
2.12500000

Extracted Specification

Canonicalized Input Description: 

An integer n (1 ≤ n ≤ 100,000). Input terminates with a dataset where n = 0.

### Example Input:

```
1
2
3
0
```

### Function Signature:
Write a function f(inputs) that takes in the input as a list of integers.
```python
def f(inputs: List[int]):
    ''' 
    inputs: a list of integers
    '''
```

Test Case Generator

Sure, let's create a test case generator for the given problem statement "Problem F: Ben Toh".

### Test Case Generator for "Problem F: Ben Toh"

The generator will create random test cases within the constraints provided by the problem statement. Here, we only need to generate one integer `n` for each test case.

```python
import random

def tcgen(num_cases=10):
    # Generating multiple test cases
    test_cases = []
    
    for _ in range(num_cases):
        # Generate a random number of days between 1 and 100000 (inclusive)
        n = random.randint(1, 100000)
        test_cases.append(n)
    
    # Adding the termination case
    test_cases.append(0)
    
    return test_cases

# Example usage:
if __name__ == "__main__":
    cases = tcgen()
    for case in cases:
        print(case)
```

### Explanation

1. **Function Definition**: The `tcgen` function generates a specified number of test cases (`num_cases`). By default, it generates 10 cases.
2. **Random Test Case Generation**: For each test case, it generates a random integer `n` between 1 and 100,000 inclusive.
3. **Termination Case**: After generating the requested number of test cases, it appends the termination case `0` to the list of test cases.
4. **Return Value**: The function returns a list of integers representing the test cases.

### Sample Usage

When you run the provided script, it will print out the generated test cases, including the termination case `0`, which should be the last printed value.

By using this generator, you can easily create a variety of test cases to thoroughly test your solution for the "Problem F: Ben Toh".

Extract Arguments

def extract_arguments(fh):
    inputs = []
    while True:
        n = int(fh.readline().strip())
        if n == 0:
            break
        inputs.append((n,))
    return inputs

# if __name__ == "__main__":
#     input_path = sys.argv[1]
#     with open(input_path, 'r') as fh:
#         arguments = extract_arguments(fh)
#         print(arguments)  # For testing purposes