Skip to content

Tested prompt · Coding

Merge overlapping intervals: every AI model's reply, tested

We sent this everyday coding prompt to all 20 models in llmwise, the same way the app sends a message, and checked every reply the same way. Here's each one as it came, with whether it passed, what it cost and how long it took.

Based on 20 of our test runs on , through OpenRouter with the app's own prompt and settings. Updated .

Short answer

All 20 models passed this coding prompt's check (tests). The cheapest reply that passed was GPT-6 Luna's, at $0.00011; the fastest, DeepSeek V4.1 Flash's in 0.6 s. The dearest reply, Claude Fable 5.1's, cost 194 times as much ($0.0214).

The prompt, as sent, and its check

Checked by tests, the same way for every model.

Merge overlapping intervals (everyday)

Write a JavaScript function mergeIntervals(intervals) that takes an array of [start, end] pairs (numbers, start ≤ end, in any order) and returns a new array in which overlapping or touching intervals are merged, sorted by start.
[1, 3] and [3, 5] touch, so they merge into [1, 5]. Don't change the input array.
Reply with the whole function in one ```javascript code block: plain JavaScript for Node.js 22, no imports, no TypeScript.

The reply's mergeIntervals runs against these 7 tests; it passes when all of them do.

mergeIntervals([[1, 3], [2, 6], [8, 10], [15, 18]])  // → [[1, 6], [8, 10], [15, 18]]
mergeIntervals([[1, 4], [4, 5]])  // → [[1, 5]]
mergeIntervals([])  // → []
mergeIntervals([[5, 7], [1, 2]])  // → [[1, 2], [5, 7]]
mergeIntervals([[1, 10], [2, 3], [4, 5]])  // → [[1, 10]]
mergeIntervals([[1, 2], [2, 2], [2, 3]])  // → [[1, 3]]
(() => { const input = [[3, 4], [1, 2]]; mergeIntervals(input); return input; })()  // → [[3, 4], [1, 2]]

Exactly what this prompt's replies are checked against, with every other prompt of our test runs.

Every model's result

All 20 models on this prompt, in catalog order.

Every model's reply to “Merge overlapping intervals”
ModelResultCostTimeReply
Claude Fable 5.1AnthropicPassed: All 7 tests passed.$0.02145.3 s275 tokens
Claude Opus 5.5AnthropicPassed: All 7 tests passed.$0.00773.7 s234 tokens
Claude Sonnet 5.5AnthropicPassed: All 7 tests passed.$0.00331.4 s180 tokens
Claude Sonnet 5AnthropicPassed: All 7 tests passed.$0.00342.7 s216 tokens
Claude Haiku 5.5AnthropicPassed: All 7 tests passed.$0.000171.3 s185 tokens
Claude Haiku 4.5AnthropicPassed: All 7 tests passed.$0.00172.0 s239 tokens
GPT-6 AstraOpenAIPassed: All 7 tests passed.$0.01082.6 s127 tokens
GPT-6.1 SolOpenAIPassed: All 7 tests passed.$0.00112.0 s127 tokens
GPT-6 SolOpenAIPassed: All 7 tests passed.$0.00221.7 s130 tokens
GPT-6 LunaOpenAIPassed: All 7 tests passed.$0.000111.5 s130 tokens
Gemini 4 ArgonGooglePassed: All 7 tests passed.$0.00173.4 s198 tokens
Gemini 3.1 Pro (preview)GooglePassed: All 7 tests passed.$0.01038.6 s196 tokens
Gemini 3.8 FlashGooglePassed: All 7 tests passed.$0.00123.8 s229 tokens
DeepSeek V4.1 FlashDeepSeekPassed: All 7 tests passed.$0.000330.6 s210 tokens
DeepSeek V4 ProDeepSeekPassed: All 7 tests passed.$0.00216.8 s179 tokens
Grok 4.7xAIPassed: All 7 tests passed.$0.00456.1 s198 tokens
Kimi K3MoonshotPassed: All 7 tests passed.$0.00362.0 s148 tokens
GLM 5.3Z.aiPassed: All 7 tests passed.$0.000820.8 s113 tokens
GLM 5.3 FlashZ.aiPassed: All 7 tests passed.$0.000249.6 s205 tokens
Mistral Large 4MistralPassed: All 7 tests passed.$0.00188.1 s175 tokens

Cost: what OpenRouter charged us for the reply. Time: from sending to the whole reply. Reply: its length in tokens, thinking not counted. In llmwise you pay per message, not per token: each of these replies counted as one message on Pro.

Every reply

Every reply passed: here they are from the cheapest up.

  1. GPT-6 Luna

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0]);
    
      const merged = [];
    
      for (const [start, end] of sorted) {
        const last = merged[merged.length - 1];
    
        if (!last || start > last[1]) {
          merged.push([start, end]);
        } else {
          last[1] = Math.max(last[1], end);
        }
      }
    
      return merged;
    }
    ```

    449 tokens in, 130 out · 1.5 s · $0.0001 · 1 message on Pro · answered by openai/gpt-6-luna via OpenAI ·

  2. Claude Haiku 5.5

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const merged = [];
      for (const [start, end] of sorted) {
        const last = merged[merged.length - 1];
        if (last && start <= last[1]) {
          last[1] = Math.max(last[1], end);
        } else {
          merged.push([start, end]);
        }
      }
      return merged;
    }
    ```

    622 tokens in, 185 out · 1.3 s · $0.0002 · 1 message on Pro · answered by anthropic/claude-haiku-5.5 via Anthropic ·

  3. GLM 5.3 Flash

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      // Sort a copy by start so the input array is left unchanged
      const sorted = [...intervals].sort((a, b) => a[0] - b[0]);
    
      const merged = [];
      for (const [start, end] of sorted) {
        const last = merged[merged.length - 1];
        // Merge when overlapping ([1,4] & [2,5]) or touching ([1,3] & [3,5])
        if (last && start <= last[1]) {
          last[1] = Math.max(last[1], end);
        } else {
          merged.push([start, end]);
        }
      }
      return merged;
    }
    ```
    
    Example: `mergeIntervals([[5, 7], [1, 3], [3, 5], [8, 10]])` → `[[1, 7], [8, 10]]`.

    463 tokens in, 287 out (82 of them reasoning) · 9.6 s · $0.0002 · 1 message on Pro · answered by z-ai/glm-5.3-flash via Wafer ·

  4. DeepSeek V4.1 Flash

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (!Array.isArray(intervals) || intervals.length === 0) return [];
    
      // Copy each pair so the input array (and its pairs) are never mutated.
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const merged = [sorted[0]];
    
      for (let i = 1; i < sorted.length; i++) {
        const [start, end] = sorted[i];
        const last = merged[merged.length - 1];
    
        if (start <= last[1]) {
          // Overlapping or touching: extend the current interval.
          if (end > last[1]) last[1] = end;
        } else {
          merged.push([start, end]);
        }
      }
    
      return merged;
    }
    ```

    489 tokens in, 216 out (6 of them reasoning) · 0.6 s · $0.0003 · 1 message on Pro · answered by deepseek/deepseek-v4.1-flash via Together ·

  5. GLM 5.3

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      const sorted = [...intervals].sort((a, b) => a[0] - b[0]);
      const result = [];
      for (const [start, end] of sorted) {
        const last = result[result.length - 1];
        if (last && start <= last[1]) {
          last[1] = Math.max(last[1], end);
        } else {
          result.push([start, end]);
        }
      }
      return result;
    }
    ```

    486 tokens in, 114 out (1 of them reasoning) · 0.8 s · $0.0008 · 1 message on Pro · answered by z-ai/glm-5.3 via Wafer ·

  6. GPT-6.1 Sol

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      const sorted = intervals.map(([start, end]) => [start, end]);
      sorted.sort((a, b) => a[0] - b[0]);
    
      const merged = [];
    
      for (const [start, end] of sorted) {
        const last = merged[merged.length - 1];
    
        if (last && start <= last[1]) {
          last[1] = Math.max(last[1], end);
        } else {
          merged.push([start, end]);
        }
      }
    
      return merged;
    }
    ```

    451 tokens in, 127 out · 2.0 s · $0.0011 · 1 message on Pro · answered by openai/gpt-6.1-sol via OpenAI ·

  7. Gemini 3.8 Flash

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (!intervals || intervals.length <= 1) {
        return intervals ? intervals.map(interval => [...interval]) : [];
      }
    
      // Clone and sort by start time, breaking ties by end time
      const sorted = intervals
        .map(interval => [...interval])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const merged = [sorted[0]];
    
      for (let i = 1; i < sorted.length; i++) {
        const current = sorted[i];
        const lastMerged = merged[merged.length - 1];
    
        // Overlapping or touching intervals
        if (current[0] <= lastMerged[1]) {
          lastMerged[1] = Math.max(lastMerged[1], current[1]);
        } else {
          merged.push(current);
        }
      }
    
      return merged;
    }
    ```

    477 tokens in, 229 out · 3.8 s · $0.0012 · 1 message on Pro · answered by google/gemini-3.8-flash via Google ·

  8. Claude Haiku 4.5

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (intervals.length === 0) return [];
    
      // Sort intervals by start time, then by end time
      const sorted = intervals.map(interval => [...interval]).sort((a, b) => {
        return a[0] - b[0] || a[1] - b[1];
      });
    
      const merged = [sorted[0]];
    
      for (let i = 1; i < sorted.length; i++) {
        const current = sorted[i];
        const last = merged[merged.length - 1];
    
        // If current interval overlaps or touches the last merged interval
        if (current[0] <= last[1]) {
          // Merge by extending the end of the last interval
          last[1] = Math.max(last[1], current[1]);
        } else {
          // No overlap, add as new interval
          merged.push(current);
        }
      }
    
      return merged;
    }
    ```

    481 tokens in, 239 out · 2.0 s · $0.0017 · 1 message on Pro · answered by anthropic/claude-haiku-4.5 via Amazon Bedrock ·

  9. Gemini 4 Argon

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (!intervals || intervals.length === 0) {
        return [];
      }
    
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const merged = [sorted[0]];
    
      for (let i = 1; i < sorted.length; i++) {
        const current = sorted[i];
        const last = merged[merged.length - 1];
    
        if (current[0] <= last[1]) {
          last[1] = Math.max(last[1], current[1]);
        } else {
          merged.push(current);
        }
      }
    
      return merged;
    }
    ```

    698 tokens in, 198 out · 3.4 s · $0.0017 · 1 message on Pro · answered by google/gemini-4-argon via Google AI Studio ·

  10. Mistral Large 4

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (intervals.length === 0) return [];
    
      const sorted = intervals.slice().sort((a, b) => a[0] - b[0]);
      const merged = [];
    
      let start = sorted[0][0];
      let end = sorted[0][1];
    
      for (let i = 1; i < sorted.length; i++) {
        const s = sorted[i][0];
        const e = sorted[i][1];
    
        if (s <= end) {
          if (e > end) end = e;
        } else {
          merged.push([start, end]);
          start = s;
          end = e;
        }
      }
    
      merged.push([start, end]);
      return merged;
    }
    ```

    456 tokens in, 727 out (552 of them reasoning) · 8.1 s · $0.0018 · 1 message on Pro · answered by mistralai/mistral-large-4-0 via Mistral ·

  11. DeepSeek V4 Pro

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (!Array.isArray(intervals) || intervals.length === 0) return [];
    
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const merged = [sorted[0]];
    
      for (let i = 1; i < sorted.length; i++) {
        const [start, end] = sorted[i];
        const last = merged[merged.length - 1];
    
        if (start <= last[1]) {
          if (end > last[1]) last[1] = end;
        } else {
          merged.push([start, end]);
        }
      }
    
      return merged;
    }
    ```

    461 tokens in, 492 out (313 of them reasoning) · 6.8 s · $0.0021 · 1 message on Pro · answered by deepseek/deepseek-v4-pro-0813 via Wafer ·

  12. GPT-6 Sol

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0]);
    
      const merged = [];
    
      for (const [start, end] of sorted) {
        const last = merged[merged.length - 1];
    
        if (last && start <= last[1]) {
          last[1] = Math.max(last[1], end);
        } else {
          merged.push([start, end]);
        }
      }
    
      return merged;
    }
    ```

    449 tokens in, 130 out · 1.7 s · $0.0022 · 1 message on Pro · answered by openai/gpt-6-sol via OpenAI ·

  13. Claude Sonnet 5.5

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const result = [];
      for (const [start, end] of sorted) {
        const last = result[result.length - 1];
        if (last && start <= last[1]) {
          if (end > last[1]) last[1] = end;
        } else {
          result.push([start, end]);
        }
      }
      return result;
    }
    ```

    623 tokens in, 180 out · 1.4 s · $0.0033 · 1 message on Pro · answered by anthropic/claude-sonnet-5.5 via Anthropic ·

  14. Claude Sonnet 5

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (!intervals || intervals.length === 0) return [];
    
      const sorted = intervals
        .map(([a, b]) => [a, b])
        .sort((x, y) => x[0] - y[0]);
    
      const result = [sorted[0]];
    
      for (let i = 1; i < sorted.length; i++) {
        const [start, end] = sorted[i];
        const last = result[result.length - 1];
    
        if (start <= last[1]) {
          last[1] = Math.max(last[1], end);
        } else {
          result.push([start, end]);
        }
      }
    
      return result;
    }
    ```

    619 tokens in, 216 out · 2.7 s · $0.0034 · 1 message on Pro · answered by anthropic/claude-sonnet-5 via Claude Platform on AWS ·

  15. Kimi K3

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const merged = [];
      for (const [start, end] of sorted) {
        const last = merged[merged.length - 1];
        if (last && start <= last[1]) {
          last[1] = Math.max(last[1], end);
        } else {
          merged.push([start, end]);
        }
      }
      return merged;
    }
    ```

    536 tokens in, 152 out (4 of them reasoning) · 2.0 s · $0.0036 · 1 message on Pro · answered by moonshotai/kimi-k3 via Together ·

  16. Grok 4.7

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (!intervals || intervals.length === 0) return [];
    
      const sorted = intervals
        .map((iv) => [iv[0], iv[1]])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const merged = [[sorted[0][0], sorted[0][1]]];
    
      for (let i = 1; i < sorted.length; i++) {
        const last = merged[merged.length - 1];
        const curr = sorted[i];
        if (curr[0] <= last[1]) {
          if (curr[1] > last[1]) last[1] = curr[1];
        } else {
          merged.push([curr[0], curr[1]]);
        }
      }
    
      return merged;
    }
    ```

    1,684 tokens in, 547 out (349 of them reasoning) · 6.1 s · $0.0045 · 1 message on Pro · answered by x-ai/grok-4.7 via xAI ·

  17. Claude Opus 5.5

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (!Array.isArray(intervals) || intervals.length === 0) return [];
    
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const result = [sorted[0]];
    
      for (let i = 1; i < sorted.length; i++) {
        const last = result[result.length - 1];
        const [start, end] = sorted[i];
    
        if (start <= last[1]) {
          if (end > last[1]) last[1] = end;
        } else {
          result.push([start, end]);
        }
      }
    
      return result;
    }
    ```

    621 tokens in, 234 out · 3.7 s · $0.0077 · 1 message on Pro · answered by anthropic/claude-opus-5.5 via Claude Platform on AWS ·

  18. Gemini 3.1 Pro

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (!intervals || intervals.length === 0) {
        return [];
      }
    
      const sorted = [...intervals].sort((a, b) => a[0] - b[0]);
      const result = [];
      
      let current = [sorted[0][0], sorted[0][1]];
    
      for (let i = 1; i < sorted.length; i++) {
        const next = sorted[i];
        
        if (next[0] <= current[1]) {
          current[1] = Math.max(current[1], next[1]);
        } else {
          result.push(current);
          current = [next[0], next[1]];
        }
      }
      
      result.push(current);
      return result;
    }
    ```

    477 tokens in, 780 out (584 of them reasoning) · 8.6 s · $0.0103 · 1 message on Pro · answered by google/gemini-3.1-pro-preview via Google ·

  19. GPT-6 Astra

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      const sorted = intervals.map(([start, end]) => [start, end]);
      sorted.sort((a, b) => a[0] - b[0]);
    
      const merged = [];
    
      for (const [start, end] of sorted) {
        const last = merged[merged.length - 1];
    
        if (last && start <= last[1]) {
          last[1] = Math.max(last[1], end);
        } else {
          merged.push([start, end]);
        }
      }
    
      return merged;
    }
    ```

    449 tokens in, 127 out · 2.6 s · $0.0108 · 1 message on Pro · answered by openai/gpt-6-astra via OpenAI ·

  20. Claude Fable 5.1

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      if (!Array.isArray(intervals) || intervals.length === 0) return [];
    
      // Copy so the input (and its inner pairs) is never mutated
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const result = [sorted[0]];
    
      for (let i = 1; i < sorted.length; i++) {
        const [start, end] = sorted[i];
        const last = result[result.length - 1];
    
        if (start <= last[1]) {
          // Overlapping or touching: extend the current interval
          if (end > last[1]) last[1] = end;
        } else {
          result.push([start, end]);
        }
      }
    
      return result;
    }
    ```

    621 tokens in, 275 out · 5.3 s · $0.0214 · 1 message on Pro · answered by anthropic/claude-fable-5.1 via Anthropic ·

More coding prompts

The other coding prompts, each with every model's reply, and the results across all five.

Questions

Which AI does best on “Merge overlapping intervals”?

All 20 models passed this coding prompt's check (tests). The cheapest reply that passed was GPT-6 Luna's, at $0.00011; the fastest, DeepSeek V4.1 Flash's in 0.6 s. The dearest reply, Claude Fable 5.1's, cost 194 times as much ($0.0214).

What does a reply to “Merge overlapping intervals” cost?

Through the models' APIs, what OpenRouter charged us ran from $0.00011 (GPT-6 Luna) to $0.0214 (Claude Fable 5.1) for this prompt. In llmwise you don't pay by the token: a reply like these counts as one message on Pro, whichever model answers.

Claude, GPT, Gemini, DeepSeek, Grok, Kimi, GLM, and Mistral, in one chat.

See what a message costs before you send it. Free is 5 messages to try; sign in with an email link, no password or card.