JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで単語の入力にかかる時間を計算する方法

問題の概要

ここでは、従来のQWERTY配列ではなく、キーが英語のアルファベット順(abcde...)にそのまま並んでいるキーボードを想定します。

問題を解く前に、次の2つの前提条件を設けます。

  • 現在、指はインデックス0、つまり「a」のキー上に置かれている。
  • あるキーから別のキーへの移動にかかる時間は、それぞれのインデックスの差の絶対値とする。例えば「a」から「k」への移動時間は |0 - 10| = 10 となる。

求められているのは、英語の小文字アルファベットからなる文字列を引数に受け取り、その文字列を入力するのに必要な時間を計算して返すJavaScript関数です。

入力例

例えば、入力文字列が次の場合を考えてみましょう。

const str = 'dab';

出力

const output = 7;

これは、実際に行われるキーの移動が以下のようになるためです。

'a' -> 'd' = 3
'd' -> 'a' = 3
'a' -> 'b' = 1

解決策:サンプルコード

この問題を解くコードは以下のとおりです。

const str = 'dab';
const findTimeTaken = (str = '') => {
   let timeSpent = 0;
   const keyboard = 'abcdefghijklmnopqrstuvwxyz';
   let curr = 'a';
   for(let i = 0; i < str.length; i++){
      const el = str[i];
      const fromIndex = keyboard.indexOf(curr);
      const toIndex = keyboard.indexOf(el);
      const time = Math.abs(fromIndex - toIndex);
      curr = el;
      timeSpent += time;
   };
   return timeSpent;
};
console.log(findTimeTaken(str));

コードの解説

このコードの処理の流れは以下のとおりです。

  • 変数 timeSpent で合計入力時間を管理し、初期位置として「a」を設定します。
  • 文字列の各文字について、直前のキーと現在のキーのインデックスを indexOf() で取得します。
  • Math.abs() を使って2つのインデックスの差の絶対値(=移動時間)を計算し、合計に加算します。
  • 現在位置を次の文字に更新しながら、文字列の最後までこの処理を繰り返します。

出力

コンソールに出力される結果は次のとおりです。

7
  1. JavaScriptの型キャスト(型変換)とは?String・Number・Booleanの使い方を解説

    型キャスト(型変換)とは?型キャストとは、あるデータ型を別のデータ型へ明示的に変換することを指します。JavaScriptでは、以下の3つの関数を使った変換が最も一般的です。String() … 文字列型へ変換Boolean() … 真偽値型へ変換Number() … 数値型へ変換それぞれの関数に値を渡すだけで、簡単に目的の型へ変換できるのが特徴です。JavaScriptで型キャストを行うコード例以下は、JavaScriptで型キャストを行うサンプルコードです。ボタンをクリックすると、値「44」が文字列・数値・真偽値へそれぞれ変換され、結果が画面に表示されます。<!DOCTYPE htm

  2. JavaScriptのconstとletの違いを徹底解説!ブロックスコープ変数の基本と使い方

    JavaScriptにおけるconstとletの基本const と let は、ES2015(ES6)で導入された変数宣言用のキーワードです。どちらもブロックスコープ(波括弧 { } で囲まれた範囲)に対応しているのが特徴で、関数スコープしか持たなかった従来の var とは異なる挙動を示します。両者の大きな違いは再代入の可否です。letで宣言した変数は後から何度でも値を再代入できますが、constで宣言した変数は再代入しようとするとエラー(TypeError)が発生します。letとconstの主な違い項目letconst再代入可能不可(エラー発生)スコープブロックスコープブロックスコープ宣言時