Language detail: JavaScript

Coverage: 83.69%
number of '+' ratings
contribution for coverage

Unsolved challenges

codes

Feed

Used modules

next >>

比較しないソートの作成 (Nested Flatten)
バケツソート。無理矢理感有り。
JScript(WSH)。

-------------------------------
C:\temp>cscript /nologo bucketsort.js
-1 2 3 4 5 6 8 9 9 9
1
2
3
4
5
6
7
function bucketsort(data,min,max,size){
  var result=[];
  eval( data.replace(/(-?\d+)/g,'result[$1-min]+=",$1,";') );
  return result.join('').split(/[^0-9-]+/).join(' ');
}

WScript.Echo(bucketsort('-1 9 4 8 9 6 3 9 5 2','-1','10','10'));
数値リストの圧縮 (Nested Flatten)
//[1, [3, 6], 12, 13, [15, 25, 5], 26, 27] <=
//compact_number_list([1, 3, 4, 5, 6, 12, 13, 15, 20, 25, 26, 27]) 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function compact_number_list(anArray){
    var len = anArray.length;
    var result = new Array();

    for(var i=0;i<len;i++){
        var seq;
        if(seq=isSequence(anArray[i], i, anArray)){
            result.push(seq);
            i += (seq[2])? (seq[1]-seq[0])/seq[2] : seq[1]-seq[0];
        } else {
            result.push(anArray[i]);
        }
    }
    return result;
}
function isSequence(el, index, array){
    var next=array[index+1];
    if(next == undefined){ return false; }

    var d = next - el;
    for(var i=0;array[index + i] == el + i * d;i++);

    if(i>2){
        return (d==1) ? [el, array[index + i -1]] : [el, array[index + i -1], d];
    } else {
        return false;
    }
}
Tiny MML (Nested Flatten)
ADODB.Streamでsmfを吐いて、関連付けされたプレイヤーで再生。「音を鳴らすプログラム」・・・ではない。

-----------------------------------
C:\temp>cscript /nologo tinymml.js cdefedcrefgagfercrcrcrcrcdefedcr
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
function arrayToFile(filename, array){
  var stream = WScript.CreateObject('ADODB.Stream');
  stream.Charset = 'iso-8859-1';
  stream.Open();
  for (var i=0; i < array.length; i++)
    stream.WriteText(String.fromCharCode(array[i]));
  stream.SaveToFile(filename, 2);
  stream.Close();
}

var note = {r:0,c:60,d:62,e:64,f:65,g:67,a:69,b:71};
var body = [];
WScript.Arguments.Item(0).toLowerCase().replace(/([a-gr])/g, function(n){
  body = body.concat([0,144,note[n],n=='r'?0:90,24,144,note[n],0]);});
var size = body.length + 4;
head = [77,84,104,100,0,0,0,6,0,0,0,1,0,48,77,84,114,107,
        size>>24&0xff, size>>16&0xff, size>>8&0xff, size&0xff];
arrayToFile('sample.mid', head.concat(body.concat([0,255,47,0])));
WScript.CreateObject('WScript.Shell').run('sample.mid');
2^i * 3^j * 5^k なる整数 (Nested Flatten)

Javascript@Firebug。 n2,n3,n5の最大値は試行錯誤で決めてます

1
2
3
4
5
6
7
8
var o={};
for(var n2=0; n2<=11; n2++)
  for(var n3=0; n3<=8; n3++)
    for(var n5=0; n5<=7; n5++)
      o[Math.pow(2,n2)*Math.pow(3,n3)*Math.pow(5,n5)] = [n2,n3,n5];
for(var i=0,c=0;c<100;i++)
  if(o[i]!=null)
    console.debug(++c, ". ", i, "= 2^", o[i][0], " + 3^", o[i][1], " + 5^", o[i][2]);
コラッツ・角谷の問題 (Nested Flatten)
n = 1..2^k の範囲で最大ステップ求める場合は、
2^k-1..2^k 間だけ調べることにしました。
後はいたって普通というか、回りくどいというか。
CeleronM1.8GHz, Memory1GB, WindowsXP, WSH(JScript)
--------------------
C:\temp>cscript //nologo collatz.js
f( 837799 ) = 524
time = 29578ms
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
function steps(n){
  var step = 0;
  for(;n!=1; step++)
    n = (n&1) ? n*3+1 : n/2;
  return step;
}
function maxim(lim){
  var result = 0;
  var step = 0;
  for(var i=(lim&(lim-1))?1:lim/2; i<=lim; i++){
    var temp = steps(i);
    if(temp > step) { step=temp; result=i; }
  }
  return result;
}

var tm = (new Date).getTime();
var n = maxim(Math.pow(2,20));
var s = steps(n);
WScript.Echo('f( '+n+' ) = '+s);
WScript.Echo('time = '+((new Date).getTime()-tm) + 'ms');
LL Golf Hole 7 - バイト数を読みやすくする (Nested Flatten)

