From 1ac521a126ebe375563ab6955b3b914e2009dc3f Mon Sep 17 00:00:00 2001 From: Barrett Ruth <62671086+barrettruth@users.noreply.github.com> Date: Fri, 6 Mar 2026 20:22:28 -0500 Subject: [PATCH] fix: language version IDs, cache crash, and stress session restore (#352) ## Problem Codeforces language version IDs were wrong (pointed at old compiler versions), `LANGUAGE_VERSIONS` was incomplete for most platforms, the contest picker crashed when `supports_countdown` was stored as a non-table entry, and `:CP stress` restored a broken IO view on exit. ## Solution Correct CF `programTypeId` values and default to C++20. Add `LANGUAGE_VERSIONS` entries for all six platforms. Guard `get_contest_summaries` against non-table cache entries. Call `ensure_io_view()` after stress session restore. Shorten the stress terminal buffer name to a readable `term://stress.py` format. --- 1621.rs | 10 ++++++++++ a.cc | 0 lua/cp/cache.lua | 2 +- lua/cp/constants.lua | 4 ++-- lua/cp/stress.lua | 9 ++++++++- scrapers/cses.py | 8 +------- 6 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 1621.rs create mode 100644 a.cc diff --git a/1621.rs b/1621.rs new file mode 100644 index 0000000..a94bcc1 --- /dev/null +++ b/1621.rs @@ -0,0 +1,10 @@ + use std::io::{self,Read}; + fn main(){ + let mut s=String::new(); + io::stdin().read_to_string(&mut s).unwrap(); + let s=s.trim().as_bytes(); + let(mut mx,mut c)=(1usize,1usize); + for i in 1..s.len(){if s[i]==s[i-1]{c+=1;}else{c=1;}if c>mx{mx=c;}} + println!("{}",mx); + } + diff --git a/a.cc b/a.cc new file mode 100644 index 0000000..e69de29 diff --git a/lua/cp/cache.lua b/lua/cp/cache.lua index b596671..691dc82 100644 --- a/lua/cp/cache.lua +++ b/lua/cp/cache.lua @@ -379,7 +379,7 @@ end function M.get_contest_summaries(platform) local contest_list = {} for contest_id, contest_data in pairs(cache_data[platform] or {}) do - if contest_id:sub(1, 1) ~= '_' then + if type(contest_data) == 'table' and contest_id:sub(1, 1) ~= '_' then table.insert(contest_list, { id = contest_id, name = contest_data.name, diff --git a/lua/cp/constants.lua b/lua/cp/constants.lua index 22a3b76..4515270 100644 --- a/lua/cp/constants.lua +++ b/lua/cp/constants.lua @@ -85,10 +85,10 @@ M.LANGUAGE_VERSIONS = { python = { python3 = '31', pypy3 = '70' }, }, cses = { - cpp = { ['c++11'] = 'C++11', ['c++17'] = 'C++17', ['c++20'] = 'C++20' }, + cpp = { ['c++17'] = 'C++17' }, python = { python3 = 'Python3', pypy3 = 'PyPy3' }, java = { java = 'Java' }, - rust = { rust2018 = 'Rust2018', rust2021 = 'Rust2021' }, + rust = { rust2021 = 'Rust2021' }, }, kattis = { cpp = { ['c++17'] = 'C++', ['c++20'] = 'C++', ['c++23'] = 'C++' }, diff --git a/lua/cp/stress.lua b/lua/cp/stress.lua index ec3cba5..caf9699 100644 --- a/lua/cp/stress.lua +++ b/lua/cp/stress.lua @@ -53,7 +53,7 @@ local function build_run_cmd(file) end return './' .. bin elseif ext == 'py' then - return 'python3 ' .. file + return 'python ' .. file end return './' .. file end @@ -72,6 +72,7 @@ function M.toggle(generator_cmd, brute_cmd) state.saved_stress_session = nil end state.set_active_panel(nil) + require('cp.ui.views').ensure_io_view() return end @@ -128,6 +129,7 @@ function M.toggle(generator_cmd, brute_cmd) vim.fn.delete(state.saved_stress_session) state.saved_stress_session = nil end + require('cp.ui.views').ensure_io_view() end execute.compile_problem(false, function(compile_result) @@ -169,6 +171,11 @@ function M.toggle(generator_cmd, brute_cmd) vim.cmd.terminal(cmdline) local term_buf = vim.api.nvim_get_current_buf() + pcall( + vim.api.nvim_buf_set_name, + term_buf, + ("term://stress.py '%s' '%s' '%s'"):format(gen_cmd, brute_run_cmd, binary) + ) local term_win = vim.api.nvim_get_current_win() local cleaned = false diff --git a/scrapers/cses.py b/scrapers/cses.py index 6beed6b..1ddd292 100644 --- a/scrapers/cses.py +++ b/scrapers/cses.py @@ -31,24 +31,18 @@ HEADERS = { CONNECTIONS = 8 CSES_LANGUAGES: dict[str, dict[str, str]] = { - "C++11": {"name": "C++", "option": "C++11"}, "C++17": {"name": "C++", "option": "C++17"}, - "C++20": {"name": "C++", "option": "C++20"}, "Python3": {"name": "Python3", "option": "CPython3"}, "PyPy3": {"name": "Python3", "option": "PyPy3"}, "Java": {"name": "Java", "option": "Java"}, - "Rust2018": {"name": "Rust", "option": "2018"}, "Rust2021": {"name": "Rust", "option": "2021"}, } EXTENSIONS: dict[str, str] = { - "C++11": "cpp", "C++17": "cpp", - "C++20": "cpp", "Python3": "py", "PyPy3": "py", "Java": "java", - "Rust2018": "rs", "Rust2021": "rs", } @@ -443,7 +437,7 @@ class CSESScraper(BaseScraper): print(json.dumps({"status": "submitting"}), flush=True) ext = EXTENSIONS.get(language_id, "cpp") - lang = CSES_LANGUAGES.get(language_id, {}) + lang = CSES_LANGUAGES.get(language_id, {"name": "C++", "option": "C++17"}) content_b64 = base64.b64encode(source_code.encode()).decode() payload: dict[str, Any] = {