兄から教えてもらったYouTubeの動画で初めてその存在を知りました、その名も、わいわい、じゃなくて『「ルック&セイ」数列』。(動画で実況してる方は、わいわい、という方だそうです。)
⇧ 上記のひたすらゲームを実況しながらプレイしているYouTubeの動画で出てきました。ゲームの世界は奥深いですね。
⇧ 上記サイト様は、JavaScriptで実装していました。
ちなみに、前も紹介したかもしれませんが、Facebookが「flick」という単位を提唱してるみたいですね。
映像系はコンテンツの処理に対する時間に対してシビアですね。
Look-and-say sequenceをJavaで実装してみる
・Look-and-say sequence - Rosetta Code
⇧ 上記サイト様で実装されてました。多種多様な言語を網羅されてます。
今回はJavaで。
package lookSay; public class LookAndSay { public static void main(String[] args) { // 初項 String num = "1"; // 10項まで繰り返し for (int i = 1; i <= 10; i++) { // 表示 System.out.print(num + " "); // 次の項を作成 num = lookAndSay(num); } } public static String lookAndSay(String number) { StringBuilder result = new StringBuilder(); // 数列の項の値の先頭 // number = 111221 だったら、repeat = 1 char repeat = number.charAt(0); // 項の値で先頭以外の部分 + 半角スペース(項と項の隙間) // 11221␣ number = number.substring(1) + " "; // 項の中で同一の数字が続く場合のカウント用 int times = 1; // 項の値を1文字づつとして捉える // number.toCharArray()は、[1,1,2,2,1] for(char actual: number.toCharArray()) { // 項の先頭の値と、それ以降の値を比較 if(actual != repeat) { result.append(times + "" + repeat); // 同一の数字が続く数のカウントをリセット times = 1; repeat = actual; // 同一の数字が続いていれば、 } else { // その数字の数をカウント times ++; } } // number = "111221"の場合、"312211"が返る return result.toString(); } }
⇧ 上記サイト様で説明してくれていますが、直前の項をLook(見て)、今現在の項をSay(言う)というところから、 Look-and-say 数列ってことになるみたいですね。
直前の項を見て、次の項が決まるってことみたいですね。
数学とアルゴリズムを勉強していかねばですね。
今回はこのへんで。