「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Golang でのタイピング速度テスト CLI アプリケーションの作成

Golang でのタイピング速度テスト CLI アプリケーションの作成

2024 年 11 月 8 日に公開
ブラウズ:717

Writing a Typing Speed Test CLI Application in Golang

そのタイトルについては、長く一生懸命考えなければなりませんでした?...話は終わったので、すごいコードを書いてみましょう :)

ポンプブレーキ?悲鳴を上げる.... 今日構築しようとしているものについて少し紹介しましょう。タイトルがわかりにくいと思うので、ここでは golang で入力速度を計算する CLI アプリケーションを構築します。ただし、文字通り同じアプリケーションを、任意のプログラミング言語で同じ手法に従って構築することもできます。

さて、コーディングしましょう ?

package main

import (
    "bufio"
    "fmt"
    "log"
    "math/rand"
    "os"
    "strings"
    "time"
)

var sentences = []string{
    "There are 60 minutes in an hour, 24 hours in a day and 7 days in a week",
    "Nelson Mandela is one of the most renowned freedom fighters Africa has ever produced",
    "Nigeria is the most populous black nation in the world",
    "Peter Jackson's Lord of the rings is the greatest film of all time",
}

main.go ファイルでは、ロジックを作成するために必要なパッケージをインポートします。文章のスライスも作成します。自由にもっと追加してください。

// A generic helper function that randomly selects an item from a slice
func Choice[T any](ts []T) T {
    return ts[rand.Intn(len(ts))]
}

// Prompts and collects user input from the terminal
func Input(prompt string) (string, error) {
    fmt.Print(prompt)
    r := bufio.NewReader(os.Stdin)

    line, err := r.ReadString('\n')
    if err != nil {
        return "", err
    }

    return strings.Trim(line, "\n\r\t"), nil
}

// Compares two strings and keeps track of the characters  
// that match and those that don't
func CompareChars(target, source string) (int, int) {
    var valid, invalid int

    // typed some of the words
        // resize target to length of source
    if len(target) > len(source) {
        diff := len(target) - len(source)
        invalid  = diff
        target = target[:len(source)]
    }

    // typed more words than required
        // resize source to length of target
    if len(target) 



次に、アプリケーション ロジックを作成するときに便利な関数をいくつか作成します。

func main() {
    fmt.Println("Welcome to Go-Speed")
    fmt.Println("-------------------")

    for {
        fmt.Printf("\nWould you like to continue? (y/N)\n\n")
        choice, err := Input(">> ")
        if err != nil {
            log.Fatalf("could not read value: %v", err)
        }

        if choice == "y" {
            fmt.Println("Starting Game...")
            timer := time.NewTimer(time.Second)
            fmt.Print("\nBEGIN TYPING NOW!!!\n\n")
            _ = > ")
            if err != nil {
                log.Fatalf("could not read value: %v", err)
            }

            elasped := timeElapsed(start, time.Now())
            valid, invalid := CompareChars(sentence, response)
            fmt.Print("\nResult!\n")
            fmt.Println("-------")
            fmt.Printf("Correct Characters: %d\nIncorrect Characters: %d\n", valid, invalid)
            fmt.Printf("Accuracy: %d%%\n", accuracy(valid, len(sentence)))
            fmt.Printf("Precision: %d%%\n", precision(valid, invalid))
            fmt.Printf("Speed: %.1fwpm\n", Speed(len(sentence), elasped))
            fmt.Printf("Time Elasped: %.2fsec\n", elasped)
        }

        if choice == "N" {
            fmt.Println("Quiting Game...")
            break
        }

        if choice != "N" && choice != "y" {
            fmt.Println("Invalid Option")
        }
    }
}

メイン関数では、ターミナルにウェルカム メッセージを書き込み、プログラムを実行するための無限ループを作成します。次に、プログラムを終了するオプションを含む確認メッセージを標準出力 (ターミナル) に出力します。続行を選択した場合、以前に作成された文のスライスから文が選択され、開始時間が記録された直後に端末に表示されます。ユーザー入力を収集し、時間、速度、精度、精度を計算し、結果を端末に表示します。無限ループがリセットされ、プログラムからオプトアウトするまでアプリケーションが再度実行されます。

出来上がり! golang で最初のプログラムを作成したところです。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/hueyemma769/writing-a-typing-speed-test-cli-application-in-golang-371l?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3