【深夜料金計算表】何分前に出て何km/hで走れば24時過ぎに出れるか求めてみた

クルマ・バイク

深夜料金を適応させて12時過ぎに料金所を出るという場面で、いつ出発すれば最小限のロスで済むか毎回手計算をしていた。

面倒臭くなったので一覧表を作ってしまったぞ。

スポンサーリンク

インターまで5kmの場合

走行速度出発時刻(〇分前)
60km/h4
70km/h3
80km/h3
90km/h2
100km/h2
110km/h2

インターまで10kmの場合

走行速度出発時刻(〇分前)
60km/h9
70km/h8
80km/h6
90km/h6
100km/h5
110km/h4

インターまで15kmの場合

走行速度出発時刻(〇分前)
60km/h14
70km/h12
80km/h10
90km/h9
100km/h8
110km/h7

インターまで20kmの場合

走行速度出発時刻(〇分前)
60km/h19
70km/h16
80km/h14
90km/h12
100km/h11
110km/h10

インターまで25kmの場合

走行速度出発時刻(〇分前)
60km/h24
70km/h20
80km/h18
90km/h16
100km/h14
110km/h13

コード(chatGPTが作成)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>出発時間計算ツール</title>
</head>
<body>

    <div class="midnightmoney">
        <h2>出発時間計算ツール</h2>
        <label for="distance">SAから料金所までの距離 (km)</label>
        <input type="number" id="distance" placeholder="距離を入力" required>
        <button onclick="
            const distance = parseFloat(document.getElementById('distance').value);
            const arrivalTimeMinutes = 12 * 60 + 1;
            const speeds = [60, 70, 80, 90, 100, 110, 120];
            let result = '';
            speeds.forEach(speed => {
                const travelTimeMinutes = (distance / speed) * 60;
                const departureTimeMinutes = arrivalTimeMinutes - travelTimeMinutes;
                const departureTimeHours = Math.floor(departureTimeMinutes / 60);
                const departureTimeMinutesFinal = Math.round(departureTimeMinutes % 60);
                result += `${speed} km/h の場合: ${String(departureTimeHours).padStart(2, '0')}:${String(departureTimeMinutesFinal).padStart(2, '0')}  出発\n`;
            });
            document.getElementById('result').innerText = result;
        ">計算</button>

        <h3>速度ごとの出発時間:</h3>
        <div id="result"></div>
    </div>

</body>
</html>

本当はこのツールをwordpressのこの記事の中で動かそうとしたのだが、何をどう試してもうまくいかなかった…

chatGPTとどんな会話を行ってこのツールを開始したか

個人的にはいきなり●●を書いてとお願いするより、知識や前提条件を共有することから始めたほうがいいと思っている。

Q.日本の高速道路の深夜料金という制度はご存じですか?

夜の0時から4時の間に高速道路を通行していると、通行料金が30%割引になるという制度です。

A.はい、日本の高速道路の深夜料金割引制度について知っています!
この制度は、ETCを利用して高速道路を走行する場合に適用され、夜間0時から4時の間に通行していると通行料金が30%割引される仕組みです。目的は、深夜帯の交通需要を促進し、日中の交通量を分散させることです。

ただし、いくつか注意点があります:

  1. ETC車載器を搭載した車両であること
    ETCを利用しない場合、この割引は適用されません。
  2. 一部の高速道路は対象外
    深夜割引が適用されない路線や区間もあります(例:都市高速など)。
  3. 時間帯の通過条件
    料金所を通過する時間が深夜0時から4時の間である必要があります。

割引は特に、深夜移動が多いトラックドライバーや遠距離移動をする方々にとってありがたい制度ですね。最近の旅やドライブでこの割引を利用されましたか?

Q.私はドライブから帰宅する際、この深夜料金が適応される夜の12時以降に料金所に入るため、サービスエリアに停車して時間調整をしています。

A.なるほど!深夜料金を狙ってサービスエリアで時間調整をされているのですね。賢い選択ですし、特に長距離ドライブでは通行料金の節約がかなり効いてきますよね。