極めて強引に。

1
2
3
4
5
6
(function(x){
  alert(eval(
    '[x'+'kMGTPEZY'.replace(/(.)/g,
    ',0|(x/=1024)?x.toFixed(2)+"$1":"z"')+'].sort()'
  )[0]);
})(123456789012345)
LL Golf Hole 9 - トラックバックを打つ (Nested Flatten)
JavaScript@Firebugコンソールで。
本エントリにも打ってみたけどカップインしたのかわからない・・・。
打ちっ放し場のほうには行けました。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
function x(o,a){for(var k in a)o[k]=a[k]; return o;}
var f=x(document.createElement('form'),{action:'http://d.hatena.ne.jp/takano32/20080905',method:'POST'});
var d={
  title:'どう書くのお題で打ってみます!',
  excerpt:'だれかにぶつけたらごめんね!',
  url:'http://ja.doukaku.org/207/#orz',
  blog_name:'LL Golf Hole 9'
}
for(var k in d)
  f.appendChild(x(document.createElement('input'),{type:'hidden',name:k,value:d[k]}));
document.body.appendChild(f);
f.submit();
文字列型日時ののN秒後時間取得 (Nested Flatten)
JavaScriptのパーサを使用。Firebugで確認。
出力形式にあわせるとこんな入力になった。
toLocaleStringメソッドを使えば"2008年9月2日 8:50:34"のように出力するが、パーサが解釈してくれない。
>>> DateEx('Tue Sep 02 2008 8:30:00',1234)
"Tue Sep 02 2008 08:50:34 GMT+0900"
1
function DateEx(t,s) new Date(Date.parse(t)+s*1000).toString();
LL Golf Hole 5 - 最上位の桁を数え上げる (Nested Flatten)

コンパイル時に /fast- を指定してください。

1
for(i=-1;i++<300;)/^.0*$/.test(i)&&print(i)
LL Golf Hole 8 - 横向きのピラミッドを作る (Nested Flatten)
ワンライナーで。半角空白を除くと 110バイトになります。

# 先頭に 'javascript:'という文字列を追加して、ブラウザのアドレスバーに貼り付けて
# ください。
1
(function (n) { var i = n, s = t = ''; for ( ; i--; ) s += '*'; for (i = -n; i < n; i++) t += s.substr(0, n - Math.abs(i)) + '\n'; alert(t); })(4)
68B。
1
for(i=n=readline();--i>-n;print(o))for(o='',j=i<0?-i:i;j++<n;)o+='*'

	
1
p=print;(function f(n, s){if(!n)return p(s);p(s);f(n-1, s + "*");p(s)})(4,"");
LL Golf Hole 7 - バイト数を読みやすくする (Nested Flatten)
 #7320をお手本にJavaScriptで。( toFixed()メソッドがちょっと嫌な感じですが。)
1
2
3
4
(function (d) {
  for (var i = 0; d >= 1024; d /= 1024, i++);
  alert(d.toFixed(2) + ' kMGTPEZY'.charAt(i));
})(123456789012345);
LL Golf Hole 6 - 10進数を2進数に基数変換する (Nested Flatten)

Java6付属のRhinoでワンライナー。 コマンドライン引数から整数を受け取る。

1
jrunscript -e "print((arguments[0]*1).toString(2))" 123
LL Golf Hole 5 - 最上位の桁を数え上げる (Nested Flatten)
やはり正規表現が強い。
1
javascript:for(a=[i=0];i<300;)a[/^.0*$/(++i)]=i;a
1
javascript:for(a=[i='0'];i<300;)a.push(i=++i[0]+i.slice(1));a

while文を1行にした。

1
2
3
4
5
6
function f(n) {
  var m = 0, r = [m];
  while (n >= (m += Math.pow(10, (("" + m).length - 1)))) r.push(m);
  return r;
}
alert(f(300).join("\n"));
1
2
3
4
5
6
7
8
9
function f(n) {
  var m = 0, r = [];
  while (n >= m) {
    r.push(m);
    m += Math.pow(10, (("" + m).length - 1));
  }
  return r;
}
alert(f(300).join("\n"));
LL Golf Hole 4 - 文章から単語の索引を作る (Nested Flatten)
> #7103
/.+/g だと空白行がカウントされてないのでは
1
javascript:for(d={},i=1;l=/[^\n]*\n/g(document.body.textContent);++i)for(;w=/\w+/g(l);)(d[w]=d[w]||[]).push(i);uneval(d)
LL Golf Hole 1 - tinyurl.comを使ってURLを短縮する (Nested Flatten)

Rhinoで。そのまんますぎる。

1
readUrl("http://tinyurl.com/api-create.php?url=http://ll.jus.or.jp/2008/info/xgihyo")
next >>

Index

Feed

Other

Link

Pathtraq

loading...