FizzBuzz的なもの

問題(Java)

1から50まで数字を順に表示させます。ただし、2〜9の任意の数字(整数)についてその数字の倍数と一の位にその数字が含まれる数の時には、数字の隣に"うふふ"と表示させてください。2〜9の任意の数字はキーボードから最初に入力した結果を用います。なお、このプログラムはFor文を使う事を前提です。

先ほど友人に,上記の問題が解けないから教えて欲しいと言われて途中までやっているソースコードをもらった.ここには載せれないが,行数は26行だった.今日はそのプログラムを7行にして返してやったぜはははーってお話.以下,プログラムを載せる.

Ufufu.java

import java.io.*;
class Ufufu{
	public static void main(String[] args) throws IOException{
		int n=Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
		for(int i=1;i<=50;i++)System.out.print((i%n==0||i%10==n)?(i+"ウフフ "):(i+" "));
	}
}

実行(任意の数字として3を指定した例)

$ javac Ufufu.java
$ java Ufufu > result.txt
3
$ cat result.txt
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 33ウフフ 34 35
36ウフフ 37 38 39ウフフ 40 41 42ウフフ 43ウフフ 44 45ウフフ 46 47 48ウフフ 49 50 

おしまい.中身は2行だけの記述ですっきりできました.これが僕の限界ですが,これより短いコードって書けそうですかね?Javaで.
なんだか去年のインターンシップが懐かしくなりました.そしてなぜ「うふふ」なのかも気になるところ.

参考ページ

JavaでCSV形式のファイルを扱うためのライブラリ「OpenCSV」

JavaCSV形式のファイルを扱うためのライブラリをインストールしました.opencsv | Free Development software downloads at SourceForge.netに置いてあるファイルを落として利用します.

環境

  • OS Ubuntu 10.04(LTS) ※LinuxならなんでもOKです

インストール

# 入手(version は 2.2)と解凍
$ wget http://sourceforge.net/projects/opencsv/files/opencsv/2.2/opencsv-2.2-src-with-libs.tar.gz/download
$ tar zxvf opencsv-2.2-src-with-libs.tar.gz 

# .jarファイルを探す
$ find opencsv-2.2/ -name '*.jar'
opencsv-2.2/lib/junit-4.7.jar
opencsv-2.2/deploy/opencsv-2.2.jar

# 所望のjarファイルを/usr/share/java/にコピー(置きたい所に置いて下さい)
$ cp opencsv-2.2/deploy/opencsv-2.2.jar /usr/share/java/

# 後のファイルは不要なので消しちゃってもOKです
$ rm -rf opencsv-2.2/

サンプルプログラム

SamleOpenCSV.java

import au.com.bytecode.opencsv.*;
import java.io.*;
public class SampleOpenCSV {
  public static void main(String[] args) throws IOException {
    CSVReader reader = new CSVReader(new FileReader("sample.csv"));
    String[] nextLine;
    while ((nextLine = reader.readNext()) != null) {
      // nextLine[] is an array of values from the line
      System.out.println(nextLine[0] + " " + nextLine[1] + " " + nextLine[2]);
    }
  }
}

sample.csv

姓,名,年齢
とうきょう,たろう,33
東京,太郎,15

コンパイル&実行

$ javac -cp /usr/share/java/opencsv-2.2.jar SampleOpenCSV.java 
$ java -cp /usr/share/java/opencsv-2.2.jar:. SampleOpenCSV
姓 名 年齢
とうきょう たろう 33
東京 太郎 15