Language detail: Io
Coverage: 16.89%
|
number of '+' ratings |
contribution for coverage |
Unsolved challenges
- 島の数をカウントする (Nested Flatten)
- 行列式の計算 (Nested Flatten)
- inline/embeded bytecode assembly (Nested Flatten)
- 疑似並行処理 (Nested Flatten)
- '('と')'の対応 (Nested Flatten)
codes
九九の表示
(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
|
情報オリンピック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
|
呼んだのは誰?
(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)
next >>
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
|





pooq
#6929()
[
Io
]
Rating0/0=0.00
File standardInput readLine split map(capitalize)join(" ")printlnRating0/0=0.00-0+
[ reply ]