id:anatooの大冒険 ~力への意思~ RSSフィード

メインのブログ anatoo.jp twitter

2009-11-13

factorのhttpサーバでhello world 23:04

できた

IN: .
USING: kernel http.server http.server.responses namespaces 
       http prettyprint ;

SINGLETON: helloworld

M: helloworld call-responder*
    2drop "hello world" "text/html" <content> ;

helloworld main-responder set 8080 httpd 

これを実行してhttp://localhost:8080/にアクセスするとhello worldと表示される。

起動するのが遅くて気になる場合はlistenerでUSE: http.server save しておく。

問題: 2乗した結果に1から9までの数字が1度ずつ現れる整数をすべて挙げよ 21:23

via ちょっとしたプログラミング - HaHaHa!

例の如くfactorで解く。

USING: kernel sequences prettyprint sorting math.ranges math 
       strings ;

1 100000 [a,b] [ 
    sq unparse natural-sort >string "123456789" = 
] filter .

結果

V{
    11826
    12363
    12543
    14676
    15681
    15963
    18072
    19023
    19377
    19569
    19629
    20316
    22887
    23019
    23178
    23439
    24237
    24276
    24441
    24807
    25059
    25572
    25941
    26409
    26733
    27129
    27273
    29034
    29106
    30384
}

2009-10-17

Python vs Clojure vs Ruby vs Factor 01:37

via Hacker’s Cafe Blog: Re: Python vs Clojure

clojure

(reduce max
    (filter #(let [s (str %)]
               (= (seq s) (reverse s)))
            (for [x (range 100 1000)
                  y (range 100 1000)]
              (* x y))))

Python vs Clojure – Evolving | BEST IN CLASSより

python

print max(s for s in (x * y 
                      for x in range(100, 1000) 
                      for y in range(100, 1000))
          if list(str(s)) == list(reversed(str(s))))

Hacker’s Cafe Blog: Re: Python vs Clojureより

ruby

p [*100..1000].product([*100..1000]).map{|x, y| 
  x * y 
}.select{|s|
  s = s.to_s
  s == s.reverse
}.max

Twitter / Yukihiro Matsumoto: http://tinyurl.com/ykljb3t ...より

factor

USING: kernel sequences arrays sequences.product prettyprint math math.ranges ;

100 1000 [a,b) dup 2array [ product ] product-map 
[ unparse dup reverse = ] filter supremum .

結論

USING節の冗長さに目をつぶればfactorも悪くないよね

おまけ: PHP

<?php 
$max = 0;
foreach (range(100, 1000) as $i) foreach (range(100, 1000) as $j) {
    $n = $i * $j;
    if ($n == strrev($n) && $max < $n) $max = $n;
}
echo $max;

2009-10-03

ループを使わずに1から10までの総和を表示するプログラム 21:37

USING: sequences prettyprint ;
11 sum .

2009-09-13

「批評はするけど、批評されるのに耐えられない人たち」 20:42

バカなコメントが多すぎる。

はてブは馬鹿が寄ってくるが仕方ない。diggのようにしろ。

アホでマヌケで鬱陶しいんだよ、お前ら。

↑などの意見が最近目につくけど

彼らの主張は、心情としては理解できるけど、間違ってる。

(中略)

本質は万人向けに公開された媒体なのだから、批評を免れる正当性を主張するのは難しい。

「偉そうに俺を批評するんじゃねえお前ら」とブチ切れるのは要するにナンセンス。

http://anond.hatelabo.jp/20090913184535

俺の場合は、はてなブックマークのコメントもブログの記事などと同様に批評される対象コンテンツのひとつであることを理解してないんじゃないかなーと思うことの方が多い。ネットで誰でもアクセスできる所に置いてあるなら、ブログの記事にしても、ブックマークのコメントにしても、何だってコンテンツの一つなんだよ。

ブログの記事が公開してあって、誰かがそれを批判する。ブックマークコメントが公開してあって、誰かがそれを批判する。この二つにたいした違いは無くて、誰かが他人のコンテンツを批判しているだけ。ただその批判もネットで公開する以上コンテンツのひとつだから、それがさらに他人に批判されることもある。

ブコメで偉そうに人を批判したりはするけど、相手からそれを逆に批判されちゃうと急に烈火のごとく怒り出すユーザを見かける。題名の「批評はするけど、批評されるのに耐えられない人たち」っていうのはブログ書いてる人だけじゃなく、そういう人にも当てはまる場合はある。

ネットでコンテンツを公開する以上、ブログだろうが、ブックマークコメントだろうが、人から批判されるリスクは存在するってことで、ブロガーとかはてブユーザとかtwitterやってる人とか関係なく、コンテンツを公開する人は皆この事を心に留めておくといいじゃないでしょうか。

終わり。

2009-09-12

Factorでドント式投票の計算 14:26

via ドント方式投票の計算 - みずぴー日記

ドント式がなんなのかよく理解しないままコード丸写しした

IN: .
USING: kernel sequences prettyprint sorting arrays make math 
       accessors math.order ;

TUPLE: party name vote count ;

: <party> ( name vote -- party ) 0 \ party boa ;

: update ( party -- party )
    [ 1 + ] change-count dup count>> [ / ] curry change-vote ;

: donto ( party-list seats -- party-list ) 
    [ 
        [ [ [ vote>> ] bi@ <=> ] sort reverse unclip update prefix ] dip 
        1 - donto 
    ] unless-empty ;