時間調整中のポイント

  1. リフレッシュのチャンス
    サービスエリアで少し体を動かしたり、軽くストレッチしたりするのは、安全運転のために良いアイデアです。深夜の運転は集中力が落ちやすいので、体をほぐしてリフレッシュしてください。
  2. 時間つぶしアイデア
    • 小腹が空いているなら、サービスエリアの軽食や名物グルメを試してみる。
    • 車内で好きな音楽やポッドキャストを聞きながら、リラックスする。
  3. 注意点
    • 冬場は寒くなるので、エンジンを切って仮眠する際には防寒対策を忘れずに。
    • 深夜帯はサービスエリアの店舗が閉まっている場合も多いので、必要なものは事前に準備しておくと安心です。

時間調整しながらのドライブだと、逆にサービスエリアを楽しむ時間ができるのも面白いですね。何か印象に残ったサービスエリアや、おすすめの過ごし方があればぜひ教えてください!

Q.例えば10km先の料金所に80km/hで向かう場合、何時何分に出発すれば12時過ぎに料金所に到着できますか?

A.まず、10kmを80km/hで走行するのにかかる時間を計算します。

1. 時間の計算

  • 距離 = 10km
  • 速度 = 80km/h
  • 時間 = 距離 ÷ 速度 = 1080\frac{10}{80} 時間 = 0.125 時間

0.125時間を分に変換すると、
0.125×60=7.50.125 \times 60 = 7.5 分、つまり 7分30秒 かかります。


2. 出発時間の計算

料金所に12:00:01以降に到着する必要があるため、最も早い到着時間が12:00:01になるように逆算します。

  • 料金所到着希望時間: 12:00:01
  • 移動にかかる時間: 7分30秒

12:00:01から7分30秒を引くと、11:52:31 に出発すればよいことになります。


結論

10km先の料金所に80km/hで向かう場合、11:52:31 に出発すれば、深夜料金が適用される12時を過ぎて到着できます。

Q.以下の速度において、出発するべき時間をそれぞれ教えてください

60km/h
70km/h
80km/h
90km/h
100km/h
110km/h
120km/h

A.以下の速度において、出発するべき時間は次の通りです:

  • 60km/h: 11:51
  • 70km/h: 11:52
  • 80km/h: 11:53
  • 90km/h: 11:54
  • 100km/h: 11:55
  • 110km/h: 11:55
  • 120km/h: 11:56

これらの時間に出発すれば、深夜料金が適用される12:00:01以降に料金所に到着します。

Q.プログラミングによって、とあるツールを作ろうと思っています。

「SAから料金所までの距離を入力すると、今出力して頂いたフォーマットで走行速度ごとの出発時間を表示してくれる」というものです。

pythonでプログラミングコードを考えて貰えませんか?

A.もちろんです!以下は、ユーザーがサービスエリア(SA)から料金所までの距離を入力し、速度ごとの出発時間を計算して表示するPythonのプログラムコードです。

