From 77b32f9e2c434a91a6a34a6869291ae144ba26e0 Mon Sep 17 00:00:00 2001 From: Antonio De Lucreziis Date: Thu, 16 May 2024 00:17:40 +0200 Subject: [PATCH] initial commit --- .gitignore | 175 ++++++ README.md | 24 + bun.lockb | Bin 0 -> 59557 bytes index.html | 13 + julia-scripts/generate-ssos.jl | 54 ++ package.json | 25 + public/shortest-squares-v2.txt | 1000 ++++++++++++++++++++++++++++++++ src/main.jsx | 94 +++ src/styles.css | 169 ++++++ tsconfig.json | 30 + vite.config.js | 16 + 11 files changed, 1600 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 index.html create mode 100644 julia-scripts/generate-ssos.jl create mode 100644 package.json create mode 100644 public/shortest-squares-v2.txt create mode 100644 src/main.jsx create mode 100644 src/styles.css create mode 100644 tsconfig.json create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b1ee42 --- /dev/null +++ b/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..fe2ad12 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# Shortest Sum of Squares + +This is a simple web application that shows a precomputed list of the shortest sum of squares for a given number. The list is +generated in Julia and then exported as a text file. The web application is built using Vite and SolidJS. + +## Usage + +### Setup + +```bash +bun install +``` + +### Development + +```bash +bun dev +``` + +### Build + +```bash +bun run build +``` diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..f3caa8b8e1c887f928c3ab51dfe53cd6082a6c2a GIT binary patch literal 59557 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 + + + + + Shortest Sum of Squares + + + +
+ + + diff --git a/julia-scripts/generate-ssos.jl b/julia-scripts/generate-ssos.jl new file mode 100644 index 0000000..ebce979 --- /dev/null +++ b/julia-scripts/generate-ssos.jl @@ -0,0 +1,54 @@ +using Base +using DataStructures + +found = Dict{Int, Array{Int64}}() + +function count_nz(seq) + return length([i for i in seq if i > 0]) +end + +for i1 in 0:32 + for i2 in i1:32 + for i3 in i2:32 + for i4 in i3:32 + s = i1 ^ 2 + i2 ^ 2 + i3 ^ 2 + i4 ^ 2 + + if s <= 1000 + seq = [ i1, i2, i3, i4 ] + + # if !haskey(found, s) + # found[s] = seq + # end + + if haskey(found, s) + s_prev = found[s] + + if count_nz(seq) < count_nz(s_prev) + found[s] = seq + end + else + found[s] = seq + end + end + end + end + end +end + +found = sort(found) + +delete!(found, 0) + +# for i = 1:1000 +# if haskey(found, i) +# print("x") +# else +# print("_") +# end +# end + +for (sum, seq) in found + println("$(join(["$(i)^2" for i in seq if i > 0], " + ")) = $(sum)") +end + +# println(length([k for (k, v) in found if length([i for i in v if i != 0]) == 4])) diff --git a/package.json b/package.json new file mode 100644 index 0000000..aa6b4f1 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "shortest-sum-of-squares", + "version": "0.0.1", + "description": "", + "type": "module", + "scripts": { + "start": "vite", + "dev": "vite", + "build": "vite build", + "serve": "vite preview" + }, + "license": "MIT", + "devDependencies": { + "@types/katex": "^0.16.7", + "solid-devtools": "^0.29.2", + "typescript": "^5.3.3", + "vite": "^5.0.11", + "vite-plugin-solid": "^2.8.2" + }, + "dependencies": { + "@fontsource/geist-sans": "^5.0.3", + "katex": "^0.16.10", + "solid-js": "^1.8.11" + } +} diff --git a/public/shortest-squares-v2.txt b/public/shortest-squares-v2.txt new file mode 100644 index 0000000..b955172 --- /dev/null +++ b/public/shortest-squares-v2.txt @@ -0,0 +1,1000 @@ +1^2 = 1 +1^2 + 1^2 = 2 +1^2 + 1^2 + 1^2 = 3 +2^2 = 4 +1^2 + 2^2 = 5 +1^2 + 1^2 + 2^2 = 6 +1^2 + 1^2 + 1^2 + 2^2 = 7 +2^2 + 2^2 = 8 +3^2 = 9 +1^2 + 3^2 = 10 +1^2 + 1^2 + 3^2 = 11 +2^2 + 2^2 + 2^2 = 12 +2^2 + 3^2 = 13 +1^2 + 2^2 + 3^2 = 14 +1^2 + 1^2 + 2^2 + 3^2 = 15 +4^2 = 16 +1^2 + 4^2 = 17 +3^2 + 3^2 = 18 +1^2 + 3^2 + 3^2 = 19 +2^2 + 4^2 = 20 +1^2 + 2^2 + 4^2 = 21 +2^2 + 3^2 + 3^2 = 22 +1^2 + 2^2 + 3^2 + 3^2 = 23 +2^2 + 2^2 + 4^2 = 24 +5^2 = 25 +1^2 + 5^2 = 26 +1^2 + 1^2 + 5^2 = 27 +1^2 + 1^2 + 1^2 + 5^2 = 28 +2^2 + 5^2 = 29 +1^2 + 2^2 + 5^2 = 30 +1^2 + 1^2 + 2^2 + 5^2 = 31 +4^2 + 4^2 = 32 +1^2 + 4^2 + 4^2 = 33 +3^2 + 5^2 = 34 +1^2 + 3^2 + 5^2 = 35 +6^2 = 36 +1^2 + 6^2 = 37 +1^2 + 1^2 + 6^2 = 38 +1^2 + 1^2 + 1^2 + 6^2 = 39 +2^2 + 6^2 = 40 +4^2 + 5^2 = 41 +1^2 + 4^2 + 5^2 = 42 +3^2 + 3^2 + 5^2 = 43 +2^2 + 2^2 + 6^2 = 44 +3^2 + 6^2 = 45 +1^2 + 3^2 + 6^2 = 46 +1^2 + 1^2 + 3^2 + 6^2 = 47 +4^2 + 4^2 + 4^2 = 48 +7^2 = 49 +1^2 + 7^2 = 50 +1^2 + 1^2 + 7^2 = 51 +4^2 + 6^2 = 52 +2^2 + 7^2 = 53 +1^2 + 2^2 + 7^2 = 54 +1^2 + 1^2 + 2^2 + 7^2 = 55 +2^2 + 4^2 + 6^2 = 56 +2^2 + 2^2 + 7^2 = 57 +3^2 + 7^2 = 58 +1^2 + 3^2 + 7^2 = 59 +1^2 + 1^2 + 3^2 + 7^2 = 60 +5^2 + 6^2 = 61 +1^2 + 5^2 + 6^2 = 62 +1^2 + 1^2 + 5^2 + 6^2 = 63 +8^2 = 64 +1^2 + 8^2 = 65 +1^2 + 1^2 + 8^2 = 66 +3^2 + 3^2 + 7^2 = 67 +2^2 + 8^2 = 68 +1^2 + 2^2 + 8^2 = 69 +3^2 + 5^2 + 6^2 = 70 +1^2 + 3^2 + 5^2 + 6^2 = 71 +6^2 + 6^2 = 72 +3^2 + 8^2 = 73 +5^2 + 7^2 = 74 +1^2 + 5^2 + 7^2 = 75 +2^2 + 6^2 + 6^2 = 76 +2^2 + 3^2 + 8^2 = 77 +2^2 + 5^2 + 7^2 = 78 +1^2 + 2^2 + 5^2 + 7^2 = 79 +4^2 + 8^2 = 80 +9^2 = 81 +1^2 + 9^2 = 82 +1^2 + 1^2 + 9^2 = 83 +2^2 + 4^2 + 8^2 = 84 +2^2 + 9^2 = 85 +1^2 + 2^2 + 9^2 = 86 +1^2 + 1^2 + 2^2 + 9^2 = 87 +4^2 + 6^2 + 6^2 = 88 +5^2 + 8^2 = 89 +3^2 + 9^2 = 90 +1^2 + 3^2 + 9^2 = 91 +1^2 + 1^2 + 3^2 + 9^2 = 92 +2^2 + 5^2 + 8^2 = 93 +2^2 + 3^2 + 9^2 = 94 +1^2 + 2^2 + 3^2 + 9^2 = 95 +4^2 + 4^2 + 8^2 = 96 +4^2 + 9^2 = 97 +7^2 + 7^2 = 98 +1^2 + 7^2 + 7^2 = 99 +10^2 = 100 +1^2 + 10^2 = 101 +1^2 + 1^2 + 10^2 = 102 +1^2 + 1^2 + 1^2 + 10^2 = 103 +2^2 + 10^2 = 104 +1^2 + 2^2 + 10^2 = 105 +5^2 + 9^2 = 106 +1^2 + 5^2 + 9^2 = 107 +2^2 + 2^2 + 10^2 = 108 +3^2 + 10^2 = 109 +1^2 + 3^2 + 10^2 = 110 +1^2 + 1^2 + 3^2 + 10^2 = 111 +2^2 + 2^2 + 2^2 + 10^2 = 112 +7^2 + 8^2 = 113 +1^2 + 7^2 + 8^2 = 114 +3^2 + 5^2 + 9^2 = 115 +4^2 + 10^2 = 116 +6^2 + 9^2 = 117 +1^2 + 6^2 + 9^2 = 118 +1^2 + 1^2 + 6^2 + 9^2 = 119 +2^2 + 4^2 + 10^2 = 120 +11^2 = 121 +1^2 + 11^2 = 122 +1^2 + 1^2 + 11^2 = 123 +1^2 + 1^2 + 1^2 + 11^2 = 124 +2^2 + 11^2 = 125 +1^2 + 2^2 + 11^2 = 126 +1^2 + 1^2 + 2^2 + 11^2 = 127 +8^2 + 8^2 = 128 +1^2 + 8^2 + 8^2 = 129 +3^2 + 11^2 = 130 +1^2 + 3^2 + 11^2 = 131 +2^2 + 8^2 + 8^2 = 132 +4^2 + 6^2 + 9^2 = 133 +2^2 + 3^2 + 11^2 = 134 +1^2 + 2^2 + 3^2 + 11^2 = 135 +6^2 + 10^2 = 136 +4^2 + 11^2 = 137 +1^2 + 4^2 + 11^2 = 138 +3^2 + 3^2 + 11^2 = 139 +2^2 + 6^2 + 10^2 = 140 +2^2 + 4^2 + 11^2 = 141 +5^2 + 6^2 + 9^2 = 142 +1^2 + 5^2 + 6^2 + 9^2 = 143 +12^2 = 144 +1^2 + 12^2 = 145 +5^2 + 11^2 = 146 +1^2 + 5^2 + 11^2 = 147 +2^2 + 12^2 = 148 +7^2 + 10^2 = 149 +1^2 + 7^2 + 10^2 = 150 +1^2 + 1^2 + 7^2 + 10^2 = 151 +2^2 + 2^2 + 12^2 = 152 +3^2 + 12^2 = 153 +1^2 + 3^2 + 12^2 = 154 +3^2 + 5^2 + 11^2 = 155 +1^2 + 3^2 + 5^2 + 11^2 = 156 +6^2 + 11^2 = 157 +1^2 + 6^2 + 11^2 = 158 +1^2 + 1^2 + 6^2 + 11^2 = 159 +4^2 + 12^2 = 160 +1^2 + 4^2 + 12^2 = 161 +9^2 + 9^2 = 162 +1^2 + 9^2 + 9^2 = 163 +8^2 + 10^2 = 164 +1^2 + 8^2 + 10^2 = 165 +2^2 + 9^2 + 9^2 = 166 +1^2 + 2^2 + 9^2 + 9^2 = 167 +2^2 + 8^2 + 10^2 = 168 +13^2 = 169 +1^2 + 13^2 = 170 +1^2 + 1^2 + 13^2 = 171 +6^2 + 6^2 + 10^2 = 172 +2^2 + 13^2 = 173 +1^2 + 2^2 + 13^2 = 174 +1^2 + 1^2 + 2^2 + 13^2 = 175 +4^2 + 4^2 + 12^2 = 176 +2^2 + 2^2 + 13^2 = 177 +3^2 + 13^2 = 178 +1^2 + 3^2 + 13^2 = 179 +6^2 + 12^2 = 180 +9^2 + 10^2 = 181 +1^2 + 9^2 + 10^2 = 182 +1^2 + 1^2 + 9^2 + 10^2 = 183 +2^2 + 6^2 + 12^2 = 184 +4^2 + 13^2 = 185 +1^2 + 4^2 + 13^2 = 186 +3^2 + 3^2 + 13^2 = 187 +1^2 + 3^2 + 3^2 + 13^2 = 188 +2^2 + 4^2 + 13^2 = 189 +3^2 + 9^2 + 10^2 = 190 +1^2 + 3^2 + 9^2 + 10^2 = 191 +8^2 + 8^2 + 8^2 = 192 +7^2 + 12^2 = 193 +5^2 + 13^2 = 194 +1^2 + 5^2 + 13^2 = 195 +14^2 = 196 +1^2 + 14^2 = 197 +1^2 + 1^2 + 14^2 = 198 +1^2 + 1^2 + 1^2 + 14^2 = 199 +2^2 + 14^2 = 200 +1^2 + 2^2 + 14^2 = 201 +9^2 + 11^2 = 202 +1^2 + 9^2 + 11^2 = 203 +2^2 + 2^2 + 14^2 = 204 +3^2 + 14^2 = 205 +1^2 + 3^2 + 14^2 = 206 +1^2 + 1^2 + 3^2 + 14^2 = 207 +8^2 + 12^2 = 208 +1^2 + 8^2 + 12^2 = 209 +4^2 + 5^2 + 13^2 = 210 +3^2 + 9^2 + 11^2 = 211 +4^2 + 14^2 = 212 +1^2 + 4^2 + 14^2 = 213 +3^2 + 3^2 + 14^2 = 214 +1^2 + 3^2 + 3^2 + 14^2 = 215 +2^2 + 4^2 + 14^2 = 216 +3^2 + 8^2 + 12^2 = 217 +7^2 + 13^2 = 218 +1^2 + 7^2 + 13^2 = 219 +1^2 + 1^2 + 7^2 + 13^2 = 220 +5^2 + 14^2 = 221 +1^2 + 5^2 + 14^2 = 222 +1^2 + 1^2 + 5^2 + 14^2 = 223 +4^2 + 8^2 + 12^2 = 224 +15^2 = 225 +1^2 + 15^2 = 226 +1^2 + 1^2 + 15^2 = 227 +4^2 + 4^2 + 14^2 = 228 +2^2 + 15^2 = 229 +1^2 + 2^2 + 15^2 = 230 +1^2 + 1^2 + 2^2 + 15^2 = 231 +6^2 + 14^2 = 232 +8^2 + 13^2 = 233 +3^2 + 15^2 = 234 +1^2 + 3^2 + 15^2 = 235 +2^2 + 6^2 + 14^2 = 236 +2^2 + 8^2 + 13^2 = 237 +2^2 + 3^2 + 15^2 = 238 +1^2 + 2^2 + 3^2 + 15^2 = 239 +2^2 + 2^2 + 6^2 + 14^2 = 240 +4^2 + 15^2 = 241 +11^2 + 11^2 = 242 +1^2 + 11^2 + 11^2 = 243 +10^2 + 12^2 = 244 +7^2 + 14^2 = 245 +1^2 + 7^2 + 14^2 = 246 +1^2 + 1^2 + 7^2 + 14^2 = 247 +2^2 + 10^2 + 12^2 = 248 +2^2 + 7^2 + 14^2 = 249 +5^2 + 15^2 = 250 +1^2 + 5^2 + 15^2 = 251 +1^2 + 1^2 + 5^2 + 15^2 = 252 +3^2 + 10^2 + 12^2 = 253 +2^2 + 5^2 + 15^2 = 254 +1^2 + 2^2 + 5^2 + 15^2 = 255 +16^2 = 256 +1^2 + 16^2 = 257 +1^2 + 1^2 + 16^2 = 258 +3^2 + 5^2 + 15^2 = 259 +2^2 + 16^2 = 260 +6^2 + 15^2 = 261 +1^2 + 6^2 + 15^2 = 262 +1^2 + 1^2 + 6^2 + 15^2 = 263 +2^2 + 2^2 + 16^2 = 264 +3^2 + 16^2 = 265 +1^2 + 3^2 + 16^2 = 266 +5^2 + 11^2 + 11^2 = 267 +6^2 + 6^2 + 14^2 = 268 +10^2 + 13^2 = 269 +1^2 + 10^2 + 13^2 = 270 +1^2 + 1^2 + 10^2 + 13^2 = 271 +4^2 + 16^2 = 272 +1^2 + 4^2 + 16^2 = 273 +7^2 + 15^2 = 274 +1^2 + 7^2 + 15^2 = 275 +2^2 + 4^2 + 16^2 = 276 +9^2 + 14^2 = 277 +1^2 + 9^2 + 14^2 = 278 +1^2 + 1^2 + 9^2 + 14^2 = 279 +6^2 + 10^2 + 12^2 = 280 +5^2 + 16^2 = 281 +1^2 + 5^2 + 16^2 = 282 +3^2 + 7^2 + 15^2 = 283 +1^2 + 3^2 + 7^2 + 15^2 = 284 +2^2 + 5^2 + 16^2 = 285 +3^2 + 9^2 + 14^2 = 286 +1^2 + 3^2 + 9^2 + 14^2 = 287 +12^2 + 12^2 = 288 +17^2 = 289 +1^2 + 17^2 = 290 +1^2 + 1^2 + 17^2 = 291 +6^2 + 16^2 = 292 +2^2 + 17^2 = 293 +1^2 + 2^2 + 17^2 = 294 +1^2 + 1^2 + 2^2 + 17^2 = 295 +10^2 + 14^2 = 296 +1^2 + 10^2 + 14^2 = 297 +3^2 + 17^2 = 298 +1^2 + 3^2 + 17^2 = 299 +2^2 + 10^2 + 14^2 = 300 +3^2 + 6^2 + 16^2 = 301 +2^2 + 3^2 + 17^2 = 302 +1^2 + 2^2 + 3^2 + 17^2 = 303 +4^2 + 12^2 + 12^2 = 304 +4^2 + 17^2 = 305 +9^2 + 15^2 = 306 +1^2 + 9^2 + 15^2 = 307 +4^2 + 6^2 + 16^2 = 308 +2^2 + 4^2 + 17^2 = 309 +2^2 + 9^2 + 15^2 = 310 +1^2 + 2^2 + 9^2 + 15^2 = 311 +4^2 + 10^2 + 14^2 = 312 +12^2 + 13^2 = 313 +5^2 + 17^2 = 314 +1^2 + 5^2 + 17^2 = 315 +1^2 + 1^2 + 5^2 + 17^2 = 316 +11^2 + 14^2 = 317 +1^2 + 11^2 + 14^2 = 318 +1^2 + 1^2 + 11^2 + 14^2 = 319 +8^2 + 16^2 = 320 +1^2 + 8^2 + 16^2 = 321 +3^2 + 12^2 + 13^2 = 322 +3^2 + 5^2 + 17^2 = 323 +18^2 = 324 +1^2 + 18^2 = 325 +1^2 + 1^2 + 18^2 = 326 +1^2 + 1^2 + 1^2 + 18^2 = 327 +2^2 + 18^2 = 328 +1^2 + 2^2 + 18^2 = 329 +4^2 + 5^2 + 17^2 = 330 +5^2 + 9^2 + 15^2 = 331 +2^2 + 2^2 + 18^2 = 332 +3^2 + 18^2 = 333 +1^2 + 3^2 + 18^2 = 334 +1^2 + 1^2 + 3^2 + 18^2 = 335 +4^2 + 8^2 + 16^2 = 336 +9^2 + 16^2 = 337 +7^2 + 17^2 = 338 +1^2 + 7^2 + 17^2 = 339 +4^2 + 18^2 = 340 +1^2 + 4^2 + 18^2 = 341 +2^2 + 7^2 + 17^2 = 342 +1^2 + 2^2 + 7^2 + 17^2 = 343 +2^2 + 4^2 + 18^2 = 344 +5^2 + 8^2 + 16^2 = 345 +11^2 + 15^2 = 346 +1^2 + 11^2 + 15^2 = 347 +1^2 + 1^2 + 11^2 + 15^2 = 348 +5^2 + 18^2 = 349 +1^2 + 5^2 + 18^2 = 350 +1^2 + 1^2 + 5^2 + 18^2 = 351 +8^2 + 12^2 + 12^2 = 352 +8^2 + 17^2 = 353 +1^2 + 8^2 + 17^2 = 354 +3^2 + 11^2 + 15^2 = 355 +10^2 + 16^2 = 356 +1^2 + 10^2 + 16^2 = 357 +3^2 + 5^2 + 18^2 = 358 +1^2 + 3^2 + 5^2 + 18^2 = 359 +6^2 + 18^2 = 360 +19^2 = 361 +1^2 + 19^2 = 362 +1^2 + 1^2 + 19^2 = 363 +2^2 + 6^2 + 18^2 = 364 +2^2 + 19^2 = 365 +1^2 + 2^2 + 19^2 = 366 +1^2 + 1^2 + 2^2 + 19^2 = 367 +2^2 + 2^2 + 6^2 + 18^2 = 368 +12^2 + 15^2 = 369 +3^2 + 19^2 = 370 +1^2 + 3^2 + 19^2 = 371 +4^2 + 10^2 + 16^2 = 372 +7^2 + 18^2 = 373 +1^2 + 7^2 + 18^2 = 374 +1^2 + 1^2 + 7^2 + 18^2 = 375 +4^2 + 6^2 + 18^2 = 376 +4^2 + 19^2 = 377 +1^2 + 4^2 + 19^2 = 378 +3^2 + 3^2 + 19^2 = 379 +1^2 + 3^2 + 3^2 + 19^2 = 380 +2^2 + 4^2 + 19^2 = 381 +3^2 + 7^2 + 18^2 = 382 +1^2 + 3^2 + 7^2 + 18^2 = 383 +8^2 + 8^2 + 16^2 = 384 +4^2 + 12^2 + 15^2 = 385 +5^2 + 19^2 = 386 +1^2 + 5^2 + 19^2 = 387 +8^2 + 18^2 = 388 +10^2 + 17^2 = 389 +1^2 + 10^2 + 17^2 = 390 +1^2 + 1^2 + 10^2 + 17^2 = 391 +14^2 + 14^2 = 392 +1^2 + 14^2 + 14^2 = 393 +13^2 + 15^2 = 394 +1^2 + 13^2 + 15^2 = 395 +2^2 + 14^2 + 14^2 = 396 +6^2 + 19^2 = 397 +1^2 + 6^2 + 19^2 = 398 +1^2 + 1^2 + 6^2 + 19^2 = 399 +20^2 = 400 +1^2 + 20^2 = 401 +1^2 + 1^2 + 20^2 = 402 +3^2 + 13^2 + 15^2 = 403 +2^2 + 20^2 = 404 +9^2 + 18^2 = 405 +1^2 + 9^2 + 18^2 = 406 +1^2 + 1^2 + 9^2 + 18^2 = 407 +2^2 + 2^2 + 20^2 = 408 +3^2 + 20^2 = 409 +7^2 + 19^2 = 410 +1^2 + 7^2 + 19^2 = 411 +1^2 + 1^2 + 7^2 + 19^2 = 412 +2^2 + 3^2 + 20^2 = 413 +2^2 + 7^2 + 19^2 = 414 +1^2 + 2^2 + 7^2 + 19^2 = 415 +4^2 + 20^2 = 416 +1^2 + 4^2 + 20^2 = 417 +3^2 + 3^2 + 20^2 = 418 +3^2 + 7^2 + 19^2 = 419 +2^2 + 4^2 + 20^2 = 420 +14^2 + 15^2 = 421 +1^2 + 14^2 + 15^2 = 422 +1^2 + 1^2 + 14^2 + 15^2 = 423 +10^2 + 18^2 = 424 +5^2 + 20^2 = 425 +1^2 + 5^2 + 20^2 = 426 +9^2 + 11^2 + 15^2 = 427 +2^2 + 10^2 + 18^2 = 428 +2^2 + 5^2 + 20^2 = 429 +3^2 + 14^2 + 15^2 = 430 +1^2 + 3^2 + 14^2 + 15^2 = 431 +4^2 + 4^2 + 20^2 = 432 +12^2 + 17^2 = 433 +1^2 + 12^2 + 17^2 = 434 +5^2 + 7^2 + 19^2 = 435 +6^2 + 20^2 = 436 +1^2 + 6^2 + 20^2 = 437 +7^2 + 10^2 + 17^2 = 438 +1^2 + 7^2 + 10^2 + 17^2 = 439 +2^2 + 6^2 + 20^2 = 440 +21^2 = 441 +1^2 + 21^2 = 442 +1^2 + 1^2 + 21^2 = 443 +1^2 + 1^2 + 1^2 + 21^2 = 444 +2^2 + 21^2 = 445 +1^2 + 2^2 + 21^2 = 446 +1^2 + 1^2 + 2^2 + 21^2 = 447 +4^2 + 4^2 + 4^2 + 20^2 = 448 +7^2 + 20^2 = 449 +3^2 + 21^2 = 450 +1^2 + 3^2 + 21^2 = 451 +14^2 + 16^2 = 452 +1^2 + 14^2 + 16^2 = 453 +2^2 + 3^2 + 21^2 = 454 +1^2 + 2^2 + 3^2 + 21^2 = 455 +2^2 + 14^2 + 16^2 = 456 +4^2 + 21^2 = 457 +13^2 + 17^2 = 458 +1^2 + 13^2 + 17^2 = 459 +6^2 + 10^2 + 18^2 = 460 +10^2 + 19^2 = 461 +1^2 + 10^2 + 19^2 = 462 +1^2 + 1^2 + 10^2 + 19^2 = 463 +8^2 + 20^2 = 464 +1^2 + 8^2 + 20^2 = 465 +5^2 + 21^2 = 466 +1^2 + 5^2 + 21^2 = 467 +12^2 + 18^2 = 468 +1^2 + 12^2 + 18^2 = 469 +2^2 + 5^2 + 21^2 = 470 +1^2 + 2^2 + 5^2 + 21^2 = 471 +2^2 + 12^2 + 18^2 = 472 +3^2 + 8^2 + 20^2 = 473 +4^2 + 13^2 + 17^2 = 474 +3^2 + 5^2 + 21^2 = 475 +1^2 + 3^2 + 5^2 + 21^2 = 476 +6^2 + 21^2 = 477 +1^2 + 6^2 + 21^2 = 478 +1^2 + 1^2 + 6^2 + 21^2 = 479 +4^2 + 8^2 + 20^2 = 480 +9^2 + 20^2 = 481 +11^2 + 19^2 = 482 +1^2 + 11^2 + 19^2 = 483 +22^2 = 484 +1^2 + 22^2 = 485 +1^2 + 1^2 + 22^2 = 486 +1^2 + 1^2 + 1^2 + 22^2 = 487 +2^2 + 22^2 = 488 +1^2 + 2^2 + 22^2 = 489 +7^2 + 21^2 = 490 +1^2 + 7^2 + 21^2 = 491 +2^2 + 2^2 + 22^2 = 492 +3^2 + 22^2 = 493 +1^2 + 3^2 + 22^2 = 494 +1^2 + 1^2 + 3^2 + 22^2 = 495 +2^2 + 2^2 + 2^2 + 22^2 = 496 +2^2 + 3^2 + 22^2 = 497 +4^2 + 11^2 + 19^2 = 498 +3^2 + 7^2 + 21^2 = 499 +4^2 + 22^2 = 500 +1^2 + 4^2 + 22^2 = 501 +3^2 + 3^2 + 22^2 = 502 +1^2 + 3^2 + 3^2 + 22^2 = 503 +2^2 + 4^2 + 22^2 = 504 +8^2 + 21^2 = 505 +1^2 + 8^2 + 21^2 = 506 +5^2 + 11^2 + 19^2 = 507 +1^2 + 5^2 + 11^2 + 19^2 = 508 +5^2 + 22^2 = 509 +1^2 + 5^2 + 22^2 = 510 +1^2 + 1^2 + 5^2 + 22^2 = 511 +16^2 + 16^2 = 512 +1^2 + 16^2 + 16^2 = 513 +15^2 + 17^2 = 514 +1^2 + 15^2 + 17^2 = 515 +2^2 + 16^2 + 16^2 = 516 +6^2 + 9^2 + 20^2 = 517 +2^2 + 15^2 + 17^2 = 518 +1^2 + 2^2 + 15^2 + 17^2 = 519 +6^2 + 22^2 = 520 +11^2 + 20^2 = 521 +9^2 + 21^2 = 522 +1^2 + 9^2 + 21^2 = 523 +2^2 + 6^2 + 22^2 = 524 +2^2 + 11^2 + 20^2 = 525 +2^2 + 9^2 + 21^2 = 526 +1^2 + 2^2 + 9^2 + 21^2 = 527 +4^2 + 16^2 + 16^2 = 528 +23^2 = 529 +1^2 + 23^2 = 530 +1^2 + 1^2 + 23^2 = 531 +8^2 + 12^2 + 18^2 = 532 +2^2 + 23^2 = 533 +1^2 + 2^2 + 23^2 = 534 +1^2 + 1^2 + 2^2 + 23^2 = 535 +4^2 + 6^2 + 22^2 = 536 +2^2 + 2^2 + 23^2 = 537 +3^2 + 23^2 = 538 +1^2 + 3^2 + 23^2 = 539 +1^2 + 1^2 + 3^2 + 23^2 = 540 +10^2 + 21^2 = 541 +1^2 + 10^2 + 21^2 = 542 +1^2 + 1^2 + 10^2 + 21^2 = 543 +12^2 + 20^2 = 544 +4^2 + 23^2 = 545 +1^2 + 4^2 + 23^2 = 546 +3^2 + 3^2 + 23^2 = 547 +8^2 + 22^2 = 548 +15^2 + 18^2 = 549 +1^2 + 15^2 + 18^2 = 550 +1^2 + 1^2 + 15^2 + 18^2 = 551 +2^2 + 8^2 + 22^2 = 552 +2^2 + 15^2 + 18^2 = 553 +5^2 + 23^2 = 554 +1^2 + 5^2 + 23^2 = 555 +6^2 + 6^2 + 22^2 = 556 +14^2 + 19^2 = 557 +1^2 + 14^2 + 19^2 = 558 +1^2 + 1^2 + 14^2 + 19^2 = 559 +4^2 + 12^2 + 20^2 = 560 +2^2 + 14^2 + 19^2 = 561 +11^2 + 21^2 = 562 +1^2 + 11^2 + 21^2 = 563 +4^2 + 8^2 + 22^2 = 564 +6^2 + 23^2 = 565 +1^2 + 6^2 + 23^2 = 566 +1^2 + 1^2 + 6^2 + 23^2 = 567 +10^2 + 12^2 + 18^2 = 568 +13^2 + 20^2 = 569 +1^2 + 13^2 + 20^2 = 570 +3^2 + 11^2 + 21^2 = 571 +1^2 + 3^2 + 11^2 + 21^2 = 572 +2^2 + 13^2 + 20^2 = 573 +3^2 + 6^2 + 23^2 = 574 +1^2 + 3^2 + 6^2 + 23^2 = 575 +24^2 = 576 +1^2 + 24^2 = 577 +7^2 + 23^2 = 578 +1^2 + 7^2 + 23^2 = 579 +2^2 + 24^2 = 580 +1^2 + 2^2 + 24^2 = 581 +2^2 + 7^2 + 23^2 = 582 +1^2 + 2^2 + 7^2 + 23^2 = 583 +10^2 + 22^2 = 584 +3^2 + 24^2 = 585 +15^2 + 19^2 = 586 +1^2 + 15^2 + 19^2 = 587 +2^2 + 10^2 + 22^2 = 588 +2^2 + 3^2 + 24^2 = 589 +2^2 + 15^2 + 19^2 = 590 +1^2 + 2^2 + 15^2 + 19^2 = 591 +4^2 + 24^2 = 592 +8^2 + 23^2 = 593 +1^2 + 8^2 + 23^2 = 594 +3^2 + 15^2 + 19^2 = 595 +14^2 + 20^2 = 596 +1^2 + 14^2 + 20^2 = 597 +6^2 + 11^2 + 21^2 = 598 +1^2 + 6^2 + 11^2 + 21^2 = 599 +2^2 + 14^2 + 20^2 = 600 +5^2 + 24^2 = 601 +1^2 + 5^2 + 24^2 = 602 +5^2 + 7^2 + 23^2 = 603 +1^2 + 5^2 + 7^2 + 23^2 = 604 +11^2 + 22^2 = 605 +1^2 + 11^2 + 22^2 = 606 +1^2 + 1^2 + 11^2 + 22^2 = 607 +4^2 + 4^2 + 24^2 = 608 +2^2 + 11^2 + 22^2 = 609 +9^2 + 23^2 = 610 +1^2 + 9^2 + 23^2 = 611 +6^2 + 24^2 = 612 +17^2 + 18^2 = 613 +1^2 + 17^2 + 18^2 = 614 +1^2 + 1^2 + 17^2 + 18^2 = 615 +2^2 + 6^2 + 24^2 = 616 +16^2 + 19^2 = 617 +1^2 + 16^2 + 19^2 = 618 +3^2 + 9^2 + 23^2 = 619 +6^2 + 10^2 + 22^2 = 620 +2^2 + 16^2 + 19^2 = 621 +3^2 + 17^2 + 18^2 = 622 +1^2 + 3^2 + 17^2 + 18^2 = 623 +2^2 + 6^2 + 10^2 + 22^2 = 624 +25^2 = 625 +1^2 + 25^2 = 626 +1^2 + 1^2 + 25^2 = 627 +12^2 + 22^2 = 628 +2^2 + 25^2 = 629 +1^2 + 2^2 + 25^2 = 630 +1^2 + 1^2 + 2^2 + 25^2 = 631 +2^2 + 12^2 + 22^2 = 632 +2^2 + 2^2 + 25^2 = 633 +3^2 + 25^2 = 634 +1^2 + 3^2 + 25^2 = 635 +1^2 + 1^2 + 3^2 + 25^2 = 636 +14^2 + 21^2 = 637 +1^2 + 14^2 + 21^2 = 638 +1^2 + 1^2 + 14^2 + 21^2 = 639 +8^2 + 24^2 = 640 +4^2 + 25^2 = 641 +1^2 + 4^2 + 25^2 = 642 +3^2 + 3^2 + 25^2 = 643 +2^2 + 8^2 + 24^2 = 644 +2^2 + 4^2 + 25^2 = 645 +3^2 + 14^2 + 21^2 = 646 +1^2 + 3^2 + 14^2 + 21^2 = 647 +18^2 + 18^2 = 648 +1^2 + 18^2 + 18^2 = 649 +5^2 + 25^2 = 650 +1^2 + 5^2 + 25^2 = 651 +2^2 + 18^2 + 18^2 = 652 +13^2 + 22^2 = 653 +1^2 + 13^2 + 22^2 = 654 +1^2 + 1^2 + 13^2 + 22^2 = 655 +16^2 + 20^2 = 656 +9^2 + 24^2 = 657 +1^2 + 9^2 + 24^2 = 658 +3^2 + 5^2 + 25^2 = 659 +2^2 + 16^2 + 20^2 = 660 +6^2 + 25^2 = 661 +1^2 + 6^2 + 25^2 = 662 +1^2 + 1^2 + 6^2 + 25^2 = 663 +4^2 + 18^2 + 18^2 = 664 +2^2 + 6^2 + 25^2 = 665 +15^2 + 21^2 = 666 +1^2 + 15^2 + 21^2 = 667 +1^2 + 1^2 + 15^2 + 21^2 = 668 +4^2 + 13^2 + 22^2 = 669 +2^2 + 15^2 + 21^2 = 670 +1^2 + 2^2 + 15^2 + 21^2 = 671 +4^2 + 16^2 + 20^2 = 672 +12^2 + 23^2 = 673 +7^2 + 25^2 = 674 +1^2 + 7^2 + 25^2 = 675 +26^2 = 676 +1^2 + 26^2 = 677 +1^2 + 1^2 + 26^2 = 678 +1^2 + 1^2 + 1^2 + 26^2 = 679 +2^2 + 26^2 = 680 +1^2 + 2^2 + 26^2 = 681 +3^2 + 12^2 + 23^2 = 682 +3^2 + 7^2 + 25^2 = 683 +2^2 + 2^2 + 26^2 = 684 +3^2 + 26^2 = 685 +1^2 + 3^2 + 26^2 = 686 +1^2 + 1^2 + 3^2 + 26^2 = 687 +12^2 + 12^2 + 20^2 = 688 +8^2 + 25^2 = 689 +1^2 + 8^2 + 25^2 = 690 +5^2 + 15^2 + 21^2 = 691 +4^2 + 26^2 = 692 +1^2 + 4^2 + 26^2 = 693 +3^2 + 3^2 + 26^2 = 694 +1^2 + 3^2 + 3^2 + 26^2 = 695 +2^2 + 4^2 + 26^2 = 696 +11^2 + 24^2 = 697 +13^2 + 23^2 = 698 +1^2 + 13^2 + 23^2 = 699 +1^2 + 1^2 + 13^2 + 23^2 = 700 +5^2 + 26^2 = 701 +1^2 + 5^2 + 26^2 = 702 +1^2 + 1^2 + 5^2 + 26^2 = 703 +8^2 + 8^2 + 24^2 = 704 +2^2 + 5^2 + 26^2 = 705 +9^2 + 25^2 = 706 +1^2 + 9^2 + 25^2 = 707 +4^2 + 4^2 + 26^2 = 708 +15^2 + 22^2 = 709 +1^2 + 15^2 + 22^2 = 710 +1^2 + 1^2 + 15^2 + 22^2 = 711 +6^2 + 26^2 = 712 +1^2 + 6^2 + 26^2 = 713 +4^2 + 13^2 + 23^2 = 714 +3^2 + 9^2 + 25^2 = 715 +2^2 + 6^2 + 26^2 = 716 +4^2 + 5^2 + 26^2 = 717 +3^2 + 15^2 + 22^2 = 718 +1^2 + 3^2 + 15^2 + 22^2 = 719 +12^2 + 24^2 = 720 +1^2 + 12^2 + 24^2 = 721 +19^2 + 19^2 = 722 +1^2 + 19^2 + 19^2 = 723 +18^2 + 20^2 = 724 +7^2 + 26^2 = 725 +1^2 + 7^2 + 26^2 = 726 +1^2 + 1^2 + 7^2 + 26^2 = 727 +2^2 + 18^2 + 20^2 = 728 +27^2 = 729 +1^2 + 27^2 = 730 +1^2 + 1^2 + 27^2 = 731 +1^2 + 1^2 + 1^2 + 27^2 = 732 +2^2 + 27^2 = 733 +1^2 + 2^2 + 27^2 = 734 +1^2 + 1^2 + 2^2 + 27^2 = 735 +4^2 + 12^2 + 24^2 = 736 +2^2 + 2^2 + 27^2 = 737 +3^2 + 27^2 = 738 +1^2 + 3^2 + 27^2 = 739 +8^2 + 26^2 = 740 +1^2 + 8^2 + 26^2 = 741 +2^2 + 3^2 + 27^2 = 742 +1^2 + 2^2 + 3^2 + 27^2 = 743 +2^2 + 8^2 + 26^2 = 744 +4^2 + 27^2 = 745 +11^2 + 25^2 = 746 +1^2 + 11^2 + 25^2 = 747 +6^2 + 6^2 + 26^2 = 748 +2^2 + 4^2 + 27^2 = 749 +2^2 + 11^2 + 25^2 = 750 +1^2 + 2^2 + 11^2 + 25^2 = 751 +2^2 + 6^2 + 6^2 + 26^2 = 752 +8^2 + 8^2 + 25^2 = 753 +5^2 + 27^2 = 754 +1^2 + 5^2 + 27^2 = 755 +4^2 + 8^2 + 26^2 = 756 +9^2 + 26^2 = 757 +1^2 + 9^2 + 26^2 = 758 +1^2 + 1^2 + 9^2 + 26^2 = 759 +6^2 + 18^2 + 20^2 = 760 +19^2 + 20^2 = 761 +1^2 + 19^2 + 20^2 = 762 +3^2 + 5^2 + 27^2 = 763 +1^2 + 3^2 + 5^2 + 27^2 = 764 +6^2 + 27^2 = 765 +1^2 + 6^2 + 27^2 = 766 +1^2 + 1^2 + 6^2 + 27^2 = 767 +16^2 + 16^2 + 16^2 = 768 +12^2 + 25^2 = 769 +1^2 + 12^2 + 25^2 = 770 +5^2 + 11^2 + 25^2 = 771 +14^2 + 24^2 = 772 +17^2 + 22^2 = 773 +1^2 + 17^2 + 22^2 = 774 +1^2 + 1^2 + 17^2 + 22^2 = 775 +10^2 + 26^2 = 776 +1^2 + 10^2 + 26^2 = 777 +7^2 + 27^2 = 778 +1^2 + 7^2 + 27^2 = 779 +2^2 + 10^2 + 26^2 = 780 +3^2 + 14^2 + 24^2 = 781 +2^2 + 7^2 + 27^2 = 782 +1^2 + 2^2 + 7^2 + 27^2 = 783 +28^2 = 784 +1^2 + 28^2 = 785 +1^2 + 1^2 + 28^2 = 786 +3^2 + 7^2 + 27^2 = 787 +2^2 + 28^2 = 788 +1^2 + 2^2 + 28^2 = 789 +5^2 + 6^2 + 27^2 = 790 +1^2 + 5^2 + 6^2 + 27^2 = 791 +2^2 + 2^2 + 28^2 = 792 +3^2 + 28^2 = 793 +13^2 + 25^2 = 794 +1^2 + 13^2 + 25^2 = 795 +1^2 + 1^2 + 13^2 + 25^2 = 796 +11^2 + 26^2 = 797 +1^2 + 11^2 + 26^2 = 798 +1^2 + 1^2 + 11^2 + 26^2 = 799 +4^2 + 28^2 = 800 +15^2 + 24^2 = 801 +19^2 + 21^2 = 802 +1^2 + 19^2 + 21^2 = 803 +2^2 + 4^2 + 28^2 = 804 +2^2 + 15^2 + 24^2 = 805 +2^2 + 19^2 + 21^2 = 806 +1^2 + 2^2 + 19^2 + 21^2 = 807 +18^2 + 22^2 = 808 +5^2 + 28^2 = 809 +9^2 + 27^2 = 810 +1^2 + 9^2 + 27^2 = 811 +2^2 + 18^2 + 22^2 = 812 +2^2 + 5^2 + 28^2 = 813 +2^2 + 9^2 + 27^2 = 814 +1^2 + 2^2 + 9^2 + 27^2 = 815 +4^2 + 4^2 + 28^2 = 816 +3^2 + 18^2 + 22^2 = 817 +17^2 + 23^2 = 818 +1^2 + 17^2 + 23^2 = 819 +6^2 + 28^2 = 820 +14^2 + 25^2 = 821 +1^2 + 14^2 + 25^2 = 822 +1^2 + 1^2 + 14^2 + 25^2 = 823 +2^2 + 6^2 + 28^2 = 824 +2^2 + 14^2 + 25^2 = 825 +4^2 + 9^2 + 27^2 = 826 +3^2 + 17^2 + 23^2 = 827 +1^2 + 3^2 + 17^2 + 23^2 = 828 +10^2 + 27^2 = 829 +1^2 + 10^2 + 27^2 = 830 +1^2 + 1^2 + 10^2 + 27^2 = 831 +16^2 + 24^2 = 832 +7^2 + 28^2 = 833 +1^2 + 7^2 + 28^2 = 834 +5^2 + 9^2 + 27^2 = 835 +2^2 + 16^2 + 24^2 = 836 +2^2 + 7^2 + 28^2 = 837 +3^2 + 10^2 + 27^2 = 838 +1^2 + 3^2 + 10^2 + 27^2 = 839 +8^2 + 10^2 + 26^2 = 840 +29^2 = 841 +1^2 + 29^2 = 842 +1^2 + 1^2 + 29^2 = 843 +6^2 + 18^2 + 22^2 = 844 +2^2 + 29^2 = 845 +1^2 + 2^2 + 29^2 = 846 +1^2 + 1^2 + 2^2 + 29^2 = 847 +8^2 + 28^2 = 848 +1^2 + 8^2 + 28^2 = 849 +3^2 + 29^2 = 850 +1^2 + 3^2 + 29^2 = 851 +2^2 + 8^2 + 28^2 = 852 +18^2 + 23^2 = 853 +1^2 + 18^2 + 23^2 = 854 +1^2 + 1^2 + 18^2 + 23^2 = 855 +6^2 + 6^2 + 28^2 = 856 +4^2 + 29^2 = 857 +1^2 + 4^2 + 29^2 = 858 +3^2 + 3^2 + 29^2 = 859 +1^2 + 3^2 + 3^2 + 29^2 = 860 +2^2 + 4^2 + 29^2 = 861 +3^2 + 18^2 + 23^2 = 862 +1^2 + 3^2 + 18^2 + 23^2 = 863 +4^2 + 8^2 + 28^2 = 864 +9^2 + 28^2 = 865 +5^2 + 29^2 = 866 +1^2 + 5^2 + 29^2 = 867 +6^2 + 16^2 + 24^2 = 868 +2^2 + 9^2 + 28^2 = 869 +2^2 + 5^2 + 29^2 = 870 +1^2 + 2^2 + 5^2 + 29^2 = 871 +14^2 + 26^2 = 872 +12^2 + 27^2 = 873 +1^2 + 12^2 + 27^2 = 874 +3^2 + 5^2 + 29^2 = 875 +2^2 + 14^2 + 26^2 = 876 +6^2 + 29^2 = 877 +1^2 + 6^2 + 29^2 = 878 +1^2 + 1^2 + 6^2 + 29^2 = 879 +2^2 + 2^2 + 14^2 + 26^2 = 880 +16^2 + 25^2 = 881 +21^2 + 21^2 = 882 +1^2 + 21^2 + 21^2 = 883 +10^2 + 28^2 = 884 +1^2 + 10^2 + 28^2 = 885 +2^2 + 21^2 + 21^2 = 886 +1^2 + 2^2 + 21^2 + 21^2 = 887 +2^2 + 10^2 + 28^2 = 888 +4^2 + 12^2 + 27^2 = 889 +7^2 + 29^2 = 890 +1^2 + 7^2 + 29^2 = 891 +1^2 + 1^2 + 7^2 + 29^2 = 892 +3^2 + 10^2 + 28^2 = 893 +2^2 + 7^2 + 29^2 = 894 +1^2 + 2^2 + 7^2 + 29^2 = 895 +8^2 + 16^2 + 24^2 = 896 +4^2 + 16^2 + 25^2 = 897 +13^2 + 27^2 = 898 +1^2 + 13^2 + 27^2 = 899 +30^2 = 900 +1^2 + 30^2 = 901 +1^2 + 1^2 + 30^2 = 902 +1^2 + 1^2 + 1^2 + 30^2 = 903 +2^2 + 30^2 = 904 +8^2 + 29^2 = 905 +1^2 + 8^2 + 29^2 = 906 +3^2 + 13^2 + 27^2 = 907 +2^2 + 2^2 + 30^2 = 908 +3^2 + 30^2 = 909 +1^2 + 3^2 + 30^2 = 910 +1^2 + 1^2 + 3^2 + 30^2 = 911 +8^2 + 8^2 + 28^2 = 912 +2^2 + 3^2 + 30^2 = 913 +17^2 + 25^2 = 914 +1^2 + 17^2 + 25^2 = 915 +4^2 + 30^2 = 916 +1^2 + 4^2 + 30^2 = 917 +2^2 + 17^2 + 25^2 = 918 +1^2 + 2^2 + 17^2 + 25^2 = 919 +2^2 + 4^2 + 30^2 = 920 +4^2 + 8^2 + 29^2 = 921 +9^2 + 29^2 = 922 +1^2 + 9^2 + 29^2 = 923 +1^2 + 1^2 + 9^2 + 29^2 = 924 +5^2 + 30^2 = 925 +1^2 + 5^2 + 30^2 = 926 +1^2 + 1^2 + 5^2 + 30^2 = 927 +12^2 + 28^2 = 928 +20^2 + 23^2 = 929 +1^2 + 20^2 + 23^2 = 930 +3^2 + 9^2 + 29^2 = 931 +16^2 + 26^2 = 932 +1^2 + 16^2 + 26^2 = 933 +3^2 + 5^2 + 30^2 = 934 +1^2 + 3^2 + 5^2 + 30^2 = 935 +6^2 + 30^2 = 936 +19^2 + 24^2 = 937 +1^2 + 19^2 + 24^2 = 938 +5^2 + 17^2 + 25^2 = 939 +2^2 + 6^2 + 30^2 = 940 +10^2 + 29^2 = 941 +1^2 + 10^2 + 29^2 = 942 +1^2 + 1^2 + 10^2 + 29^2 = 943 +4^2 + 12^2 + 28^2 = 944 +2^2 + 10^2 + 29^2 = 945 +3^2 + 19^2 + 24^2 = 946 +5^2 + 9^2 + 29^2 = 947 +4^2 + 16^2 + 26^2 = 948 +7^2 + 30^2 = 949 +1^2 + 7^2 + 30^2 = 950 +1^2 + 1^2 + 7^2 + 30^2 = 951 +4^2 + 6^2 + 30^2 = 952 +13^2 + 28^2 = 953 +15^2 + 27^2 = 954 +1^2 + 15^2 + 27^2 = 955 +1^2 + 1^2 + 15^2 + 27^2 = 956 +2^2 + 13^2 + 28^2 = 957 +2^2 + 15^2 + 27^2 = 958 +1^2 + 2^2 + 15^2 + 27^2 = 959 +4^2 + 4^2 + 12^2 + 28^2 = 960 +31^2 = 961 +1^2 + 31^2 = 962 +1^2 + 1^2 + 31^2 = 963 +8^2 + 30^2 = 964 +2^2 + 31^2 = 965 +1^2 + 2^2 + 31^2 = 966 +1^2 + 1^2 + 2^2 + 31^2 = 967 +22^2 + 22^2 = 968 +1^2 + 22^2 + 22^2 = 969 +3^2 + 31^2 = 970 +1^2 + 3^2 + 31^2 = 971 +2^2 + 22^2 + 22^2 = 972 +3^2 + 8^2 + 30^2 = 973 +2^2 + 3^2 + 31^2 = 974 +1^2 + 2^2 + 3^2 + 31^2 = 975 +20^2 + 24^2 = 976 +4^2 + 31^2 = 977 +1^2 + 4^2 + 31^2 = 978 +3^2 + 3^2 + 31^2 = 979 +14^2 + 28^2 = 980 +9^2 + 30^2 = 981 +1^2 + 9^2 + 30^2 = 982 +1^2 + 1^2 + 9^2 + 30^2 = 983 +2^2 + 14^2 + 28^2 = 984 +12^2 + 29^2 = 985 +5^2 + 31^2 = 986 +1^2 + 5^2 + 31^2 = 987 +1^2 + 1^2 + 5^2 + 31^2 = 988 +2^2 + 12^2 + 29^2 = 989 +2^2 + 5^2 + 31^2 = 990 +1^2 + 2^2 + 5^2 + 31^2 = 991 +4^2 + 20^2 + 24^2 = 992 +4^2 + 4^2 + 31^2 = 993 +3^2 + 12^2 + 29^2 = 994 +3^2 + 5^2 + 31^2 = 995 +4^2 + 14^2 + 28^2 = 996 +6^2 + 31^2 = 997 +1^2 + 6^2 + 31^2 = 998 +1^2 + 1^2 + 6^2 + 31^2 = 999 +10^2 + 30^2 = 1000 diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..8723a09 --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,94 @@ +import '@fontsource/geist-sans/latin.css' +import 'katex/dist/katex.min.css' + +import katex from 'katex' + +import './styles.css' + +import { For, Show, createEffect, createMemo, createResource, createSignal } from 'solid-js' +import { render } from 'solid-js/web' + +const LaTeX = ({ content }) => katex.render(content, el)} /> + +const generateScript = (value, expression) => { + const vector = expression.split('+').map(part => part.split('^')[0].trim()) + + return ` +# cambia queste due righe con i valori corretti +file="my-file.pdf" +sides="two-sided-long-edge" # otherwise use two-sided-short-edge or one-sided + +# stampa ${value} = ${expression} copie +for sq in ${vector.join(' ')}; do + lpr -P cdclf -# $sq -o media=a4 -o fit-to-page -o sides=$sides $file +done` // <- this missing "\n" is intentional +} // <- this missing "\n" is intentional + +const ResultItem = ({ value, expression }) => { + const handleClick = () => { + navigator.clipboard.writeText(generateScript(value, expression)) + } + + return ( +
+ +
+ ) +} + +const App = ({}) => { + const [rawData] = createResource(() => fetch('/shortest-squares-v2.txt').then(res => res.text())) + const dict = createMemo(() => + Object.fromEntries( + (rawData() ?? '') + .split('\n') + .filter(Boolean) + .map(line => { + const [expression, value] = line.split('=').map(part => part.trim()) + return [parseInt(value), expression] + }) + ) + ) + + createEffect(() => { + console.log('dict', dict()) + }) + + const [text, setText] = createSignal('') + + const results = createMemo(() => { + const entries = Object.entries(dict()) + const query = text().trim() + + if (query === '') return entries + + if (!/^\d+$/.test(query)) return entries + + return entries.filter(([value]) => value.toString().includes(query)) + }) + + const SHOW_COUNT = 8 + + return ( + <> +

Shortest Sum of Squares

+

+ Click a sum of squares to copy the lpr shell command to print that number of copies +

+ setText(e.target.value)} /> +
SHOW_COUNT }}> + + {([value, expression]) => } + + +

