← Benches
ladder.coding.merge_intervals
CodinggauntletAn owned ladder bench, graded mechanically against a fixed test.
Solved
31/35
runs passed
Models
22
have attempted
Harnesses
5
scaffolds tried
Runs (latest per model × harness — solved sorted first)
| Model | Harness | Result | Turns | tok/s | Latency | Ctx | When |
|---|---|---|---|---|---|---|---|
| gemma-4-26b-a4b-it | bare | PASS | — | — | 5.4s | 64k | 2026-06-23 |
| gemma-4-26b-a4b-it | dev_cycle | PASS | — | — | 5.4s | 64k | 2026-06-23 |
| gemma-4-26b-a4b-it | structured_feedback | PASS | 1 | — | — | 64k | 2026-06-23 |
| gpt-oss-120b | baseline | PASS | 1 | 50.9 | 5.0s | 64k | 2026-06-23 |
| gpt-oss-20b | bare | PASS | 1 | — | — | 64k | 2026-06-23 |
| gpt-oss-20b | dev_cycle | PASS | 1 | — | — | 64k | 2026-06-23 |
| gpt-oss-20b | structured_feedback | PASS | 1 | — | — | 64k | 2026-06-23 |
| llama-3.3-70b | baseline | PASS | 1 | 2.8 | 43.0s | 64k | 2026-06-23 |
| qwen3.5-4b | bare | PASS | — | — | 1.9m | 64k | 2026-06-23 |
| qwen3.5-4b | dev_cycle | PASS | 1 | — | — | 64k | 2026-06-23 |
| qwen3.5-4b | structured_feedback | PASS | 1 | — | — | 64k | 2026-06-23 |
| qwen3.6-35b-a3b | bare | PASS | — | — | 51.9s | 64k | 2026-06-23 |
| qwen3.6-35b-a3b | dev_cycle | PASS | — | — | 52.1s | 64k | 2026-06-23 |
| qwen3.6-35b-a3b | structured_feedback | PASS | 1 | — | — | 64k | 2026-06-23 |
| devstral-small-2-2512 | baseline | PASS | 1 | 8.5 | 17.2s | 128k | 2026-06-23 |
| qwen3.5-122b-a10b-cluster | baseline | PASS | 1 | 17.1 | 4.7m | 64k | 2026-06-29 |
| gpt-oss-20b | baseline | PASS | 1 | 78.7 | 5.9s | 64k | 2026-07-01 |
| qwen3-coder-30b | baseline | PASS | 1 | 36.2 | 4.3s | 64k | 2026-07-01 |
| gemma-4-26b-a4b-it | baseline | PASS | 1 | 27.8 | 8.6s | 64k | 2026-07-01 |
| qwen3.6-35b-a3b-or | baseline | PASS | 1 | 163.6 | 24.7s | 64k | 2026-07-01 |
| qwen3.6-35b-bf16 | baseline | PASS | 1 | 34.4 | 1.6m | 64k | 2026-07-02 |
| qwen3.5-2b | baseline | PASS | 1 | 93.0 | 1.6s | 64k | 2026-07-02 |
| granite-4.1-30b | baseline | PASS | 1 | 7.4 | 20.7s | 64k | 2026-07-02 |
| qwen3.6-27b | v1.7.1 | PASS | 1 | 8.0 | 21.3s | 64k | 2026-07-02 |
| qwen3-next-80b | baseline | PASS | 1 | 45.2 | 3.4s | 64k | 2026-07-02 |
| qwen3.5-4b | baseline | PASS | 1 | 44.0 | 1.0m | 64k | 2026-07-02 |
| phi-4-reasoning-plus | baseline | PASS | 1 | 14.4 | 1.3m | 64k | 2026-07-02 |
| deepseek-r1-distill-qwen-32b | baseline | PASS | 1 | 6.4 | 5.4m | 64k | 2026-07-03 |
| qwen3.6-35b-a3b | baseline | PASS | 1 | 54.5 | 4.9s | 64k | 2026-07-05 |
| qwen3.6-27b | baseline | PASS | 1 | 7.7 | 22.1s | 64k | 2026-07-05 |
| claude-sonnet-4.6 | baseline | PASS | 1 | 55.6 | 2.8s | 195k | 2026-07-06 |
| granite-4.1-8b | baseline | fail | 1 | 22.4 | 6.1s | 128k | 2026-06-23 |
| mistral-small-3.1-24b-instruct-2503 | baseline | fail | 1 | 8.6 | 14.2s | 64k | 2026-06-23 |
| gemini-2.5-flash-lite | baseline | fail | 1 | — | 1.3s | 64k | 2026-07-01 |
| qwen3.5-0.8b | baseline | fail | 1 | 172.7 | 1.9s | 64k | 2026-07-02 |
Transcripts
gemma-4-26b-a4b-it · bare · PASS
```python
def merge_intervals(intervals):
"""
Merges overlapping or touching intervals.
Returns a new list of merged [start, end] pairs sorted by start.
"""
if not intervals:
return []
# Create a deep copy via sorting to avoid mutating the original input list
# and ensure we process them in order of their start times.
sorted_intervals = sorted([list(i) for i in intervals], key=lambda x: x[0])
merged = []
for current in sorted_intervals:
# If merged is empty or no overlap/touching with the last interval, append it
if not merged or current[0] > merged[-1][1]:
merged.append(current)
else:
# There is an overlap or they touch (current[0] <= merged[-1][1])
# Update the end of the last interval to be the max of both ends
merged[-1][1] = max(merged[-1][1], current[1])
return merged
```gemma-4-26b-a4b-it · dev_cycle · PASS
```python
def merge_intervals(intervals):
"""
Merges overlapping or touching intervals.
Returns a new list of merged [start, end] pairs sorted by start.
"""
if not intervals:
return []
# Create a deep copy via sorting to avoid mutating the original input list
# and ensure we process them in order of their start times.
sorted_intervals = sorted([list(i) for i in intervals], key=lambda x: x[0])
merged = []
for current in sorted_intervals:
# If merged is empty or no overlap/touching with the last interval, append it
if not merged or current[0] > merged[-1][1]:
merged.append(current)
else:
# There is an overlap or they touch (current[0] <= merged[-1][1])
# Update the end of the last interval to be the max of both ends
merged[-1][1] = max(merged[-1][1], current[1])
return merged
```gpt-oss-120b · baseline · PASS
```python
def merge_intervals(intervals):
"""
Merge overlapping or touching intervals.
Args:
intervals (list of list[int]): List of [start, end] pairs.
Returns:
list of list[int]: New list of merged, non-overlapping intervals sorted by start.
"""
if not intervals:
return []
# Create a shallow copy of the intervals to avoid mutating input
# Also ensure each inner list is copied so we don't modify original sublists
sorted_intervals = [list(pair) for pair in intervals]
# Sort by start (and end as tie-breaker)
sorted_intervals.sort(key=lambda x: (x[0], x[1]))
merged = []
current_start, current_end = sorted_intervals[0]
for start, end in sorted_intervals[1:]:
if start <= current_end: # overlapping or touching
current_end = max(current_end, end)
else:
merged.append([current_start, current_end])
current_start, current_end = start, end
merged.append([current_start, current_end])
return merged
```llama-3.3-70b · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
intervals = sorted((list(interval) for interval in intervals), key=lambda x: x[0])
merged = [intervals[0]]
for current_interval in intervals[1:]:
last_merged_interval = merged[-1]
if current_interval[0] <= last_merged_interval[1]:
merged[-1] = [last_merged_interval[0], max(last_merged_interval[1], current_interval[1])]
else:
merged.append(current_interval)
return merged
```qwen3.5-4b · bare · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Sort by start time without mutating the input list
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = []
current_start, current_end = sorted_intervals[0]
for start, end in sorted_intervals[1:]:
if start <= current_end:
# Overlapping or touching intervals merge
current_end = max(current_end, end)
else:
# No overlap, append the previous interval and start a new one
merged.append([current_start, current_end])
current_start, current_end = start, end
# Append the last interval
merged.append([current_start, current_end])
return merged
```qwen3.6-35b-a3b · bare · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
merged = []
for start, end in sorted(intervals, key=lambda x: x[0]):
if not merged or merged[-1][1] < start:
merged.append([start, end])
else:
merged[-1][1] = max(merged[-1][1], end)
return merged
```qwen3.6-35b-a3b · dev_cycle · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
merged = []
for start, end in sorted(intervals, key=lambda x: x[0]):
if not merged or merged[-1][1] < start:
merged.append([start, end])
else:
merged[-1][1] = max(merged[-1][1], end)
return merged
```devstral-small-2-2512 · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Create a new list of sorted intervals without mutating the input
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = [sorted_intervals[0]]
for current in sorted_intervals[1:]:
last = merged[-1]
if current[0] <= last[1]: # Overlapping or touching
new_start = last[0]
new_end = max(last[1], current[1])
merged[-1] = [new_start, new_end]
else:
merged.append(current)
return merged
```qwen3.5-122b-a10b-cluster · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Sort by start time, creating a new list to avoid mutating input
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = []
# Initialize with the first interval's values
current_start, current_end = sorted_intervals[0]
for next_start, next_end in sorted_intervals[1:]:
# Check for overlap or touching (next_start <= current_end)
if next_start <= current_end:
# Merge by extending the end if necessary
current_end = max(current_end, next_end)
else:
# No overlap, add the current interval to the result
merged.append([current_start, current_end])
# Start a new current interval
current_start, current_end = next_start, next_end
# Append the last interval
merged.append([current_start, current_end])
return merged
```gpt-oss-20b · baseline · PASS
```python
def merge_intervals(intervals):
"""
Merge overlapping or touching integer intervals.
Parameters:
intervals (list[list[int]]): List of [start, end] pairs.
Returns:
list[list[int]]: New list of merged, non-overlapping intervals sorted by start.
"""
if not intervals:
return []
# Create a copy of each interval to avoid mutating the input
sorted_intervals = sorted((list(iv) for iv in intervals), key=lambda x: x[0])
merged = [sorted_intervals[0].copy()]
for start, end in sorted_intervals[1:]:
last_start, last_end = merged[-1]
if start <= last_end: # Overlap or touch
merged[-1][1] = max(last_end, end)
else:
merged.append([start, end])
return merged
```qwen3-coder-30b · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Sort intervals by start time
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = [sorted_intervals[0]]
for current_start, current_end in sorted_intervals[1:]:
last_start, last_end = merged[-1]
# Check if current interval overlaps or touches the last merged interval
if current_start <= last_end:
# Merge intervals by extending the end time
merged[-1] = [last_start, max(last_end, current_end)]
else:
# No overlap, add current interval
merged.append([current_start, current_end])
return merged
```gemma-4-26b-a4b-it · baseline · PASS
```python
def merge_intervals(intervals):
"""
Merges overlapping or touching intervals.
Returns a new list of merged [start, end] pairs sorted by start.
"""
if not intervals:
return []
# Create a deep copy via sorting to avoid mutating the original input list
# and ensure we process them in order of their start times.
sorted_intervals = sorted([list(i) for i in intervals], key=lambda x: x[0])
merged = []
for current in sorted_intervals:
# If merged is empty or no overlap/touching with the last interval, append it
if not merged or current[0] > merged[-1][1]:
merged.append(current)
else:
# There is an overlap or they touch (current[0] <= merged[-1][1])
# Update the end of the last interval to be the max of both ends
merged[-1][1] = max(merged[-1][1], current[1])
return merged
```qwen3.6-35b-a3b-or · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = []
for start, end in sorted_intervals:
if not merged or merged[-1][1] < start:
merged.append([start, end])
else:
merged[-1][1] = max(merged[-1][1], end)
return merged
```qwen3.6-35b-bf16 · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = [[sorted_intervals[0][0], sorted_intervals[0][1]]]
for start, end in sorted_intervals[1:]:
last_start, last_end = merged[-1]
if start <= last_end:
merged[-1][1] = max(last_end, end)
else:
merged.append([start, end])
return merged
```qwen3.5-2b · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Sort by start time
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = [sorted_intervals[0].copy()] # Copy to avoid mutating input
for current in sorted_intervals[1:]:
last_start, last_end = merged[-1]
if current[0] <= last_end:
# Overlapping or touching intervals merge
merged[-1][1] = max(last_end, current[1])
else:
# No overlap; add new interval
merged.append(current.copy())
return merged
```granite-4.1-30b · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Create a new list of intervals to avoid mutating the input
sorted_intervals = [list(interval) for interval in intervals]
sorted_intervals.sort(key=lambda x: x[0])
merged = []
current_start, current_end = sorted_intervals[0]
for start, end in sorted_intervals[1:]:
if start <= current_end + 1: # Overlapping or touching
current_end = max(current_end, end)
else:
merged.append([current_start, current_end])
current_start, current_end = start, end
merged.append([current_start, current_end])
return merged
```qwen3.6-27b · v1.7.1 · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Create a deep copy to avoid mutating the input
sorted_intervals = sorted([list(interval) for interval in intervals], key=lambda x: x[0])
merged = [sorted_intervals[0]]
for current_start, current_end in sorted_intervals[1:]:
last_merged_start, last_merged_end = merged[-1]
if current_start <= last_merged_end:
# Overlapping or touching intervals, merge them
merged[-1][1] = max(last_merged_end, current_end)
else:
# Non-overlapping interval, add to the list
merged.append([current_start, current_end])
return merged
```qwen3-next-80b · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Create a sorted copy of intervals by start time
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = []
for current in sorted_intervals:
# If merged is empty or current interval doesn't overlap with the last merged interval
if not merged or merged[-1][1] < current[0]:
merged.append(current[:]) # Append a copy to avoid mutating original
else:
# Merge with the last interval by extending its end if needed
merged[-1][1] = max(merged[-1][1], current[1])
return merged
```qwen3.5-4b · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Sort a copy of the list by start time to avoid mutating input
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = []
current_start, current_end = sorted_intervals[0]
for start, end in sorted_intervals[1:]:
if start <= current_end:
# Overlapping or touching intervals merge
current_end = max(current_end, end)
else:
# No overlap, save the previous interval and reset current
merged.append([current_start, current_end])
current_start, current_end = start, end
# Append the final interval
merged.append([current_start, current_end])
return merged
```phi-4-reasoning-plus · baseline · PASS
We are asked: "Implement a function merge_intervals(intervals) that takes a list of [start, end] integer pairs and returns a NEW list of merged, non-overlapping intervals sorted by start." The rules:
- Overlapping or touching intervals merge. For example, [1,3] and [2,6] -> [1,6]; [1,4] and [4,5] -> [1,5].
- Input may be unsorted; an empty input returns [].
- Do NOT mutate the input list or its inner lists.
- Return intervals as 2-element lists [start, end].
Define it at module top level so it can be imported as from solution import merge_intervals.
We need to produce a single self-contained Python solution in one code block. We must not include any explanation before or after. The answer should be just the code block with no additional text.
I'll produce a function that sorts intervals by start, then iterates through them merging overlapping intervals. I'll create a new list for merged intervals and check if current interval overlaps with last in merged list (touching means end equals next's start). If yes, merge them; else add the new one.
We must not mutate input list or inner lists. So we need to copy each interval when merging? But careful: The problem says "Do NOT mutate the input list or its inner lists." That means that if I modify intervals in place, it is not allowed. But our algorithm can create a new list of merged intervals and then return them. We must be careful with copying intervals if needed.
I'll produce code:
```
def merge_intervals(intervals):
# If empty input, return []
if not intervals:
return []
# Create a shallow copy of intervals to avoid mutating the original
sorted_intervals = sorted([interval[:] for interval in intervals], key=lambda x: x[0])
merged = [sorted_intervals[0][:]] # start with first interval copy
for current in sorted_intervals[1:]:
last_merged = merged[-1]
if current[0] <= last_merged[1] + 1: # overlapping or touching
# merge intervals, update the end of last_merged to max(last_merged[1], current[1])
new_end = max(last_merged[1], current[1])
# But we must not mutate original inner list? Actually, we are allowed to modify merged's copy?
# We already created a copy for each interval in sorted_intervals.
last_merged[1] = new_end
else:
merged.append(current[:])
return merged
```
I'll produce code block with triple backticks and language python. I must not include any explanation before or after.
I'll produce the final answer as a single Python solution code block. We'll produce code that is self-contained, no additional text.
I'll produce code block:
```python
def merge_intervals(intervals):
if not intervals:
return []
# Create a shallow copy of intervals to avoid mutating the original list or inner lists.
sorted_intervals = sorted([interval[:] for interval in intervals], key=lambda x: x[0])
merged = [sorted_intervals[0][:]]
for current in sorted_intervals[1:]:
last_merged = merged[-1]
# Check if intervals overlap or touch (touching means end equals start)
if current[0] <= last_merged[1] + 1:
# Merge the intervals by updating the end of the last interval
last_merged[1] = max(last_merged[1], current[1])
else:
merged.append(current[:])
return merged
if __name__ == "__main__":
# Example usage and simple tests.
print(merge_intervals([[1,3],[2,6],[8,10],[15,18]])) # Expected: [[1,6],[8,10],[15,18]]
print(merge_intervals([[1,4],[4,5]])) # Expected: [[1,5]]
print(merge_intervals([])) # Expected: []
```
I'll produce code block with triple backticks and language python. I must not include any explanation before or after.
I'll produce final answer accordingly.```python
def merge_intervals(intervals):
if not intervals:
return []
# Create a shallow copy of the intervals to avoid mutating the input.
sorted_intervals = sorted([interval[:] for interval in intervals], key=lambda x: x[0])
merged = [sorted_intervals[0][:]]
for current in sorted_intervals[1:]:
last_merged = merged[-1]
# Check if the current interval overlaps or touches the last merged interval.
if current[0] <= last_merged[1] + 1:
last_merged[1] = max(last_merged[1], current[1])
else:
merged.append(current[:])
return merged
if __name__ == "__main__":
# Example test cases
print(merge_intervals([[1,3],[2,6],[8,10],[15,18]])) # Expected output: [[1,6],[8,10],[15,18]]
print(merge_intervals([[1,4],[4,5]])) # Expected output: [[1,5]]
print(merge_intervals([])) # Expected output: []
```deepseek-r1-distill-qwen-32b · baseline · PASS
To solve this problem, we need to implement a function `merge_intervals` that takes a list of intervals and returns a new list of merged, non-overlapping intervals sorted by their start times. The solution should handle overlapping or touching intervals, ensure the input is not mutated, and return the result in the correct format.
### Approach
1. **Check for Empty Input**: If the input list is empty, immediately return an empty list.
2. **Sort Intervals**: Sort the intervals based on their start times to facilitate easier merging of overlapping or touching intervals.
3. **Initialize Merged List**: Start with the first interval from the sorted list as the initial merged interval.
4. **Iterate and Merge**: For each subsequent interval, check if it overlaps or touches the last merged interval. If it does, merge them by updating the end time to be the maximum of the two ends. If it doesn't overlap, add the current interval to the merged list.
### Solution Code
```python
def merge_intervals(intervals):
if not intervals:
return []
sorted_intervals = sorted(intervals)
merged = [list(sorted_intervals[0])]
for current in sorted_intervals[1:]:
last = merged[-1]
if current[0] <= last[1]:
new_start = last[0]
new_end = max(last[1], current[1])
merged[-1] = [new_start, new_end]
else:
merged.append(list(current))
return merged
```
### Explanation
- **Sorting**: The intervals are sorted based on their start times to ensure that we can process each interval in a sequential manner.
- **Merging Logic**: By iterating through the sorted intervals and comparing each with the last merged interval, we efficiently merge overlapping or touching intervals. This ensures that the resulting list contains only non-overlapping intervals.
- **Efficiency**: The algorithm runs in O(n log n) time due to sorting, where n is the number of intervals. Merging is done in a single pass through the sorted intervals, making it efficient.
This approach ensures that we correctly handle all edge cases, including empty inputs, intervals that are already non-overlapping, and intervals that need merging. The solution is both efficient and straightforward, providing an optimal way to merge intervals.qwen3.6-35b-a3b · baseline · PASS
```python
def merge_intervals(intervals):
"""
Merge overlapping or touching intervals and return a new list of merged intervals.
Args:
intervals: A list of [start, end] integer pairs.
Returns:
A new list of merged, non-overlapping intervals sorted by start time.
"""
if not intervals:
return []
# Create a deep copy to avoid mutating the input
copied_intervals = [[start, end] for start, end in intervals]
# Sort by start time
copied_intervals.sort(key=lambda x: x[0])
merged = [copied_intervals[0]]
for current_start, current_end in copied_intervals[1:]:
last_merged_start, last_merged_end = merged[-1]
# If the current interval overlaps or touches the last merged interval
if current_start <= last_merged_end:
# Merge them by updating the end of the last merged interval
merged[-1][1] = max(last_merged_end, current_end)
else:
# No overlap, add as a new interval
merged.append([current_start, current_end])
return merged
```qwen3.6-27b · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Create a deep copy to avoid mutating the input
sorted_intervals = sorted([list(interval) for interval in intervals], key=lambda x: x[0])
merged = [sorted_intervals[0]]
for current_start, current_end in sorted_intervals[1:]:
last_merged_start, last_merged_end = merged[-1]
if current_start <= last_merged_end:
# Overlapping or touching intervals, merge them
merged[-1][1] = max(last_merged_end, current_end)
else:
# Non-overlapping interval, add to the list
merged.append([current_start, current_end])
return merged
```claude-sonnet-4.6 · baseline · PASS
```python
def merge_intervals(intervals):
if not intervals:
return []
# Sort by start without mutating input
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = [list(sorted_intervals[0])]
for current in sorted_intervals[1:]:
last = merged[-1]
if current[0] <= last[1]:
# Overlapping or touching - merge
last[1] = max(last[1], current[1])
else:
merged.append(list(current))
return merged
```granite-4.1-8b · baseline · fail
```python
def merge_intervals(intervals):
if not intervals:
return []
# Create a deep copy of the intervals to avoid mutating the input
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = [sorted_intervals[0]]
for current in sorted_intervals[1:]:
last_merged = merged[-1]
if current[0] <= last_merged[1]: # Overlapping or touching intervals
merged[-1][1] = max(last_merged[1], current[1])
else:
merged.append(current[:]) # Append a copy to avoid mutation
return merged
```mistral-small-3.1-24b-instruct-2503 · baseline · fail
```python
def merge_intervals(intervals):
if not intervals:
return []
# Sort intervals based on the starting point
intervals.sort(key=lambda x: x[0])
merged = [intervals[0]]
for current in intervals[1:]:
last_merged = merged[-1]
if current[0] <= last_merged[1]: # Overlapping or touching intervals
merged[-1][1] = max(last_merged[1], current[1])
else:
merged.append(current)
return merged
```gemini-2.5-flash-lite · baseline · fail
```python
def merge_intervals(intervals):
"""
Merges a list of [start, end] integer pairs into a new list of merged,
non-overlapping intervals sorted by start.
Args:
intervals: A list of [start, end] integer pairs.
Returns:
A new list of merged, non-overlapping intervals sorted by start.
"""
if not intervals:
return []
# Create a copy to avoid mutating the input
sorted_intervals = sorted([list(interval) for interval in intervals])
merged = []
for current_start, current_end inqwen3.5-0.8b · baseline · fail
```python
def merge_intervals(intervals):
"""
Merge overlapping or touching intervals into a single non-overlapping interval.
Rules:
- Overlapping OR touching intervals merge: [1,3] and [2,6] -> [1,6];
[1,4] and [4,5] -> [1,5].
- Input may be unsorted; an empty input returns [].
- Do NOT mutate the input list or its inner lists.
- Return intervals as 2-element lists [start, end].
Parameters:
intervals (list of list): List of [start, end] integer pairs.
Returns:
list of list: Merged non-overlapping intervals sorted by start.
"""
if not intervals:
return []
# Sort by start time
intervals.sort(key=lambda x: x[0])
merged = [intervals[0]]
for i in range(1, len(intervals)):
current_start, current_end = intervals[i]
next_interval = intervals[i + 1]
if current_end < next_interval[0]:
# No overlap; keep the previous interval as is
merged.append(current_end)
else:
# Overlapping or touching; extend the end of the current interval
merged[-1][1] = max(merged[-1][1], next_interval[0])
return merged
```