您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
(Codeforces) Wide problems UI. Keyboard shortcuts. Quick navigation to submission and solutions pages on Codeforces.
- // ==UserScript==
- // @name Codeforces charged
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @author Dev vikram Singh
- // @match https://codeforces.com/contest/*
- // @grant none
- // @license MIT
- // @description (Codeforces) Wide problems UI. Keyboard shortcuts. Quick navigation to submission and solutions pages on Codeforces.
- // @noframes
- // ==/UserScript==
- // jshint esversion: 11
- ( function () {
- 'use strict';
- // Function to apply styles to the body and footer logo
- function applyStyles ( bodyElem ) {
- const footerLogoDiv = document.querySelector( ".footer-logo-div" );
- if ( bodyElem )
- {
- bodyElem.style.cssText = "margin: 0; max-width: 100%;"; // Batch style updates
- }
- if ( footerLogoDiv )
- {
- footerLogoDiv.style.position = "inherit"; // Apply footer style
- }
- }
- // Create a MutationObserver to apply styles when the body is available
- const observer = new MutationObserver( ( mutations ) => {
- for ( const mutation of mutations )
- {
- const bodyElem = document.getElementById( "body" );
- if ( mutation.type === "childList" && bodyElem )
- {
- applyStyles( bodyElem );
- observer.disconnect();
- break;
- }
- }
- } );
- // Start observing the document body for child additions
- observer.observe( document.body, { childList: true, subtree: true } );
- const currentURL = window.location.href;
- const contestRegex = /\/contest\/(\d+)/;
- const match = currentURL.match( contestRegex );
- const check = currentURL.includes( "/problem/", 30 );
- // Function to handle keydown event
- function handleKeyDown ( event ) {
- if ( event.altKey && event.key === 's' && check )
- {
- let newURL = currentURL.replace( "/problem/", "/submit/" );
- window.location.href = newURL;
- }
- if ( event.altKey && event.key === 'a' && check )
- {
- let newURL = currentURL.replace( "/problem/", "/status/" ) + "?order=BY_CONSUMED_TIME_ASC";
- window.location.href = newURL;
- }
- }
- // Fetch and store problem names and IDs
- async function fetchProblemData () {
- if ( !match ) return;
- const contestId = match[ 1 ];
- const storedContestId = localStorage.getItem( 'contestId' );
- // Clear stored data if the contest ID has changed
- if ( storedContestId !== contestId )
- {
- localStorage.removeItem( 'problemData' );
- localStorage.removeItem( 'contestId' );
- }
- let problemData = []; // Initialize an empty array to store problem data
- // Check if problemData is already stored
- if ( !localStorage.getItem( 'problemData' ) )
- {
- try
- {
- const response = await fetch( `https://codeforces.com/contest/${ contestId }` );
- const data = await response.text();
- const tempDiv = document.createElement( 'div' );
- tempDiv.innerHTML = data;
- const problemRows = tempDiv.querySelectorAll( 'table.problems tbody tr' );
- // Populate problemData array
- problemRows.forEach( ( row, index ) => {
- if ( index > 0 )
- { // Skip header row
- const cells = row.querySelectorAll( 'td' );
- const problemId = cells[ 0 ]?.querySelector( 'a' )?.textContent.trim();
- const problemName = cells[ 1 ]?.querySelector( 'a' )?.textContent.trim();
- if ( problemId && problemName )
- {
- problemData.push( { id: problemId, name: problemName } );
- }
- }
- } );
- // Store fetched problem data in localStorage
- localStorage.setItem( 'problemData', JSON.stringify( problemData ) );
- localStorage.setItem( 'contestId', contestId );
- } catch ( error )
- {
- console.error( 'Error fetching contest problems:', error );
- return; // Exit if there was an error fetching the data
- }
- } else
- {
- // Retrieve existing problem data from localStorage
- problemData = JSON.parse( localStorage.getItem( 'problemData' ) );
- }
- // Generate the problem data regardless of where it came from
- if ( check && problemData.length > 0 )
- {
- generateProblemData( problemData );
- }
- }
- // Function to generate and insert problem data links
- async function generateProblemData ( problemData ) {
- const list = document.createElement( 'ul' );
- list.style.margin = '10px 0 20px'; // Add some space below
- problemData.forEach( problem => {
- const listItem = document.createElement( 'li' );
- const link = document.createElement( 'a' );
- link.href = `https://codeforces.com/contest/${ match[ 1 ] }/problem/${ problem.id }`;
- link.textContent = `${ problem.id }: ${ problem.name }`;
- link.target = '_blank'; // Open in a new tab
- link.setAttribute( "style", "display: block; color: orange;width : 100%; text-decoration : none" );
- listItem.style.margin = '5px';
- listItem.appendChild( link );
- list.appendChild( listItem );
- } );
- const sidebar = document.getElementById( 'sidebar' );
- if ( sidebar )
- {
- sidebar.insertBefore( list, sidebar.children[ 1 ] );
- }
- }
- // Call fetchProblemData on page load to handle storing/loading problems
- fetchProblemData();
- // Add event listener for keydown event
- document.addEventListener( 'keydown', handleKeyDown );
- } )();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址