Look-and-say sequence(「ルック&セイ」数列) をJavaで試してみる

兄から教えてもらったYouTubeの動画で初めてその存在を知りました、その名も、わいわい、じゃなくて『「ルック&セイ」数列』。(動画で実況してる方は、わいわい、という方だそうです。)

www.youtube.com

⇧  上記のひたすらゲームを実況しながらプレイしているYouTubeの動画で出てきました。ゲームの世界は奥深いですね。

stabucky.com

⇧  上記サイト様は、JavaScriptで実装していました。

 

ちなみに、前も紹介したかもしれませんが、Facebookが「flick」という単位を提唱してるみたいですね。

pc.watch.impress.co.jp

it.srad.jp

 映像系はコンテンツの処理に対する時間に対してシビアですね。

 

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(); } }

f:id:ts0818:20180226213102j:plain

ameblo.jp

⇧  上記サイト様で説明してくれていますが、直前の項をLook(見て)、今現在の項をSay(言う)というところから、 Look-and-say 数列ってことになるみたいですね。

f:id:ts0818:20180226224925p:plain

直前の項を見て、次の項が決まるってことみたいですね。

数学とアルゴリズムを勉強していかねばですね。

 

今回はこのへんで。