Zalgolf ('unuse strict')

    @@ -10,177 +10,27 @@ */ /* -javascript:r=n=>(t=Math.random()*n|0)==79?r(n):t;for(e of document.all)for(n of e.childNodes)!/SC|TY/.test(e.tagName)&&(n.data=(n.data||'').replace(/[a-z]/ig,c=>[...c+URL].map(_=>c+=String.fromCharCode(768+r(112)))[r(30)]));void 0 -*/ +javascript:r=n=>79-(t=Math.random()*n|0)?t:r(n);for(e of document.all)for(n of e.childNodes)void(!/SC|TY/.test(e.tagName)&&(n.data=(n.data||'').replace(/[1-z]/g,c=>[...c+URL].map(_=>c+=String.fromCharCode(768+r(112)))[r(30)]))) -/* グローバルにめっちゃくっつくから気になる場合は宣言した方がいいと思うけど長い */ -/* { let r, t, n; */ +前バージョンから3バイト減 -/* -複数回使うからおまとめ。ついでに小数点削る -よいこは Math.trunc() をつかおうね - -U+034F ͏ combining grapheme joiner -https://ja.wikipedia.org/wiki/%E5%9B%B3%E5%BD%A2%E7%B4%A0%E7%B5%90%E5%90%88%E5%AD%90 -結合しない字が当たったらもう一回 +javascript:r=n=>(t=Math.random()*n|0)==79?r(n):t;for(e of document.all)for(n of e.childNodes)!/SC|TY/.test(e.tagName)&&(n.data=(n.data||'').replace(/[a-z]/ig,c=>[...c+URL].map(_=>c+=String.fromCharCode(768+r(112)))[r(30)]));void 0 */ -r = n => (t = Math.random() * n | 0) == 79 ? r(n) : t; -/* -結局最初の人のアプローチが一番短いのではと思った -ちなみに Edge では document.all がなかった - -イテレータ回すときは、括弧最小限で済むなら for(n of iterator) が最短 -[...iterator].map(n=>console.log(n)) -for(n of iterator)console.log(n) -4 - -アロー関数内とかだと for は {} でくくらないと使えない -{} でくくると return 自前で書く必要が出てくるから大幅に長くなる可能性がある -*/ -for (e of document.all) for (n of e.childNodes) /* -Google でももじゃるように style と script をスルー -Fork 元の「:not(style):not(script)」相当 +コメントつけるのしんどくなったからさっぱりさせた +履歴にいっぱい書いてあるからそっち参照で */ -!/SC|TY/.test(e.tagName) && -/* -nodeValue より短い data ってのが用意されてた -https://developer.mozilla.org/ja/docs/Web/API/CharacterData -コメントと CDATA も引っかかっちゃうけどきにしない - -n.data&&(n.data=n.data.replace()) -(n.data=(n.data||'').replace()) -2 +/* { let r, t, e, n, c; */ -n.data がないとこに代入してもエラー出なかったからこれでいく -*/ -(n.data = (n.data || '').replace( -/* -関数で replace する場合、正規表現内で括弧はなるべく使わないようにすると -(_,c)=>c が c=>c になって文字数を削減できる -\w でもいいかなと思ったら数字の横についた -*/ - /[a-z]/ig, -/* -名前の短い最初からある関数に、その辺にある適当な文字列を足して -「cfunction Set() { - [native code] -}」 -っていう 30字よりちょっと長い文字列を作ってる -それをスプレッド演算子でひらくと文字数分の長さの中身入り配列ができる -*/ - c => [...c+URL].map( -/* -文字列を反復で繋げていくときは、配列に入れて join() より -ループの外で用意した変数に += していく方が短くなる傾向 -文字列型の変数が用意できない時は逆転の可能性あり - -['a','b','c'].map(c=>c).join('') -['a','b','c'].map(c=>c).join`` -2 -['a','b','c'].map(c=>v+=c),v -4 -*/ - _ => c += -/* -なんかおかしいと思ったら 16進数と 10進数ごたまぜになってた -むしろ範囲広がってた -*/ - String.fromCharCode(768 + r(112)) -/* -['c0', 'c01', 'c012', 'c0123'…] みたいな配列ができてるから -その中からランダムで 30個目より前の要素を選んでる -30個目以降は無駄に生成してる訳だけどきにしない -*/ - )[r(30)] -)); -/* -ブックマークレットだから最後に undefined 返してる -何か渡さないとエラーになるから渡せるなら最後の式を渡す -何も渡せない時は void 0 って書く、演算子だから括弧なくてもいい -普段はローカル変数宣言かねて ((変数)=>{式})() にしてる -*/ -void 0 +r = n => 79 - (t = Math.random() * n | 0) ? t : r(n); +for (e of document.all) for (n of e.childNodes) void( + !/SC|TY/.test(e.tagName) && (n.data = (n.data || '').replace( + /* よくよく調べたら 0 以外ちゃんともじゃれた */ + /[1-z]/g, c => [...c + URL].map( + _ => c += String.fromCharCode(768 + r(112)) + )[r(30)] + )) +) -/* 変数宣言したときに閉じるための括弧 */ /* } */ - -/* 以下 Fork 元のコード */ - -// orig code and reference c.f. -// http://qiita.com/aTakaakiSeki/items/614d5d178f717c6b2997 - -// slightly code-golf and ref/descr et al. c.f. -// https://gist.github.com/noromanba/3062530dc3970d93762a5775080715f8 - -/* oneliner-min -javascript:[].concat(...[...document.querySelectorAll(':not(style):not(script):not(:empty)')].map(e=>[...e.childNodes])).filter(n=>n.nodeName==='#text').map(n=>n.textContent=n.textContent.replace(/([a-z])/ig,(_,c)=>c+[...Array(Math.random()*30|0)].map(()=>String.fromCharCode(0x300+(Math.random()*79|0))).join(''))); -*/ - -/* Devtools/Scratchpad-min -$x('//text()').map(n=>n.textContent=n.textContent.replace(/([a-z])/ig,(_,c)=>c+[...Array(Math.random()*30|0)].map(()=>String.fromCharCode(0x300+(Math.random()*79|0))).join(''))); -*/ - -// unminified and reference -/* -{ - 'use strict'; - - const combiningChar = () => { - // 0-29 random N times repeat - return Array.from(Array(Math.trunc(Math.random() * 30)), () => { - // http://www.unicode.org/charts/PDF/U0300.pdf - // U0300-U034E: 79 = 0x04F - return String.fromCharCode(0x300 + Math.trunc(Math.random() * 0x04F)) - }).join(''); - }; - - // TBD - // - select text-node w/ Xpath and XPath's not() - // - unchain methods - // - extract flatten - Array.prototype.concat.apply([], Array.from(document.querySelectorAll([ - 'head title', - 'body :not(style):not(script):not(:empty)', - ]), node => [...node.childNodes])) - .filter(node => node.nodeType === Node.TEXT_NODE) - .forEach(textNode => { - textNode.textContent = - // TBD alnum - textNode.textContent.replace(/([a-z])/ig, (_, captured) => { - return captured + combiningChar(); - }); - }); - - // TBD handle autopaging -} -*/ -// TIPS and TRICKS -// -// pseudo `Array#times()` idioms -// -// ES6/ES2015 -// [...Array(10)].map((_, i) => i); -// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -// Array.from(Array(10), (_, i) => i); -// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -// Array.from(Array(10)).map((_, i) => i); -// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -// Array.from(Array(10).keys()); -// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -// -// ES5 -// Array.apply(null, Array(10)).map(function(_, i) { return i; }); -// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -// Array(10).join().split(',').map(function(_, i) { return i; }); -// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -// -// -// hex <-> decimal of Unicode Combining Character -// -// (79).toString(16) -// "4f" -// (0x4F).toString(10) -// "79" -// -// '0x0' + (0x300 + 1 * 79).toString(16).toUpperCase() -// "0x034F" -// '0x0' + (0x300 + 1 * 0x04F).toString(16).toUpperCase() -// "0x034F"
  • /*
     * @title Zalgolf ('unuse strict')
     * @description ?ードでもじゃもじゃさせます。
     * @include http://*
     * @include https://*
     * @contributor aTakaakiSeki    http://qiita.com/aTakaakiSeki/items/614d5d178f717c6b2997
     * @contributor noromanba       http://let.hatelabo.jp/noromanba/let/hJmfhMi96I0W
     * @license     WTFTPL          http://www.wtfpl.net/about/
     * @javascript_url
     */
    
    /*
    javascript:r=n=>79-(t=Math.random()*n|0)?t:r(n);for(e of document.all)for(n of e.childNodes)void(!/SC|TY/.test(e.tagName)&&(n.data=(n.data||'').replace(/[1-z]/g,c=>[...c+URL].map(_=>c+=String.fromCharCode(768+r(112)))[r(30)])))
    
    前バージョンから3バイト減
    
    javascript:r=n=>(t=Math.random()*n|0)==79?r(n):t;for(e of document.all)for(n of e.childNodes)!/SC|TY/.test(e.tagName)&&(n.data=(n.data||'').replace(/[a-z]/ig,c=>[...c+URL].map(_=>c+=String.fromCharCode(768+r(112)))[r(30)]));void 0
    */
    
    /*
    コメントつけるのしんどくなったからさっぱりさせた
    履歴にいっぱい書いてあるからそっち参照で
    */
    /* { let r, t, e, n, c; */
    
    r = n => 79 - (t = Math.random() * n | 0) ? t : r(n);
    for (e of document.all) for (n of e.childNodes) void(
    	!/SC|TY/.test(e.tagName) && (n.data = (n.data || '').replace(
    		/* よくよく調べたら 0 以外ちゃんともじゃれた */
    		/[1-z]/g, c => [...c + URL].map(
    			_ => c += String.fromCharCode(768 + r(112))
    		)[r(30)]
    	))
    )
    
    /* } */
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2017/06/14 16:54:12 - 2017-06-14
  2. 2017/05/24 17:48:19 - 2017-05-24
  3. 2017/05/23 23:09:50 - 2017-05-23
  4. 2017/05/23 22:53:58 - 2017-05-23
  5. 2017/05/23 22:50:17 - 2017-05-23
  6. 2017/05/22 16:49:25 - 2017-05-22
  7. 2017/05/22 16:14:58 - 2017-05-22
  8. 2017/05/22 16:14:43 - 2017-05-22