+ For now we pre-computed the shortest sums of squares up to 1000 as you shouldn't need to print more than + that many copies of a document. Paper is a precious resource after all. +

+
+
+ + ) +} + +render(() => , document.getElementById('app')) diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..eee4f91 --- /dev/null +++ b/src/styles.css @@ -0,0 +1,169 @@ +*, +*::before, +*::after { + font-family: inherit; + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, +body { + width: 100%; + height: 100%; + min-height: 100%; +} + +img { + display: block; +} + +body { + padding: 4rem 0; + + font-family: 'Geist Sans', sans-serif; + font-size: 16px; + line-height: 1.5; + + color: #333; + + display: grid; + justify-content: center; + + @media screen and (max-width: 768px) { + padding: 1rem 0.5rem; + } +} + +/* Components */ + +h1, +h2, +h3, +h4 { + font-weight: 500; +} + +h1 { + font-size: 3rem; + text-wrap: balance; + text-align: center; + line-height: 1.25; +} + +p { + font-size: 18px; + font-weight: 400; + + max-width: 60ch; + text-align: center; +} + +pre, code { + font-family: 'Fira Code', 'Menlo', monospace; +} + +code { + font-size: 95%; +} + +input[type='text'] { + height: 2.5rem; + + padding: 0 1rem; + border: 1px solid #ddd; + background: #fff; + border-radius: 5rem; + outline: none; + + font-size: 18px; + + text-align: center; + + &:hover:not(:focus) { + border: 1px solid #aaa; + } +} + +.has-more { + position: relative; + + &::after { + content: ''; + position: absolute; + bottom: 0; + width: 100%; + height: 5rem; + + pointer-events: none; + + z-index: 10; + + background: linear-gradient(0deg, #ffffff, #ffffff00); + } +} + +/* Structure */ + +#app { + display: flex; + flex-direction: column; + + align-items: center; + + gap: 2rem; + + max-width: 100%; + + & > input { + width: 100%; + max-width: 30rem; + + box-shadow: 0 0 15rem #00000018; + } + + .results { + display: flex; + flex-direction: column; + align-items: center; + + user-select: none; + + gap: 0.25rem; + + text-align: center; + + & > .result-item { + cursor: pointer; + + display: grid; + place-content: center; + + padding: 0.25rem 0.5rem; + border-radius: 0.5rem; + + &:nth-child(1) { + font-size: 28px; + } + + + &:hover { + background: #f2f2f2; + } + + @media screen and (max-width: 768px) { + &:nth-child(1) { + font-size: 24px; + } + + &:not(:nth-child(1)) { + font-size: 16px; + } + } + } + } + + @media screen and (max-width: 768px) { + gap: 1rem; + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..2f5db95 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false, + + // JSX + "jsx": "preserve", + "jsxImportSource": "solid-js" + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..740f6f7 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,16 @@ +import { defineConfig } from 'vite' +import solidPlugin from 'vite-plugin-solid' +// import devtools from 'solid-devtools/vite'; + +export default defineConfig({ + plugins: [ + // devtools(), + solidPlugin(), + ], + server: { + port: 3000, + }, + build: { + target: 'esnext', + }, +})