DはDはD

なんか絶賛ICFP練習会が単独で行われている模様です。ちなみに03の問題に決めた後、不運な事が起こってしまいました・・・。



http://larsivi.net/node/112
このページのコードを見ていたのですが、Tangoっつーのがあるんかー、ということでこのintel-mac-10.4にぶち込んでみた訳です。
http://www.dsource.org/projects/tango/wiki/GdcDownloads
Just TangoとBundlesを入れました。


で、そのページのコードをコピペして実行してみるもなんか訳の分からんのが出てきてうわーってなっちゃいます。
ので、Tangoのページから直接tutorialとかを引っ張ってきました。

import  tango.io.Console;

void	main()
{
   Cout("Hello, World").newline;
}

なんだこれきめぇ!
取りあえず出力するっぽいので直接gdc(gdc for Mac)に食わせる。

gdc hello.d
Unsupported environment; neither Win32 or Posix is declared
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../../include/d/4.0.1/tango/sys/Common.d:83: static assert  is false

よーわからんので魔法の呪文を唱える。

gdc hello.d -fversion=Posix -lgtangobos -lgtango

./a.out
Hello, World

出きったー!!!


じゃあもう一回さっきのコードに挑もう。

/usr/bin/ld: Undefined symbols:
_deflate
_deflateEnd
_inflate
_inflateEnd
_deflateInit2_
_deflateInit_
_inflateBackInit_
_inflateInit2_
_inflateInit_
collect2: ld returned 1 exit status

なんこれ!!!!!!

その先に進む

まずはコンパイルを突破する事が出来たので、拾ってきたzipを引数として渡す。
今度は今度で、

auto archive = new ZipFolder(args[1]);
auto info = archive.tree; //ここ

bus error

落ちる。

うーんとこれは。

あがいてみた

auto archive = new FileFolder(args[1],true);
auto info = archive.tree();

依然としてtree取ろうとすると落ちる。なにこのfunction!

変えてみた

Tangoやめて普通にPhobosで頑張ゆ!!

//Phobosのstd.fileの所からコピペしたサンプル

import std.stdio;
import std.file;

void main(string[] args)
{
    bool callback(DirEntry *de)
    {
        if(de.isdir)
            listdir(de.name,&callback);
        else
            writefln(de.name);
        return true;
    }
    listdir(args[1],&callback);
}

gdc test.d
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../../include/d/4.0.1/std/c/stddef.di:15:
module libc cannot read file 'gcc/config/libc.d'

よし辞めた!Pythonで書く。

pythonで書いた

import os
import sys

def my_walk(filename,ext,pattern,ln):
    print(filename)
    sum = 0
    for root,dirs,files in os.walk(filename):
        for _file in files:
            if((root.find(pattern) != -1 or _file.find(pattern) != -1) and 
               _file[-len(ext):]==ext):
                for i,_line in zip(range(1,ln+1),file(os.path.join(root,_file))):
                    if(i==ln):
                        sum+=int(_line)
                        break
    return sum

def main():
    filename = sys.argv[1]
    sum1 = my_walk(filename,".js","HIJ",1)
    sum2 = my_walk(filename,".js","bar",5)
    return sum1*sum2

if __name__=="__main__":
    print(main())

correct貰いました。
gdcわけわかんね。D言語怖す・・・。