「オラにじぇじぇじぇなコードを書いてくんろ!」のやつ

http://codeiq.hatenablog.com/entry/2013/08/06/121542
せっかく書いたので、一応ここにも書いておこうかと。言語は現時点で一番得意なJavaScript/node.jsで。
まあ、どちらもあまり綺麗なコードではないのだけど……

rev3

#!/usr/bin/env node
 
console.log(function(spagetti, neapolitan) {
  neapolitan = neapolitan.split('');
  return spagetti.split('').map(function(chr) {
    return (chr === neapolitan[0]) ? '[' + neapolitan.shift() + ']' : chr;
  }).join('');
}('gtgtsgipgttptinggipsppaigsesgp' +
  'etgstpatetisiesagaeaigttetepit' +
  'iatsegssieeeeatepaaiagtpieataa' +
  'tppiitgiapsteitatiiatpetetettt' +
  'gpetpaasipttssstpeeeggtiagttte' +
  'gtiipestsasgpsepaasapttgattgia' +
  'tppegitiatpasgatgepttggapesaee' +
  'taeissttggieietgspagesiipestip' +
  'ggstttpateptitiaetottissgggttt' +
  'aipappgstsptttgtpispattgegstlt' +
  'iappseisapgistaiagteeiptptpisa' +
  'ieisagstapeteietgteiisgtiptstg' +
  'tstasspeatspptitttatteastsgtpt' +
  'gtasggpniaaeteaisett',
  'neapolitan'));

引数を結果の保存として使うコード。でも代入すらも排除したくなったので以下のコードに変更。

rev4

#!/usr/bin/env node

console.log(function(spagetti, neapolitan) {
  return spagetti.split('').map(function(chr) {
    return (chr === this.neapolitan[0]) ? '[' + this.neapolitan.shift() + ']' : chr;
  }.bind({ neapolitan: neapolitan.split('') })).join('');
}('gtgtsgipgttptinggipsppaigsesgp' + 
  'etgstpatetisiesagaeaigttetepit' + 
  'iatsegssieeeeatepaaiagtpieataa' + 
  'tppiitgiapsteitatiiatpetetettt' + 
  'gpetpaasipttssstpeeeggtiagttte' + 
  'gtiipestsasgpsepaasapttgattgia' + 
  'tppegitiatpasgatgepttggapesaee' + 
  'taeissttggieietgspagesiipestip' + 
  'ggstttpateptitiaetottissgggttt' + 
  'aipappgstsptttgtpispattgegstlt' + 
  'iappseisapgistaiagteeiptptpisa' + 
  'ieisagstapeteietgteiisgtiptstg' + 
  'tstasspeatspptitttatteastsgtpt' + 
  'gtasggpniaaeteaisett',
  'neapolitan'));

bindしちゃう。でもbindしたせいでthisが必要になるのでコードが若干横に長くなった……