全然季節外れだけど。
今日@muddydixonさんのTweet
なんだこれ!ww URL
2011-06-07 15:30:57 via web
npm xmas
と打つとクリスマスツリーが出るのね。こんなかんじ。
https://github.com/isaacs/npm/blob/master/lib/xmas.js
ソース見てもよく分からなかったのでPerlで書き直してみた。
#!/usr/bin/env perl use strict; use warnings; use Encode 'encode_utf8'; my $s = ' ' . encode_utf8(pack 'U', 0x2605); my $f = encode_utf8(pack 'U', 0xFF0F); my $b = encode_utf8(pack 'U', 0xFF3C); my $o = [ map { encode_utf8(pack 'U', $_) } ( 0x0069, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x2E1B, 0x2042, 0x2E2E, 0x0026, 0x0040, 0xFF61, ) ]; my $oc = [ 21, 33, 34, 35, 36, 37 ]; my $l = pack 'U', 0x005e; sub tree { my ($H) = @_; print("\n"); print(" " x $H); print("\033[33m" . $s . "\n"); my $M = $H * 2 - 1; for my $L (1 .. $H) { my $O = $L * 2 - 2; my $S = ($M - $O) / 2 + 1; print(" " x $S); print("\033[32m" . $f); for (1 .. $O) { print("\033[" . $oc->[ int(rand @$oc) ] . "m" . $o->[ int(rand @$o) ]); } print("\033[32m" . $b . "\n"); } print(" "); print("\033[32m" . $l) for 1 .. $H - 1; print("| |"); print("\033[32m" . $l) for 1 .. $H - 1; if ($H > 10) { print("\n "); print(" ") for 1 .. $H - 1; print("| |"); print(" ") for 1 .. $H - 1; } print("\n\n"); } tree(20);
https://gist.github.com/1011836
なんてことはなく、for文で回して木の形を作りつつランダムな文字をオーナメントとしてランダムな色にして配置しているだけだった。でもキレイで面白い。