[ 
    "a" 1000 <party> , 
    "b" 700 <party> , 
    "c" 600 <party> , 
    "d" 280 <party> , 
] { } make 8 donto .

結果

{
    T{ party { name "b" } { vote 116+2/3 } { count 3 } }
    T{ party { name "c" } { vote 300 } { count 2 } }
    T{ party { name "d" } { vote 280 } { count 0 } }
    T{ party { name "a" } { vote 166+2/3 } { count 3 } }
}

2009-07-24

Factorでuniq - 隣同士の重複を消す 17:33

元ネタ: Schemeでuniq -- 隣り同士で重複してる要素を消す - みずぴー日記

IN: .
USING: sequences kernel prettyprint ;

: (uniq) ( exseq seq -- 'exseq ) 
    [   
        unclip [ [ = ] curry trim-head swap ] keep suffix swap (uniq) 
    ] unless-empty ;

: uniq ( seq -- 'seq ) { } swap (uniq) ;

{ 0 0 1 1 9 2 2 2 0 0 3 0 } uniq .

やっぱFactor楽しいな。連鎖性言語と言うだけあってパズルっぽい。

2009-07-21

includeの返り値について 13:19

includeって、正当に読み込んだかどうかの結果を返してるんですよね。

これ知らなかったです。

http://d.hatena.ne.jp/tohokuaiki/20090721/1248145745

正確に言うと違う。

includeされたファイルの中からreturnで返されると、ファイルが読み込まれたかどうかではなく、returnに使われた値がincludeの返り値として使われる。

マニュアルにも以下のように記述されている。

値の返し方: 読み込まれたファイル内では、ファイルの実行処理を終了し呼出側の スクリプトに戻るためにreturn()文を実行することが可能です。 読み込まれたファイルから値を返すことも可能です。 通常の関数で行うのと同様にincludeコールの値を取得することができます。

http://jp.php.net/manual/ja/function.include.php

以下は検証のコード。

<?php 
// a.php
return 'hoge';
<?php
// b.php
var_dump(include dirname(__FILE__) . '/a.php');

結果。

%php b.php
string(4) "hoge"

結論

ファイルの読み込みに成功したとしてもfalseが返る可能性はある。

2009-06-06

joomla1.510でフロントエンドから記事を編集したとき公開終了の期限が変わってしまうバグを修正する 19:54

joomla1.510には、フロントエンドから終了なしに設定されている記事を修正すると公開終了の期限が勝手に変るバグがある。

これはroot/components/com_content/views/article/tmpl/form.phpの最初の方を修正すればよい。

before

<?php // no direct access
defined('_JEXEC') or die('Restricted access');

$config =& JFactory::getConfig();
$publish_up =& JFactory::getDate($this->article->publish_up);
$publish_up->setOffset($config->getValue('config.offset'));
$publish_up = $publish_up->toFormat();

if (! isset($this->article->publish_down) || $this->article->publish_down == 'Never') {
	$publish_down = JText::_('Never');
} else {
	$publish_down =& JFactory::getDate($this->article->publish_down);
	$publish_down->setOffset($config->getValue('config.offset'));
	$publish_down = $publish_down->toFormat();
}

after

<?php // no direct access
defined('_JEXEC') or die('Restricted access');

$config =& JFactory::getConfig();
$publish_up =& JFactory::getDate($this->article->publish_up);
$publish_up->setOffset($config->getValue('config.offset'));
$publish_up = $publish_up->toFormat();

if (! isset($this->article->publish_down) || $this->article->publish_down === JText::_('Never')) {
	$publish_down = JText::_('Never');
} else {
	$publish_down =& JFactory::getDate($this->article->publish_down);
	$publish_down->setOffset($config->getValue('config.offset'));
	$publish_down = $publish_down->toFormat();
}

9行目のif文の条件を修正すると良い。

標準入力から回文を作る in Factor 16:06

via anarchy golf - palindromize

USING: kernel sequences math io ; 

[ dup length 1+ [ dupd head reverse append ] with map [ dup reverse = ] find nip print ] each-line

2009-05-29

gray code 22:01

via anarchy golf - Gray code

factorで書くとゴルフのし様が無いなあ。

IN: . USING: kernel sequences prettyprint math ;

: a ( n -- seq ) { { } } swap [ [ 2 [ suffix ] with map ] map concat ] times ;
4 a .

実行結果。

{
    { 0 0 0 0 }
    { 0 0 0 1 }
    { 0 0 1 0 }
    { 0 0 1 1 }
    { 0 1 0 0 }
    { 0 1 0 1 }
    { 0 1 1 0 }
    { 0 1 1 1 }
    { 1 0 0 0 }
    { 1 0 0 1 }
    { 1 0 1 0 }
    { 1 0 1 1 }
    { 1 1 0 0 }
    { 1 1 0 1 }
    { 1 1 1 0 }
    { 1 1 1 1 }
}

追記

数字を二進数で表すやり方でも書いたけどあんまり短くならないな

IN: .
USING: kernel sequences math math.parser io ;
    
: a ( n -- ) 1 over shift [ >bin swap 48 pad-head print ] with each ;
3 a

実行結果。

000
001
010
011
100
101
110
111

2009-05-27

2つの文字列両方に含まれる文字のみで構成された文字列を取得 16:42

via 2つの文字列両方に含まれる文字のみで構成された文字列を取得 - 文殊堂

IN: ..
USING: kernel sequences prettyprint ;

: a ( a b -- str ) [ member? ] curry filter ;

! "EG"
"EFGHI" "ACEGJL" a .