スピーチとコードは短いほうがいい(博多華丸風)
元ネタは博多華丸大吉で「スピーチとスカートは短いほうがいい」らしいですが、
令和な世界だとセクハラだの何だので叩かれるらしいです(市長に辞職勧告決議案出されるレベル
元ネタを知ってればパクってるんだなぁHA HA HAで笑い飛ばせる話も、
世間的に偉くなったり・責任を伴う人が言おうもんなら、これ見よがしにぶっ叩いて潰し合う、
なんだか心に余裕のない糞つまらない世の中になったもんだなぁと(昭和脳
答えは書かないよ(対象外問題のため
上記のpaizaのプログラミングゲーム企画にて、「ネオン街のクラブ」と言うステージにてコードゴルフ的なランキング問題が有るようで、それを解くに当たってJavaでコードゴルフ解くときのちょっとした小技的なモノを紹介
クラス宣言を辞める
Java8からinterfaceにmainメソッドが書けるため、いままでダラダラと書いていたpublic static
が消せるね
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line1 = scanner.nextLine();
String line2 = scanner.nextLine();
// 何か処理
}
}
import java.util.*;
interface Main {
void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line1 = scanner.nextLine();
String line2 = scanner.nextLine();
// 何か処理
}
}
変数名を短く
実務でコレやったらブッコロですが、ゴルフなのでダイジョブダイジョブ
import java.util.*;
interface Main {
void main(String[] a) { // argsとか4文字も使ってるやんけ
Scanner b = new Scanner(System.in); // メソッド引数がaだから、次はbでええやろ
String c = b.nextLine();
String d = b.nextLine();
// 何か処理
}
}
型推論を使う
どんな型で受け取るかなんて分かってるんだから、イチイチ書かなくてもいいよね
import java.util.*;
interface Main {
void main(String[] a) {
var b = new Scanner(System.in); // Scanner型って分かってんだからvarで良くね?
var c = b.nextLine();
var d = b.nextLine();
// 何か処理
}
}
1回しか出てこないのにimportって邪魔だよね
Scanner
(コンソールとかの入力値をいい感じにスキャンしてくれるアレ)が、
コード内に1回しか出てこないのに、それだけのためにimport文書くとか無駄だよね
※2回以上出てきた場合はimportのほうが短くなる可能性もあるけど、そこら辺は実際に書いてみてって感じですね
interface Main {
void main(String[] a) {
var b = new java.util.Scanner(System.in); // importしないで、フルパス指定
var c = b.nextLine();
var d = b.nextLine();
// 何か処理
}
}
改行・スペースを削る
この作業は最後にやった方が良いかと(動作確認できてから
削る所としては{}
の前後、=
の前後、配列型宣言と変数名の間になります。
要は空白を消してもビルドエラーが出ない箇所
interface Main{void main(String[]a){var b = new java.util.Scanner(System.in);var c=b.nextLine();var d=b.nextLine();/*何か処理*/}}
だいたいこんな感じで、如何にコードを短く読みづらく書くかというのを競うのがコードゴルフになります。
こんなに削ったとしても、ランキング的に上位10位(2025/02/06時点)に入るのがやっとなので、
1位の人とかどんだけ削ってるんだろうと。。。
勉強がてらにコード見せていただきたいところですね。