はてなキーワード: atCoderとは
これを改善してってお願いした。何書いてあるかわからないけど動いたよ。
https://anond.hatelabo.jp/20240125203115
// ==UserScript== // @name 増田ミュート(白塗り版) // @namespace http://tampermonkey.net/ // @version 2024-06-26 // @description ミュートワードを含む最小限の範囲を白塗りにする // @author You // @match https://anond.hatelabo.jp/* // @icon https://www.google.com/s2/favicons?sz=64&domain=hatelabo.jp // @grant none // ==/UserScript== (function() { 'use strict'; const muteWords = [ "弱者男性", "弱男", "弱者", "婚活", "男", "女", "年収", "下方婚", "発達障害", "発達", "ハッタツ", "ハッタショ", "ハッタショ", "競プロ", "競技プログラミング", "AtCoder", ]; function whiteoutElement(element) { element.style.backgroundColor = 'white'; element.style.color = 'white'; element.style.textShadow = 'none'; element.style.cursor = 'default'; element.style.userSelect = 'none'; // テキスト選択を防止 element.style.borderBottom = '1px dashed #ccc'; // 枠線を追加してテキストがあることを示す // リンクの場合、クリックを無効化 if (element.tagName === 'A') { element.style.pointerEvents = 'none'; element.removeAttribute('href'); } // 子要素にも適用 Array.from(element.children).forEach(child => { child.style.backgroundColor = 'white'; child.style.color = 'white'; child.style.textShadow = 'none'; }); // ツールチップを追加 element.title = 'この内容にはミュートワードが含まれています'; } function shouldMute(text) { return muteWords.some(word => { const parts = word.split(''); const regex = new RegExp(parts.map(char => `${char}92;92;s*`).join(''), 'i'); return regex.test(text); }); } function findSmallestMuteableElement(element) { if (element.nodeType === Node.TEXT_NODE) { return shouldMute(element.textContent) ? element.parentElement : null; } if (element.tagName === 'PRE' || element.tagName === 'CODE') { return shouldMute(element.textContent) ? element : null; } for (let child of element.childNodes) { const result = findSmallestMuteableElement(child); if (result) return result; } return shouldMute(element.textContent) ? element : null; } function processElement(element) { const muteableElement = findSmallestMuteableElement(element); if (muteableElement) { whiteoutElement(muteableElement); } } function processAllElements(root = document.body) { const walker = document.createTreeWalker( root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, null, false ); let node; while (node = walker.nextNode()) { if (node.nodeType === Node.ELEMENT_NODE) { processElement(node); } else if (node.nodeType === Node.TEXT_NODE && node.parentElement) { processElement(node.parentElement); } } } function handleClickEvent(event) { setTimeout(() => { processAllElements(event.target); }, 100); } // 初回実行 processAllElements(); // クリックイベントの監視 document.body.addEventListener('click', handleClickEvent); // DOM変更の監視 const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { if (mutation.type === 'childList') { mutation.addedNodes.forEach(node => { if (node.nodeType === Node.ELEMENT_NODE) { processAllElements(node); } }); } else if (mutation.type === 'characterData') { processElement(mutation.target.parentNode); } }); }); observer.observe(document.body, { childList: true, subtree: true, characterData: true }); })();
は事実だし、その上で
からな。彼が守りたいのはエンジニアリングでも本来の意味での競技プログラミングでもなく、Atcoderというサービスと自分の財布に過ぎない。
カルトと同じだよ。
競技プログラミングって知ってるか?要するにプログラミングの腕試しをするコンテストだ。で、昨日、AtCoderのコンテストで起こった事件がプログラマ界隈をザワつかせてる。
何があったかって?ChatGPTが使われて、普通なら上級者しか解けない問題が解かれたんだよ。おかげで、自分の実力じゃありえない順位に入ったやつが出てきたわけだ。
これに対して競プロコミュニティが大炎上。「ChatGPTが界隈を破壊する」「おもんない」って声が上がって、規制しろってムードが一気に広がった。
普段、親AIを気取って反AIを馬鹿にしてるプログラマたちが、自分たちの立場が脅かされるとたんに反AIに早変わり。
要するに、自分たちの「城」が危なくなると、途端にAIを敵視し始めるんだよ。
この現象は、技術の進歩が人々の立場や考え方にどれだけ影響を与えるかをよく示してる。
AIは便利で強力なツールだけど、それが人々の仕事や趣味にどんな影響を与えるかについては、まだまだ議論が必要だってことだな。
「与えられた変数のオーダーに従って、それが許容される計算量のラインのアルゴリズムを探して、それを実装するゲーム」
って理解で合ってる?
難しいところは
・アルゴリズムを探す
・実装する
という認識でいい?計算量がいくら許容されるかは結構すぐわかりそうだし
で最終的には「アルゴリズムを探す」という点に終着する。アルゴリズムがわかれば、実装するというのは比較的簡単だろうしね
この変数のオーダーならO(n^2)でも大丈夫だけど、これはO(logn)のアルゴリズムが必要だ。O(logn)のアルゴリズムで処理したデータはこの程度のオーダーなので......。これを繰り返していく感じ
自分はマジで最初の最初の問題すら実装できないんだけど(AtCoderならABCのA問題すら ChatGPTの解説が必要)