AtCoderLeftShiftOverflowWarning

Warn you when you write `1 << x` on AtCoder.

  1. // ==UserScript==
  2. // @name AtCoderLeftShiftOverflowWarning
  3. // @namespace https://github.com/AwashAmityOak
  4. // @version 0.1.0
  5. // @description Warn you when you write `1 << x` on AtCoder.
  6. // @author AwashAmityOak
  7. // @license MIT
  8. // @match https://atcoder.jp/contests/*/tasks/*
  9. // @match https://atcoder.jp/contests/*/submit*
  10. // @grant unsafeWindow
  11. // @copyright 2025 AwashAmityOak (https://github.com/AwashAmityOak)
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16.  
  17. const $ = unsafeWindow.$;
  18.  
  19. ace.edit("editor").addEventListener("change", () => {
  20. const button = $("#submit");
  21.  
  22. const lang = $("#select-lang select[name='data.LanguageId']");
  23. if (lang.find(":selected").text().indexOf("C++") == -1) return;
  24.  
  25. const code = ace.edit("editor").getValue();
  26.  
  27. if (/(?<!<<\s*)(?<![a-zA-Z_])\d+\s*<</.test(code)) {
  28. let br = $("<br>");
  29. let span = $("<span>⚠️左シフトオーバーフロー</span>");
  30. br.addClass("AtCoderLeftShiftOverflowNotifier");
  31. span.addClass("AtCoderLeftShiftOverflowNotifier");
  32.  
  33. if (!$("br.AtCoderLeftShiftOverflowNotifier").length) button.append(br);
  34. if (!$("span.AtCoderLeftShiftOverflowNotifier").length) button.append(span);
  35.  
  36. button.css("backgroundColor", "#cc3333");
  37. button.css("borderColor", "#cc3333");
  38. } else {
  39. $(".AtCoderLeftShiftOverflowNotifier").remove();
  40. button.css("backgroundColor", "");
  41. button.css("borderColor", "");
  42. }
  43. });
  44. })();