DeepSeek V4.1 Flash · Coding
DeepSeek V4.1 Flash for coding: our test runs
DeepSeek V4.1 Flash ran our 5 coding prompts in llmwise, through the same pipeline your messages take. Here's every reply as it came, whether it passed, what it cost and what it counts as on Pro, next to the other models.
Based on 5 of our test runs on , through OpenRouter with the app's own prompt and settings. Updated .
Short answer
In our test runs on October 8, 2026, DeepSeek V4.1 Flash passed 5 of 5 of our coding prompts (both hard ones): tied 1st of 20 models. Each reply counted as 1 message on Pro, where it has 60 a day, and cost $0.0018 to run on average.
Prompt by prompt
Each of the 5 coding prompts, and how DeepSeek V4.1 Flash's reply did.
| Prompt | Result | Cost | Time |
|---|---|---|---|
| Turn a title into a URL slugEveryday | Passed: All 7 tests passed. | $0.0004 | 1.3 s |
| Parse a duration like “1h 30m”Everyday | Passed: All 10 tests passed. | $0.0011 | 2.5 s |
| Merge overlapping intervalsEveryday | Passed: All 7 tests passed. | $0.0003 | 0.6 s |
| Evaluate an arithmetic expression, no evalHard | Passed: All 15 tests passed. | $0.0030 | 5.8 s |
| Parse CSV with quoted fieldsHard | Passed: All 8 tests passed. | $0.0042 | 9.1 s |
Every coding reply from DeepSeek V4.1 Flash
Turn a title into a URL slug
An everyday prompt: “Turn a title into a URL slug”, in full.
Passed: All 7 tests passed.
```javascript function slugify(title) { return title .normalize('NFD') // split accented letters into base + combining mark .replace(/[\u0300-\u036f]/g, '') // drop the combining marks (é → e, ñ → n, ü → u) .toLowerCase() .replace(/[^a-z0-9]+/g, '-') // every run of anything else becomes one hyphen .replace(/^-+|-+$/g, ''); // trim leading/trailing hyphens } ``` Note: `normalize('NFD')` handles the accents, but a few letters don't decompose that way (`ø`, `ß`, `đ`, `æ`). If you need those, add an explicit map before the cleanup: ```javascript const SPECIAL = { ø: 'o', ß: 'ss', đ: 'd', æ: 'ae', œ: 'oe', þ: 'th', ł: 'l' }; ``` with `title.replace(/[øßđæœþł]/gi, c => SPECIAL[c.toLowerCase()])` inserted before `.toLowerCase()`.522 tokens in, 276 out (23 of them reasoning) · 1.3 s · $0.0004 · 1 message on Pro · answered by deepseek/deepseek-v4.1-flash via Together ·
Parse a duration like “1h 30m”
An everyday prompt: “Parse a duration like “1h 30m””, in full.
Passed: All 10 tests passed.
```javascript function parseDuration(text) { if (typeof text !== 'string') return null; const match = /^\s*(?:(\d+)h)?\s*(?:(\d+)m)?\s*(?:(\d+)s)?\s*$/.exec(text); if (!match) return null; const [, h, m, s] = match; if (h === undefined && m === undefined && s === undefined) return null; return (h ? Number(h) * 3600 : 0) + (m ? Number(m) * 60 : 0) + (s ? Number(s) : 0); } ```505 tokens in, 890 out (746 of them reasoning) · 2.5 s · $0.0011 · 1 message on Pro · answered by deepseek/deepseek-v4.1-flash via Together ·
Merge overlapping intervals
An everyday prompt: “Merge overlapping intervals”, in full.
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 ·
Evaluate an arithmetic expression, no eval
A hard prompt: “Evaluate an arithmetic expression, no eval”, in full.
Passed: All 15 tests passed.
```javascript function evaluate(expression) { if (typeof expression !== 'string') { throw new Error('Expression must be a string'); } // ---- Tokenizer ---- const tokens = []; let i = 0; const isDigit = (c) => c >= '0' && c <= '9'; while (i < expression.length) { const ch = expression[i]; if (ch === ' ' || ch === '\t') { i++; continue; } // number: digits with an optional single decimal point (at least one digit) if (isDigit(ch) || ch === '.') { let j = i; let digits = 0; while (j < expression.length && isDigit(expression[j])) { j++; digits++; } if (j < expression.length && expression[j] === '.') { j++; while (j < expression.length && isDigit(expression[j])) { j++; digits++; } } if (digits === 0) { throw new Error('Invalid number in expression'); } tokens.push({ type: 'num', value: parseFloat(expression.slice(i, j)) }); i = j; continue; } if ('+-*/^()'.indexOf(ch) !== -1) { tokens.push({ type: ch }); i++; continue; } throw new Error('Unexpected character: ' + ch); } if (tokens.length === 0) { throw new Error('Empty expression'); } // ---- Parser (recursive descent) ---- let pos = 0; const peek = () => tokens[pos]; const isOp = (tok, ch) => tok !== undefined && tok.type === ch; // expr := term (('+' | '-') term)* left-associative function parseExpression() { let value = parseTerm(); while (isOp(peek(), '+') || isOp(peek(), '-')) { const op = tokens[pos++].type; const rhs = parseTerm(); value = op === '+' ? value + rhs : value - rhs; } return value; } // term := unary (('*' | '/') unary)* left-associative function parseTerm() { let value = parseUnary(); while (isOp(peek(), '*') || isOp(peek(), '/')) { const op = tokens[pos++].type; const rhs = parseUnary(); value = op === '*' ? value * rhs : value / rhs; } return value; } // unary := ('-' | '+') unary | power // unary minus is looser than '^', so -2^2 === -(2^2) === -4 function parseUnary() { if (isOp(peek(), '-')) { pos++; return -parseUnary(); } if (isOp(peek(), '+')) { pos++; return parseUnary(); } return parsePower(); } // power := primary ('^' unary)? right-associative // the exponent is a unary, which permits 2^-1 and 2^3^2 = 2^(3^2) function parsePower() { const base = parsePrimary(); if (isOp(peek(), '^')) { pos++; const exponent = parseUnary(); return Math.pow(base, exponent); } return base; } // primary := number | '(' expr ')' function parsePrimary() { const tok = peek(); if (tok === undefined) { throw new Error('Unexpected end of expression'); } if (tok.type === 'num') { pos++; return tok.value; } if (tok.type === '(') { pos++; const value = parseExpression(); if (!isOp(peek(), ')')) { throw new Error('Missing closing parenthesis'); } pos++; return value; } throw new Error('Unexpected token: ' + tok.type); } const result = parseExpression(); if (pos !== tokens.length) { throw new Error('Unexpected token: ' + tokens[pos].type); } return result; } ```591 tokens in, 2,442 out (1,491 of them reasoning) · 5.8 s · $0.0030 · 1 message on Pro · answered by deepseek/deepseek-v4.1-flash via Together ·
Parse CSV with quoted fields
A hard prompt: “Parse CSV with quoted fields”, in full.
Passed: All 8 tests passed.
```javascript function parseCsv(text) { const rows = []; let row = []; let field = ''; let inQuotes = false; let pending = false; // true if there is an in-progress field/row let i = 0; const n = text.length; while (i < n) { const ch = text[i]; if (inQuotes) { if (ch === '"') { if (text[i + 1] === '"') { field += '"'; i += 2; } else { inQuotes = false; i += 1; } } else { field += ch; i += 1; } continue; } if (ch === '"' && field === '') { // A quote only opens a quoted field when it is the first char of the field. inQuotes = true; pending = true; i += 1; continue; } if (ch === ',') { row.push(field); field = ''; pending = true; i += 1; continue; } if (ch === '\n' || ch === '\r') { if (ch === '\r' && text[i + 1] === '\n') i += 1; // treat CRLF as one break row.push(field); rows.push(row); row = []; field = ''; pending = false; i += 1; continue; } field += ch; pending = true; i += 1; } // A line break at the very end leaves "pending" false, so no empty trailing row. if (pending) { row.push(field); rows.push(row); } return rows; } ```522 tokens in, 3,473 out (3,074 of them reasoning) · 9.1 s · $0.0042 · 1 message on Pro · answered by deepseek/deepseek-v4.1-flash via Together ·
How it compares on coding
DeepSeek V4.1 Flash beside the job's picks among every model. 18 models share the hard-problems pick, DeepSeek V4.1 Flash among them.
| Model | Passed | On Pro | Cost per reply |
|---|---|---|---|
| GLM 5.3Our pick: hard problems (shared), best value | 5 of 5 | 250 a month on Pro | $0.0015 |
| GLM 5.3 FlashOur pick: hard problems (shared), everyday | 5 of 5 | 60 a day on Pro | $0.0003 |
| DeepSeek V4.1 FlashOur pick: hard problems (shared) | 5 of 5 | 60 a day on Pro | $0.0018 |
Every limit is published. Paid plans also have a monthly fair-use limit on AI cost: Plus $3.75, Pro $7.50, Max $20, Ultra $42, Studio $85. Using every message on your plan at typical sizes stays under it; very large messages and heavy research use it faster. Every limit, explained.
DeepSeek V4.1 Flash next to each model on coding
DeepSeek V4.1 Flash against each model on the same 5 coding prompts. One run each, through OpenRouter: a wait depends on the provider and the load that day, so a lead under 10% counts as close.
Against Claude Fable 5.1: DeepSeek V4.1 Flash answered 2.2× sooner (2.5 s to 5.5 s), cost 23.2× less, and passed 5 of 5 to its 5.
Against Claude Opus 5.5: DeepSeek V4.1 Flash answered 2.9× sooner (2.5 s to 7.2 s), cost 9.3× less, and passed 5 of 5 to its 5.
Against Claude Sonnet 5.5: DeepSeek V4.1 Flash answered 1.3× later (2.5 s to 2.0 s), cost 3.4× less, and passed 5 of 5 to its 5.
Against Claude Sonnet 5: DeepSeek V4.1 Flash answered within 10% of its time (2.5 s to 2.7 s), cost 5.5× less, and passed 5 of 5 to its 5.
Against Claude Haiku 5.5: DeepSeek V4.1 Flash answered 1.6× sooner (2.5 s to 3.9 s), cost 4.1× more, and passed 5 of 5 to its 5.
Against Claude Haiku 4.5: DeepSeek V4.1 Flash answered within 10% of its time (2.5 s to 2.3 s), cost 1.5× less, and passed 5 of 5 to its 3. Only DeepSeek V4.1 Flash passed Evaluate an arithmetic expression, no eval; Parse CSV with quoted fields.
Against GPT-6 Astra: DeepSeek V4.1 Flash answered 3.3× sooner (2.5 s to 8.2 s), cost 12.2× less, and passed 5 of 5 to its 5.
Against GPT-6.1 Sol: DeepSeek V4.1 Flash answered 1.9× sooner (2.5 s to 4.8 s), cost 1.3× less, and passed 5 of 5 to its 5.
Against GPT-6 Sol: DeepSeek V4.1 Flash answered 1.9× sooner (2.5 s to 4.8 s), cost 2.9× less, and passed 5 of 5 to its 5.
Against GPT-6 Luna: DeepSeek V4.1 Flash answered 1.8× sooner (2.5 s to 4.6 s), cost 6.4× more, and passed 5 of 5 to its 5.
Against Gemini 4 Argon: DeepSeek V4.1 Flash answered 1.4× sooner (2.5 s to 3.5 s), cost 1.3× less, and passed 5 of 5 to its 5.
Against Gemini 3.1 Pro (preview): DeepSeek V4.1 Flash answered 4.1× sooner (2.5 s to 10.3 s), cost 10.6× less, and passed 5 of 5 to its 5.
Against Gemini 3.8 Flash: DeepSeek V4.1 Flash answered 1.7× sooner (2.5 s to 4.2 s), cost within 10% of it, and passed 5 of 5 to its 5.
Against DeepSeek V4 Pro: DeepSeek V4.1 Flash answered 48.0× sooner (2.5 s to 119.6 s), cost 13.1× less, and passed 5 of 5 to its 5.
Against Grok 4.7: DeepSeek V4.1 Flash answered 12.7× sooner (2.5 s to 31.6 s), cost 13.4× less, and passed 5 of 5 to its 5.
Against Kimi K3: DeepSeek V4.1 Flash answered 1.7× sooner (2.5 s to 4.1 s), cost 3.4× less, and passed 5 of 5 to its 5.
Against GLM 5.3: DeepSeek V4.1 Flash answered 2.4× later (2.5 s to 1.1 s), cost 1.2× more, and passed 5 of 5 to its 5.
Against GLM 5.3 Flash: DeepSeek V4.1 Flash answered 3.4× sooner (2.5 s to 8.4 s), cost 7.3× more, and passed 5 of 5 to its 5.
Against Mistral Large 4: DeepSeek V4.1 Flash answered 14.8× sooner (2.5 s to 36.8 s), cost 4.0× less, and passed 5 of 5 to its 4. Only DeepSeek V4.1 Flash passed Evaluate an arithmetic expression, no eval.
How these runs were done
Tests. Automatic. The function runs against the prompt's tests in a separate Node.js process with a time limit and no file, network or child-process access; it passes when every test passes.
DeepSeek V4.1 Flash, and coding, elsewhere
- DeepSeek V4.1 Flash: price, limits and messages on every plan
- The best AI for coding: our picks among every model
- DeepSeek for coding
- DeepSeek V4.1 Flash for writing: our test runs
- DeepSeek V4.1 Flash for math: our test runs
- DeepSeek V4.1 Flash for data analysis: our test runs
- Claude Haiku 5.5 vs DeepSeek V4.1 Flash
- Gemini 3.8 Flash vs DeepSeek V4.1 Flash
- GPT-6 Luna vs DeepSeek V4.1 Flash
- Claude Haiku 4.5 vs DeepSeek V4.1 Flash
- DeepSeek V4.1 Flash vs DeepSeek V4 Pro
- DeepSeek V4.1 Flash vs Grok 4.7
- DeepSeek V4.1 Flash vs GLM 5.3
- DeepSeek V4.1 Flash vs GLM 5.3 Flash
- Analyze a CSV with code: the prompt, and its price
- AI prompts for coding, checked by running the code
- Our test runs: 50 prompts on every model
Questions
Is DeepSeek V4.1 Flash good for coding?
In our test runs it passed 5 of 5 coding prompts, tied 1st of the 20 models in llmwise. Every reply is on this page, so you can judge them yourself.
How many of my messages does a coding reply from DeepSeek V4.1 Flash use?
1 message each on Pro, where it has 60 a day on Pro. The price of a message is fixed and shown before you send it, however long the reply.
How were these runs done?
The same way for every model: each prompt sent through llmwise's own pipeline, each reply checked the same way. The methods page has every prompt and how each is scored.
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.