├── public └── favicon.ico ├── postcss.config.cjs ├── prettier.config.cjs ├── src ├── components │ ├── analytics.tsx │ ├── tagsBox.tsx │ └── layout.tsx ├── styles │ └── globals.css ├── utils │ ├── store.ts │ └── trpc.ts ├── types │ ├── next-auth.d.ts │ └── problem-data.ts ├── pages │ ├── api │ │ ├── examples.ts │ │ ├── pa-import-mock.ts │ │ ├── trpc │ │ │ └── [trpc].ts │ │ ├── restricted.ts │ │ └── auth │ │ │ └── [...nextauth].ts │ └── _app.tsx ├── server │ ├── trpc │ │ ├── router │ │ │ ├── auth.ts │ │ │ ├── example.ts │ │ │ ├── _app.ts │ │ │ └── attempt.ts │ │ ├── trpc.ts │ │ └── context.ts │ ├── db │ │ └── client.ts │ └── common │ │ └── get-server-auth-session.ts ├── data │ ├── problems │ │ ├── order.txt │ │ ├── Asia Pacific Informatics Olympiad │ │ │ ├── 2020.json │ │ │ ├── 2021.json │ │ │ ├── 2022.json │ │ │ ├── 2011.json │ │ │ ├── 2012.json │ │ │ ├── 2013.json │ │ │ ├── 2007.json │ │ │ ├── 2009.json │ │ │ ├── 2010.json │ │ │ ├── 2008.json │ │ │ ├── 2014.json │ │ │ ├── 2015.json │ │ │ ├── 2016.json │ │ │ ├── 2017.json │ │ │ ├── 2019.json │ │ │ └── 2018.json │ │ ├── Japanese Olympiad in Informatics: Open Contest │ │ │ ├── 2019.json │ │ │ ├── 2016.json │ │ │ ├── 2017.json │ │ │ ├── 2013.json │ │ │ ├── 2020.json │ │ │ ├── 2021.json │ │ │ ├── 2022.json │ │ │ ├── 2015.json │ │ │ ├── 2018.json │ │ │ └── 2014.json │ │ ├── Balkan Olympiad in Informatics │ │ │ ├── 2009.json │ │ │ ├── 2015.json │ │ │ ├── 2017.json │ │ │ ├── 2012.json │ │ │ ├── 2018.json │ │ │ ├── 2016.json │ │ │ └── 2011.json │ │ ├── National Olympiad in Informatics (Singapore) │ │ │ ├── 2013.json │ │ │ ├── 2012.json │ │ │ ├── 2014.json │ │ │ ├── 2015.json │ │ │ ├── 2016.json │ │ │ ├── 2017.json │ │ │ └── 2011.json │ │ ├── Croatian Olympiad in Informatics │ │ │ ├── 2018.json │ │ │ ├── 2021.json │ │ │ ├── 2022.json │ │ │ ├── 2020.json │ │ │ ├── 2017.json │ │ │ ├── 2019.json │ │ │ └── 2016.json │ │ ├── InfO(1) Cup │ │ │ ├── 2019.json │ │ │ ├── 2018.json │ │ │ ├── 2020.json │ │ │ └── 2017.json │ │ ├── Japanese Olympiad in Informatics: Final Round │ │ │ ├── 2017.json │ │ │ ├── 2021.json │ │ │ ├── 2020.json │ │ │ ├── 2022.json │ │ │ ├── 2018.json │ │ │ ├── 2019.json │ │ │ ├── 2014.json │ │ │ ├── 2016.json │ │ │ ├── 2015.json │ │ │ └── 2013.json │ │ ├── Central-European Olympiad in Informatics │ │ │ ├── 2009.json │ │ │ ├── 2016.json │ │ │ ├── 2012.json │ │ │ ├── 2014.json │ │ │ ├── 2010.json │ │ │ ├── 2013.json │ │ │ ├── 2007.json │ │ │ ├── 2011.json │ │ │ ├── 2017.json │ │ │ ├── 2018.json │ │ │ ├── 2015.json │ │ │ ├── 2019.json │ │ │ ├── 2021.json │ │ │ ├── 2022.json │ │ │ ├── 2020.json │ │ │ ├── 2005.json │ │ │ ├── 2006.json │ │ │ └── 2008.json │ │ ├── Baltic Olympiad in Informatics │ │ │ ├── 2020.json │ │ │ ├── 2021.json │ │ │ ├── 2022.json │ │ │ ├── 2006.json │ │ │ ├── 2012.json │ │ │ ├── 2016.json │ │ │ ├── 2017.json │ │ │ ├── 2010.json │ │ │ ├── 2008.json │ │ │ ├── 2019.json │ │ │ ├── 2005.json │ │ │ ├── 2007.json │ │ │ ├── 2009.json │ │ │ ├── 2018.json │ │ │ ├── 2015.json │ │ │ ├── 2013.json │ │ │ └── 2014.json │ │ ├── International Olympiad in Informatics │ │ │ ├── 2021.json │ │ │ ├── 2022.json │ │ │ ├── 2020.json │ │ │ ├── 2013.json │ │ │ ├── 2014.json │ │ │ ├── 2011.json │ │ │ ├── 2015.json │ │ │ ├── 2007.json │ │ │ ├── 2005.json │ │ │ ├── 2008.json │ │ │ ├── 2012.json │ │ │ ├── 2003.json │ │ │ ├── 2004.json │ │ │ ├── 2006.json │ │ │ ├── 2019.json │ │ │ └── 2017.json │ │ └── International Zhautykov Olympiad in Informatics │ │ │ ├── 2014.json │ │ │ ├── 2017.json │ │ │ ├── 2018.json │ │ │ ├── 2019.json │ │ │ ├── 2015.json │ │ │ ├── 2020.json │ │ │ ├── 2016.json │ │ │ ├── 2021.json │ │ │ ├── 2022.json │ │ │ ├── 2012.json │ │ │ ├── 2013.json │ │ │ └── 2011.json │ ├── update_tags.py │ ├── filter_tags.json │ └── combine.py └── env │ ├── server.mjs │ ├── client.mjs │ └── schema.mjs ├── tailwind.config.cjs ├── next.config.mjs ├── tsconfig.json ├── .gitignore ├── LICENSE └── package.json /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/labs-asterisk/oichecklist/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /prettier.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import("prettier").Config} */ 2 | module.exports = { 3 | plugins: [require.resolve("prettier-plugin-tailwindcss")], 4 | }; 5 | -------------------------------------------------------------------------------- /src/components/analytics.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { Analytics } from "@vercel/analytics/react"; 3 | 4 | export function AnalyticsWrapper() { 5 | return ; 6 | } 7 | -------------------------------------------------------------------------------- /tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./src/**/*.{js,ts,jsx,tsx}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | }; 9 | -------------------------------------------------------------------------------- /src/styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | html, 6 | body, 7 | #__next { 8 | height: 100%; 9 | overflow-y: hidden; 10 | overflow-x: hidden; 11 | } 12 | 13 | li[role="option"] { 14 | color: black !important; 15 | } 16 | -------------------------------------------------------------------------------- /src/utils/store.ts: -------------------------------------------------------------------------------- 1 | import { atom } from "jotai"; 2 | import problems from "../data/problem_data.json"; 3 | import filterTags from "../data/filter_tags.json"; 4 | 5 | export const problemsAtom = atom(problems); 6 | export const filterTopicsAtom = atom( 7 | Object.entries(filterTags.topicWise).map(([tag, occ], j) => tag) 8 | ); 9 | 10 | -------------------------------------------------------------------------------- /src/types/next-auth.d.ts: -------------------------------------------------------------------------------- 1 | import { type DefaultSession } from "next-auth"; 2 | 3 | declare module "next-auth" { 4 | /** 5 | * Returned by `useSession`, `getSession` and received as a prop on the `SessionProvider` React Context 6 | */ 7 | interface Session { 8 | user?: { 9 | id: string; 10 | } & DefaultSession["user"]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/pages/api/examples.ts: -------------------------------------------------------------------------------- 1 | import { type NextApiRequest, type NextApiResponse } from "next"; 2 | 3 | import { prisma } from "../../server/db/client"; 4 | 5 | const examples = async (req: NextApiRequest, res: NextApiResponse) => { 6 | const examples = await prisma.example.findMany(); 7 | res.status(200).json(examples); 8 | }; 9 | 10 | export default examples; 11 | -------------------------------------------------------------------------------- /src/server/trpc/router/auth.ts: -------------------------------------------------------------------------------- 1 | import { router, publicProcedure, protectedProcedure } from "../trpc"; 2 | 3 | export const authRouter = router({ 4 | getSession: publicProcedure.query(({ ctx }) => { 5 | return ctx.session; 6 | }), 7 | getSecretMessage: protectedProcedure.query(() => { 8 | return "you can now see this secret message!"; 9 | }), 10 | }); 11 | -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | /** 3 | * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. 4 | * This is especially useful for Docker builds. 5 | */ 6 | !process.env.SKIP_ENV_VALIDATION && (await import("./src/env/server.mjs")); 7 | 8 | /** @type {import("next").NextConfig} */ 9 | const config = { 10 | reactStrictMode: true, 11 | swcMinify: true, 12 | i18n: { 13 | locales: ["en"], 14 | defaultLocale: "en", 15 | }, 16 | }; 17 | export default config; 18 | -------------------------------------------------------------------------------- /src/server/db/client.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from "@prisma/client"; 2 | 3 | import { env } from "../../env/server.mjs"; 4 | 5 | declare global { 6 | // eslint-disable-next-line no-var 7 | var prisma: PrismaClient | undefined; 8 | } 9 | 10 | export const prisma = 11 | global.prisma || 12 | new PrismaClient({ 13 | log: 14 | env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"], 15 | }); 16 | 17 | if (env.NODE_ENV !== "production") { 18 | global.prisma = prisma; 19 | } 20 | -------------------------------------------------------------------------------- /src/server/trpc/router/example.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | 3 | import { router, publicProcedure } from "../trpc"; 4 | 5 | export const exampleRouter = router({ 6 | hello: publicProcedure 7 | .input(z.object({ text: z.string().nullish() }).nullish()) 8 | .query(({ input }) => { 9 | return { 10 | greeting: `Hello ${input?.text ?? "world"}`, 11 | }; 12 | }), 13 | getAll: publicProcedure.query(({ ctx }) => { 14 | return ctx.prisma.example.findMany(); 15 | }), 16 | }); 17 | -------------------------------------------------------------------------------- /src/server/trpc/router/_app.ts: -------------------------------------------------------------------------------- 1 | import { router } from "../trpc"; 2 | // import { authRouter } from "./auth"; 3 | // import { exampleRouter } from "./example"; 4 | 5 | import { attemptRouter } from "./attempt"; 6 | import { viewRouter } from "./view"; 7 | import { importRouter } from "./import"; 8 | 9 | export const appRouter = router({ 10 | // example: exampleRouter, 11 | // auth: authRouter, 12 | attempt: attemptRouter, 13 | view: viewRouter, 14 | import: importRouter 15 | }); 16 | 17 | // export type definition of API 18 | export type AppRouter = typeof appRouter; 19 | -------------------------------------------------------------------------------- /src/pages/api/pa-import-mock.ts: -------------------------------------------------------------------------------- 1 | import { type NextApiRequest, type NextApiResponse } from "next"; 2 | 3 | import { getPythonAnywhereProblems } from "../../server/common/pa-import"; 4 | 5 | const paImportMock = async (req: NextApiRequest, res: NextApiResponse) => { 6 | const url = 7 | "oichecklist.pythonanywhere.com/view/4c47fbe2fda9f464a8e57b895b0dc36574000586"; 8 | 9 | const paProblems = await getPythonAnywhereProblems(url); 10 | 11 | console.log("got paProblems: ", paProblems); 12 | 13 | res.status(200).json(paProblems); 14 | }; 15 | 16 | export default paImportMock; 17 | -------------------------------------------------------------------------------- /src/pages/api/trpc/[trpc].ts: -------------------------------------------------------------------------------- 1 | import { createNextApiHandler } from "@trpc/server/adapters/next"; 2 | 3 | import { env } from "../../../env/server.mjs"; 4 | import { createContext } from "../../../server/trpc/context"; 5 | import { appRouter } from "../../../server/trpc/router/_app"; 6 | 7 | // export API handler 8 | export default createNextApiHandler({ 9 | router: appRouter, 10 | createContext, 11 | onError: 12 | env.NODE_ENV === "development" 13 | ? ({ path, error }) => { 14 | console.error(`❌ tRPC failed on ${path}: ${error}`); 15 | } 16 | : undefined, 17 | }); 18 | -------------------------------------------------------------------------------- /src/data/problems/order.txt: -------------------------------------------------------------------------------- 1 | International Olympiad in Informatics 2 | Asia Pacific Informatics Olympiad 3 | USA Computing Olympiad 4 | Central-European Olympiad in Informatics 5 | Baltic Olympiad in Informatics 6 | National Olympiad in Informatics (Singapore) 7 | International Zhautykov Olympiad in Informatics 8 | Japanese Olympiad in Informatics: Final Round 9 | Japanese Olympiad in Informatics: Open Contest 10 | Japanese Olympiad in Informatics: Spring Camp 11 | Croatian Olympiad in Informatics 12 | Balkan Olympiad in Informatics 13 | InfO(1) Cup 14 | Polish Olympiad in Informatics 15 | Croatian Open Competition in Informatics -------------------------------------------------------------------------------- /src/data/update_tags.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | f = open("problem_data.json") 4 | data = json.load(f) 5 | 6 | tags = {} 7 | 8 | for section in data["sections"]: 9 | for year in section["years"]: 10 | for problem in year["problems"]: 11 | for tag in problem["tags"]: 12 | if tag in tags: 13 | tags[tag] += 1 14 | else: 15 | tags[tag] = 1 16 | 17 | to_write = {} 18 | to_write["topicWise"] = tags 19 | 20 | json_object = json.dumps(to_write, indent=2) 21 | with open("filter_tags.json", "w") as outfile: 22 | outfile.write(json_object) 23 | -------------------------------------------------------------------------------- /src/types/problem-data.ts: -------------------------------------------------------------------------------- 1 | export interface Checklist { 2 | sections: Section[]; 3 | } 4 | 5 | export interface Section { 6 | sectionName: string; 7 | years: Year[]; 8 | } 9 | 10 | export interface Year { 11 | year: string; 12 | problems: Problem[]; 13 | } 14 | 15 | export interface Problem { 16 | slug: string; 17 | name: string; 18 | editorial: string; 19 | link: string; 20 | solves: number; 21 | tags: string[]; 22 | } 23 | 24 | export enum AttemptingState { 25 | Untouched = "Untouched", // white 26 | Attempting = "Attempting", // yellow 27 | Unimplemented = "Unimplemented", // blue 28 | Solved = "Solved", // green 29 | } 30 | -------------------------------------------------------------------------------- /src/server/common/get-server-auth-session.ts: -------------------------------------------------------------------------------- 1 | import { type GetServerSidePropsContext } from "next"; 2 | import { unstable_getServerSession } from "next-auth"; 3 | 4 | import { authOptions } from "../../pages/api/auth/[...nextauth]"; 5 | 6 | /** 7 | * Wrapper for unstable_getServerSession https://next-auth.js.org/configuration/nextjs 8 | * See example usage in trpc createContext or the restricted API route 9 | */ 10 | export const getServerAuthSession = async (ctx: { 11 | req: GetServerSidePropsContext["req"]; 12 | res: GetServerSidePropsContext["res"]; 13 | }) => { 14 | return await unstable_getServerSession(ctx.req, ctx.res, authOptions); 15 | }; 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true, 17 | "noUncheckedIndexedAccess": true 18 | }, 19 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.cjs", "**/*.mjs"], 20 | "exclude": ["node_modules"] 21 | } 22 | -------------------------------------------------------------------------------- /src/pages/api/restricted.ts: -------------------------------------------------------------------------------- 1 | import { type NextApiRequest, type NextApiResponse } from "next"; 2 | 3 | import { getServerAuthSession } from "../../server/common/get-server-auth-session"; 4 | 5 | const restricted = async (req: NextApiRequest, res: NextApiResponse) => { 6 | const session = await getServerAuthSession({ req, res }); 7 | 8 | if (session) { 9 | res.send({ 10 | content: 11 | "This is protected content. You can access this content because you are signed in.", 12 | }); 13 | } else { 14 | res.send({ 15 | error: 16 | "You must be signed in to view the protected content on this page.", 17 | }); 18 | } 19 | }; 20 | 21 | export default restricted; 22 | -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2020.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2020, 3 | "problems": [ 4 | { 5 | "slug": "APIO_20_01_walls", 6 | "name": "Walls", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/APIO20_paint", 9 | "solves": 76, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_20_02_cities", 14 | "name": "Cities", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/APIO20_swap", 17 | "solves": 73, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_20_03_fun", 22 | "name": "Fun", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/APIO20_fun", 25 | "solves": 19, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2021, 3 | "problems": [ 4 | { 5 | "slug": "APIO_21_01_hexagon", 6 | "name": "Hexagon", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/APIO21_hexagon", 9 | "solves": 0, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_21_02_jumps", 14 | "name": "Jumps", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/APIO21_jumps", 17 | "solves": 50, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_21_03_roads", 22 | "name": "Roads", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/APIO21_roads", 25 | "solves": 35, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # database 12 | /prisma/db.sqlite 13 | /prisma/db.sqlite-journal 14 | 15 | # next.js 16 | /.next/ 17 | /out/ 18 | next-env.d.ts 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # local env files 34 | # do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables 35 | .env 36 | .env*.local 37 | 38 | # vercel 39 | .vercel 40 | 41 | # typescript 42 | *.tsbuildinfo 43 | -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2022.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2022, 3 | "problems": [ 4 | { 5 | "slug": "APIO_22_01_mars", 6 | "name": "Mars", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/APIO22_mars", 9 | "solves": 13, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_22_02_game", 14 | "name": "Game", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/APIO22_game", 17 | "solves": 3, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_22_03_permutation", 22 | "name": "Permutation", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/APIO22_perm", 25 | "solves": 71, 26 | "tags": [] 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2019.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2019, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_19_01_Jumps", 6 | "name": "Jumps", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI19_jumps", 9 | "solves": 7, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_19_02_Remittance", 14 | "name": "Remittance", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI19_remittance", 17 | "solves": 86, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_19_03_Virus", 22 | "name": "Virus", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI19_virus", 25 | "solves": 2, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2016.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2016, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_16_01_Joiris", 6 | "name": "Joiris", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI16_joiris", 9 | "solves": 4, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_16_02_RNA", 14 | "name": "RNA", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI16_selling_rna", 17 | "solves": 55, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_16_03_Skyscraper", 22 | "name": "Skyscraper", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI16_skyscraper", 25 | "solves": 9, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_17_01_Park", 6 | "name": "Park", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI17_amusement_park", 9 | "solves": 34, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_17_02_Bulldozer", 14 | "name": "Bulldozer", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI17_bulldozer", 17 | "solves": 14, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_17_03_Golf", 22 | "name": "Golf", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI17_golf", 25 | "solves": 2, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2013.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2013, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_13_01_Disparity", 6 | "name": "Disparity", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI13_disparity", 9 | "solves": 0, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_13_02_Sync", 14 | "name": "Sync", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI13_synchronization", 17 | "solves": 1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_13_03_Watching", 22 | "name": "Watching", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI13_watching", 25 | "solves": 46, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2020.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2020, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_20_01_Furniture", 6 | "name": "Furniture", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI20_furniture", 9 | "solves": 76, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_20_02_Monochrome", 14 | "name": "Monochrome", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI20_monochrome", 17 | "solves": 47, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_20_03_Power", 22 | "name": "Power", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI20_power", 25 | "solves": 110, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2021, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_21_01_Crossing", 6 | "name": "Crossing", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI21_crossing", 9 | "solves": 88, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_21_02_Financial", 14 | "name": "Financial", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI21_financial", 17 | "solves": 82, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_21_03_Monster", 22 | "name": "Monster", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI21_monster", 25 | "solves": 13, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2022.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2022, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_22_01_Seesaw", 6 | "name": "Seesaw", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI22_seesaw", 9 | "solves": 33, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_22_02_Giraffes", 14 | "name": "Giraffes", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI22_giraffes", 17 | "solves": 5, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_22_03_SchoolRoad", 22 | "name": "SchoolRoad", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI22_schoolroad", 25 | "solves": 16, 26 | "tags": [] 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2015.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2015, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_15_01_Tiles", 6 | "name": "Tiles", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI15_colored_tiles", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_15_02_Election", 14 | "name": "Election", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI15_election_campaign", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_15_03_Sterilizing", 22 | "name": "Sterilizing", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI15_sterilizing", 25 | "solves": -1, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/filter_tags.json: -------------------------------------------------------------------------------- 1 | { 2 | "topicWise": { 3 | "Greedy": 4, 4 | "Implementation": 7, 5 | "Fenwick Tree": 2, 6 | "Data Structures": 5, 7 | "Stack": 1, 8 | "Segment Tree": 7, 9 | "Ad-hoc": 7, 10 | "Constructive": 3, 11 | "Graph": 9, 12 | "Disjoint Set Union": 2, 13 | "Simulation": 1, 14 | "Dijkstra": 2, 15 | "Binary Search": 4, 16 | "Dynamic Programming": 6, 17 | "Observations": 1, 18 | "Game Theory": 1, 19 | "Topological Sort": 1, 20 | "Divide and Conquer": 4, 21 | "Interactive": 5, 22 | "Strongly Connected Components": 2, 23 | "Two Pointers": 1, 24 | "Minimum Spanning Tree": 1, 25 | "Math": 4, 26 | "Bitwise": 1, 27 | "SQRT Decomposition": 1, 28 | "Sorting": 1, 29 | "Geometry": 1, 30 | "Sweep Line": 1, 31 | "Centroid": 1, 32 | "Persistence": 1 33 | } 34 | } -------------------------------------------------------------------------------- /src/data/problems/Balkan Olympiad in Informatics/2009.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2009, 3 | "problems": [ 4 | { 5 | "slug": "Balkan_09_01_NewBeginning", 6 | "name": "New beginning", 7 | "editorial": "", 8 | "link": "https://www.acmicpc.net/problem/7080", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Balkan_09_02_Reading", 14 | "name": "Reading", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-09-Reading.txt", 16 | "link": "https://www.acmicpc.net/problem/7081", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Balkan_09_03_Strip", 22 | "name": "Strip", 23 | "editorial": "", 24 | "link": "https://www.acmicpc.net/problem/7082", 25 | "solves": -1, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import { type AppType } from "next/app"; 2 | import { type Session } from "next-auth"; 3 | import { SessionProvider } from "next-auth/react"; 4 | 5 | import { ChakraProvider, extendTheme } from "@chakra-ui/react"; 6 | 7 | import { trpc } from "../utils/trpc"; 8 | 9 | import "../styles/globals.css"; 10 | import { MultiSelectTheme } from "chakra-multiselect"; 11 | 12 | const theme = extendTheme({ 13 | components: { 14 | MultiSelect: MultiSelectTheme, 15 | }, 16 | }); 17 | 18 | const MyApp: AppType<{ session: Session | null }> = ({ 19 | Component, 20 | pageProps: { session, ...pageProps }, 21 | }) => { 22 | return ( 23 | 24 | 25 | 26 | 27 | 28 | ); 29 | }; 30 | 31 | export default trpc.withTRPC(MyApp); 32 | -------------------------------------------------------------------------------- /src/data/combine.py: -------------------------------------------------------------------------------- 1 | import json, os 2 | 3 | data = {} 4 | data["sections"] = [] 5 | 6 | tmpData = {} 7 | for section in os.listdir("problems"): 8 | if section == "order.txt": 9 | continue 10 | section_object = {} 11 | section_object["sectionName"] = section 12 | section_object["years"] = [] 13 | for year in os.listdir("problems/" + section + "/"): 14 | f = open("problems/" + section + "/" + year) 15 | year_data = json.load(f) 16 | section_object["years"].append(year_data) 17 | section_object["years"].sort(key=lambda x: -x["year"]) 18 | tmpData[section] = section_object 19 | 20 | 21 | with open("problems/order.txt") as f: 22 | contents = f.readlines() 23 | for section in contents: 24 | data["sections"].append(tmpData[section.strip()]) 25 | 26 | json_object = json.dumps(data, indent=2) 27 | with open("problem_data.json", "w") as outfile: 28 | outfile.write(json_object) 29 | -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2011.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2011, 3 | "problems": [ 4 | { 5 | "slug": "APIO_11_01_Color", 6 | "name": "Color", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-11-Color.txt", 8 | "link": "https://dmoj.ca/problem/apio11p1", 9 | "solves": 1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_11_02_Path", 14 | "name": "Path", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-11-Path.txt", 16 | "link": "https://dmoj.ca/problem/apio11p2", 17 | "solves": 8, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_11_03_guessword", 22 | "name": "Guessword", 23 | "editorial": "", 24 | "link": "https://dmoj.ca/problem/apio11p3", 25 | "solves": 0, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2012.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2012, 3 | "problems": [ 4 | { 5 | "slug": "APIO_12_01_Dispatching", 6 | "name": "Dispatching", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-12-Dispatching.txt", 8 | "link": "https://dmoj.ca/problem/apio12p1", 9 | "solves": 22, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_12_02_Guard", 14 | "name": "Guard", 15 | "editorial": "", 16 | "link": "https://dmoj.ca/problem/apio12p2", 17 | "solves": 12, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_12_03_Kunai", 22 | "name": "Kunai", 23 | "editorial": "https://github.com/tmwilliamlin168/CompetitiveProgramming/blob/master/APIO/12-Kunai.cpp", 24 | "link": "https://dmoj.ca/problem/apio12p3", 25 | "solves": 0, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/env/server.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | /** 3 | * This file is included in `/next.config.mjs` which ensures the app isn't built with invalid env vars. 4 | * It has to be a `.mjs`-file to be imported there. 5 | */ 6 | import { serverSchema } from "./schema.mjs"; 7 | import { env as clientEnv, formatErrors } from "./client.mjs"; 8 | 9 | const _serverEnv = serverSchema.safeParse(process.env); 10 | 11 | if (!_serverEnv.success) { 12 | console.error( 13 | "❌ Invalid environment variables:\n", 14 | ...formatErrors(_serverEnv.error.format()), 15 | ); 16 | throw new Error("Invalid environment variables"); 17 | } 18 | 19 | for (let key of Object.keys(_serverEnv.data)) { 20 | if (key.startsWith("NEXT_PUBLIC_")) { 21 | console.warn("❌ You are exposing a server-side env-variable:", key); 22 | 23 | throw new Error("You are exposing a server-side env-variable"); 24 | } 25 | } 26 | 27 | export const env = { ..._serverEnv.data, ...clientEnv }; 28 | -------------------------------------------------------------------------------- /src/data/problems/National Olympiad in Informatics (Singapore)/2013.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2013, 3 | "problems": [ 4 | { 5 | "slug": "NOI_13_01_gw", 6 | "name": "Global Warming", 7 | "editorial": "https://github.com/sjhuang26/competitive-programming/blob/master/noi/NOI%252013-gw.cpp", 8 | "link": "https://oj.uz/problem/view/NOI13_gw", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "NOI_13_02_diesel", 14 | "name": "Diesel", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 16 | "link": "https://dunjudge.me/analysis/problems/281/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "NOI_13_03_ferries", 22 | "name": "Ferries", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/NOI13_ferries", 25 | "solves": -1, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2013.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2013, 3 | "problems": [ 4 | { 5 | "slug": "APIO_13_01_Robots", 6 | "name": "Robots", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-13-Robots.txt", 8 | "link": "https://oj.uz/problem/view/APIO13_robots", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_13_02_Toll", 14 | "name": "Toll", 15 | "editorial": "https://github.com/tmwilliamlin168/CompetitiveProgramming/blob/master/APIO/13-Toll.cpp", 16 | "link": "https://oj.uz/problem/view/APIO13_toll", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_13_03_tasksauthor", 22 | "name": "Tasksauthor", 23 | "editorial": "", 24 | "link": "https://dunjudge.me/analysis/problems/437/", 25 | "solves": -1, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Croatian Olympiad in Informatics/2018.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2018, 3 | "problems": [ 4 | { 5 | "slug": "COI_18_01_paprike", 6 | "name": "Paprike", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/COI18_paprike", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "COI_18_02_pick", 14 | "name": "Pick", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/COI18_pick", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "COI_18_03_svjetlost", 22 | "name": "Svjetlost", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/COI18_svjetlost", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "COI_18_04_zagonetka", 30 | "name": "Zagonetka", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/COI18_zagonetka", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/InfO(1) Cup/2019.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2019, 3 | "problems": [ 4 | { 5 | "slug": "InfOCup_19_01_CONSUL", 6 | "name": "CONSUL", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/info1cup19_consul", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "InfOCup_19_02_Costinland", 14 | "name": "Costinland", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/info1cup19_costinland", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "InfOCup_19_03_Cat", 22 | "name": "Cat", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/info1cup19_cat", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "InfOCup_19_04_Mouse", 30 | "name": "Mouse", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/info1cup19_mouse", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/pages/api/auth/[...nextauth].ts: -------------------------------------------------------------------------------- 1 | import NextAuth, { type NextAuthOptions } from "next-auth"; 2 | import GithubProvider from "next-auth/providers/github"; 3 | // Prisma adapter for NextAuth, optional and can be removed 4 | import { PrismaAdapter } from "@next-auth/prisma-adapter"; 5 | 6 | import { env } from "../../../env/server.mjs"; 7 | import { prisma } from "../../../server/db/client"; 8 | 9 | export const authOptions: NextAuthOptions = { 10 | // Include user.id on session 11 | callbacks: { 12 | session({ session, user }) { 13 | if (session.user) { 14 | session.user.id = user.id; 15 | } 16 | return session; 17 | }, 18 | }, 19 | // Configure one or more authentication providers 20 | adapter: PrismaAdapter(prisma), 21 | providers: [ 22 | GithubProvider({ 23 | clientId: env.GITHUB_CLIENT_ID, 24 | clientSecret: env.GITHUB_CLIENT_SECRET 25 | }) 26 | // ...add more providers here 27 | ], 28 | }; 29 | 30 | export default NextAuth(authOptions); 31 | -------------------------------------------------------------------------------- /src/server/trpc/trpc.ts: -------------------------------------------------------------------------------- 1 | import { initTRPC, TRPCError } from "@trpc/server"; 2 | import superjson from "superjson"; 3 | 4 | import { type Context } from "./context"; 5 | 6 | const t = initTRPC.context().create({ 7 | transformer: superjson, 8 | errorFormatter({ shape }) { 9 | return shape; 10 | }, 11 | }); 12 | 13 | export const router = t.router; 14 | 15 | /** 16 | * Unprotected procedure 17 | **/ 18 | export const publicProcedure = t.procedure; 19 | 20 | /** 21 | * Reusable middleware to ensure 22 | * users are logged in 23 | */ 24 | const isAuthed = t.middleware(({ ctx, next }) => { 25 | if (!ctx.session || !ctx.session.user) { 26 | throw new TRPCError({ code: "UNAUTHORIZED" }); 27 | } 28 | return next({ 29 | ctx: { 30 | // infers the `session` as non-nullable 31 | session: { ...ctx.session, user: ctx.session.user }, 32 | }, 33 | }); 34 | }); 35 | 36 | /** 37 | * Protected procedure 38 | **/ 39 | export const protectedProcedure = t.procedure.use(isAuthed); 40 | -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2007.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2007, 3 | "problems": [ 4 | { 5 | "slug": "APIO_07_01_MOBILE2", 6 | "name": "Mobile2", 7 | "editorial": "https://github.com/cacophonix/SPOJ/blob/master/MOBILE2.cpp", 8 | "link": "https://tlx.toki.id/problems/apio-2007/A", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_07_02_Backup", 14 | "name": "Backup", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-07-Backup.txt", 16 | "link": "https://tlx.toki.id/problems/apio-2007/B", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_07_03_Zoo", 22 | "name": "Zoo", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-07-Zoo.txt", 24 | "link": "https://tlx.toki.id/problems/apio-2007/C", 25 | "solves": -1, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2009.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2009, 3 | "problems": [ 4 | { 5 | "slug": "APIO_09_01_Oil", 6 | "name": "Oil", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-09-Oil.txt", 8 | "link": "https://dmoj.ca/problem/apio09p1", 9 | "solves": 15, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_09_02_Convention", 14 | "name": "Convention", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-09-Convention.txt", 16 | "link": "https://dmoj.ca/problem/apio09p2", 17 | "solves": 5, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_09_03_ATM", 22 | "name": "Atm", 23 | "editorial": "https://github.com/goar5670/CompetitiveProgramming/blob/master/APIO%252009-ATM.cpp", 24 | "link": "https://dmoj.ca/problem/apio09p3", 25 | "solves": 20, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Croatian Olympiad in Informatics/2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2021, 3 | "problems": [ 4 | { 5 | "slug": "COI_21_01_autobahn", 6 | "name": "Autobahn", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/COI21_autobahn", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "COI_21_02_cigle", 14 | "name": "Cigle", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/COI21_cigle", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "COI_21_03_izvanzemaljci", 22 | "name": "Izvanzemaljci", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/COI21_izvanzemaljci", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "COI_21_04_malnarisc", 30 | "name": "MalnaRISC", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/COI21_malnarisc", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2010.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2010, 3 | "problems": [ 4 | { 5 | "slug": "APIO_10_01_Commando", 6 | "name": "Commando", 7 | "editorial": "https://github.com/timpostuvan/CompetitiveProgramming/blob/master/Olympiad/APIO/Commando2010.cpp", 8 | "link": "https://dmoj.ca/problem/apio10p1", 9 | "solves": 9, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_10_02_Patrol", 14 | "name": "Patrol", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-10-Patrol.txt", 16 | "link": "https://dmoj.ca/problem/apio10p2", 17 | "solves": 13, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_10_03_Signaling", 22 | "name": "Signaling", 23 | "editorial": "https://github.com/shanto86/Training/blob/master/Dmoj/APIO%252010-Signaling.cpp", 24 | "link": "https://dmoj.ca/problem/apio10p3", 25 | "solves": 1, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2018.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2018, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_18_01_Bubble2", 6 | "name": "Bubble 2", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI18_bubblesort2", 9 | "solves": 18, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_18_02_Catdog", 14 | "name": "Catdog", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI18_catdog", 17 | "solves": 4, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_18_03_Collapse", 22 | "name": "Collapse", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI18_collapse", 25 | "solves": 5, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOIOC_18_04_Xylophone", 30 | "name": "Xylophone", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/JOI18_xylophone", 33 | "solves": 84, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/InfO(1) Cup/2018.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2018, 3 | "problems": [ 4 | { 5 | "slug": "InfOCup_18_01_Maxcomp", 6 | "name": "Maxcomp", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/info1cup18_maxcomp", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "InfOCup_18_02_DEL13", 14 | "name": "DEL13", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/info1cup18_del13", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "InfOCup_18_03_HiddenSequence", 22 | "name": "Hidden Sequence", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/info1cup18_hidden", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "InfOCup_18_04_BalancedTree", 30 | "name": "Balanced Tree", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/info1cup18_balancedtree", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2008.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2008, 3 | "problems": [ 4 | { 5 | "slug": "APIO_08_01_Beads", 6 | "name": "Beads", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-08-Beads.txt", 8 | "link": "https://tlx.toki.id/problems/apio-2008/A", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_08_02_Roads", 14 | "name": "Roads", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-08-Roads.txt", 16 | "link": "https://tlx.toki.id/problems/apio-2008/B", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_08_03_DNA", 22 | "name": "Dna", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-08-DNA.txt", 24 | "link": "https://tlx.toki.id/problems/apio-2008/C", 25 | "solves": -1, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/data/problems/InfO(1) Cup/2020.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2020, 3 | "problems": [ 4 | { 5 | "slug": "InfOCup_20_01_TableTennis", 6 | "name": "Table Tennis", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/info1cup20_tabletennis", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "InfOCup_20_02_Trampoline", 14 | "name": "Trampoline", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/info1cup20_trampoline", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "InfOCup_20_03_Football", 22 | "name": "Football", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/info1cup20_football", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "InfOCup_20_04_Cheerleaders", 30 | "name": "Cheerleaders", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/info1cup20_cheerleaders", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/Croatian Olympiad in Informatics/2022.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2022, 3 | "problems": [ 4 | { 5 | "slug": "COI_22_01_mađioničar", 6 | "name": "Mađioničar", 7 | "editorial": "", 8 | "link": "https://evaluator.hsin.hr/tasks/SS202241madionicar/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "COI_22_02_mensza", 14 | "name": "Mensza", 15 | "editorial": "", 16 | "link": "https://evaluator.hsin.hr/tasks/SS202242mensza/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "COI_22_03_povjerenstvo", 22 | "name": "Povjerenstvo", 23 | "editorial": "", 24 | "link": "https://evaluator.hsin.hr/tasks/SS202243povjerenstvo/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "COI_22_04_vinjete", 30 | "name": "Vinjete", 31 | "editorial": "", 32 | "link": "https://evaluator.hsin.hr/tasks/SS202244vinjete/", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /src/data/problems/InfO(1) Cup/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "InfOCup_17_01_EasterEggs", 6 | "name": "Easter Eggs", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/info1cup17_eastereggs", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "InfOCup_17_02_XORSum", 14 | "name": "XOR Sum", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/info1cup17_xorsum", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "InfOCup_17_03_BinarySubsequences", 22 | "name": "Binary Subsequences", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/info1cup17_binary", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "InfOCup_17_04_PermutationRecovery", 30 | "name": "Permutation Recovery", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/info1cup17_permutation", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2014.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2014, 3 | "problems": [ 4 | { 5 | "slug": "APIO_14_01_Palindrome", 6 | "name": "Palindrome", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-14-Palindrome.txt", 8 | "link": "https://oj.uz/problem/view/APIO14_palindrome", 9 | "solves": 10, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "APIO_14_02_Sequence", 14 | "name": "Sequence", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-14-Sequence.txt", 16 | "link": "https://oj.uz/problem/view/APIO14_sequence", 17 | "solves": 33, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "APIO_14_03_Beads", 22 | "name": "Beads", 23 | "editorial": "https://github.com/tmwilliamlin168/CompetitiveProgramming/blob/master/APIO/14-Beads.cpp", 24 | "link": "https://oj.uz/problem/view/APIO14_beads", 25 | "solves": 25, 26 | "tags": [] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/env/client.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import { clientEnv, clientSchema } from "./schema.mjs"; 3 | 4 | const _clientEnv = clientSchema.safeParse(clientEnv); 5 | 6 | export const formatErrors = ( 7 | /** @type {import('zod').ZodFormattedError,string>} */ 8 | errors, 9 | ) => 10 | Object.entries(errors) 11 | .map(([name, value]) => { 12 | if (value && "_errors" in value) 13 | return `${name}: ${value._errors.join(", ")}\n`; 14 | }) 15 | .filter(Boolean); 16 | 17 | if (!_clientEnv.success) { 18 | console.error( 19 | "❌ Invalid environment variables:\n", 20 | ...formatErrors(_clientEnv.error.format()), 21 | ); 22 | throw new Error("Invalid environment variables"); 23 | } 24 | 25 | for (let key of Object.keys(_clientEnv.data)) { 26 | if (!key.startsWith("NEXT_PUBLIC_")) { 27 | console.warn( 28 | `❌ Invalid public environment variable name: ${key}. It must begin with 'NEXT_PUBLIC_'`, 29 | ); 30 | 31 | throw new Error("Invalid public environment variable name"); 32 | } 33 | } 34 | 35 | export const env = _clientEnv.data; 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Asterisk Labs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/data/problems/Croatian Olympiad in Informatics/2020.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2020, 3 | "problems": [ 4 | { 5 | "slug": "COI_20_01_paint", 6 | "name": "Paint", 7 | "editorial": "https://hsin.hr/coci/archive/2019_2020/", 8 | "link": "https://oj.uz/problem/view/COI20_paint", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "COI_20_02_pastiri", 14 | "name": "Pastiri", 15 | "editorial": "https://hsin.hr/coci/archive/2019_2020/", 16 | "link": "https://oj.uz/problem/view/COI20_pastiri", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "COI_20_03_semafor", 22 | "name": "Semafor", 23 | "editorial": "https://hsin.hr/coci/archive/2019_2020/", 24 | "link": "https://oj.uz/problem/view/COI20_semafor", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "COI_20_04_zagrade", 30 | "name": "Zagrade", 31 | "editorial": "https://hsin.hr/coci/archive/2019_2020/", 32 | "link": "https://oj.uz/problem/view/COI20_zagrade", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/Croatian Olympiad in Informatics/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "COI_17_01_ili", 6 | "name": "Ili", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/COI/COI+17-ili.txt", 8 | "link": "https://oj.uz/problem/view/COI17_ili", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "COI_17_02_raspad", 14 | "name": "Raspad", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/COI17_raspad", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "COI_17_03_trapezi", 22 | "name": "Trapezi", 23 | "editorial": "https://codeforces.com/blog/entry/51198", 24 | "link": "https://oj.uz/problem/view/COI17_trapezi", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "COI_17_04_zagrade", 30 | "name": "Zagrade", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/COI/COI-17-zagrade.txt", 32 | "link": "https://oj.uz/problem/view/COI17_zagrade", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "JOI_17_01_Foehn", 6 | "name": "Foehn", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI17_foehn_phenomena", 9 | "solves": 45, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_17_02_Semiexp", 14 | "name": "Semiexp", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI17_semiexpress", 17 | "solves": 20, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_17_03_Kingdom", 22 | "name": "Kingdom", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI17_joioi", 25 | "solves": 20, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_17_04_Soccer", 30 | "name": "Soccer", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/JOI17_soccer", 33 | "solves": 5, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_17_05_Rope", 38 | "name": "Rope", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/JOI17_rope", 41 | "solves": 3, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2021, 3 | "problems": [ 4 | { 5 | "slug": "JOI_21_01_GrowingVegetables4", 6 | "name": "Growing Vegetables 4", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI21_ho_t1", 9 | "solves": 98, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_21_02_Snowball", 14 | "name": "Snowball", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI21_ho_t2", 17 | "solves": 78, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_21_03_GroupPhoto", 22 | "name": "Group Photo", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI21_ho_t3", 25 | "solves": 53, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_21_04_Robot", 30 | "name": "Robot", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/JOI21_ho_t4", 33 | "solves": 21, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_21_05_Dungeon3", 38 | "name": "Dungeon 3", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/JOI21_ho_t5", 41 | "solves": 0, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2020.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2020, 3 | "problems": [ 4 | { 5 | "slug": "JOI_20_01_LongNeckties", 6 | "name": "Long Neckties", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI20_ho_t1", 9 | "solves": 66, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_20_02_JJOOII2", 14 | "name": "JJOOII 2", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI20_ho_t2", 17 | "solves": 62, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_20_03_CollectingStamps3", 22 | "name": "Collecting Stamps 3", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI20_ho_t3", 25 | "solves": 44, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_20_04_OlympicBus", 30 | "name": "Olympic Bus", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/JOI20_ho_t4", 33 | "solves": 13, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_20_05_Fire", 38 | "name": "Fire", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/JOI20_ho_t5", 41 | "solves": 12, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2022.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2022, 3 | "problems": [ 4 | { 5 | "slug": "JOI_22_01_Intercastellar", 6 | "name": "Intercastellar", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI22_ho_t1", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_22_02_SelfStudy", 14 | "name": "SelfStudy", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI22_ho_t2", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_22_03_WinElection", 22 | "name": "WinElection", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI22_ho_t3", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_22_04_Railway2", 30 | "name": "Railway2", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/JOI22_ho_t4", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_22_05_Sandcastle2", 38 | "name": "Sandcastle", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/JOI22_ho_t5", 41 | "solves": -1, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2018.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2018, 3 | "problems": [ 4 | { 5 | "slug": "JOI_18_01_Stove", 6 | "name": "Stove", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI18_stove", 9 | "solves": 41, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_18_02_Art", 14 | "name": "Art", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI18_art", 17 | "solves": 31, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_18_03_DangoMaker", 22 | "name": "Dango Maker", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI18_dango_maker", 25 | "solves": 14, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_18_04_CommuterPass", 30 | "name": "Commuter Pass", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/JOI18_commuter_pass", 33 | "solves": 19, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_18_05_SnakeEscaping", 38 | "name": "Snake Escaping", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/JOI18_snake_escaping", 41 | "solves": 7, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2019.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2019, 3 | "problems": [ 4 | { 5 | "slug": "JOI_19_01_Bitaro", 6 | "name": "Bitaro", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI19_ho_t1", 9 | "solves": 86, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_19_02_Exhibition", 14 | "name": "Exhibition", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI19_ho_t2", 17 | "solves": 41, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_19_03_GrowingVegetable", 22 | "name": "Growing Vegetable", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI19_ho_t3", 25 | "solves": 15, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_19_04_CoinCollecting", 30 | "name": "Coin Collecting", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/JOI19_ho_t4", 33 | "solves": 3, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_19_05_UniqueCities", 38 | "name": "Unique Cities", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/JOI19_ho_t5", 41 | "solves": 0, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/National Olympiad in Informatics (Singapore)/2012.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2012, 3 | "problems": [ 4 | { 5 | "slug": "NOI_12_01_modsum", 6 | "name": "Modsum", 7 | "editorial": "https://github.com/win11905/submission/blob/master/NOI/12/modsum.cpp", 8 | "link": "https://oj.uz/problem/view/NOI12_modsum", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "NOI_12_02_pancake", 14 | "name": "Pancake", 15 | "editorial": "https://www.comp.nus.edu.sg/~noi/2012/2012_soln.pdf", 16 | "link": "https://oj.uz/problem/view/NOI12_pancake", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "NOI_12_03_forensic", 22 | "name": "Forensic", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official/2011.pptx", 24 | "link": "https://oj.uz/problem/view/NOI12_forensic", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "NOI_12_04_walking", 30 | "name": "Walking", 31 | "editorial": "https://www.comp.nus.edu.sg/~noi/2012/2012_soln.pdf", 32 | "link": "https://oj.uz/problem/view/NOI12_walking", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2015.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2015, 3 | "problems": [ 4 | { 5 | "slug": "APIO_15_01_sculpture", 6 | "name": "Sculpture", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-15-sculpture.txt", 8 | "link": "https://oj.uz/problem/view/APIO15_sculpture", 9 | "solves": 61, 10 | "tags": [ 11 | "Greedy", 12 | "Dynamic Programming" 13 | ] 14 | }, 15 | { 16 | "slug": "APIO_15_02_skyscraper", 17 | "name": "Skyscraper", 18 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-15-skyscraper.txt", 19 | "link": "https://oj.uz/problem/view/APIO15_skyscraper", 20 | "solves": 63, 21 | "tags": [ 22 | "Graph", 23 | "Dijkstra" 24 | ] 25 | }, 26 | { 27 | "slug": "APIO_15_03_bridge", 28 | "name": "Bridge", 29 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-15-bridge.txt", 30 | "link": "https://oj.uz/problem/view/APIO15_bridge", 31 | "solves": 22, 32 | "tags": [ 33 | "Math", 34 | "Data Structures" 35 | ] 36 | } 37 | ] 38 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2016.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2016, 3 | "problems": [ 4 | { 5 | "slug": "APIO_16_01_boat", 6 | "name": "Boat", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-16-boat.txt", 8 | "link": "https://oj.uz/problem/view/APIO16_boat", 9 | "solves": 32, 10 | "tags": [ 11 | "Dynamic Programming", 12 | "Math" 13 | ] 14 | }, 15 | { 16 | "slug": "APIO_16_02_fireworks", 17 | "name": "Fireworks", 18 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-16-fireworks.txt", 19 | "link": "https://oj.uz/problem/view/APIO16_fireworks", 20 | "solves": 4, 21 | "tags": [ 22 | "Dynamic Programming", 23 | "Data Structures" 24 | ] 25 | }, 26 | { 27 | "slug": "APIO_16_03_gap", 28 | "name": "Gap", 29 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-16-gap.txt", 30 | "link": "https://oj.uz/problem/view/APIO16_gap", 31 | "solves": 40, 32 | "tags": [ 33 | "Ad-hoc", 34 | "Divide and Conquer", 35 | "Interactive" 36 | ] 37 | } 38 | ] 39 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "APIO_17_01_rainbow", 6 | "name": "Rainbow", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-17-rainbow.txt", 8 | "link": "https://oj.uz/problem/view/APIO17_rainbow", 9 | "solves": 5, 10 | "tags": [ 11 | "Segment Tree", 12 | "Persistence" 13 | ] 14 | }, 15 | { 16 | "slug": "APIO_17_02_merchant", 17 | "name": "Merchant", 18 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-17-merchant.txt", 19 | "link": "https://oj.uz/problem/view/APIO17_merchant", 20 | "solves": 44, 21 | "tags": [ 22 | "Graph", 23 | "Binary Search" 24 | ] 25 | }, 26 | { 27 | "slug": "APIO_17_03_koala", 28 | "name": "Koala", 29 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/official/2017", 30 | "link": "https://oj.uz/problem/view/APIO17_koala", 31 | "solves": 2, 32 | "tags": [ 33 | "Binary Search", 34 | "Interactive", 35 | "Implementation" 36 | ] 37 | } 38 | ] 39 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2014.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2014, 3 | "problems": [ 4 | { 5 | "slug": "JOI_14_01_Emblem", 6 | "name": "Emblem", 7 | "editorial": "", 8 | "link": "https://joi2014ho.contest.atcoder.jp/tasks/joi2014ho1", 9 | "solves": 15, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_14_02_Manju", 14 | "name": "Manju", 15 | "editorial": "", 16 | "link": "https://joi2014ho.contest.atcoder.jp/tasks/joi2014ho2", 17 | "solves": 12, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_14_03_Baumkuchen", 22 | "name": "Baumkuchen", 23 | "editorial": "", 24 | "link": "https://joi2014ho.contest.atcoder.jp/tasks/joi2014ho3", 25 | "solves": 11, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_14_04_Glider", 30 | "name": "Glider", 31 | "editorial": "", 32 | "link": "https://joi2014ho.contest.atcoder.jp/tasks/joi2014ho4", 33 | "solves": 2, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_14_05_Cutting", 38 | "name": "Cutting", 39 | "editorial": "", 40 | "link": "https://joi2014ho.contest.atcoder.jp/tasks/joi2014ho5", 41 | "solves": 0, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2016.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2016, 3 | "problems": [ 4 | { 5 | "slug": "JOI_16_01_Orange", 6 | "name": "Orange", 7 | "editorial": "", 8 | "link": "https://joi2016ho.contest.atcoder.jp/tasks/joi2016ho_a", 9 | "solves": 15, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_16_02_Stamp2", 14 | "name": "Stamp 2", 15 | "editorial": "", 16 | "link": "https://joi2016ho.contest.atcoder.jp/tasks/joi2016ho_b", 17 | "solves": 16, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_16_03_Rail", 22 | "name": "Rail", 23 | "editorial": "", 24 | "link": "https://joi2016ho.contest.atcoder.jp/tasks/joi2016ho_c", 25 | "solves": 8, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_16_04_Territory", 30 | "name": "Territory", 31 | "editorial": "", 32 | "link": "https://joi2016ho.contest.atcoder.jp/tasks/joi2016ho_d", 33 | "solves": 1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_16_05_Fault", 38 | "name": "Fault", 39 | "editorial": "", 40 | "link": "https://joi2016ho.contest.atcoder.jp/tasks/joi2016ho_e", 41 | "solves": 2, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2015.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2015, 3 | "problems": [ 4 | { 5 | "slug": "JOI_15_01_Railroad", 6 | "name": "Railroad", 7 | "editorial": "", 8 | "link": "https://joi2015ho.contest.atcoder.jp/tasks/joi2015ho_a", 9 | "solves": 24, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_15_02_Cake2", 14 | "name": "Cake 2", 15 | "editorial": "", 16 | "link": "https://joi2015ho.contest.atcoder.jp/tasks/joi2015ho_b", 17 | "solves": 15, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_15_03_JOIPark", 22 | "name": "JOI Park", 23 | "editorial": "", 24 | "link": "https://joi2015ho.contest.atcoder.jp/tasks/joi2015ho_c", 25 | "solves": 16, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_15_04_Ball", 30 | "name": "Ball", 31 | "editorial": "", 32 | "link": "https://joi2015ho.contest.atcoder.jp/tasks/joi2015ho_d", 33 | "solves": 5, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_15_05_Rampart", 38 | "name": "Rampart", 39 | "editorial": "", 40 | "link": "https://joi2015ho.contest.atcoder.jp/tasks/joi2015ho_e", 41 | "solves": 2, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2019.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2019, 3 | "problems": [ 4 | { 5 | "slug": "APIO_19_01_strange", 6 | "name": "Strange Device", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-19-strange_device.txt", 8 | "link": "https://oj.uz/problem/view/APIO19_strange_device", 9 | "solves": 111, 10 | "tags": [ 11 | "Disjoint Set Union", 12 | "SQRT Decomposition" 13 | ] 14 | }, 15 | { 16 | "slug": "APIO_19_02_bridges", 17 | "name": "Bridges", 18 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-19-bridges.txt", 19 | "link": "https://oj.uz/problem/view/APIO19_bridges", 20 | "solves": 15, 21 | "tags": [ 22 | "Math", 23 | "Sorting" 24 | ] 25 | }, 26 | { 27 | "slug": "APIO_19_03_street", 28 | "name": "Street Lamps", 29 | "editorial": "https://github.com/Evilandrew228/CompetitiveProgramming/blob/master/APIO%252019-street_lamps", 30 | "link": "https://oj.uz/problem/view/APIO19_street_lamps", 31 | "solves": 21, 32 | "tags": [ 33 | "Segment Tree", 34 | "Implementation" 35 | ] 36 | } 37 | ] 38 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Final Round/2013.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2013, 3 | "problems": [ 4 | { 5 | "slug": "JOI_13_01_Illumination", 6 | "name": "Illumination", 7 | "editorial": "", 8 | "link": "https://joi2013ho.contest.atcoder.jp/tasks/joi2013ho1", 9 | "solves": 46, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOI_13_02_IOITrain", 14 | "name": "IOI Train", 15 | "editorial": "", 16 | "link": "https://joi2013ho.contest.atcoder.jp/tasks/joi2013ho2", 17 | "solves": 18, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOI_13_03_Mansion", 22 | "name": "Mansion", 23 | "editorial": "", 24 | "link": "https://joi2013ho.contest.atcoder.jp/tasks/joi2013ho3", 25 | "solves": 4, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOI_13_04_JOIOI", 30 | "name": "JOIOI", 31 | "editorial": "", 32 | "link": "https://joi2013ho.contest.atcoder.jp/tasks/joi2013ho4", 33 | "solves": 0, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOI_13_05_Bubble", 38 | "name": "Bubble", 39 | "editorial": "", 40 | "link": "https://joi2013ho.contest.atcoder.jp/tasks/joi2013ho5", 41 | "solves": 0, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/Croatian Olympiad in Informatics/2019.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2019, 3 | "problems": [ 4 | { 5 | "slug": "COI_19_01_izlet", 6 | "name": "Izlet", 7 | "editorial": "https://codeforces.com/blog/entry/66506", 8 | "link": "https://oj.uz/problem/view/COI19_izlet", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "COI_19_02_ljetopica", 14 | "name": "Ljetopica", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/COI/COI-19-ljetopica.txt", 16 | "link": "https://oj.uz/problem/view/COI19_ljetopica", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "COI_19_03_segway", 22 | "name": "Segway", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/COI/COI-19-segway.txt", 24 | "link": "https://oj.uz/problem/view/COI19_segway", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "COI_19_04_tenis", 30 | "name": "Tenis", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/COI/COI-19-tenis.txt", 32 | "link": "https://oj.uz/problem/view/COI19_tenis", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/server/trpc/context.ts: -------------------------------------------------------------------------------- 1 | import { type inferAsyncReturnType } from "@trpc/server"; 2 | import { type CreateNextContextOptions } from "@trpc/server/adapters/next"; 3 | import { type Session } from "next-auth"; 4 | 5 | import { getServerAuthSession } from "../common/get-server-auth-session"; 6 | import { prisma } from "../db/client"; 7 | 8 | type CreateContextOptions = { 9 | session: Session | null; 10 | }; 11 | 12 | /** Use this helper for: 13 | * - testing, so we dont have to mock Next.js' req/res 14 | * - trpc's `createSSGHelpers` where we don't have req/res 15 | * @see https://create.t3.gg/en/usage/trpc#-servertrpccontextts 16 | **/ 17 | export const createContextInner = async (opts: CreateContextOptions) => { 18 | return { 19 | session: opts.session, 20 | prisma, 21 | }; 22 | }; 23 | 24 | /** 25 | * This is the actual context you'll use in your router 26 | * @link https://trpc.io/docs/context 27 | **/ 28 | export const createContext = async (opts: CreateNextContextOptions) => { 29 | const { req, res } = opts; 30 | 31 | // Get the session from the server using the unstable_getServerSession wrapper function 32 | const session = await getServerAuthSession({ req, res }); 33 | 34 | return await createContextInner({ 35 | session, 36 | }); 37 | }; 38 | 39 | export type Context = inferAsyncReturnType; 40 | -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2009.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2009, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_09_01_Boxes", 6 | "name": "Boxes", 7 | "editorial": "", 8 | "link": "https://cses.fi/179/list/", 9 | "solves": 0, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_09_02_Harbingers", 14 | "name": "Harbingers", 15 | "editorial": "", 16 | "link": "https://cses.fi/179/list/", 17 | "solves": 2, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_09_03_Photo", 22 | "name": "Photo", 23 | "editorial": "", 24 | "link": "https://cses.fi/179/list/", 25 | "solves": 5, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_09_04_Logs", 30 | "name": "Logs", 31 | "editorial": "", 32 | "link": "https://cses.fi/180/list/", 33 | "solves": 13, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_09_05_Sorting", 38 | "name": "Sorting", 39 | "editorial": "", 40 | "link": "https://cses.fi/180/list/", 41 | "solves": 2, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_09_06_Tri", 46 | "name": "Tri", 47 | "editorial": "", 48 | "link": "https://cses.fi/180/list/", 49 | "solves": 1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2016.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2016, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_16_01_ICC", 6 | "name": "ICC", 7 | "editorial": "", 8 | "link": "https://cses.fi/193/list/", 9 | "solves": 14, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_16_02_Kangaroo", 14 | "name": "Kangaroo", 15 | "editorial": "", 16 | "link": "https://cses.fi/193/list/", 17 | "solves": 0, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_16_03_Trick", 22 | "name": "Trick", 23 | "editorial": "", 24 | "link": "https://cses.fi/193/list/", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_16_04_Match", 30 | "name": "Match", 31 | "editorial": "", 32 | "link": "https://cses.fi/194/list/", 33 | "solves": 3, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_16_05_Popeala", 38 | "name": "Popeala", 39 | "editorial": "", 40 | "link": "https://cses.fi/194/list/", 41 | "solves": 4, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_16_06_Router", 46 | "name": "Router", 47 | "editorial": "", 48 | "link": "https://cses.fi/194/list/", 49 | "solves": 8, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2012.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2012, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_12_01_Jobs", 6 | "name": "Jobs", 7 | "editorial": "", 8 | "link": "https://cses.fi/181/list/", 9 | "solves": 26, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_12_02_Circuit", 14 | "name": "Circuit", 15 | "editorial": "", 16 | "link": "https://cses.fi/181/list/", 17 | "solves": 4, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_12_03_Race", 22 | "name": "Race", 23 | "editorial": "", 24 | "link": "https://cses.fi/181/list/", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_12_04_Highway", 30 | "name": "Highway", 31 | "editorial": "", 32 | "link": "https://cses.fi/182/list/", 33 | "solves": 21, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_12_05_Wagon", 38 | "name": "Wagon", 39 | "editorial": "", 40 | "link": "https://cses.fi/182/list/", 41 | "solves": 5, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_12_06_Network", 46 | "name": "Network", 47 | "editorial": "", 48 | "link": "https://cses.fi/182/list/", 49 | "solves": 13, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2014.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2014, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_14_01_Carnival", 6 | "name": "Carnival", 7 | "editorial": "", 8 | "link": "https://cses.fi/183/list/", 9 | "solves": 23, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_14_02_Fangorn", 14 | "name": "Fangorn", 15 | "editorial": "", 16 | "link": "https://cses.fi/183/list/", 17 | "solves": 9, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_14_03_Question", 22 | "name": "Question", 23 | "editorial": "", 24 | "link": "https://cses.fi/183/list/", 25 | "solves": 6, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_14_04_7", 30 | "name": "`007", 31 | "editorial": "", 32 | "link": "https://cses.fi/184/list/", 33 | "solves": 12, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_14_05_Cake", 38 | "name": "Cake", 39 | "editorial": "", 40 | "link": "https://cses.fi/184/list/", 41 | "solves": 12, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_14_06_Wall", 46 | "name": "Wall", 47 | "editorial": "", 48 | "link": "https://cses.fi/184/list/", 49 | "solves": 0, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2020.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2020, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_20_01_colors", 6 | "name": "Colors", 7 | "editorial": "", 8 | "link": "https://cses.fi/335/list/", 9 | "solves": 4, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_20_02_mixture", 14 | "name": "Mixture", 15 | "editorial": "", 16 | "link": "https://cses.fi/335/list/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_20_03_joker", 22 | "name": "Joker", 23 | "editorial": "", 24 | "link": "https://cses.fi/335/list/", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_20_04_graph", 30 | "name": "Graph", 31 | "editorial": "", 32 | "link": "https://cses.fi/336/list/", 33 | "solves": 19, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_20_05_village", 38 | "name": "Village", 39 | "editorial": "", 40 | "link": "https://cses.fi/336/list/", 41 | "solves": 5, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_20_06_viruses", 46 | "name": "Viruses", 47 | "editorial": "", 48 | "link": "https://cses.fi/336/list/", 49 | "solves": 0, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2010.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2010, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_10_01_Alliances", 6 | "name": "Alliances", 7 | "editorial": "", 8 | "link": "https://cses.fi/197/list/", 9 | "solves": 3, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_10_02_Rectangle", 14 | "name": "Rectangle", 15 | "editorial": "", 16 | "link": "https://cses.fi/197/list/", 17 | "solves": 1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_10_03_Bodyguards", 22 | "name": "Bodyguards", 23 | "editorial": "", 24 | "link": "https://cses.fi/197/list/", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_10_04_MP3", 30 | "name": "MP3", 31 | "editorial": "", 32 | "link": "https://cses.fi/198/list/", 33 | "solves": 2, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_10_05_PIN", 38 | "name": "PIN", 39 | "editorial": "", 40 | "link": "https://cses.fi/198/list/", 41 | "solves": 13, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_10_06_Tower", 46 | "name": "Tower", 47 | "editorial": "", 48 | "link": "https://cses.fi/198/list/", 49 | "solves": 9, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2013.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2013, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_13_01_Treasure", 6 | "name": "Treasure", 7 | "editorial": "", 8 | "link": "https://cses.fi/168/list/", 9 | "solves": 2, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_13_02_Tram", 14 | "name": "Tram", 15 | "editorial": "", 16 | "link": "https://cses.fi/168/list/", 17 | "solves": 1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_13_03_Splot", 22 | "name": "Splot", 23 | "editorial": "", 24 | "link": "https://cses.fi/168/list/", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_13_04_Board", 30 | "name": "Board", 31 | "editorial": "", 32 | "link": "https://cses.fi/169/list/", 33 | "solves": 4, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_13_05_Adriatic", 38 | "name": "Adriatic", 39 | "editorial": "", 40 | "link": "https://cses.fi/169/list/", 41 | "solves": 0, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_13_06_Watering", 46 | "name": "Watering", 47 | "editorial": "", 48 | "link": "https://cses.fi/169/list/", 49 | "solves": 2, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2007.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2007, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_07_01_Ministry", 6 | "name": "Ministry", 7 | "editorial": "", 8 | "link": "https://cses.fi/187/list/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_07_02_Nasty", 14 | "name": "Nasty", 15 | "editorial": "", 16 | "link": "https://cses.fi/187/list/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_07_03_Sail", 22 | "name": "Sail", 23 | "editorial": "", 24 | "link": "https://cses.fi/187/list/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_07_04_Airport", 30 | "name": "Airport", 31 | "editorial": "", 32 | "link": "https://cses.fi/188/list/", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_07_05_Necklace", 38 | "name": "Necklace", 39 | "editorial": "", 40 | "link": "https://cses.fi/188/list/", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_07_06_Treasury", 46 | "name": "Treasury", 47 | "editorial": "", 48 | "link": "https://cses.fi/188/list/", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2011.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2011, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_11_01_Balloons", 6 | "name": "Balloons", 7 | "editorial": "", 8 | "link": "https://cses.fi/174/list/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_11_02_Matching", 14 | "name": "Matching", 15 | "editorial": "", 16 | "link": "https://cses.fi/174/list/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_11_03_Treasure", 22 | "name": "Treasure", 23 | "editorial": "", 24 | "link": "https://cses.fi/174/list/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_11_04_Hotel", 30 | "name": "Hotel", 31 | "editorial": "", 32 | "link": "https://cses.fi/175/list/", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_11_05_Teams", 38 | "name": "Teams", 39 | "editorial": "", 40 | "link": "https://cses.fi/175/list/", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_11_06_Traffic", 46 | "name": "Traffic", 47 | "editorial": "", 48 | "link": "https://cses.fi/175/list/", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_17_01_OneWay", 6 | "name": "One Way", 7 | "editorial": "", 8 | "link": "https://cses.fi/164/list/", 9 | "solves": 21, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_17_02_Bet", 14 | "name": "Bet", 15 | "editorial": "", 16 | "link": "https://cses.fi/164/list/", 17 | "solves": 49, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_17_03_Mousetrap", 22 | "name": "Mousetrap", 23 | "editorial": "", 24 | "link": "https://cses.fi/164/list/", 25 | "solves": 5, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_17_04_Bridges", 30 | "name": "Bridges", 31 | "editorial": "", 32 | "link": "https://cses.fi/165/list/", 33 | "solves": 9, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_17_05_Palindromic", 38 | "name": "Palindromic", 39 | "editorial": "", 40 | "link": "https://cses.fi/165/list/", 41 | "solves": 28, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_17_06_Chase", 46 | "name": "Chase", 47 | "editorial": "", 48 | "link": "https://cses.fi/165/list/", 49 | "solves": 13, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2018.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2018, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_18_01_Cloud", 6 | "name": "Cloud", 7 | "editorial": "", 8 | "link": "https://cses.fi/206/list/", 9 | "solves": 16, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_18_02_Warming", 14 | "name": "Warming", 15 | "editorial": "", 16 | "link": "https://cses.fi/206/list/", 17 | "solves": 27, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_18_03_Lottery", 22 | "name": "Lottery", 23 | "editorial": "", 24 | "link": "https://cses.fi/206/list/", 25 | "solves": 15, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_18_04_Fibonacci", 30 | "name": "Fibonacci", 31 | "editorial": "", 32 | "link": "https://cses.fi/207/list/", 33 | "solves": 0, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_18_05_Toys", 38 | "name": "Toys", 39 | "editorial": "", 40 | "link": "https://cses.fi/207/list/", 41 | "solves": 26, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_18_06_Triangles", 46 | "name": "Triangles", 47 | "editorial": "", 48 | "link": "https://cses.fi/207/list/", 49 | "solves": 18, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/National Olympiad in Informatics (Singapore)/2014.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2014, 3 | "problems": [ 4 | { 5 | "slug": "NOI_14_01_orchard", 6 | "name": "Orchard", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 8 | "link": "https://oj.uz/problem/view/NOI14_orchard", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "NOI_14_02_sightseeing", 14 | "name": "Sightseeing", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 16 | "link": "https://oj.uz/problem/view/NOI14_sightseeing", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "NOI_14_03_cats", 22 | "name": "Cats", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/NOI-14-cats.txt", 24 | "link": "https://oj.uz/problem/view/NOI14_cats", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "NOI_14_04_obelisk", 30 | "name": "Obelisk", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/NOI-14-obelisk.txt", 32 | "link": "https://oj.uz/problem/view/NOI14_obelisk", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2015.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2015, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_15_01_Potemkin", 6 | "name": "Potemkin", 7 | "editorial": "", 8 | "link": "https://cses.fi/172/list/", 9 | "solves": 1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_15_02_Calvinball", 14 | "name": "Calvinball", 15 | "editorial": "", 16 | "link": "https://cses.fi/172/list/", 17 | "solves": 17, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_15_03_Pipes", 22 | "name": "Pipes", 23 | "editorial": "", 24 | "link": "https://cses.fi/172/list/", 25 | "solves": 9, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_15_04_IceHockey", 30 | "name": "Ice Hockey", 31 | "editorial": "", 32 | "link": "https://cses.fi/173/list/", 33 | "solves": 22, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_15_05_Nuclearia", 38 | "name": "Nuclearia", 39 | "editorial": "", 40 | "link": "https://cses.fi/173/list/", 41 | "solves": 3, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_15_06_CalAgain", 46 | "name": "Cal. Again", 47 | "editorial": "", 48 | "link": "https://cses.fi/173/list/", 49 | "solves": 0, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Croatian Olympiad in Informatics/2016.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2016, 3 | "problems": [ 4 | { 5 | "slug": "COI_16_01_dijament", 6 | "name": "Dijament", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/COI/official/2016", 8 | "link": "https://oj.uz/problem/view/COI16_dijament", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "COI_16_02_palinilap", 14 | "name": "Palinilap", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/COI/COI-16-palinilap.txt", 16 | "link": "https://oj.uz/problem/view/COI16_palinilap", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "COI_16_03_relay", 22 | "name": "Relay", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/COI/COI-16-relay.txt", 24 | "link": "https://oj.uz/problem/view/COI16_relay", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "COI_16_04_torrent", 30 | "name": "Torrent", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/COI/COI-16-torrent.txt", 32 | "link": "https://oj.uz/problem/view/COI16_torrent", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/National Olympiad in Informatics (Singapore)/2015.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2015, 3 | "problems": [ 4 | { 5 | "slug": "NOI_15_01_askonegetonefree", 6 | "name": "Askonegetonefree", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 8 | "link": "https://dunjudge.me/analysis/problems/703/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "NOI_15_02_sudoku", 14 | "name": "Sudoku", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 16 | "link": "https://dunjudge.me/analysis/problems/706/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "NOI_15_03_radioactive", 22 | "name": "Radioactive", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 24 | "link": "https://dunjudge.me/analysis/problems/705/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "NOI_15_04_banana", 30 | "name": "Banana", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 32 | "link": "https://dunjudge.me/analysis/problems/704/", 33 | "solves": -1, 34 | "tags": [] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /src/data/problems/Asia Pacific Informatics Olympiad/2018.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2018, 3 | "problems": [ 4 | { 5 | "slug": "APIO_18_01_newhome", 6 | "name": "Newhome", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-18-newhome.txt", 8 | "link": "https://oj.uz/problem/view/APIO18_new_home", 9 | "solves": 7, 10 | "tags": [ 11 | "Segment Tree", 12 | "Divide and Conquer", 13 | "Data Structures" 14 | ] 15 | }, 16 | { 17 | "slug": "APIO_18_02_circleselection", 18 | "name": "Circleselection", 19 | "editorial": "https://github.com/timpostuvan/CompetitiveProgramming/blob/master/Olympiad/APIO/CircleSelection2018.cpp", 20 | "link": "https://oj.uz/problem/view/APIO18_circle_selection", 21 | "solves": 1, 22 | "tags": [ 23 | "Geometry", 24 | "Sweep Line", 25 | "Greedy" 26 | ] 27 | }, 28 | { 29 | "slug": "APIO_18_03_duathlon", 30 | "name": "Duathlon", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/APIO/APIO-18-duathlon.txt", 32 | "link": "https://oj.uz/problem/view/APIO18_duathlon", 33 | "solves": 8, 34 | "tags": [ 35 | "Graph", 36 | "Centroid", 37 | "Strongly Connected Components" 38 | ] 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2021, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_21_01_books", 6 | "name": "DifficultyChoice", 7 | "editorial": "", 8 | "link": "https://cses.fi/360/list/", 9 | "solves": 19, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_21_02_servers", 14 | "name": "Information", 15 | "editorial": "", 16 | "link": "https://cses.fi/360/list/", 17 | "solves": 4, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_21_03_watchmen", 22 | "name": "HackstoSnitches", 23 | "editorial": "", 24 | "link": "https://cses.fi/360/list/", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_21_04_prison", 30 | "name": "Redemption", 31 | "editorial": "", 32 | "link": "https://cses.fi/361/list/", 33 | "solves": 5, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_21_05_swaps", 38 | "name": "Collection", 39 | "editorial": "", 40 | "link": "https://cses.fi/361/list/", 41 | "solves": 1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_21_06_xanadu", 46 | "name": "XanaCoup", 47 | "editorial": "", 48 | "link": "https://cses.fi/361/list/", 49 | "solves": 42, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2019.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2019, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_19_01_Skyscrapers", 6 | "name": "Skyscrapers", 7 | "editorial": "", 8 | "link": "https://cses.fi/311/list/", 9 | "solves": 0, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_19_02_DynamicDiameter", 14 | "name": "Dynamic Diameter", 15 | "editorial": "", 16 | "link": "https://cses.fi/311/list/", 17 | "solves": 4, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_19_03_Cubeword", 22 | "name": "Cubeword", 23 | "editorial": "", 24 | "link": "https://cses.fi/311/list/", 25 | "solves": 8, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_19_04_AmusementPark", 30 | "name": "Amusement Park", 31 | "editorial": "", 32 | "link": "https://cses.fi/312/list/", 33 | "solves": 0, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_19_05_MagicTree", 38 | "name": "Magic Tree", 39 | "editorial": "", 40 | "link": "https://cses.fi/312/list/", 41 | "solves": 9, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_19_06_ScissorsandTape", 46 | "name": "Scissors and Tape", 47 | "editorial": "", 48 | "link": "https://cses.fi/312/list/", 49 | "solves": 0, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2021, 3 | "problems": [ 4 | { 5 | "slug": "IOI_21_01_candies", 6 | "name": "Candies", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IOI21_candies", 9 | "solves": 24, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_21_02_keys", 14 | "name": "Keys", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IOI21_keys", 17 | "solves": 17, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_21_03_parks", 22 | "name": "Parks", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IOI21_parks", 25 | "solves": 11, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_21_04_dna", 30 | "name": "DNA", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IOI21_dna", 33 | "solves": 304, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_21_05_dungeons", 38 | "name": "Dungeons", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IOI21_dungeons", 41 | "solves": 15, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_21_06_registers", 46 | "name": "Registers", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IOI21_registers", 49 | "solves": 7, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2022.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2022, 3 | "problems": [ 4 | { 5 | "slug": "IOI_22_01_fish", 6 | "name": "Fish", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IOI22_fish", 9 | "solves": 47, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_22_02_prison", 14 | "name": "Prison", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IOI22_prison", 17 | "solves": 8, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_22_03_towers", 22 | "name": "Towers", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IOI22_towers", 25 | "solves": 9, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_22_04_circuit", 30 | "name": "Circuit", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IOI22_circuit", 33 | "solves": 51, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_22_05_insects", 38 | "name": "Insects", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IOI22_insects", 41 | "solves": 9, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_22_06_islands", 46 | "name": "Islands", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IOI22_islands", 49 | "solves": 6, 50 | "tags": [] 51 | } 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2021, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_21_01_Diversity", 6 | "name": "Diversity", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/CEOI21_diversity", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_21_02_Ltriominoes", 14 | "name": "L-triominoes", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/CEOI21_ltriominoes", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_21_03_newspapers", 22 | "name": "Newspapers", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/CEOI21_newspapers", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_21_04_stones", 30 | "name": "Stones", 31 | "editorial": "", 32 | "link": "", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_21_05_tortoise", 38 | "name": "Tortoise", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/CEOI21_tortoise", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_21_06_wells", 46 | "name": "Wells", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/CEOI21_wells", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2014.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2014, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_14_01_Divide", 6 | "name": "Divide", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IZhO14_divide", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_14_02_Bank", 14 | "name": "Bank", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IZhO14_bank", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_14_03_Shymbulak", 22 | "name": "Shymbulak", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IZhO14_shymbulak", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_14_04_UFO", 30 | "name": "UFO", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IZhO14_ufo", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_14_05_Blocks", 38 | "name": "Blocks", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IZhO14_blocks", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_14_06_Marriage", 46 | "name": "Marriage", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IZhO14_marriage", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_17_01_Bootfall", 6 | "name": "Bootfall", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IZhO17_bootfall", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_17_02_Money", 14 | "name": "Money", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IZhO17_money", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_17_03_Subsequence", 22 | "name": "Subsequence", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IZhO17_subsequence", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_17_04_Game", 30 | "name": "Game", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IZhO17_game", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_17_05_Bomb", 38 | "name": "Bomb", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IZhO17_bomb", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_17_06_Road", 46 | "name": "Road", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IZhO17_road", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2022.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2022, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_22_01_art", 6 | "name": "Art", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/BOI22_art", 9 | "solves": 40, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_22_02_events", 14 | "name": "EventHopping", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/BOI22_events", 17 | "solves": 14, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_22_03_vault", 22 | "name": "Vault", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/BOI22_vault", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_22_04_communication", 30 | "name": "Communication", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/BOI22_communication", 33 | "solves": 0, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_22_05_island", 38 | "name": "Island", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/BOI22_island", 41 | "solves": 25, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_22_06_passes", 46 | "name": "Passes", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/BOI22_passes", 49 | "solves": 11, 50 | "tags": [] 51 | } 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2020.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2020, 3 | "problems": [ 4 | { 5 | "slug": "IOI_20_01_plants", 6 | "name": "Plants", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IOI20_plants", 9 | "solves": 9, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_20_02_supertrees", 14 | "name": "Supertrees", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IOI20_supertrees", 17 | "solves": 152, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_20_03_tickets", 22 | "name": "Tickets", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IOI20_tickets", 25 | "solves": 39, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_20_04_biscuits", 30 | "name": "BIscuits", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IOI20_biscuits", 33 | "solves": 36, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_20_05_mushrooms", 38 | "name": "Mushrooms", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IOI20_mushrooms", 41 | "solves": 1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_20_06_stations", 46 | "name": "Stations", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IOI20_stations", 49 | "solves": 92, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2022.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2022, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_22_01_Abracadabra", 6 | "name": "Abracadabra", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/CEOI22_abracadabra", 9 | "solves": 10, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_22_02_Homework", 14 | "name": "Homework", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/CEOI22_homework", 17 | "solves": 30, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_22_03_Prize", 22 | "name": "Prize", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/CEOI22_prize", 25 | "solves": 2, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_22_04_Drawing", 30 | "name": "Drawing", 31 | "editorial": "https://oj.uz/problem/view/CEOI22_drawing", 32 | "link": "", 33 | "solves": 0, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_22_05_Measures", 38 | "name": "Measures", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/CEOI22_measures", 41 | "solves": 9, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_22_06_Parking", 46 | "name": "Parking", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/CEOI22_parking", 49 | "solves": 8, 50 | "tags": [] 51 | } 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2018.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2018, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_18_01_Chessboard", 6 | "name": "Chessboard", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IZhO18_chessboard", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_18_02_Plan", 14 | "name": "Plan", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IZhO18_plan", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_18_03_Gift", 22 | "name": "Gift", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IZhO18_nicegift", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_18_04_Segments", 30 | "name": "Segments", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IZhO18_segments", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_18_05_Sequence", 38 | "name": "Sequence", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IZhO18_sequence", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_18_06_TreeArray", 46 | "name": "Tree Array", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IZhO18_treearray", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2019.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2019, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_19_01_Stones", 6 | "name": "Stones", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IZhO19_stones", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_19_02_SortBooks", 14 | "name": "Sort Books", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IZhO19_sortbooks", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_19_03_XORSum", 22 | "name": "XOR Sum", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IZhO19_xorsum", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_19_04_Xoractive", 30 | "name": "Xoractive", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IZhO19_xoractive", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_19_05_Segments", 38 | "name": "Segments", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IZhO19_segments", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_19_06_Lyuboyn", 46 | "name": "Lyuboyn", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IZhO19_lyuboyn", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Japanese Olympiad in Informatics: Open Contest/2014.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2014, 3 | "problems": [ 4 | { 5 | "slug": "JOIOC_14_01_Factories", 6 | "name": "Factories", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/JOI14_factories", 9 | "solves": 28, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "JOIOC_14_02_Fortune2", 14 | "name": "Fortune 2", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/JOI14_fortune_telling2", 17 | "solves": 59, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "JOIOC_14_03_Pirate", 22 | "name": "Pirate", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/JOI14_space_pirate", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "JOIOC_14_04_Migration", 30 | "name": "Migration", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/JOI14_migration", 33 | "solves": 0, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "JOIOC_14_05_Pinball", 38 | "name": "Pinball", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/JOI14_pinball", 41 | "solves": 66, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "JOIOC_14_06_Secret", 46 | "name": "Secret", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/JOI14_secret", 49 | "solves": 68, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2020.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2020, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_20_01_FancyFence", 6 | "name": "Fancy Fence", 7 | "editorial": "", 8 | "link": "https://codeforces.com/contest/1402/problem/A", 9 | "solves": 41, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_20_02_Roads", 14 | "name": "Roads", 15 | "editorial": "", 16 | "link": "https://codeforces.com/contest/1402/problem/B", 17 | "solves": 2, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_20_03_StarTrek", 22 | "name": "Star Trek", 23 | "editorial": "", 24 | "link": "https://codeforces.com/contest/1402/problem/C", 25 | "solves": 2, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_20_04_Potion", 30 | "name": "Potion", 31 | "editorial": "", 32 | "link": "https://codeforces.com/contest/1403/problem/A", 33 | "solves": 9, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_20_05_Cleaning", 38 | "name": "Cleaning", 39 | "editorial": "", 40 | "link": "https://codeforces.com/contest/1403/problem/B", 41 | "solves": 11, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_20_06_ChessRush", 46 | "name": "Chess Rush", 47 | "editorial": "", 48 | "link": "https://codeforces.com/contest/1403/problem/C", 49 | "solves": 0, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/utils/trpc.ts: -------------------------------------------------------------------------------- 1 | import { httpBatchLink, loggerLink } from "@trpc/client"; 2 | import { createTRPCNext } from "@trpc/next"; 3 | import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server"; 4 | import superjson from "superjson"; 5 | 6 | import { type AppRouter } from "../server/trpc/router/_app"; 7 | 8 | const getBaseUrl = () => { 9 | if (typeof window !== "undefined") return ""; // browser should use relative url 10 | if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`; // SSR should use vercel url 11 | return `http://localhost:${process.env.PORT ?? 3000}`; // dev SSR should use localhost 12 | }; 13 | 14 | export const trpc = createTRPCNext({ 15 | config() { 16 | return { 17 | transformer: superjson, 18 | links: [ 19 | loggerLink({ 20 | enabled: (opts) => 21 | process.env.NODE_ENV === "development" || 22 | (opts.direction === "down" && opts.result instanceof Error), 23 | }), 24 | httpBatchLink({ 25 | url: `${getBaseUrl()}/api/trpc`, 26 | }), 27 | ], 28 | }; 29 | }, 30 | ssr: false, 31 | }); 32 | 33 | /** 34 | * Inference helper for inputs 35 | * @example type HelloInput = RouterInputs['example']['hello'] 36 | **/ 37 | export type RouterInputs = inferRouterInputs; 38 | /** 39 | * Inference helper for outputs 40 | * @example type HelloOutput = RouterOutputs['example']['hello'] 41 | **/ 42 | export type RouterOutputs = inferRouterOutputs; 43 | -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2015.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2015, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_15_01_Permutation", 6 | "name": "Permutation", 7 | "editorial": "", 8 | "link": "https://izho.kz/wp-content/uploads/2018/01/day1-en-1.pdf", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_15_02_Matrix", 14 | "name": "Matrix", 15 | "editorial": "", 16 | "link": "https://izho.kz/wp-content/uploads/2018/01/day1-en-1.pdf", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_15_03_Heroes", 22 | "name": "Heroes", 23 | "editorial": "", 24 | "link": "https://izho.kz/wp-content/uploads/2018/01/day1-en-1.pdf", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_15_04_Crystals", 30 | "name": "Crystals", 31 | "editorial": "", 32 | "link": "https://izho.kz/wp-content/uploads/2018/01/day2-en-1.pdf", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_15_05_GCD", 38 | "name": "GCD", 39 | "editorial": "", 40 | "link": "https://izho.kz/wp-content/uploads/2018/01/day2-en-1.pdf", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_15_06_Magican", 46 | "name": "Magican", 47 | "editorial": "", 48 | "link": "https://izho.kz/wp-content/uploads/2018/01/day2-en-1.pdf", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/components/tagsBox.tsx: -------------------------------------------------------------------------------- 1 | import { Flex, Box, Text } from "@chakra-ui/react"; 2 | import Link from "next/link"; 3 | 4 | 5 | 6 | interface TagsBoxProps { 7 | typeTags: string[]; 8 | editorial: string; 9 | solveCount: number; 10 | } 11 | 12 | const TagsBox: React.FC = ({ 13 | typeTags, editorial, solveCount, 14 | }) => { 15 | 16 | return ( 17 | 18 | 25 | 26 | 27 | Editorial 28 | 29 | 30 | 31 | {solveCount < 0 ? <> : 32 | 39 | 40 | {"Solves: " + solveCount.toString()} 41 | 42 | 43 | } 44 | {typeTags.map((typeTag) => ( 45 | 53 | 54 | {typeTag} 55 | 56 | 57 | ))} 58 | 59 | ); 60 | }; 61 | 62 | export default TagsBox; 63 | -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2020.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2020, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_20_01_Lines", 6 | "name": "Lines", 7 | "editorial": "https://codeforces.com/blog/entry/73433", 8 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/265564/problem/A", 9 | "solves": 68, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_20_02_Annoying", 14 | "name": "Annoying", 15 | "editorial": "", 16 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/265564/problem/B", 17 | "solves": 12, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_20_03_Nasty", 22 | "name": "Nasty", 23 | "editorial": "", 24 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/265564/problem/C", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_20_04_DNA", 30 | "name": "DNA", 31 | "editorial": "", 32 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/265827/problem/A", 33 | "solves": 34, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_20_05_KazHackStan", 38 | "name": "KazHackStan", 39 | "editorial": "", 40 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/265827/problem/B", 41 | "solves": 0, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_20_06_Queries", 46 | "name": "Queries", 47 | "editorial": "", 48 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/265827/problem/C", 49 | "solves": 0, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2016.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2016, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_16_01_Volunteers", 6 | "name": "Volunteers", 7 | "editorial": "", 8 | "link": "https://izho.kz/wp-content/uploads/2018/01/1-day.-contest-en.pdf", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_16_02_Liar", 14 | "name": "Liar", 15 | "editorial": "", 16 | "link": "https://izho.kz/wp-content/uploads/2018/01/1-day.-contest-en.pdf", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_16_03_Segments", 22 | "name": "Segments", 23 | "editorial": "", 24 | "link": "https://izho.kz/wp-content/uploads/2018/01/1-day.-contest-en.pdf", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_16_04_Bacteria", 30 | "name": "Bacteria", 31 | "editorial": "", 32 | "link": "https://izho.kz/wp-content/uploads/2018/01/2-day.-contest-3568-en.pdf", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_16_05_Checkers", 38 | "name": "Checkers", 39 | "editorial": "", 40 | "link": "https://izho.kz/wp-content/uploads/2018/01/2-day.-contest-3568-en.pdf", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_16_06_HamiltonCycle", 46 | "name": "Hamilton Cycle", 47 | "editorial": "", 48 | "link": "https://izho.kz/wp-content/uploads/2018/01/2-day.-contest-3568-en.pdf", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2021, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_21_01_Cities", 6 | "name": "Cities", 7 | "editorial": "https://drive.google.com/file/d/1cY4keiNGtGTKN3ddEv3ga1SFkpSQhqqg/view", 8 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/311359/problem/A", 9 | "solves": 71, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_21_02_Potatoes", 14 | "name": "Potatoes", 15 | "editorial": "", 16 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/311359/problem/B", 17 | "solves": 15, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_21_03_Chips", 22 | "name": "Chips", 23 | "editorial": "", 24 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/311359/problem/C", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_21_04_Unstable", 30 | "name": "Unstable", 31 | "editorial": "", 32 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/311770/problem/A", 33 | "solves": 5, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_21_05_Rooms", 38 | "name": "Rooms", 39 | "editorial": "", 40 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/311770/problem/B", 41 | "solves": 15, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_21_06_Dendrology", 46 | "name": "Dendrology", 47 | "editorial": "", 48 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/311770/problem/C", 49 | "solves": 1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2022.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2022, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_22_01_Legend", 6 | "name": "Legend", 7 | "editorial": "https://drive.google.com/file/d/16R3PFM7c8P304L4EId-W7FOR4bcQMqPM/view", 8 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/369641/problem/A", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_22_02_Zhylanio", 14 | "name": "Zhylan.io", 15 | "editorial": "", 16 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/369641/problem/B", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_22_03_Mansur", 22 | "name": "Mansur", 23 | "editorial": "", 24 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/369641/problem/C", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_22_04_Kaskelen", 30 | "name": "Kaskelen", 31 | "editorial": "", 32 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/369643/problem/A", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_22_05_Challenges", 38 | "name": "Challenges", 39 | "editorial": "", 40 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/369643/problem/B", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_22_06_Green", 46 | "name": "Green", 47 | "editorial": "", 48 | "link": "https://codeforces.com/group/Uo1lq8ZyWf/contest/369643/problem/C", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/National Olympiad in Informatics (Singapore)/2016.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2016, 3 | "problems": [ 4 | { 5 | "slug": "NOI_16_01_lunchbox", 6 | "name": "Lunchbox", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 8 | "link": "https://dunjudge.me/analysis/problems/954/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "NOI_16_02_fabric", 14 | "name": "Fabric", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 16 | "link": "https://dunjudge.me/analysis/problems/955/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "NOI_16_03_rock", 22 | "name": "Rock", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 24 | "link": "https://dunjudge.me/analysis/problems/956/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "NOI_16_04_pandaski", 30 | "name": "Pandaski", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 32 | "link": "https://dunjudge.me/analysis/problems/957/", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "NOI_16_05_unlucky", 38 | "name": "Unlucky", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 40 | "link": "https://dunjudge.me/analysis/problems/958/", 41 | "solves": -1, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/components/layout.tsx: -------------------------------------------------------------------------------- 1 | import { type ReactNode } from "react"; 2 | import Head from "next/head"; 3 | import GridLoader from "react-spinners/GridLoader"; 4 | import { Grid, GridItem, Flex } from "@chakra-ui/react"; 5 | import { useSession } from "next-auth/react"; 6 | 7 | import { AnalyticsWrapper } from "./analytics"; 8 | 9 | import Navbar from "./navbar"; 10 | 11 | interface LayoutProps { 12 | title: string; 13 | children: ReactNode; 14 | } 15 | 16 | const Layout: React.FC = ({ title, children }) => { 17 | const { status } = useSession(); 18 | 19 | return ( 20 | <> 21 | 22 | 23 | {title ? `${title} | OI Checklist` : "OI Checklist"} 24 | 25 | 26 | 27 | 28 |
29 | 35 | 36 | 37 | 38 | 39 |
40 | {status === "loading" ? ( 41 | 42 | 43 | 44 | ) : ( 45 | children 46 | )} 47 |
48 |
49 |
50 | 51 |
52 | 53 | ); 54 | }; 55 | 56 | export default Layout; 57 | -------------------------------------------------------------------------------- /src/data/problems/National Olympiad in Informatics (Singapore)/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "NOI_17_01_best", 6 | "name": "Best", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 8 | "link": "https://oj.uz/problem/view/NOI17_bestplace", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "NOI_17_02_roadside", 14 | "name": "Roadside", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 16 | "link": "https://oj.uz/problem/view/NOI17_roadsideadverts", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "NOI_17_03_hotspot", 22 | "name": "Hotspot", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official", 24 | "link": "https://oj.uz/problem/view/NOI17_hotspot", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "NOI_17_04_rmq", 30 | "name": "Rmq", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/NOI-17-rmq.txt", 32 | "link": "https://oj.uz/problem/view/NOI17_rmq", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "NOI_17_05_very", 38 | "name": "Pokemon", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/NOI-17-very_best_pokemon.txt", 40 | "link": "https://oj.uz/problem/view/NOI17_pokemonmaster", 41 | "solves": -1, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/data/problems/National Olympiad in Informatics (Singapore)/2011.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2011, 3 | "problems": [ 4 | { 5 | "slug": "NOI_11_01_change", 6 | "name": "Change", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official/2011.pptx", 8 | "link": "https://dunjudge.me/analysis/problems/18/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "NOI_11_02_paint", 14 | "name": "Paint", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official/2011.pptx", 16 | "link": "https://dunjudge.me/analysis/problems/215/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "NOI_11_03_tour", 22 | "name": "Tour", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/NOI-11-tour.txt", 24 | "link": "https://dunjudge.me/analysis/problems/28/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "NOI_11_04_tutor", 30 | "name": "Tutor", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official/2011.pptx", 32 | "link": "https://dunjudge.me/analysis/problems/26/", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "NOI_11_05_sequence", 38 | "name": "Sequence", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/NOI/official/2011.pptx", 40 | "link": "https://dunjudge.me/analysis/problems/27/", 41 | "solves": -1, 42 | "tags": [] 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/env/schema.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import { z } from "zod"; 3 | 4 | /** 5 | * Specify your server-side environment variables schema here. 6 | * This way you can ensure the app isn't built with invalid env vars. 7 | */ 8 | export const serverSchema = z.object({ 9 | DATABASE_URL: z.string().url(), 10 | NODE_ENV: z.enum(["development", "test", "production"]), 11 | NEXTAUTH_SECRET: 12 | process.env.NODE_ENV === "production" 13 | ? z.string().min(1) 14 | : z.string().min(1).optional(), 15 | NEXTAUTH_URL: z.preprocess( 16 | // This makes Vercel deployments not fail if you don't set NEXTAUTH_URL 17 | // Since NextAuth.js automatically uses the VERCEL_URL if present. 18 | (str) => process.env.VERCEL_URL ?? str, 19 | // VERCEL_URL doesn't include `https` so it cant be validated as a URL 20 | process.env.VERCEL ? z.string() : z.string().url(), 21 | ), 22 | GITHUB_CLIENT_ID: z.string(), 23 | GITHUB_CLIENT_SECRET: z.string(), 24 | }); 25 | 26 | /** 27 | * Specify your client-side environment variables schema here. 28 | * This way you can ensure the app isn't built with invalid env vars. 29 | * To expose them to the client, prefix them with `NEXT_PUBLIC_`. 30 | */ 31 | export const clientSchema = z.object({ 32 | // NEXT_PUBLIC_CLIENTVAR: z.string(), 33 | }); 34 | 35 | /** 36 | * You can't destruct `process.env` as a regular object, so you have to do 37 | * it manually here. This is because Next.js evaluates this at build time, 38 | * and only used environment variables are included in the build. 39 | * @type {{ [k in keyof z.infer]: z.infer[k] | undefined }} 40 | */ 41 | export const clientEnv = { 42 | // NEXT_PUBLIC_CLIENTVAR: process.env.NEXT_PUBLIC_CLIENTVAR, 43 | }; 44 | -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2006.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2006, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_06_01_Bitwise", 6 | "name": "Bitwise", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-06-Bitwise.txt", 8 | "link": "https://cses.fi/109/list/", 9 | "solves": 7, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_06_02_Coin", 14 | "name": "Coin", 15 | "editorial": "", 16 | "link": "https://cses.fi/109/list/", 17 | "solves": 4, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_06_03_Countries", 22 | "name": "Countries", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-06-Countries.txt", 24 | "link": "https://cses.fi/109/list/", 25 | "solves": 24, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_06_04_City", 30 | "name": "City", 31 | "editorial": "", 32 | "link": "https://cses.fi/110/list/", 33 | "solves": 3, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_06_05_RLE", 38 | "name": "Rle", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-06-RLE.txt", 40 | "link": "https://cses.fi/110/list/", 41 | "solves": 0, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_06_06_Jump", 46 | "name": "Jump", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2006_solutions", 48 | "link": "https://cses.fi/110/list/", 49 | "solves": 26, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Balkan Olympiad in Informatics/2015.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2015, 3 | "problems": [ 4 | { 5 | "slug": "Balkan_15_01_Circus", 6 | "name": "Circus", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Balkan/official/2015", 8 | "link": "https://www.acmicpc.net/problem/12017", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Balkan_15_02_Happiness", 14 | "name": "Happiness", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Balkan/official/2015", 16 | "link": "https://www.acmicpc.net/problem/11783", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Balkan_15_03_UltimateTTT", 22 | "name": "Ultimate TTT", 23 | "editorial": "", 24 | "link": "https://www.acmicpc.net/problem/11554", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Balkan_15_04_Clarkson", 30 | "name": "Clarkson", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Balkan/official/2015", 32 | "link": "https://www.acmicpc.net/problem/11555", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Balkan_15_05_RADIO", 38 | "name": "Radio", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Balkan/official/2015", 40 | "link": "https://www.acmicpc.net/problem/11556", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Balkan_15_06_TILING", 46 | "name": "Tiling", 47 | "editorial": "", 48 | "link": "https://www.acmicpc.net/problem/11782", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Balkan Olympiad in Informatics/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "Balkan_17_01_sheets", 6 | "name": "Sheets", 7 | "editorial": "", 8 | "link": "https://csacademy.com/contest/balkan-oi-2017-day-1/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Balkan_17_02_strings", 14 | "name": "Strings", 15 | "editorial": "", 16 | "link": "https://csacademy.com/contest/balkan-oi-2017-day-1/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Balkan_17_03_tale", 22 | "name": "Tale", 23 | "editorial": "", 24 | "link": "https://csacademy.com/contest/balkan-oi-2017-day-1/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Balkan_17_04_Cats", 30 | "name": "Cats", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-17-Cats.txt", 32 | "link": "https://csacademy.com/contest/balkan-oi-2017-day-2/", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Balkan_17_05_Monsters", 38 | "name": "Monsters", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-17-Monsters.txt", 40 | "link": "https://csacademy.com/contest/balkan-oi-2017-day-2/", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Balkan_17_06_CityAttractions", 46 | "name": "Cityattractions", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-17-CityAttractions.txt", 48 | "link": "https://csacademy.com/contest/balkan-oi-2017-day-2/", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2012.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2012, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_12_01_Brackets", 6 | "name": "Brackets", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-12-Brackets.txt", 8 | "link": "https://cses.fi/98/list/", 9 | "solves": 2, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_12_02_mobile", 14 | "name": "Mobile", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-12-mobile.txt", 16 | "link": "https://cses.fi/98/list/", 17 | "solves": 0, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_12_03_Peaks", 22 | "name": "Peaks", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-12-Peaks.txt", 24 | "link": "https://cses.fi/98/list/", 25 | "solves": 6, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_12_04_Fire", 30 | "name": "Fire", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-12-Fire.txt", 32 | "link": "https://cses.fi/99/list/", 33 | "solves": 5, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_12_05_Melody", 38 | "name": "Melody", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-12-Melody.txt", 40 | "link": "https://cses.fi/99/list/", 41 | "solves": 1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_12_06_Tiny", 46 | "name": "Tiny", 47 | "editorial": "", 48 | "link": "https://cses.fi/99/list/", 49 | "solves": 1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2013.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2013, 3 | "problems": [ 4 | { 5 | "slug": "IOI_13_01_dreaming", 6 | "name": "Dreaming", 7 | "editorial": "https://github.com/MohamedAhmed04/Competitive-programming/blob/master/IOI/IOI%25202013-Dreaming.cpp", 8 | "link": "https://oj.uz/problem/view/IOI13_dreaming", 9 | "solves": 94, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_13_02_artclass", 14 | "name": "Art Class", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IOI13_artclass", 17 | "solves": 13, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_13_03_wombats", 22 | "name": "Wombats", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-13-wombats.txt", 24 | "link": "https://oj.uz/problem/view/IOI13_wombats", 25 | "solves": 3, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_13_04_cave", 30 | "name": "Cave", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-13-cave.txt", 32 | "link": "https://oj.uz/problem/view/IOI13_cave", 33 | "solves": 135, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_13_05_robots", 38 | "name": "Robots", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-13-robots.txt", 40 | "link": "https://oj.uz/problem/view/IOI13_robots", 41 | "solves": 47, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_13_06_game", 46 | "name": "Game", 47 | "editorial": "http://blog.brucemerry.org.za/2013/07/", 48 | "link": "https://oj.uz/problem/view/IOI13_game", 49 | "solves": 6, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2014.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2014, 3 | "problems": [ 4 | { 5 | "slug": "IOI_14_01_rail", 6 | "name": "Rail", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-14-rail.txt", 8 | "link": "https://oj.uz/problem/view/IOI14_rail", 9 | "solves": 17, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_14_02_wall", 14 | "name": "Wall", 15 | "editorial": "http://blog.brucemerry.org.za/2014/07/", 16 | "link": "https://oj.uz/problem/view/IOI14_wall", 17 | "solves": 82, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_14_03_game", 22 | "name": "Game", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-14-game.txt", 24 | "link": "https://oj.uz/problem/view/IOI14_game", 25 | "solves": 71, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_14_04_gondola", 30 | "name": "Gondola", 31 | "editorial": "http://blog.brucemerry.org.za/2014/07/", 32 | "link": "https://oj.uz/problem/view/IOI14_gondola", 33 | "solves": 114, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_14_05_friend", 38 | "name": "Friend", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-14-friend.txt", 40 | "link": "https://oj.uz/problem/view/IOI14_friend", 41 | "solves": 13, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_14_06_holiday", 46 | "name": "Holiday", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-14-holiday.txt", 48 | "link": "https://oj.uz/problem/view/IOI14_holiday", 49 | "solves": 11, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2016.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2016, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_16_01_bosses", 6 | "name": "Bosses", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-16-bosses.txt", 8 | "link": "https://oj.uz/problem/view/BOI16_bosses", 9 | "solves": 30, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_16_02_park", 14 | "name": "Park", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-16-park.txt", 16 | "link": "https://oj.uz/problem/view/BOI16_park", 17 | "solves": 15, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_16_03_spiral", 22 | "name": "Spiral", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2016_solutions", 24 | "link": "https://oj.uz/problem/view/BOI16_spiral", 25 | "solves": 1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_16_04_cities", 30 | "name": "Cities", 31 | "editorial": "https://github.com/tmwilliamlin168/CompetitiveProgramming/blob/master/BtOI/16-Cities.cpp", 32 | "link": "https://oj.uz/problem/view/BOI16_cities", 33 | "solves": 4, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_16_05_maze", 38 | "name": "Maze", 39 | "editorial": "", 40 | "link": "https://cses.fi/88/list/", 41 | "solves": 0, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_16_06_swap", 46 | "name": "Swap", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-16-swap.txt", 48 | "link": "https://oj.uz/problem/view/BOI16_swap", 49 | "solves": 4, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_17_01_PoliticalDevelopment", 6 | "name": "Political Development", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-17-PoliticalDevelopment.txt", 8 | "link": "https://cses.fi/202/list/", 9 | "solves": 9, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_17_02_Railway", 14 | "name": "Railway", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-17-Railway.txt", 16 | "link": "https://cses.fi/202/list/", 17 | "solves": 13, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_17_03_Toll", 22 | "name": "Toll", 23 | "editorial": "https://github.com/Szawinis/CompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic17-toll.cpp", 24 | "link": "https://cses.fi/202/list/", 25 | "solves": 24, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_17_04_Cat", 30 | "name": "Cat", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-17-Cat.txt", 32 | "link": "https://cses.fi/203/list/", 33 | "solves": 24, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_17_05_Friends", 38 | "name": "Friends", 39 | "editorial": "https://codeforces.com/blog/entry/51740?%23comment-356943", 40 | "link": "https://cses.fi/203/list/", 41 | "solves": 0, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_17_06_PlusMinus", 46 | "name": "Plusminus", 47 | "editorial": "https://codeforces.com/blog/entry/51740?%23comment-356940", 48 | "link": "https://cses.fi/203/list/", 49 | "solves": 8, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2012.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2012, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_12_01_Train", 6 | "name": "Train", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IZhO12_train", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_12_02_Beauty", 14 | "name": "Beauty", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IZhO12_beauty", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_12_03_XOR", 22 | "name": "XOR", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IZhO12_xor", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_12_04_Biochips", 30 | "name": "Biochips", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IZhO12_biochips", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_12_05_Ants", 38 | "name": "Ants", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IZhO12_ants", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_12_06_Apple", 46 | "name": "Apple", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IZhO12_apple", 49 | "solves": -1, 50 | "tags": [] 51 | }, 52 | { 53 | "slug": "IZHO_12_07_Route", 54 | "name": "Route", 55 | "editorial": "", 56 | "link": "https://oj.uz/problem/view/IZhO12_route", 57 | "solves": -1, 58 | "tags": [] 59 | }, 60 | { 61 | "slug": "IZHO_12_08_Substrings", 62 | "name": "Substrings", 63 | "editorial": "", 64 | "link": "https://izho.kz/wp-content/uploads/2018/12/day2_eng.pdf", 65 | "solves": -1, 66 | "tags": [] 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2013.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2013, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_13_01_Gorlum", 6 | "name": "Gorlum", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IZhO13_expgorl", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_13_02_Cube", 14 | "name": "Cube", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IZhO13_riddicks", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_13_03_Schools", 22 | "name": "Schools", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IZhO13_school", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_13_04_SpacialGraph", 30 | "name": "Spacial Graph", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IZhO13_specialg", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_13_05_Crazy", 38 | "name": "Crazy", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IZhO13_crazy", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_13_06_Burrow", 46 | "name": "Burrow", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IZhO13_burrow", 49 | "solves": -1, 50 | "tags": [] 51 | }, 52 | { 53 | "slug": "IZHO_13_07_Words", 54 | "name": "Words", 55 | "editorial": "", 56 | "link": "https://oj.uz/problem/view/IZhO13_rowords", 57 | "solves": -1, 58 | "tags": [] 59 | }, 60 | { 61 | "slug": "IZHO_13_08_Trading", 62 | "name": "Trading", 63 | "editorial": "", 64 | "link": "https://oj.uz/problem/view/IZhO13_trading", 65 | "solves": -1, 66 | "tags": [] 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /src/data/problems/International Zhautykov Olympiad in Informatics/2011.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2011, 3 | "problems": [ 4 | { 5 | "slug": "IZHO_11_01_Triangle", 6 | "name": "Triangle", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IZhO11_triangle", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IZHO_11_02_Hyper", 14 | "name": "Hyper", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/IZhO11_hyper", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IZHO_11_03_Turtle", 22 | "name": "Turtle", 23 | "editorial": "", 24 | "link": "https://oj.uz/problem/view/IZhO11_turtle", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IZHO_11_04_Stones", 30 | "name": "Stones", 31 | "editorial": "", 32 | "link": "https://oj.uz/problem/view/IZhO11_stones", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IZHO_11_05_Odd-even", 38 | "name": "Odd-even", 39 | "editorial": "", 40 | "link": "https://oj.uz/problem/view/IZhO11_oddeven", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IZHO_11_06_Skyline", 46 | "name": "Skyline", 47 | "editorial": "", 48 | "link": "https://oj.uz/problem/view/IZhO11_skyline", 49 | "solves": -1, 50 | "tags": [] 51 | }, 52 | { 53 | "slug": "IZHO_11_07_Collider", 54 | "name": "Collider", 55 | "editorial": "", 56 | "link": "https://oj.uz/problem/view/IZhO11_collider", 57 | "solves": -1, 58 | "tags": [] 59 | }, 60 | { 61 | "slug": "IZHO_11_08_K-thPath", 62 | "name": "K-th Path", 63 | "editorial": "", 64 | "link": "https://oj.uz/problem/view/IZhO11_kthpath", 65 | "solves": -1, 66 | "tags": [] 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2005.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2005, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_05_01_Service", 6 | "name": "Service", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/CEOI/official/2005", 8 | "link": "https://cses.fi/191/list/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_05_02_Depot", 14 | "name": "Depot", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-05-Depot.txt", 16 | "link": "https://cses.fi/191/list/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_05_03_keys", 22 | "name": "Keys", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-05-keys.txt", 24 | "link": "https://cses.fi/191/list/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_05_04_Fence", 30 | "name": "Fence", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-05-Fence.txt", 32 | "link": "https://cses.fi/192/list/", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_05_05_Net", 38 | "name": "Net", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-05-Net.txt", 40 | "link": "https://cses.fi/192/list/", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_05_06_Ticket", 46 | "name": "Ticket", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-05-Ticket.txt", 48 | "link": "https://cses.fi/192/list/", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2011.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2011, 3 | "problems": [ 4 | { 5 | "slug": "IOI_11_01_garden", 6 | "name": "Garden", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-11-garden.txt", 8 | "link": "https://oj.uz/problem/view/IOI11_garden", 9 | "solves": 36, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_11_02_race", 14 | "name": "Race", 15 | "editorial": "https://github.com/aviroop123/CompetitiveProgramming/blob/master/Olympiad/IOI/IOI%252011-race.cpp", 16 | "link": "https://oj.uz/problem/view/IOI11_race", 17 | "solves": 29, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_11_03_ricehub", 22 | "name": "Ricehub", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2011", 24 | "link": "https://oj.uz/problem/view/IOI11_ricehub", 25 | "solves": 113, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_11_04_crocodile", 30 | "name": "Crocodile", 31 | "editorial": "http://www.ioi2011.or.th/hsc/tasks/solutions/crocodile.pdf", 32 | "link": "https://oj.uz/problem/view/IOI11_crocodile", 33 | "solves": 108, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_11_05_elephants", 38 | "name": "Elephants", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-11-elephants.txt", 40 | "link": "https://oj.uz/problem/view/IOI11_elephants", 41 | "solves": 6, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_11_06_parrots", 46 | "name": "Parrots", 47 | "editorial": "http://www.ioi2011.or.th/hsc/tasks/EN/parrots.pdf", 48 | "link": "https://oj.uz/problem/view/IOI11_parrots", 49 | "solves": 7, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2006.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2006, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_06_01_Antenna", 6 | "name": "Antenna", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-06-Antenna.txt", 8 | "link": "https://cses.fi/185/list/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_06_02_Queue", 14 | "name": "Queue", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-06-Queue.txt", 16 | "link": "https://cses.fi/185/list/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_06_03_Walk", 22 | "name": "Walk", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-06-Walk.txt", 24 | "link": "https://cses.fi/185/list/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_06_04_Connect", 30 | "name": "Connect", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-06-Connect.txt", 32 | "link": "https://cses.fi/186/list/", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_06_05_Link", 38 | "name": "Link", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/CEOI/official/2006", 40 | "link": "https://cses.fi/186/list/", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_06_06_Meandian", 46 | "name": "Meandian", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-06-Meandian.txt", 48 | "link": "https://cses.fi/186/list/", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Balkan Olympiad in Informatics/2012.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2012, 3 | "problems": [ 4 | { 5 | "slug": "Balkan_12_01_BOI", 6 | "name": "Boi", 7 | "editorial": "", 8 | "link": "https://www.acmicpc.net/problem/5249", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Balkan_12_02_ShortestPaths", 14 | "name": "Shortest paths", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-12-ShortestPaths.txt", 16 | "link": "https://www.acmicpc.net/problem/5250", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Balkan_12_03_Spiral", 22 | "name": "Spiral", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Balkan/official/2012", 24 | "link": "https://www.acmicpc.net/problem/5251", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Balkan_12_04_BestTeams", 30 | "name": "Best teams", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-12-BestTeams.txt", 32 | "link": "https://www.acmicpc.net/problem/5252", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Balkan_12_05_Fan", 38 | "name": "Fan", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-12-Fan_Groups.txt", 40 | "link": "https://www.acmicpc.net/problem/5253", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Balkan_12_06_balls", 46 | "name": "Balls", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-12-balls.txt", 48 | "link": "https://www.acmicpc.net/problem/5254", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Central-European Olympiad in Informatics/2008.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2008, 3 | "problems": [ 4 | { 5 | "slug": "CEOI_08_01_Dominance", 6 | "name": "Dominance", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-08-Dominance.txt", 8 | "link": "https://cses.fi/189/list/", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "CEOI_08_02_Knights", 14 | "name": "Knights", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-08-Knights.txt", 16 | "link": "https://cses.fi/189/list/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "CEOI_08_03_Information", 22 | "name": "Information", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/CEOI/official/2008", 24 | "link": "https://cses.fi/189/list/", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "CEOI_08_04_Snake", 30 | "name": "Snake", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-08-Snake.txt", 32 | "link": "https://cses.fi/190/list/", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "CEOI_08_05_Order", 38 | "name": "Order", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/CEOI/official/2008", 40 | "link": "https://cses.fi/190/list/", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "CEOI_08_06_Fence", 46 | "name": "Fence", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/CEOI/CEOI-08-Fence.txt", 48 | "link": "https://cses.fi/190/list/", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2010.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2010, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_10_01_Bears", 6 | "name": "Bears", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-10-Bears.txt", 8 | "link": "https://cses.fi/105/list/", 9 | "solves": 3, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_10_02_Lego", 14 | "name": "Lego", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2010_solutions", 16 | "link": "https://cses.fi/105/list/", 17 | "solves": 1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_10_03_PCB", 22 | "name": "PCB", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-10-PCB.txt", 24 | "link": "https://cses.fi/105/list/", 25 | "solves": 13, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_10_04_Bins", 30 | "name": "Bins", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-10-Bins.txt", 32 | "link": "https://cses.fi/106/list/", 33 | "solves": 18, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_10_05_Candies", 38 | "name": "Candies", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-10-Candies.txt", 40 | "link": "https://cses.fi/106/list/", 41 | "solves": 2, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_10_06_Mines", 46 | "name": "Mines", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2010_solutions", 48 | "link": "https://cses.fi/106/list/", 49 | "solves": 2, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2008.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2008, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_08_01_Game", 6 | "name": "Game", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-08-Game.txt", 8 | "link": "https://cses.fi/113/list/", 9 | "solves": 0, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_08_02_Gates", 14 | "name": "Gates", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-08-Gates.txt", 16 | "link": "https://cses.fi/113/list/", 17 | "solves": 2, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_08_03_Magical", 22 | "name": "Magical", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-08-Magical.txt", 24 | "link": "https://cses.fi/113/list/", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_08_04_Elections", 30 | "name": "Elections", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2008_solutions", 32 | "link": "https://cses.fi/114/list/", 33 | "solves": 13, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_08_05_Grid", 38 | "name": "Grid", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-08-Grid.txt", 40 | "link": "https://cses.fi/114/list/", 41 | "solves": 7, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_08_06_Gloves", 46 | "name": "Gloves", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-08-Gloves.txt", 48 | "link": "https://cses.fi/114/list/", 49 | "solves": 4, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2019.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2019, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_19_01_flash", 6 | "name": "Flash", 7 | "editorial": "", 8 | "link": "https://cses.fi/247/list/", 9 | "solves": 0, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_19_02_nautilus", 14 | "name": "Nautilus", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-19-nautilus.txt", 16 | "link": "https://oj.uz/problem/view/BOI19_nautilus", 17 | "solves": 13, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_19_03_valley", 22 | "name": "Valley", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-19-valley.txt", 24 | "link": "https://oj.uz/problem/view/BOI19_valley", 25 | "solves": 15, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_19_04_kitchen", 30 | "name": "Kitchen", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Baltic/official/boi2019_solutions", 32 | "link": "https://oj.uz/problem/view/BOI19_kitchen", 33 | "solves": 18, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_19_05_necklace1", 38 | "name": "Necklace1", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-19-necklace1.txt", 40 | "link": "https://oj.uz/problem/view/BOI19_necklace1", 41 | "solves": 2, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_19_06_olympiads", 46 | "name": "Olympiads", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-19-olympiads.txt", 48 | "link": "https://oj.uz/problem/view/BOI19_olympiads", 49 | "solves": 4, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "interview-checklist", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "build": "next build", 7 | "dev": "next dev", 8 | "postinstall": "prisma generate", 9 | "lint": "next lint", 10 | "start": "next start" 11 | }, 12 | "dependencies": { 13 | "@chakra-ui/icons": "^2.0.15", 14 | "@chakra-ui/react": "^2.4.6", 15 | "@emotion/react": "^11.10.5", 16 | "@emotion/styled": "^11.10.5", 17 | "@next-auth/prisma-adapter": "^1.0.5", 18 | "@prisma/client": "^4.5.0", 19 | "@tanstack/react-query": "^4.16.0", 20 | "@trpc/client": "^10.0.0", 21 | "@trpc/next": "^10.0.0", 22 | "@trpc/react-query": "^10.0.0", 23 | "@trpc/server": "^10.0.0", 24 | "@types/cheerio": "^0.22.31", 25 | "@types/lodash": "^4.14.191", 26 | "@vercel/analytics": "^0.1.6", 27 | "chakra-multiselect": "^0.3.7", 28 | "cheerio": "1.0.0-rc.12", 29 | "framer-motion": "^8.0.2", 30 | "got": "^12.5.3", 31 | "jotai": "^1.12.1", 32 | "lodash": "^4.17.21", 33 | "next": "13.1.1", 34 | "next-auth": "^4.18.3", 35 | "react": "18.2.0", 36 | "react-dom": "18.2.0", 37 | "react-hover": "^3.0.1", 38 | "react-icons": "^4.7.1", 39 | "react-spinners": "^0.13.7", 40 | "superjson": "1.9.1", 41 | "zod": "^3.18.0" 42 | }, 43 | "devDependencies": { 44 | "@types/node": "^18.0.0", 45 | "@types/prettier": "^2.7.2", 46 | "@types/react": "^18.0.14", 47 | "@types/react-dom": "^18.0.5", 48 | "@typescript-eslint/eslint-plugin": "^5.33.0", 49 | "@typescript-eslint/parser": "^5.33.0", 50 | "autoprefixer": "^10.4.7", 51 | "eslint": "^8.26.0", 52 | "eslint-config-next": "13.1.1", 53 | "postcss": "^8.4.14", 54 | "prettier": "^2.8.1", 55 | "prettier-plugin-tailwindcss": "^0.2.1", 56 | "prisma": "^4.5.0", 57 | "tailwindcss": "^3.2.0", 58 | "typescript": "^4.8.4" 59 | }, 60 | "ct3aMetadata": { 61 | "initVersion": "6.11.6" 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2005.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2005, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_05_01_Camp", 6 | "name": "Camp", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2005_solutions", 8 | "link": "https://cses.fi/115/list/", 9 | "solves": 12, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_05_02_Magic", 14 | "name": "Magic", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/JOI/Baltic/Baltic-05-Magic.txt", 16 | "link": "https://cses.fi/115/list/", 17 | "solves": 3, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_05_03_Maze", 22 | "name": "Maze", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2005_solutions", 24 | "link": "https://cses.fi/115/list/", 25 | "solves": 13, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_05_04_Ancient", 30 | "name": "Ancient", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2005_solutions", 32 | "link": "https://cses.fi/116/list/", 33 | "solves": 11, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_05_05_Bus", 38 | "name": "Bus", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-05-Bus_Trip.txt", 40 | "link": "https://cses.fi/116/list/", 41 | "solves": 1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_05_06_Polygon", 46 | "name": "Polygon", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-05-Polygon.txt", 48 | "link": "https://cses.fi/116/list/", 49 | "solves": 5, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2007.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2007, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_07_01_Escape", 6 | "name": "Escape", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-07-Escape.txt", 8 | "link": "https://cses.fi/111/list/", 9 | "solves": 7, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_07_02_Sorting", 14 | "name": "Sorting", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2007_solutions", 16 | "link": "https://cses.fi/111/list/", 17 | "solves": 0, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_07_03_Sound", 22 | "name": "Sound", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2007_solutions", 24 | "link": "https://cses.fi/111/list/", 25 | "solves": 10, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_07_04_Fence", 30 | "name": "Fence", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-07-Fence.txt", 32 | "link": "https://cses.fi/112/list/", 33 | "solves": 0, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_07_05_Points", 38 | "name": "Points", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-07-Points.txt", 40 | "link": "https://cses.fi/112/list/", 41 | "solves": 5, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_07_06_Sequence", 46 | "name": "Sequence", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-07-Sequence.txt", 48 | "link": "https://cses.fi/112/list/", 49 | "solves": 13, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2009.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2009, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_09_01_Beetles", 6 | "name": "Beetles", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-09-Beetles.txt", 8 | "link": "https://cses.fi/107/list/", 9 | "solves": 4, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_09_02_Candy", 14 | "name": "Candy", 15 | "editorial": "https://github.com/Szawinis/CompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic09-candy.cpp", 16 | "link": "https://cses.fi/107/list/", 17 | "solves": 3, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_09_03_Subway", 22 | "name": "Subway", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-09-Subway.txt", 24 | "link": "https://cses.fi/107/list/", 25 | "solves": 3, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_09_04_Rectangle", 30 | "name": "Rectangle", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-09-Rectangle.txt", 32 | "link": "https://cses.fi/108/list/", 33 | "solves": 1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_09_05_Triangulate", 38 | "name": "Triangulate", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-09-Triangulate.txt", 40 | "link": "https://cses.fi/108/list/", 41 | "solves": 2, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_09_06_Monument", 46 | "name": "Monument", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-09-Monument.txt", 48 | "link": "https://cses.fi/108/list/", 49 | "solves": 3, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2015.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2015, 3 | "problems": [ 4 | { 5 | "slug": "IOI_15_01_boxes", 6 | "name": "Boxes", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-15-boxes.txt", 8 | "link": "https://oj.uz/problem/view/IOI15_boxes", 9 | "solves": 96, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_15_02_scales", 14 | "name": "Scales", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2015", 16 | "link": "https://oj.uz/problem/view/IOI15_scales", 17 | "solves": 9, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_15_03_teams", 22 | "name": "Teams", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2015", 24 | "link": "https://oj.uz/problem/view/IOI15_teams", 25 | "solves": 14, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_15_04_horses", 30 | "name": "Horses", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2015", 32 | "link": "https://oj.uz/problem/view/IOI15_horses", 33 | "solves": 117, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_15_05_sorting", 38 | "name": "Sorting", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-15-sorting.txt", 40 | "link": "https://oj.uz/problem/view/IOI15_sorting", 41 | "solves": 59, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_15_06_towns", 46 | "name": "Towns", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-15-towns.txt", 48 | "link": "https://oj.uz/problem/view/IOI15_towns", 49 | "solves": 7, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Balkan Olympiad in Informatics/2018.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2018, 3 | "problems": [ 4 | { 5 | "slug": "Balkan_18_01_election", 6 | "name": "Election", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-18-election.txt", 8 | "link": "https://oj.uz/problem/view/BOI18_election", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Balkan_18_02_homecoming", 14 | "name": "Homecoming", 15 | "editorial": "", 16 | "link": "https://oj.uz/problem/view/BOI18_homecoming", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Balkan_18_03_minmaxtree", 22 | "name": "Minmaxtree", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-18-minmaxtree.txt", 24 | "link": "https://oj.uz/problem/view/BOI18_minmaxtree", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Balkan_18_04_parentrises", 30 | "name": "Parentrises", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/official/2018/", 32 | "link": "https://oj.uz/problem/view/BOI18_parentrises", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Balkan_18_05_popa", 38 | "name": "Popa", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-18-popa.txt", 40 | "link": "https://oj.uz/problem/view/BOI18_popa", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Balkan_18_06_zalmoxis", 46 | "name": "Zalmoxis", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-18-zalmoxis.txt", 48 | "link": "https://oj.uz/problem/view/BOI18_zalmoxis", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2018.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2018, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_18_01_LovePolygon", 6 | "name": "Love polygon", 7 | "editorial": "https://github.com/updown2/OI-Practice/blob/master/BOI/2018/Love%2520Polygon.txt", 8 | "link": "https://cses.fi/204/list/", 9 | "solves": 54, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_18_02_MartianDNA", 14 | "name": "Martian dna", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-18-MartianDNA.txt", 16 | "link": "https://cses.fi/204/list/", 17 | "solves": 88, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_18_03_Worm", 22 | "name": "Worries", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Baltic/official/boi2018_solutions", 24 | "link": "https://cses.fi/204/list/", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_18_04_Alternating", 30 | "name": "Current", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Baltic/official/boi2018_solutions", 32 | "link": "https://cses.fi/205/list/", 33 | "solves": 2, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_18_05_Genetics", 38 | "name": "Genetics", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Baltic/official/boi2018_solutions", 40 | "link": "https://cses.fi/205/list/", 41 | "solves": 14, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_18_06_Paths", 46 | "name": "Paths", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-18-Paths.txt", 48 | "link": "https://cses.fi/205/list/", 49 | "solves": 66, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2007.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2007, 3 | "problems": [ 4 | { 5 | "slug": "IOI_07_01_aliens", 6 | "name": "Aliens", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2007", 8 | "link": "https://oj.uz/problem/view/IOI07_aliens", 9 | "solves": 60, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_07_02_flood", 14 | "name": "Flood", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-07-flood.txt", 16 | "link": "https://oj.uz/problem/view/IOI07_flood", 17 | "solves": 24, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_07_03_sails", 22 | "name": "Sails", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-07-sails.txt", 24 | "link": "https://oj.uz/problem/view/IOI07_sails", 25 | "solves": 12, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_07_04_miners", 30 | "name": "Miners", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2007", 32 | "link": "https://oj.uz/problem/view/IOI07_miners", 33 | "solves": 131, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_07_05_pairs", 38 | "name": "Pairs", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2007", 40 | "link": "https://oj.uz/problem/view/IOI07_pairs", 41 | "solves": 9, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_07_06_training", 46 | "name": "Training", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-07-training.txt", 48 | "link": "https://oj.uz/problem/view/IOI07_training", 49 | "solves": 3, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2015.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2015, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_15_01_bow", 6 | "name": "Bowling", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-15-bow.txt", 8 | "link": "https://oj.uz/problem/view/BOI15_bow", 9 | "solves": 4, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_15_02_edi", 14 | "name": "Editor", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-15-edi.txt", 16 | "link": "https://oj.uz/problem/view/BOI15_edi", 17 | "solves": 2, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_15_03_net", 22 | "name": "Network", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-15-net.txt", 24 | "link": "https://oj.uz/problem/view/BOI15_net", 25 | "solves": 16, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_15_04_fil", 30 | "name": "File Paths", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-15-fil.txt", 32 | "link": "https://oj.uz/problem/view/BOI15_fil", 33 | "solves": 11, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_15_05_hac", 38 | "name": "Hacker", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-15-hac.txt", 40 | "link": "https://oj.uz/problem/view/BOI15_hac", 41 | "solves": 24, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_15_06_tug", 46 | "name": "Tug of War", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-15-tug.txt", 48 | "link": "https://oj.uz/problem/view/BOI15_tug", 49 | "solves": 2, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2005.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2005, 3 | "problems": [ 4 | { 5 | "slug": "IOI_05_01_garden", 6 | "name": "Garden", 7 | "editorial": "https://www.oi.edu.pl/old/ioi/downloads/ioi2005-tasks-and-solutions-a5.pdf", 8 | "link": "https://contest.yandex.ru/ioi/contest/566/enter/", 9 | "solves": 39, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_05_02_mean", 14 | "name": "Mean", 15 | "editorial": "https://www.oi.edu.pl/old/ioi/downloads/ioi2005-tasks-and-solutions-a5.pdf", 16 | "link": "https://contest.yandex.ru/ioi/contest/566/enter/", 17 | "solves": 101, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_05_03_mountains", 22 | "name": "Mountains", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-05-mountains.txt", 24 | "link": "https://contest.yandex.ru/ioi/contest/566/enter/", 25 | "solves": 15, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_05_04_birthday", 30 | "name": "Birthday", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-05-birthday.txt", 32 | "link": "https://contest.yandex.ru/ioi/contest/566/enter/", 33 | "solves": 39, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_05_05_game", 38 | "name": "Game", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-05-game.txt", 40 | "link": "https://contest.yandex.ru/ioi/contest/566/enter/", 41 | "solves": 79, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_05_06_rivers", 46 | "name": "Rivers", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-05-rivers.txt", 48 | "link": "https://contest.yandex.ru/ioi/contest/566/enter/", 49 | "solves": 27, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2008.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2008, 3 | "problems": [ 4 | { 5 | "slug": "IOI_08_01_printer", 6 | "name": "Printer", 7 | "editorial": "https://github.com/updown2/OI-Practice/blob/master/IOI/IOI%25202008/Type%2520Printer.cpp", 8 | "link": "https://oj.uz/problem/view/IOI08_printer", 9 | "solves": 118, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_08_02_islands", 14 | "name": "Islands", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2008", 16 | "link": "https://oj.uz/problem/view/IOI08_islands", 17 | "solves": 9, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_08_03_fish", 22 | "name": "Fish", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2008", 24 | "link": "https://oj.uz/problem/view/IOI08_fish", 25 | "solves": 1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_08_04_linear", 30 | "name": "Linear", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-08-linear.txt", 32 | "link": "https://oj.uz/problem/view/IOI08_linear_garden", 33 | "solves": 82, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_08_05_pyramid", 38 | "name": "Pyramid", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-08-pyramid_base.txt", 40 | "link": "https://oj.uz/problem/view/IOI08_pyramid_base", 41 | "solves": 0, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_08_06_teleporters", 46 | "name": "Teleporters", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2008", 48 | "link": "https://oj.uz/problem/view/IOI08_teleporters", 49 | "solves": 25, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2012.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2012, 3 | "problems": [ 4 | { 5 | "slug": "IOI_12_01_odometer", 6 | "name": "Odometer", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-12-editorials.txt", 8 | "link": "https://contest.yandex.ru/ioi/contest/572/enter/", 9 | "solves": 2, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_12_02_rings", 14 | "name": "Rings", 15 | "editorial": "https://github.com/tmwilliamlin168/CompetitiveProgramming/blob/master/IOI/12-Rings.cpp", 16 | "link": "https://oj.uz/problem/view/IOI12_rings", 17 | "solves": 22, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_12_03_scrivener", 22 | "name": "Scrivener", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-12-scrivener.txt", 24 | "link": "https://oj.uz/problem/view/IOI12_scrivener", 25 | "solves": 82, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_12_04_city", 30 | "name": "City", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-12-city.txt", 32 | "link": "https://oj.uz/problem/view/IOI12_city", 33 | "solves": 6, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_12_05_supper", 38 | "name": "Supper", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-12-editorials.txt", 40 | "link": "https://oj.uz/problem/view/IOI12_supper", 41 | "solves": 9, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_12_06_tournament", 46 | "name": "Tournament", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-12-tournament.txt", 48 | "link": "https://oj.uz/problem/view/IOI12_tournament", 49 | "solves": 38, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Balkan Olympiad in Informatics/2016.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2016, 3 | "problems": [ 4 | { 5 | "slug": "Balkan_16_01_Conference", 6 | "name": "Conference", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-16-Conference.txt", 8 | "link": "https://www.hackerrank.com/contests/boi-2016/challenges", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Balkan_16_02_Hacker", 14 | "name": "Hacker", 15 | "editorial": "", 16 | "link": "https://www.hackerrank.com/contests/boi-2016/challenges", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Balkan_16_03_PowerTowers", 22 | "name": "Powertowers", 23 | "editorial": "https://bytefreaks.net/cyprus-computer-society/tasks-balkan-olympiad-in-informatics-2016", 24 | "link": "https://www.hackerrank.com/contests/boi-2016/challenges", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Balkan_16_04_Lefkaritika", 30 | "name": "Lefkaritika", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Balkan/official/2016", 32 | "link": "https://www.hackerrank.com/contests/boi-2016/challenges", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Balkan_16_05_Cruise", 38 | "name": "Cruise", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Balkan/official/2016", 40 | "link": "https://www.hackerrank.com/contests/boi-2016/challenges", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Balkan_16_06_Acrobat", 46 | "name": "Acrobat", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/Balkan/official/2016", 48 | "link": "https://www.hackerrank.com/contests/boi-2016/challenges", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2003.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2003, 3 | "problems": [ 4 | { 5 | "slug": "IOI_03_01_maintain", 6 | "name": "Maintain", 7 | "editorial": "https://github.com/zoooma13/Competitive-Programming/blob/master/trail_maintenance.cpp", 8 | "link": "https://contest.yandex.ru/ioi/contest/558/enter/", 9 | "solves": 74, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_03_02_code", 14 | "name": "Code", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-03-code.txt", 16 | "link": "https://contest.yandex.ru/ioi/contest/558/problems/B/", 17 | "solves": 4, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_03_03_reverse", 22 | "name": "Reverse", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2003", 24 | "link": "https://contest.yandex.ru/ioi/contest/558/enter/", 25 | "solves": 0, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_03_04_guess", 30 | "name": "Guess", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-03-guess.txt", 32 | "link": "https://contest.yandex.ru/ioi/contest/558/enter/", 33 | "solves": 1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_03_05_robots", 38 | "name": "Robots", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-03-robots.txt", 40 | "link": "https://contest.yandex.ru/ioi/contest/558/enter/", 41 | "solves": 7, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_03_06_boundary", 46 | "name": "Boundary", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2003", 48 | "link": "https://contest.yandex.ru/ioi/contest/558/enter/", 49 | "solves": 8, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2013.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2013, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_13_01_ballmachine", 6 | "name": "Ballmachine", 7 | "editorial": "https://github.com/SpeedOfMagic/CompetitiveProgramming/blob/master/Baltic/13-ballmachine.cpp", 8 | "link": "https://oj.uz/problem/view/BOI13_ballmachine", 9 | "solves": 10, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_13_02_numbers", 14 | "name": "Numbers", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-13-numbers.txt", 16 | "link": "https://oj.uz/problem/view/BOI13_numbers", 17 | "solves": 11, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_13_03_pipes", 22 | "name": "Pipes", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-13-pipes.txt", 24 | "link": "https://oj.uz/problem/view/BOI13_pipes", 25 | "solves": 10, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_13_04_brunhilda", 30 | "name": "Brunhilda", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-13-brunhilda.txt", 32 | "link": "https://oj.uz/problem/view/BOI13_brunhilda", 33 | "solves": 12, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_13_05_tracks", 38 | "name": "Tracks", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-13-tracks.txt", 40 | "link": "https://oj.uz/problem/view/BOI13_tracks", 41 | "solves": 26, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_13_06_vim", 46 | "name": "Vim", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-13-vim.txt", 48 | "link": "https://oj.uz/problem/view/BOI13_vim", 49 | "solves": 0, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2004.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2004, 3 | "problems": [ 4 | { 5 | "slug": "IOI_04_01_artemis", 6 | "name": "Artemis", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-04-artemis.txt", 8 | "link": "https://contest.yandex.ru/ioi/contest/560/enter/", 9 | "solves": 4, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_04_02_hermes", 14 | "name": "Hermes", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2004", 16 | "link": "https://contest.yandex.ru/ioi/contest/560/enter/", 17 | "solves": 47, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_04_03_polygon", 22 | "name": "Polygon", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-04-polygon.txt", 24 | "link": "https://contest.yandex.ru/ioi/contest/560/enter/", 25 | "solves": 1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_04_04_empodia", 30 | "name": "Empodia", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-04-empodia.txt", 32 | "link": "https://contest.yandex.ru/ioi/contest/560/enter/", 33 | "solves": 16, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_04_05_farmer", 38 | "name": "Farmer", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-04-farmer.txt", 40 | "link": "https://contest.yandex.ru/ioi/contest/560/enter/", 41 | "solves": 65, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_04_06_phidias", 46 | "name": "Phidias", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2004", 48 | "link": "https://contest.yandex.ru/ioi/contest/560/enter/", 49 | "solves": 76, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Baltic Olympiad in Informatics/2014.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2014, 3 | "problems": [ 4 | { 5 | "slug": "Baltic_14_01_coprobber", 6 | "name": "Coprobber", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-14-coprobber.txt", 8 | "link": "https://oj.uz/problem/view/BOI14_coprobber", 9 | "solves": 7, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Baltic_14_02_friends", 14 | "name": "Friends", 15 | "editorial": "https://github.com/SpeedOfMagic/CompetitiveProgramming/blob/master/Baltic/14-friends.cpp", 16 | "link": "https://oj.uz/problem/view/BOI14_friends", 17 | "solves": 37, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Baltic_14_03_sequence", 22 | "name": "Sequence", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-14-sequence.txt", 24 | "link": "https://oj.uz/problem/view/BOI14_sequence", 25 | "solves": 1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Baltic_14_04_demarcation", 30 | "name": "Demarcation", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/official/boi2014_solutions", 32 | "link": "https://oj.uz/problem/view/BOI14_demarcation", 33 | "solves": 0, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Baltic_14_05_portals", 38 | "name": "Portals", 39 | "editorial": "https://github.com/tmwilliamlin168/CompetitiveProgramming/blob/master/BtOI/14-Portals.cpp", 40 | "link": "https://oj.uz/problem/view/BOI14_portals", 41 | "solves": 20, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Baltic_14_06_postmen", 46 | "name": "Postmen", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Baltic/Baltic-14-postmen.txt", 48 | "link": "https://oj.uz/problem/view/BOI14_postmen", 49 | "solves": 16, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/Balkan Olympiad in Informatics/2011.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2011, 3 | "problems": [ 4 | { 5 | "slug": "Balkan_11_01_2circles", 6 | "name": "2Circles", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-11-2circles.txt", 8 | "link": "https://oj.uz/problem/view/balkan11_2circles", 9 | "solves": -1, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "Balkan_11_02_decrypt", 14 | "name": "Decrypt", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-11-decrypt.txt", 16 | "link": "https://dunjudge.me/analysis/problems/573/", 17 | "solves": -1, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "Balkan_11_03_Medians", 22 | "name": "Medians", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-11-Medians.txt", 24 | "link": "https://oj.uz/problems/source/113", 25 | "solves": -1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "Balkan_11_04_cmp", 30 | "name": "Cmp", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/official/2011/cmp-sol.pdf", 32 | "link": "https://oj.uz/problem/view/balkan11_cmp", 33 | "solves": -1, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "Balkan_11_05_timeismoney", 38 | "name": "Time is money", 39 | "editorial": "https://github.com/tmwilliamlin168/CompetitiveProgramming/blob/master/BkOI/11-Time_Is_Money.cpp", 40 | "link": "https://oj.uz/problem/view/balkan11_timeismoney", 41 | "solves": -1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "Balkan_11_06_Trapezoid", 46 | "name": "Trapezoid", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/Balkan/Balkan-11-Trapezoid.txt", 48 | "link": "https://oj.uz/problem/view/balkan11_trapezoid", 49 | "solves": -1, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2006.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2006, 3 | "problems": [ 4 | { 5 | "slug": "IOI_06_01_writing", 6 | "name": "Writing", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2006/ioi06_writing_sol.pdf", 8 | "link": "https://contest.yandex.ru/ioi/contest/562/problems/A/", 9 | "solves": 203, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_06_02_pyramid", 14 | "name": "Pyramid", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-06-pyramid.txt", 16 | "link": "https://contest.yandex.ru/ioi/contest/562/problems/B/", 17 | "solves": 46, 18 | "tags": [] 19 | }, 20 | { 21 | "slug": "IOI_06_03_forbidden", 22 | "name": "Forbidden", 23 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2006/ioi06_forbidden_sol.pdf", 24 | "link": "https://contest.yandex.ru/ioi/contest/562/problems/C/", 25 | "solves": 1, 26 | "tags": [] 27 | }, 28 | { 29 | "slug": "IOI_06_04_mexico", 30 | "name": "Mexico", 31 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2006/ioi06_mexico_sol.pdf", 32 | "link": "https://contest.yandex.ru/ioi/contest/562/problems/D/", 33 | "solves": 79, 34 | "tags": [] 35 | }, 36 | { 37 | "slug": "IOI_06_05_points", 38 | "name": "Points", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-06-points.txt", 40 | "link": "https://contest.yandex.ru/ioi/contest/562/problems/E/", 41 | "solves": 1, 42 | "tags": [] 43 | }, 44 | { 45 | "slug": "IOI_06_06_blackbox", 46 | "name": "Blackbox", 47 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2006/ioi06_blackbox_sol.pdf", 48 | "link": "https://contest.yandex.ru/ioi/contest/562/problems/F/", 49 | "solves": 0, 50 | "tags": [] 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/server/trpc/router/attempt.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | 3 | import { router, protectedProcedure } from "../trpc"; 4 | 5 | import { type AttemptingState } from "../../../types/problem-data"; 6 | 7 | export const attemptRouter = router({ 8 | getProblemAttemptingStates: protectedProcedure.query(async ({ ctx }) => { 9 | const userDirtyProblems = await ctx.prisma.userProblem.findMany({ 10 | where: { userId: ctx.session.user.id }, 11 | }); 12 | 13 | console.log({ 14 | user: ctx.session.user, 15 | dirtyProblemCount: userDirtyProblems.length, 16 | }); 17 | 18 | return userDirtyProblems; 19 | }), 20 | attemptProblem: protectedProcedure 21 | .input( 22 | z.object({ 23 | slug: z.string(), 24 | newAttemptingState: z.enum([ 25 | "Untouched", 26 | "Attempting", 27 | "Unimplemented", 28 | "Solved", 29 | ]), 30 | }) 31 | ) 32 | .mutation(async ({ ctx, input }) => { 33 | console.log({ input, user: ctx.session.user }); 34 | 35 | const { slug: problemSlug, newAttemptingState } = input; 36 | const { id: userId } = ctx.session.user; 37 | 38 | try { 39 | const userProblems = await ctx.prisma.userProblem.findMany({ 40 | where: { userId, problemSlug }, 41 | }); 42 | 43 | console.log("init", { userProblems }); 44 | 45 | if (userProblems.length !== 0) { 46 | console.log( 47 | "updated AS: ", 48 | await ctx.prisma.userProblem.update({ 49 | where: { id: userProblems[0]?.id }, 50 | data: { attemptingState: newAttemptingState as AttemptingState }, 51 | }) 52 | ); 53 | } else { 54 | console.log( 55 | "created AS: ", 56 | await ctx.prisma.userProblem.create({ 57 | data: { 58 | userId, 59 | problemSlug, 60 | attemptingState: newAttemptingState, 61 | }, 62 | }) 63 | ); 64 | } 65 | 66 | return { 67 | status: "success", 68 | }; 69 | } catch (e) { 70 | console.error(e); 71 | 72 | return { 73 | status: "error", 74 | }; 75 | } 76 | }), 77 | }); 78 | -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2019.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2019, 3 | "problems": [ 4 | { 5 | "slug": "IOI_19_01_shoes", 6 | "name": "Shoes", 7 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/IOI/official/2019", 8 | "link": "https://oj.uz/problem/view/IOI19_shoes", 9 | "solves": 171, 10 | "tags": [ 11 | "Greedy", 12 | "Implementation", 13 | "Fenwick Tree" 14 | ] 15 | }, 16 | { 17 | "slug": "IOI_19_02_split", 18 | "name": "Split", 19 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/IOI/official/2019", 20 | "link": "https://oj.uz/problem/view/IOI19_split", 21 | "solves": 6, 22 | "tags": [] 23 | }, 24 | { 25 | "slug": "IOI_19_03_rect", 26 | "name": "Rect", 27 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-19-rect.txt", 28 | "link": "https://oj.uz/problem/view/IOI19_rect", 29 | "solves": 23, 30 | "tags": [ 31 | "Data Structures", 32 | "Stack", 33 | "Segment Tree" 34 | ] 35 | }, 36 | { 37 | "slug": "IOI_19_04_line", 38 | "name": "Line", 39 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-19-line.txt", 40 | "link": "https://oj.uz/problem/view/IOI19_line", 41 | "solves": 0, 42 | "tags": [ 43 | "Ad-hoc", 44 | "Implementation" 45 | ] 46 | }, 47 | { 48 | "slug": "IOI_19_05_vision", 49 | "name": "Vision", 50 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-19-vision.txt", 51 | "link": "https://oj.uz/problem/view/IOI19_vision", 52 | "solves": 47, 53 | "tags": [ 54 | "Implementation", 55 | "Ad-hoc", 56 | "Constructive" 57 | ] 58 | }, 59 | { 60 | "slug": "IOI_19_06_walk", 61 | "name": "Walk", 62 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/tree/master/Olympiad/IOI/official/2019", 63 | "link": "https://oj.uz/problem/view/IOI19_walk", 64 | "solves": 2, 65 | "tags": [] 66 | } 67 | ] 68 | } -------------------------------------------------------------------------------- /src/data/problems/International Olympiad in Informatics/2017.json: -------------------------------------------------------------------------------- 1 | { 2 | "year": 2017, 3 | "problems": [ 4 | { 5 | "slug": "IOI_17_01_nowruz", 6 | "name": "Nowruz", 7 | "editorial": "", 8 | "link": "https://oj.uz/problem/view/IOI17_nowruz", 9 | "solves": 0, 10 | "tags": [] 11 | }, 12 | { 13 | "slug": "IOI_17_02_wiring", 14 | "name": "Wiring", 15 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-17-wiring.txt", 16 | "link": "https://oj.uz/problem/view/IOI17_wiring", 17 | "solves": 45, 18 | "tags": [ 19 | "Dynamic Programming", 20 | "Ad-hoc", 21 | "Observations" 22 | ] 23 | }, 24 | { 25 | "slug": "IOI_17_03_train", 26 | "name": "Train", 27 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-17-toytrain.txt", 28 | "link": "https://oj.uz/problem/view/IOI17_train", 29 | "solves": 4, 30 | "tags": [ 31 | "Game Theory", 32 | "Topological Sort" 33 | ] 34 | }, 35 | { 36 | "slug": "IOI_17_04_prize", 37 | "name": "Prize", 38 | "editorial": "https://github.com/timpostuvan/CompetitiveProgramming/blob/master/Olympiad/IOI/Prize2017.cpp", 39 | "link": "https://oj.uz/problem/view/IOI17_prize", 40 | "solves": 27, 41 | "tags": [ 42 | "Ad-hoc", 43 | "Divide and Conquer", 44 | "Interactive" 45 | ] 46 | }, 47 | { 48 | "slug": "IOI_17_05_simurgh", 49 | "name": "Simurgh", 50 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/IOI-17-simurgh.txt", 51 | "link": "https://oj.uz/problem/view/IOI17_simurgh", 52 | "solves": 4, 53 | "tags": [ 54 | "Graph", 55 | "Strongly Connected Components", 56 | "Binary Search", 57 | "Interactive" 58 | ] 59 | }, 60 | { 61 | "slug": "IOI_17_06_books", 62 | "name": "Books", 63 | "editorial": "https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/IOI/official/2017", 64 | "link": "https://oj.uz/problem/view/IOI17_books", 65 | "solves": 15, 66 | "tags": [ 67 | "Graph", 68 | "Constructive" 69 | ] 70 | } 71 | ] 72 | } --------------------------------------------------------------------------------