馬を強制する


8

これは単純なものです。最短のブラウザスクリプトを作成して、Webページ上のすべての力の外観を馬に変更します。このスクリプトは、コンソールに貼り付けられ、ほとんどの最新のブラウザーで機能する必要があります。

forceという単語のすべての出現とforceという単語の共役(強制、強制、強化)を置き換える必要があります。ケースも保存する必要があります。

ページがブラウザに表示されているときに表示されないオカレンスは変更しないでください。たとえば、メタタグやコメント。

これはfOrcE logです。それはそれに触れる人々を非常に強力にします。強制しないでください。

これはhOrsE logです。それを触る人はとても馬鹿げている。それを馬鹿にしようとしないでください。

残念ながら、これはJavascriptのみの課題です。最短のコードが優先されます。


2
Lol for xkcd XD
ThreeFx

9
強制には、forceという単語は含まれません。
Dennis

2
どちらかの質問は、交換可能にするforcにはhors-またはそれは、すべての異なる活用の交換であるforce彼らの馬のバージョンに。前者の場合、 "Reinhorsing"などforcingが表示されます。後者の場合は例外です。OPが明確にする必要があります。
アブサン

2
何の馬同等程度強制的に強制的に鉗子を ...?
Sean Latham 2014

2
「...ページがブラウザに表示されるときに表示されないすべての発生。」一般的すぎる。特に、目に見えないコンテンツをWebページに挿入するには、数十または数百の方法があります。おそらく、除外対象を1つか2つの特定のタイプのタグに制限するだけです。これにより.innerHTML、すべて置換ソリューションが回避されます。これは、例外を最初に必要とする理由だと私は推測しています。
COTO 2014

回答:


5

175バイト、ES5、XPATH

これは最新のFirefoxおよびChromeで正常にテストされます。批評は大歓迎です!これが私の最初のゴルフスイングです。

d=document,f=d.evaluate('//text()',d,{},7,{});for(i=0;t=f.snapshotItem(i++);)t.data=t.data.replace(/(f)(or)(c)/ig,function(a,b,c,e){return(b=='f'?'h':'H')+c+(e=='c'?'s':'S')})

このdocument.evaluate()メソッドは、IEを除くすべての主要なブラウザーでサポートされています。IEが「最新のブラウザー」の要件を満たしていることを願っています。また、XPathセレクターはテキストノードのみを選択するので、各ノードのを確認する必要なく、表示用ではない属性、コメント、名前空間、およびその他のデータをそのまま残しておく必要がありますoffsetParent

非ゴルフバージョン:

var force = document.evaluate('//text()', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

for (var i = 0; textNode = force.snapshotItem(i++); /* nothing */) {
    textNode.data = textNode.data.replace(
        /(f)(or)(c)/ig,
        function (full, $1, $2, $3) {
            return ($1 == 'f' ? 'h' : 'H' )
                + $2
                + ($3 == 'c' ? 's' : 'S' );
        }
    );
}

またはfunction / return、ECMA6ファットアロー表記に置き換えた場合、163文字まで減らすことができます。

d=document,f=d.evaluate('//text()',d,{},7,{});for(i=0;t=f.snapshotItem(i++);)t.data=t.data.replace(/(f)(or)(c)/ig,r=(a,b,c,e)=>(b=='f'?'h':'H')+c+(e=='c'?'s':'S'))

この構文は現在、Firefoxでのみ機能します。より多くのブラウザがこの構文を採用するまで、上記の175バイトのソリューションはゲームの私の公式エントリのままです。


非常に興味深いアプローチ!私たちの答えには2つの違いがあります(正しい答えはOPが判断することです):1.正規表現はFORCHORSに変換します。2.コードはすべてのテキストノードを変更しますが、チェックするoffsetParentと、display:noneスタイル(ブラウザーに表示されない)のタグがすべて除外されます。
Dennis 14

@デニスありがとう!ええ、(?=e|ing)OPが必要と判断した場合は、正規表現に追加できます。についてはdisplay: none「メタタグやコメントなど」と解釈しました。テキストノードではないものはそのままにして、非表示のノードを含むテキストノードは変更する必要があることを意味します。OPが彼の意図を確認するのを見てみたいです。
rojo 2014

@rojoはい、あなたはそれを正しく解釈しました
Beta Decay

3

ECMAScriptの5、248の 233 193 191 182バイト

for(w=(d=document).createTreeWalker(d,4);t=w.nextNode();)
if(t.parentNode.offsetParent)t.data=t.data.replace(/(f)(or)(c)/gi,
function(a,b,c,d){return(b<'f'?'H':'h')+c+(d<'c'?'S':'s')})

ChromeとFirefoxでテスト済み。

非ゴルフバージョン

表示されるTextNodeのみを変更する必要があります。URL、属性などはブラウザに表示されません。それらのすべてを見つけるためにTreeWalkerを使用できます。可視のTextNodeは、そのParentNodeに真のoffsetParentがあるかどうかを確認することによって識別されます。1

// Create a TreeWalker that walks through all TextNodes. 

var walker = document.createTreeWalker(document, NodeFilter.SHOW_TEXT, null, false);

// While there are nodes left,

while(node = walker.nextNode())

// if the node is visible,

    if(node.parentNode.offsetParent)

// search for the string "forc" (ignoring case)

        node.data = node.data.replace(/(f)(or)(c)/gi,

// and replace an uppercase/lowercase F/C with an uppercase/lowercase H/S.

            function(match, F, OR, C)
            {
                return (F != 'f' ? 'H' : 'h') + OR + (C != 'c' ? 'S' : 's')
            }
)

1これはIE 9のバグです。


データn=[],c=0,を取り込んでループバックする場合は、これを193バイトに減らすことができますn。ただif(t.parentNode.offsetParent)t.data=t.data.replace等々
rojo

2

200バイト、ES6

これはES6バージョンです。最新のFirefoxのWebコンソールで実行してください。

for(a=document.all,i=0;n=a[i++];)(p=>p&&p.offsetParent?n.innerHTML=n.innerHTML.replace(/f[o0]rc(e|ing)/gi,m=>(v=>{k=[...m];k[0]=k[0]<'F'?'H':'h';k[3]=k[3]<'C'?'S':'s'})()||k.join("")):0)(n.parentNode)

必要に応じて、ゴルフしていないバージョンを追加します:)

これはゴルフされていないバージョンです

var all = document.all;
for (var i = 0; i < all.length; i++) {
  if (all[i].parentNode && all[i].parentNode.offsetParent) {
    all[i].innerHTML = all[i].innerHTML.replace(/f[o0]rc(e|ing)/gi, function(matched) {
      var k = matched.split(""); // convert to array
      k[0] = k[0] == "F"? "H" : "h";
      k[3] = k[3] == "C"? "S" : "s";
      return k.join("");
    })
  }
}

1
私はungolfedバージョン= Pを要求します
flawr

うわー...私はこれらがワンライナーになると思った...ちょっとreplace('forc','hors')、それだけです。私が知っているjavascriptの量を示します...
Beta Decay

1
1.このアプローチは機能しません。innerHTML可視要素内のすべての出現箇所を変更するので、内部にコメントがある場合は、それに触れられます。2. ES6が最新のブラウザのほとんどで機能しないと主張する人もいます
Dennis

デニスが上で述べたように、これはすべての要件を満たしているわけではないので、私はこの答えを受け入れませんでした。
ベータ崩壊2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.