Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?

ビールが好きです。
99 Bottles of Beerという有名なお題があるようなので今日はそのCode Golfの話。

Code Golfとは

コードゴルフはコンピュータプログラミング・コンテストの一種。参加者は与えられたアルゴリズムを、可能な限りもっとも短いソースコードで記述することを競う[1]。バイナリサイズではなく、ソースコードの文字数がスコアとなる
Wikipedia

例えばFizzBuzz問題のCode Golf解説がこちら

なのですが、Code Golfのお題が大量にあるのを見つけた。
それがこれ。https://code.golf/

99 bottles of beer

Display the complete lyrics for the song: 99 Bottles of Beer on the Wall.
→「"99 Bottles of Beer on the Wall." の歌詞を表示するプログラムを書け」ということなのですね。

Beer.java
import java.text.MessageFormat;

class Beer {
    static String bottles(int n) {
        return MessageFormat.format("{0,choice,0#No more bottles|1#One bottle|2#{0} bottles} of beer", n);
    }

    public static void main(String[] args) {
        String bottles = bottles(99);
        for (int n = 99; n > 0; ) {
            System.out.println(bottles + " on the wall");
            System.out.println(bottles);
            System.out.println("Take one down, pass it around");
            bottles = bottles(--n);
            System.out.println(bottles + " on the wall");
            System.out.println();
        }
    }
}

とか書いていく。安直には以下みたいな感じ。
ポイントとしては歌詞の最後のほう 1 はbottlesではなくてbottleだしNo more以下の歌詞をどう処理するかです。

Beer.java
import java.text.MessageFormat;

class Beer {
    static String bottles(int n) {
        return MessageFormat.format("{0,choice,0#no more bottles|1#1 bottle|2#{0} bottles} of beer", n);
    }

    public static void main(String[] args) {
        String bottles = bottles(99);
        for (int n = 99; n > 0; ) {
            System.out.println(bottles + " on the wall, " + bottles+".");
            bottles = bottles(--n);
            System.out.println("Take one down and pass it around, "+ bottles + " on the wall.");
            System.out.println();
        }
        System.out.println("No more bottles of beer on the wall, no more bottles of beer.");
        System.out.println("Go to the store and buy some more, 99 bottles of beer on the wall.");
    }
}

実行

image.png

とか、お題はクリアできるのだけどランクインするためにはもう少し削らないといけない。

結果

Beer.java
import java.text.MessageFormat; 
class Beer {
static String b(int n) {
return MessageFormat.format("{0,choice,0#no more bottles|1#1 bottle|2#{0} bottles} of beer", n);
}
public static void main(String[] args) {
String b = b(99);
for (int n = 99; n > 0;) {
System.out.println(b + " on the wall, " + b+".");
b= b(--n);
System.out.println("Take one down and pass it around, "+ b+ " on the wall.\n");
}
System.out.println("No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.");}
}

とか小賢しい感じに削ると、とりあえず14位になったよ。

image.png

今日は以上~~!

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
e99h2121
2003年新卒入社した「人事給与システムのリーディングカンパニー」で保守開発をしています。Qiitaではポエマー、Zennで息抜き。2016aug生まれ娘、2018oct生まれ息子に精神を鍛えられている日々
works-hi
「はたらく」を楽しく!に向けて大手企業の人事業務から変えていく HR業界のリーディングカンパニー

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?