# 必要なライブラリ
def calculate_departure_time(distance):
    # 速度のリスト (km/h)
    speeds = [60, 70, 80, 90, 100, 110, 120]

    # 希望の到着時間 (12:00:01)
    arrival_time = 12 * 60 + 1  # 12:00:01を分単位で表現

    # 各速度で出発時間を計算
    departure_times = []
    for speed in speeds:
        # 移動時間を計算 (分単位)
        travel_time_minutes = (distance / speed) * 60
        # 出発時間を計算 (分単位)
        departure_time_minutes = arrival_time - travel_time_minutes
        # 時間と分に分ける
        departure_time_hours = int(departure_time_minutes // 60)
        departure_time_minutes = int(departure_time_minutes % 60)
        departure_times.append((speed, departure_time_hours, departure_time_minutes))

    # 出発時間の結果を表示
    print(f"距離: {distance} km")
    print(f"希望到着時間: 12:00:01")
    print("\n速度ごとの出発時間:")
    for speed, hours, minutes in departure_times:
        print(f"{speed} km/h -> 出発時間: {hours:02}:{minutes:02}")

# ユーザーから距離を入力してもらう
distance_input = float(input("SAから料金所までの距離 (km) を入力してください: "))
calculate_departure_time(distance_input)

コードの説明

  1. calculate_departure_time(distance) 関数は、距離を入力として受け取り、各速度(60km/h、70km/h、80km/h、90km/h、100km/h、110km/h、120km/h)ごとの出発時間を計算します。
  2. 到着時間は 12:00:01 とし、到着時間を分単位で計算します(12時間 × 60分 + 1分)。
  3. 速度ごとに、走行時間(距離 ÷ 速度)を計算し、その時間を出発時間に引いて出発時刻を求めます。
  4. 最後に、ユーザーに距離を入力してもらい、その入力に基づいて計算結果を出力します。

使用方法

  • プログラムを実行すると、SAから料金所までの距離 を入力するように求められます。
  • 距離を入力すると、各速度における出発時間が表示されます。

例えば、距離が10kmであれば、先程のように出発時間が表示されます。

このツールを作成すれば、便利に使えそうですね!

Q.素晴らしいです!
このプログラムをhtmlのwebサイト内で動かしたいです。

A.ありがとうございます!このプログラムをHTMLのWebサイト内で動作させるためには、Pythonだけではなく、Webフロントエンド技術(HTML, CSS, JavaScript)を使って実装する必要があります。PythonをWebで動かすためには、通常、バックエンドとしてFlaskDjangoなどのWebフレームワークを使用しますが、簡単な実装ではJavaScriptに変換して動作させることも可能です。

ここでは、HTMLJavaScriptを使って、PythonのロジックをWeb上で動かせるようにします。

HTML + JavaScriptで実装する方法

以下に、距離を入力し、速度ごとの出発時間を表示するWebツールのサンプルコードを示します。PythonのロジックをJavaScriptに書き換えています。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>出発時間計算ツール</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        .container {
            max-width: 600px;
            margin: 0 auto;
            padding: 20px;
            border: 1px solid #ddd;
            border-radius: 8px;
        }
        label, input, button {
            margin: 10px 0;
            padding: 8px;
            width: 100%;
            box-sizing: border-box;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }
        table, th, td {
            border: 1px solid #ddd;
        }
        th, td {
            padding: 8px;
            text-align: center;
        }
    </style>
</head>
<body>

    <div class="container">
        <h2>出発時間計算ツール</h2>
        <label for="distance">SAから料金所までの距離 (km)</label>
        <input type="number" id="distance" placeholder="距離を入力" required>
        <button onclick="calculateDepartureTime()">計算</button>

        <h3>速度ごとの出発時間:</h3>
        <table id="departure-times">
            <thead>
                <tr>
                    <th>速度 (km/h)</th>
                    <th>出発時間</th>
                </tr>
            </thead>
            <tbody>
            </tbody>
        </table>
    </div>

    <script>
        function calculateDepartureTime() {
            // 入力された距離を取得
            const distance = parseFloat(document.getElementById("distance").value);

            // 希望到着時間 (12:00:01)
            const arrivalTimeMinutes = 12 * 60 + 1; // 12:00:01を分単位で表現

            // 速度リスト (km/h)
            const speeds = [60, 70, 80, 90, 100, 110, 120];
            const tableBody = document.getElementById("departure-times").getElementsByTagName("tbody")[0];
            tableBody.innerHTML = ""; // 既存のテーブル行をクリア

            // 速度ごとの出発時間を計算
            speeds.forEach(speed => {
                // 移動時間を計算 (分単位)
                const travelTimeMinutes = (distance / speed) * 60;
                // 出発時間を計算 (分単位)
                const departureTimeMinutes = arrivalTimeMinutes - travelTimeMinutes;
                // 時間と分に分ける
                const departureTimeHours = Math.floor(departureTimeMinutes / 60);
                const departureTimeMinutesFinal = Math.round(departureTimeMinutes % 60);

                // テーブルに結果を追加
                const row = tableBody.insertRow();
                row.innerHTML = `<td>${speed} km/h</td><td>${String(departureTimeHours).padStart(2, '0')}:${String(departureTimeMinutesFinal).padStart(2, '0')}</td>`;
            });
        }
    </script>

</body>
</html>

コードの説明

  1. HTML部分
    • ユーザーに距離を入力してもらうためのフォームを作成しています。
    • button タグをクリックすると、出発時間を計算するJavaScript関数 calculateDepartureTime() が呼び出されます。
    • 結果をテーブルに表示します。
  2. CSS部分
    • シンプルなスタイルを設定して、ページのデザインを整えています。
  3. JavaScript部分
    • 距離を取得し、速度ごとに出発時間を計算します。
    • 12:00:01 に到着するための出発時間を計算し、その結果をテーブルに動的に追加します。
    • 出発時間は時間と分を「02:03」のように2桁表示にフォーマットしています。

使用方法

  1. 上記のHTMLコードを .html ファイルとして保存し、ブラウザで開いてください。
  2. サービスエリアから料金所までの距離(km)を入力して、「計算」ボタンをクリックすると、速度ごとの出発時間が表示されます。

この方法で、Pythonを使わなくても、Webサイト内で直接JavaScriptを使ってツールを動作させることができます。

Q.ありがとうございます。

cssもhtmlのタグ内に収められませんか?

A.もちろん、CSSを<body>タグ内に収めることができます。以下のように、CSSを<style>タグを使って<body>タグ内に記述できます。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>出発時間計算ツール</title>
</head>
<body>

    <div class="container">
        <h2>出発時間計算ツール</h2>
        <label for="distance">SAから料金所までの距離 (km)</label>
        <input type="number" id="distance" placeholder="距離を入力" required>
        <button onclick="calculateDepartureTime()">計算</button>

        <h3>速度ごとの出発時間:</h3>
        <table id="departure-times">
            <thead>
                <tr>
                    <th>速度 (km/h)</th>
                    <th>出発時間</th>
                </tr>
            </thead>
            <tbody>
            </tbody>
        </table>
    </div>

    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        .container {
            max-width: 600px;
            margin: 0 auto;
            padding: 20px;
            border: 1px solid #ddd;
            border-radius: 8px;
        }
        label, input, button {
            margin: 10px 0;
            padding: 8px;
            width: 100%;
            box-sizing: border-box;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }
        table, th, td {
            border: 1px solid #ddd;
        }
        th, td {
            padding: 8px;
            text-align: center;
        }
    </style>

    <script>
        function calculateDepartureTime() {
            // 入力された距離を取得
            const distance = parseFloat(document.getElementById("distance").value);

            // 希望到着時間 (12:00:01)
            const arrivalTimeMinutes = 12 * 60 + 1; // 12:00:01を分単位で表現

            // 速度リスト (km/h)
            const speeds = [60, 70, 80, 90, 100, 110, 120];
            const tableBody = document.getElementById("departure-times").getElementsByTagName("tbody")[0];
            tableBody.innerHTML = ""; // 既存のテーブル行をクリア

            // 速度ごとの出発時間を計算
            speeds.forEach(speed => {
                // 移動時間を計算 (分単位)
                const travelTimeMinutes = (distance / speed) * 60;
                // 出発時間を計算 (分単位)
                const departureTimeMinutes = arrivalTimeMinutes - travelTimeMinutes;
                // 時間と分に分ける
                const departureTimeHours = Math.floor(departureTimeMinutes / 60);
                const departureTimeMinutesFinal = Math.round(departureTimeMinutes % 60);

                // テーブルに結果を追加
                const row = tableBody.insertRow();
                row.innerHTML = `<td>${speed} km/h</td><td>${String(departureTimeHours).padStart(2, '0')}:${String(departureTimeMinutesFinal).padStart(2, '0')}</td>`;
            });
        }
    </script>

</body>
</html>

主な変更点

  • CSSコードを<style>タグ内に移動し、<body>タグ内に直接記述しました。これにより、外部CSSファイルを使わずにHTMLファイル内で完結します。

これで、HTMLファイル内に全てのコードが収まる形になります。ブラウザで開いても問題なく動作しますので、試してみてください!

タイトルとURLをコピーしました