Overview › Code › R40
Code · blind round

R40 · isPalindrome (ignore case & non-alphanumerics)

blind round 10/11 local models answered task written in German

Every answer below carries the name of the model that wrote it. Blind refers to the scoring: the review was done without knowing which model produced which answer — the published result names them.

1 of the 11 local models delivered nothing through our test harness in this round — for reasons that lie with our setup, not with the models. Those cards are marked DNF like any other, but they are not evidence about those models — the reason is noted on the card itself.

A frontier reference answered the same task (Claude Opus 5) — outside the field and deliberately unscored, further down the page.

Show task
Schreibe eine JavaScript-Funktion isPalindrome(s), die true zurückgibt, wenn s ein Palindrom ist — Groß/Kleinschreibung ignorieren und alle Nicht-Alphanumerischen Zeichen ignorieren. Gib NUR die Funktion aus, keine Erklärung, kein Markdown.

The answers

Local models (Brain cluster) — identical prompt, shuffled order (the sequence is not a ranking)
qwen3:8bharness
No answer reached us (ERR) — and the reason lies with our setup, not with the model: reasoning consumed the entire token budget and the answer stayed empty; the gateway rejects budgets above 3000 tokens Counted as a did-not-finish, but it is not evidence about this model.
qwen3.5:9b
const isPalindrome = (s) => {
  // Clean the string by converting to lowercase and keeping only alphanumeric characters
  const cleanedString = s.toLowerCase().replace(/[^a-z0-9]/g, '');

  let left = 0;
  let right = cleanedString.length - 1;

  while (left < right) {
    if (cleanedString[left] !== cleanedString[right]) {
      return false;
    }
    left++;
    right--;
  }
  return true;
};
gemma4:26b
function isPalindrome(s) {
  const cleaned = s.toLowerCase().replace(/[^a-z0-9]/g, '');
  return cleaned === cleaned.split('').reverse().join('');
}
qwen3-coder:30b
function isPalindrome(s) {
  const cleaned = s.toLowerCase().replace(/[^a-z0-9]/g, '');

  let left = 0;
  let right = cleaned.length - 1;

  while (left < right) {
    if (cleaned[left] !== cleaned[right]) {
      return false;
    }
    left++;
    right--;
  }

  return true;
}
deepseek-r1:14b
function isPalindrome(s) {
  const cleaned = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
  return cleaned === cleaned.split('').reverse().join('');
}
mistral-small:24b
```javascript
function isPalindrome(s) {
    const cleaned = s.replace(/[^A-Za-z0-9]/g, '').toLowerCase();
    const reversed = cleaned.split('').reverse().join('');
    return cleaned === reversed;
}
```
qwen3:14b
function isPalindrome(s) {
    const cleanedS = s.toLowerCase().replace(/[^a-z0-9]/g, '');

    let left = 0;
    let right = cleanedS.length - 1;

    while (left < right) {
        if (cleanedS[left] !== cleanedS[right]) {
            return false;
        }
        left++;
        right--;
    }

    return true;
}
llama3.1:8b
```javascript
function isPalindrome(s) {
    let cleaned = '';
    for (let i of s) {
        if (i.match(/^[a-zA-Z0-9]$/)) {
            cleaned += i.toLowerCase();
        }
    }
    return cleaned === cleaned.split('').reverse().join('');
}
```
command-r:35b
function isPalindrome(s) {
    s = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    return s === s.split('').reverse().join('');
}
deepseek-r1:32b
function isPalindrome(s) {
    const cleaned = s.toLowerCase().replace(/[^a-z0-9]/g, '');
    return cleaned === cleaned.split('').reverse().join('');
}
qwq:32b
function isPalindrome(s) {
    const processed = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    return processed === processed.split('').reverse().join('');
}
Outside the Brain cluster — same task, same character budget, collected through their own tooling (response times not comparable)
GPT-5.5 (Codex)frontier reference
function isPalindrome(s) {
  const normalized = String(s).toLowerCase().replace(/[^a-z0-9]/g, "");
  let left = 0;
  let right = normalized.length - 1;

  while (left < right) {
    if (normalized[left] !== normalized[right]) return false;
    left++;
    right--;
  }

  return true;
}
Claude Sonnet 5frontier reference
function isPalindrome(s) {
  const cleaned = s.toLowerCase().replace(/[^a-z0-9]/g, '');
  return cleaned === cleaned.split('').reverse().join('');
}
Claude Fable 5frontier reference
function isPalindrome(s) {
  const t = s.toLowerCase().replace(/[^a-z0-9]/g, '');
  return t === t.split('').reverse().join('');
}
Claude Haiku 4.5frontier reference
function isPalindrome(s) {
  const cleaned = s.toLowerCase().replace(/[^a-z0-9]/g, '');
  return cleaned === cleaned.split('').reverse().join('');
}
Reference
Gold — the correct answerreference
Normalisieren (toLowerCase + [^a-z0-9] entfernen) und mit umgedrehter Zeichenkette vergleichen. Muss 'A man, a plan, a canal: Panama' als true erkennen.
Results at a glance— every model in this round with score, response time and status.

Who wrote what

ModelBlind scoreLatencyStatus
qwen3:8b ——harness
qwen3.5:9b 8.011.5 sOK
gemma4:26b 10.0127.0 sOK
qwen3-coder:30b 8.011.5 sOK
deepseek-r1:14b —35.5 sOK
mistral-small:24b —31.0 sOK
qwen3:14b 8.011.5 sOK
llama3.1:8b —23.5 sOK
command-r:35b —89.3 sOK
deepseek-r1:32b —70.8 sOK
qwq:32b —89.4 sOK
Verdict

4 of 4 answering local models matched the gold answer (blind score ≥ 8): gemma4:26b, qwen3-coder:30b, qwen3:14b, qwen3.5:9b.

Frontier reference — outside the blind field

These models answered the identical prompt outside the blind field. They are deliberately not scored and not part of the blind comparison — they are there so you can see where a frontier model lands on the same task.

Collected differently from the blind field: the local models run through a plain API harness, the frontier references through a context-free agent, one shot, no retries. Response times are therefore not comparable and are not shown. On two English tasks the reference answer came back in German — an artefact of that harness, flagged on the affected rounds.
Claude Opus 5frontier reference
```javascript
function isPalindrome(s) {
  const cleaned = String(s).toLowerCase().replace(/[^a-z0-9]/g, '');
  return cleaned === cleaned.split('').reverse().join('');
}
```