前のエントリを元ネタにVB/C#で書いたものが出てきました。
[VB2005]縦書き
縦書きくんC#
他の言語でやったらもっと短くなるんだろうなと思っていましたが案の定そうなってしまいました。
でも、僕が出したものは見やすくするために空行を入れたりしています。
# VB/C#はいいよなぁC++は何か使うためにinclude避けられないもん。「この2行が1行になる!」と思ってincludeを1行追加したら差し引き0ですからね。
あと、僕はプラットフォームに特化した処理をする場合以外は出来るだけVC(2005 or 2008)とgcc(3.4.4 or 4.1.2 or 4.3.0)という2つのコンパイラを試すようにしています。VCだと通ってgccだとエラーといったことが結構あるので、どちらでもコンパイルできるようにしておかないと落ち着かないんですね。
# どちらでも通れば多分構文間違えてないだろうし。
さて、個人的には他人と張り合ったりするのは苦手なので直ぐに負けを認めるタイプなのですが、MVPのお二人相手なら胸を借りるつもりで頑張ってみてもいいかな?と思い、頑張った結果です。
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
int main(int argc, const char* argv[])
{
if(argc < 2) return 1;
std::ifstream ifs(argv[1]);
if(!ifs.is_open()) return 2;
std::vector<std::string> src(1);
std::string::size_type m = 0;
while(!std::getline(ifs, src[0]).eof()) m = (src.push_back(std::string(src[0])), (src[0].size() > m ? src[0].size(): m));
for(std::vector<std::string>::size_type x = 0; x < m; ++x, std::cout << std::endl)
for(std::string::size_type y = 1; y < src.size(); ++y) std::cout << (src[src.size()-y].size() <= x ? ' ' : src[src.size()-y][x]);
}
15行まで縮めてみました。
12行目のwhile行の最大長を求めている処理が卑怯な気もしますが、何か使うにはincludeしなきゃならないハンデも背負ってるんでこれくらいは大目に見てほしいところです。
英雄になれるかな…バグがありそうでとても心配…