created’自己複製プログラム × 腕立て伏せ回数計測’

本記事は以下 Advent Calendarの12日目の記事です。
🎄GMOペパボエンジニア Advent Calendar 2023
#意識低いトレーニング部 Advent Calendar
※GMOペパボの社内Slackには #意識低いトレーニング部 というチャンネルがあります。


技術寄りの話・筋トレの話を混ぜて何か書きたいなと思い、無理やりテーマを設定しました。

自己複製プログラム × 腕立て伏せ回数計測

経緯
上の画像は今年5月時点と10月時点の体成分分析です。

今年からジムに通い始めて約半年が経過しました。しかし、画像からわかる通り、誤差範囲でしか変化していません。
多い時には週に1回ジムに行くという圧倒的意識(の低さ)なのですが、ここまで変化がないと悲しくなります。
In hindsight (振り返ってみると), 日々のモチベーション・数値目標がない状態だったのがまずかったのかもしれません。#意識低いトレーニング部 Advent Calendarでも数値目標が大切だと言ってました。
しかし、いつも使っている筋トレアプリには、過去最高記録を確認する機能がなく少し不便。そこで、過去の最高記録を追跡できるシステムを作ってみることにしました。

作ったもの


説明
この謎ファイルは、実行するたびに自分自身をコピーして、新しい目標の腕立て伏せ回数が書かれたファイルを生成します。ファイル名には腕立て伏せの回数が記載されており、作成日時を見ることで、いつ記録を更新したかが分かるようになっています。

使用方法
ファイルをダブルクリックすると、次の目標が書かれたファイルが生成されます。
目標をクリアしたらもう一度ボタンを押下しましょう。

実装の詳細
自宅のPC(windows)で簡単に実行できるようにbatファイルで作成しました。
コメントを見ていただければ何をしているかが分かると思います。

@echo off
setlocal EnableDelayedExpansion
:: ファイル名を取得
set "original_file_name=%~n0"
:: ファイル名を「:」で分割
set "prefix="
set "count=0"
for /f "tokens=1* delims=:" %%a in ("!original_file_name!") do (
    set "prefix=%%a"
    set /a "count=%%b"
)
:: 回数を増やす
set /a "new_count=count + 5"
:: 新しいファイル名を生成(元のテキスト部分を保持)
set "new_file_name=!prefix!:%new_count%"
:: ファイルをコピーして新しいファイルを作成
copy "%~f0" "!new_file_name!.bat"
endlocal

まとめ
このファイルを活用して、2024年は60kg&体脂肪率13%を目標に増量していく所存です。
おいしいご飯情報in福岡 をお待ちしております。


おまけ
このプログラムは、自身を出力するプログラム「Quine」と似たコンセプトを持っています。Quineの紹介およびRubyでの実装例もついでに紹介します。

Quineとは、以下の条件を満たすプログラムを指します。
要は、コードと出力が同じになるようにコーディングをするパズルです。

  • 文字列を出力するプログラムである
  • 出力される文字列がそのプログラム自身を表す文字列と同一である

Rubyでの実装例

eval s="puts'eval s='+s.inspect"

解説

  1. s="puts'eval s='+s.inspect"
    変数sに文字列が代入される
  2. eval s
    変数sの中身をRubyのコードとして評価(実行)します
    sに代入された文字列がプログラムとして機能します

Leave a Reply

Your email address will not be published. Required fields are marked *