Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การสร้างลำดับ Look-and-say แรก n พจน์ใน JavaScript

ปัญหา

ในคณิตศาสตร์ ลำดับ Look-and-say (ดูแล้วพูด) คือลำดับจำนวนเต็มที่เริ่มต้นดังนี้:

1, 11, 21, 1211, 111221, 312211, …

เพื่อสร้างพจน์ถัดไปจากพจน์ก่อนหน้า เราอ่านตัวเลขของพจน์ก่อนหน้า โดยนับจำนวนตัวเลขในกลุ่มที่มีตัวเลขเหมือนกัน

เช่น พจน์ถัดจาก 1211 คือ:

111221

เพราะอ่าน 1211 คือ "หนึ่ง 1, หนึ่ง 2, สอง 1" ได้ 111221

เราต้องเขียนฟังก์ชัน JavaScript ที่รับตัวเลข n และคืนค่า n พจน์แรกของลำดับ Look-and-say

ตัวอย่าง

โค้ดตัวอย่างด้านล่าง:

const num = 12;
const generateSequence = (num = 1) => {
  const lookAndSay = (val) => {
    let res = '';
    let chars = (val + ' ').split('');
    let last = chars[0];
    let count = 0;
    chars.forEach(c => {
      if (c === last) {
        count++;
      } else {
        res += (count + '') + last;
        last = c;
        count = 1;
      }
    });
    return res;
  };
  let start = 1;
  const res = [];
  for (let i = 0; i < num; i++) {
    res.push(String(start));
    start = lookAndSay(start);
  }
  return res;
};
console.log(generateSequence(num));

ผลลัพธ์

[
  '1',
  '11',
  '21',
  '1211',
  '111221',
  '312211',
  '13112221',
  '1113213211',
  '31131211131221',
  '13211311123113112211',
  '11131221133112132113212221',
  '3113112221232112111312211312113211'
]

คำอธิบายเพิ่มเติม

ลำดับนี้เติบโตเร็วมาก (ประมาณ 30% ต่อพจน์) และมีคุณสมบัติทางคณิตศาสตร์น่าสนใจ เช่น ความยาวของพจน์เพิ่มขึ้นตามค่าคงที่ของ Conway (≈1.303577) โค้ดใช้เทคนิคเพิ่ม space ท้ายสตริงเพื่อ flush กลุ่มสุดท้าย