Language detail: Io

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

Unsolved challenges

codes

Feed

Used modules

next >>

LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする (Nested Flatten)
空白を単語の区切りとしています。
文字列は標準入力で与えます。
1
File standardInput readLine split map(capitalize)join(" ")println
Hello, world! (Nested Flatten)

だれも書かないので。

1
"Hello World!" println ;
九九の表示 (Nested Flatten)
printfみたいなのは、ないようですが文字変換メソッドで桁数指定ができるようです。
1
for(i,1,9,for(j,1,9,writeln(i," * ",j," = ",(i*j)asString(2,0))))
条件を満たす行を取り除く (Nested Flatten)

	
1
2
f := File standardInput
while(i := f readLine, if(i at(0) != 35, i println))
重複する要素を取り除く (Nested Flatten)
Io> list(1,2,4,3,2,1,4,5,6,7) removeDup
==> list(3, 5, 6, 7)
1
2
3
List removeDup := method(
  self uniqueCount select(last == 1) map(first)
)
倍数になる13進数 (Nested Flatten)

	
1
2
3
i := 10
while(i asString fromBase(13) % i != 0, i = i + 1)
i println
自分自身のファイル名を知る方法 (Nested Flatten)
1
System launchScript print
不動点演算子 (Nested Flatten)

括弧の拡張機能を使って #5731#5733 の写経。(Yコンビネータは理解してない。)

1
2
3
4
5
6
7
8
9
Object do( curlyBrackets  := getSlot("block"))
Block  do( squareBrackets := getSlot("call"))

Y := { f,
  { g, f[{ a, g[g][a] }] }[
  { g, f[{ a, g[g][a] }] }]
}

Y[{ b, { n, if(n < 2, 1, n * b[n - 1]) } }][10] println
情報オリンピック2006年度国内予選問題1 (Nested Flatten)

	
1
File standardInput readLines map(split map(asNumber)sum)max println
指定コマンドを別プロセスで起動 (Nested Flatten)

ls -la を実行。

1
2
3
4
5
6
sc := SystemCall clone
sc command = "ls"
sc arguments = list("-la")
sc run
sc stdout readLines foreach (it, it println) # 標準出力
sc returnCode println # リターンコード
コマンドライン引数の取得 (Nested Flatten)

args に入ってるみたいです。(0 はスクリプト自身)

Lobby はトップレベルのオブジェクト自身です。

1
2
args slice(1) println #=> list("a", "b", "c", "d")
Lobby args slice(1) println #=> same
Hello, world! (Nested Flatten)

Object#write を使った場合.

Object#writeln もある.

1
write("Hello, world!")
n人中m人が当選するくじ (Nested Flatten)

Ioを使ってみる.

1
lot := method(n, m, 1 to(n) asList shuffle slice(0, m))
呼んだのは誰? (Nested Flatten)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
foo := method(
    call coroutine callStack at(2) message name
)

bar := method(
    foo
)

baz := method(
    foo
)

bar println
baz println
文字列のセンタリング (Nested Flatten)

Io で普通に書いてみました。alignCenter があるのできりつめるところだけです。

 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
29
30
31
32
Sequence centered := method(width,
    margin := (width - self size) / 2
    if (margin < 0,
        self slice(-margin, self size + margin)
    ,
        self alignCenter(width)
    )
)


# なんか手元のだと定義されていないので
Number to := method(i,
    Range clone setRange(self, i)
)

0 to(7) foreach(i,
    "proto" asMutable centered(i) justSerialized
    "" println
)

/* output

""
"o"
"ro"
"rot"
"prot"
"proto"
"proto "
" proto "

*/
与えられた文字列でピラミッド (Nested Flatten)
文字を1文字づつ配列にするメソッドがあるのかどうかわからないので作りました。
Sequence split は 引数をあたえないと空白でわけるようです。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Sequence splitEvery := method(
    l := list()
    self foreach(v, 
        l append(v asCharacter)
    )   
    return l
)
pyramid := method(str,
    t := str size * 2 - 1 
    for(i, 1, str size,
        str slice(str size - i, str size) splitEvery join(" ") alignCenter(t, " ") println 
    )   
)
隣り合う二項の差 (Nested Flatten)

	
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
List diff := method(
    res := list()
    for(i, 0, self size - 2,
        res append(self at(i+1) - self at(i))
    )   
    return res 
)

xs := list(3, 1, 4, 1, 5, 9, 2, 6, 5]
xs diff println
重複無し乱数 (Nested Flatten)

	
1
2
3
4
5
6
Number bingo := method(
    Range
    1 to(self) asList shuffle
}

10 bingo println
リストを逆順に表示 (Nested Flatten)

	
1
2
given_list := list(1, 2, 3, 4, 5)
given_list reverse foreach(i, i println)
ダブル完全数 (Nested Flatten)
JavaSript で書いたヤツの Io 版
Range を呼び出しておかないと Number オブジェクトで to メソッドが使えない。
というか Range の呼び出しかたはこれでいいのか?
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Number isDoublePerfectNumber := method(
    yakusu := list()
    for(i, 1, self sqrt,
        if(self % i == 0,
            yakusu append(i)
            yakusu appendIfAbsent(self / i)
        )
    )   
    sum := yakusu sum - self
    if(sum == (self * 2), 
        return true,
        return false
    )   
)

Range // Range オブジェクト呼び出し
1 to(10000) select(i, i isDoublePerfectNumber) print
next >>

Index

Feed

Other

Link

Pathtraq

loading...