← back to Model Arena
night-loop: cycle 00:49 — judged=d7f4f8ca5f8d · fired 2 →; NameError: name 'true' is not defined. Did you mean: 'True'?; NameError: name 'true' is not defined. Did you mean: 'True'?
f9fd5f6c50eaebf4c6c4787028fe85c78c77fd8f · 2026-07-25 00:49:29 -0700 · Steve Abrams
Files touched
Diff
commit f9fd5f6c50eaebf4c6c4787028fe85c78c77fd8f
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sat Jul 25 00:49:29 2026 -0700
night-loop: cycle 00:49 — judged=d7f4f8ca5f8d · fired 2 →; NameError: name 'true' is not defined. Did you mean: 'True'?; NameError: name 'true' is not defined. Did you mean: 'True'?
---
data/challenges.json | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 64 insertions(+), 1 deletion(-)
diff --git a/data/challenges.json b/data/challenges.json
index b5ba17c..a222186 100644
--- a/data/challenges.json
+++ b/data/challenges.json
@@ -14727,7 +14727,8 @@
"thumb": true
}
],
- "judging": true
+ "judging": true,
+ "judged_at": null
},
{
"id": "bde366feb227",
@@ -14841,5 +14842,67 @@
"thumb": true
}
]
+ },
+ {
+ "id": "172f180e3161",
+ "title": "Remix: Free-Roster — Pong 2P",
+ "prompt": "Build a single-file HTML page: two-player Pong. Left paddle W/S, right paddle arrow keys, ball with increasing speed and angle-on-paddle physics, score to 11, win screen + restart, retro beep on hit (WebAudio). Self-contained, no external assets.\n\nHere is a strong previous attempt at this exact challenge. IMPROVE on it — keep what works, fix its weaknesses, and elevate the visual quality and polish. Return a complete, improved single-file HTML document.\n\n=== PREVIOUS ATTEMPT (Qwen3 14B) ===\n<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <title>Two-Player Pong</title>\n <style>\n html, body {\n margin: 0;\n padding: 0;\n overflow: hidden;\n background: black;\n color: white;\n font-family: monospace;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100vh;\n }\n canvas {\n background: #000;\n display: block;\n }\n #gameOver {\n position: absolute;\n top: 40%;\n text-align: center;\n font-size: 3em;\n width: 100%;\n }\n #restart {\n position: absolute;\n top: 50%;\n text-align: center;\n font-size: 1.5em;\n width: 100%;\n cursor: pointer;\n }\n </style>\n</head>\n<body>\n<canvas id=\"pongCanvas\" width=\"800\" height=\"400\"></canvas>\n<div id=\"gameOver\" style=\"display:none;\">Game Over</div>\n<div id=\"restart\" style=\"display:none;\" onclick=\"init()\">Press to Restart</div>\n<script>\nconst canvas = document.getElementById('pongCanvas');\nconst ctx = canvas.getContext('2d');\n\nconst width = canvas.width;\nconst height = canvas.height;\n\nlet leftPaddle = { x: 10, y: 150, width: 10, height: 100, dy: 0 };\nlet rightPaddle = { x: width - 20, y: 150, width: 10, height: 100, dy: 0 };\nlet ball = {\n x: width / 2,\n y: height / 2,\n radius: 10,\n dx: 4,\n dy: 4,\n speed: 4\n};\nlet leftScore = 0;\nlet rightScore = 0;\nlet gameOver = false;\n\nconst paddleSpeed = 6;\nconst winScore = 11;\n\nfunction drawPaddle(paddle) {\n ctx.fillStyle = 'white';\n ctx.fillRect(paddle.x, paddle.y, paddle.width, paddle.height);\n}\n\nfunction drawBall() {\n ctx.beginPath();\n ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2);\n ctx.fillStyle = 'white';\n ctx.fill();\n ctx.closePath();\n}\n\nfunction drawNet() {\n ctx.strokeStyle = 'white';\n ctx.lineWidth = 2;\n for (let i = 0; i < height; i += 20) {\n ctx.beginPath();\n ctx.moveTo(width / 2, i);\n ctx.lineTo(width / 2, i + 10);\n ctx.stroke();\n }\n}\n\nfunction drawScore() {\n ctx.font = '32px monospace';\n ctx.fillText(leftScore, width / 4, 50);\n ctx.fillText(rightScore, 3 * width / 4, 50);\n}\n\nfunction movePaddles() {\n leftPaddle.y += leftPaddle.dy;\n rightPaddle.y += rightPaddle.dy;\n\n // Prevent paddles from moving out of bounds\n if (leftPaddle.y < 0) leftPaddle.y = 0;\n if (leftPaddle.y + leftPaddle.height > height) leftPaddle.y = height - leftPaddle.height;\n if (rightPaddle.y < 0) rightPaddle.y = 0;\n if (rightPaddle.y + rightPaddle.height > height) rightPaddle.y = height - rightPaddle.height;\n}\n\nfunction moveBall() {\n ball.x += ball.dx;\n ball.y += ball.dy;\n\n // Bounce off top and bottom\n if (ball.y - ball.radius < 0 || ball.y + ball.radius > height) {\n ball.dy *= -1;\n playSound('hit');\n }\n\n // Paddle collision\n if (\n ball.x - ball.radius < leftPaddle.x + leftPaddle.width &&\n ball.y > leftPaddle.y &&\n ball.y < leftPaddle.y + leftPaddle.height\n ) {\n ball.dx *= -1;\n let relativeY = (ball.y - (leftPaddle.y + leftPaddle.height / 2)) / (leftPaddle.height / 2);\n ball.dy = relativeY * 6;\n ball.speed += 0.1;\n playSound('hit');\n }\n\n if (\n ball.x + ball.radius > rightPaddle.x &&\n ball.y > rightPaddle.y &&\n ball.y < rightPaddle.y + rightPaddle.height\n ) {\n ball.dx *= -1;\n let relativeY = (ball.y - (rightPaddle.y + rightPaddle.height / 2)) / (rightPaddle.height / 2);\n ball.dy = relativeY * 6;\n ball.speed += 0.1;\n playSound('hit');\n }\n\n // Score\n if (ball.x - ball.radius < 0) {\n rightScore++;\n resetBall();\n playSound('score');\n }\n\n if (ball.x + ball.radius > width) {\n leftScore++;\n resetBall();\n playSound('score');\n }\n}\n\nfunction resetBall() {\n ball.x = width / 2;\n ball.y = height / 2;\n ball.dx = (Math.random() > 0.5 ? -1 : 1) * ball.speed;\n ball.dy = (Math.random() - 0.5) * 8;\n}\n\nfunction draw() {\n ctx.clearRect(0, 0, width, height);\n drawNet();\n drawPaddle(leftPaddle);\n drawPaddle(rightPaddle);\n drawBall();\n drawScore();\n}\n\nfunction update() {\n movePaddles();\n moveBall();\n draw();\n}\n\nfunction gameLoop() {\n if (gameOver) return;\n update();\n requestAnimationFrame(gameLoop);\n}\n\nfunction checkWin() {\n if (leftScore >= winScore || rightScore >= winScore) {\n gameOver = true;\n document.getElementById('gameOver').style.display = 'block';\n document.getElementById('restart').style.display = 'block';\n }\n}\n\nfunction init() {\n leftScore = 0;\n rightScore = 0;\n gameOver = false;\n resetBall();\n document.getElementById('gameOver').style.display = 'none';\n document.getElementById('restart').style.display = 'none';\n gameLoop();\n}\n\ndocument.addEventListener('keydown', function(e) {\n if (e.key === 'w') leftPaddle.dy = -paddleSpeed;\n if (e.key === 's') leftPaddle.dy = paddleSpeed;\n if (e.key === 'ArrowUp') rightPaddle.dy = -paddleSpeed;\n if (e.key === 'ArrowDown') rightPaddle.dy = paddleSpeed;\n});\n\ndocument.addEventListener('keyup', function(e) {\n if (e.key === 'w' || e.key === 's') leftPaddle.dy = 0;\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') rightPaddle.dy = 0;\n});\n\n// Web Audio for sounds\nconst audioCtx = new (window.AudioContext || window.webkitAudioContext)();\n\nfunction playSound(type) {\n if (!audioCtx) return;\n if (audioCtx.state === 'suspended') {\n audioCtx.resume();\n }\n\n const osc = audioCtx.createOscillator();\n const gain = audioCtx.createGain();\n\n osc.type = 'square';\n osc.frequency.value = type === 'hit' ? 1000 : 500;\n gain.gain.setValueAtTime(0.1, audioCtx.currentTime);\n gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.2);\n\n osc.connect(gain);\n gain.connect(audioCtx.destination);\n\n osc.start();\n osc.stop(audioCtx.currentTime + 0.2);\n}\n\ninit();\n</script>\n</body>\n</html>",
+ "remixOf": "f0251ce85742",
+ "remixSource": "qwen3-14b",
+ "designTools": false,
+ "created_at": "2026-07-25T07:49:29.654Z",
+ "winner": null,
+ "runs": [
+ {
+ "model": "qwen3-14b",
+ "status": "queued",
+ "error": null,
+ "seconds": null,
+ "cost": null,
+ "started_at": null,
+ "finished_at": null,
+ "queued_at": "2026-07-25T07:49:29.664Z"
+ },
+ {
+ "model": "gemma3-12b",
+ "status": "queued",
+ "error": null,
+ "seconds": null,
+ "cost": null,
+ "started_at": null,
+ "finished_at": null,
+ "queued_at": "2026-07-25T07:49:29.673Z"
+ },
+ {
+ "model": "hermes3-8b",
+ "status": "queued",
+ "error": null,
+ "seconds": null,
+ "cost": null,
+ "started_at": null,
+ "finished_at": null,
+ "queued_at": "2026-07-25T07:49:29.678Z"
+ },
+ {
+ "model": "qwen25-7b",
+ "status": "running",
+ "error": null,
+ "seconds": null,
+ "cost": null,
+ "started_at": "2026-07-25T07:49:29.690Z",
+ "finished_at": null,
+ "queued_at": "2026-07-25T07:49:29.684Z"
+ },
+ {
+ "model": "hf-qwen-coder-32b",
+ "status": "queued",
+ "error": null,
+ "seconds": null,
+ "cost": null,
+ "started_at": null,
+ "finished_at": null,
+ "queued_at": "2026-07-25T07:49:29.687Z"
+ }
+ ]
}
]
\ No newline at end of file
← 3e64ec7 Beauty gate: auto-remix winners scoring <7 (make it more bea
·
back to Model Arena
·
Fix run-next payload: designTools True (Python bool, not JS 4902051 →