Kotlinで"進捗どうですか?"
まだ無いような気がするので投稿してみます。ついでにJavaも。
元ネタはこちら。そのほかの言語の良い纏めがこちら。
Kotlin
最初はKotlinの特徴が出るように色々仕込んでいたのですが、無駄に複雑になったのでシンプルにしました。
Kotlinのバージョンは 1.0.0-beta-4583 です。
Main.kt
package jp.mitibata.practice.shinchoku
import java.util.*
/**
* 進捗どうですか?シンプル版
* 全ての文字を変数に格納して、毎回正規表現のマッチングをかけている。
*/
fun main(args: Array<String>) {
val words = arrayOf("進捗", "どう", "です", "か")
val rand = Random()
val regex = Regex(""".*進捗どうですか$""")
val aori = """
|
|_人人人人人人人_
|>進捗どうですか<|
| ̄Y^^Y^^Y^^Y^^Y^ ̄
""".trimMargin()
var buffer = ""
loop@while (true) {
when (regex.matches(buffer)) {
true -> {
println(buffer)
println(aori)
println("${buffer.length}文字で煽られました")
break@loop
}
false -> buffer += words[rand.nextInt(words.size)]
}
}
}
こんな風にKotlinに煽られます。やったね。
かです進捗進捗ですどうですどう進捗どうかかかどうどうか進捗どうですか
_人人人人人人人_
>進捗どうですか<|
 ̄Y^^Y^^Y^^Y^^Y^ ̄
34文字で煽られました
Java
同じ様な動作をするJavaも書きました。
複数行の文字列リテラルやら型推論が無いところに、ちょっとしたつらさがありますね。
Main.java
package jp.mitibata.practice.shinchoku;
import java.util.Random;
import java.util.regex.Pattern;
/**
* 進捗どうですか?Java版
*/
public class Main {
public static void main(String[] args){
String[] words = {"進捗", "どう", "です", "か"};
Random rand = new Random();
Pattern pattern = Pattern.compile(".*進捗どうですか$");
String aori = "_人人人人人人人_\n>進捗どうですか<\n ̄Y^^Y^^Y^^Y^^Y^ ̄";
String buffer = "";
while (true) {
if(pattern.matcher(buffer).matches()) {
System.out.println(buffer);
System.out.println(aori);
System.out.println(buffer.length() + "文字で煽られました");
break;
} else {
buffer += words[rand.nextInt(words.length)];
}
}
}
}