CodeIQ:ワイルドキーボード

私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「ワイルドキーボード」(CodeIQ)を参照してください。

問題の概要

問題を引用します。
「バイッ!ナッッリ!」
(01の2進数だけで構成された文字列を、ASCII文字列のバイナリ表記とみなして、元のテキストに戻して欲しい。)

【入出力サンプル】
例1)
STDIN
011000010110001000001010

STDOUT
ab

例2)
STDIN
01100001000010100110001000001010

STDOUT
a
b

私のプログラム

Rubyで解答しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/ruby
 
def solve(line)
    ret = ""
    for i in 0...(line.size/8)
        ret += line[i*8,8].to_i(2).chr
    end
    return ret
end
 
# main
while line = gets
    line.strip!
    if line.empty? then next end
 
    printf("%s", solve(line))
end

解説

特に解説が必要な感じではありません。
Rubyで書きましたがC言語で書いた方がちょっとカッコイイプログラムになる気がします。

main

solve()でASCII文字列に変換されたものが返るのでそれを印字します。

solve(line)

入力値を8文字ずつ読んで2進数の文字列表現を整数に直し、さらに整数値を文字列に変換して連結するだけです。

雑感

正解したらおまけがあってそれを実行して見たらこのコードでユニコードのマルチバイト文字をちゃんと表示できていて驚きました。