he-009
1.000
Challenge · difficulty 3/5
# HumanEval/9
Implement a file **`solution.py`** that completes the function below. Keep the given name and signature; your file must define it at module level.
```python
from typing import List, Tuple
def rolling_max(numbers: List[int]) -> List[int]:
""" From a given list of integers, generate a list of rolling maximum element found until given moment
in the sequence.
>>> rolling_max([1, 2, 3, 2, 3, 4, 2])
[1, 2, 3, 3, 3, 4, 4]
"""
```
<!-- imported from OpenAI HumanEval (HumanEval/9) -->
tests/test_he_009.py
# Auto-generated from OpenAI HumanEval HumanEval/9. Do not edit by hand.
from solution import * # noqa: F401,F403 (prompt helpers may be referenced by tests)
from solution import rolling_max as candidate
METADATA = {
'author': 'jt',
'dataset': 'test'
}
def check(candidate):
assert candidate([]) == []
assert candidate([1, 2, 3, 4]) == [1, 2, 3, 4]
assert candidate([4, 3, 2, 1]) == [4, 4, 4, 4]
assert candidate([3, 2, 3, 100, 3]) == [3, 3, 3, 100, 100]
def test_he_009():
check(candidate)
System prompt
You are an expert programmer. Solve the task exactly as specified. Output your solution as fenced code blocks using the required file name(s) and the exact function/type signatures requested. Prefer correctness; do not include prose outside code unless asked.Proposed solution
```python
from typing import List, Tuple
def rolling_max(numbers: List[int]) -> List[int]:
""" From a given list of integers, generate a list of rolling maximum element found until given moment
in the sequence.
>>> rolling_max([1, 2, 3, 2, 3, 4, 2])
[1, 2, 3, 3, 3, 4, 4]
"""
if not numbers:
return []
result = []
current_max = numbers[0]
for num in numbers:
if num > current_max:
current_max = num
result.append(current_max)
return result
```Test output (stdout)
. [100%]
1 passed in 0.01s
Reasoning (chain-of-thought)
The user wants me to implement the `rolling_max` function in Python.
Looking at the example:
- Input: `[1, 2, 3, 2, 3, 4, 2]`
- Output: `[1, 2, 3, 3, 3, 4, 4]`
The rolling maximum at each position is the maximum value seen so far (from the start up to and including that position).
Let me trace through:
- Position 0: max of [1] = 1
- Position 1: max of [1, 2] = 2
- Position 2: max of [1, 2, 3] = 3
- Position 3: max of [1, 2, 3, 2] = 3
- Position 4: max of [1, 2, 3, 2, 3] = 3
- Position 5: max of [1, 2, 3, 2, 3, 4] = 4
- Position 6: max of [1, 2, 3, 2, 3, 4, 2] = 4
So the algorithm is straightforward: iterate through the list, keeping track of the running maximum, and append it to the result.
Here's the implementation:
```python
from typing import List, Tuple
def rolling_max(numbers: List[int]) -> List[int]:
""" From a given list of integers, generate a list of rolling maximum element found until given moment
in the sequence.
>>> rolling_max([1, 2, 3, 2, 3, 4, 2])
[1, 2, 3, 3, 3, 4, 4]
"""
if not numbers:
return []
result = []
current_max = numbers[0]
for num in numbers:
if num > current_max:
current_max = num
result.append(current_max)
return result
```
This is O(n) time and O(n) space for the result. Simple and correct.