Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第4回 SG Tech スキルアップ勉強会のコードを書いてみました #13

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

dkan75
Copy link

@dkan75 dkan75 commented Oct 23, 2024

コードのアピールポイント

  • 頑張ったところ: DRY かつ可読性を意識しました
  • 苦労したところ: もともと1~10までしか知らなかったので、どういうパターンなのか理解するところです
  • 工夫したところ:
    • 最初は雑に定数・コードを書いてテストを通してからリファクタしました。
    • 最終的に定数だけじゃなくてクラスインスタンス変数を使ったほうが綺麗になりました。
    • irb上でメソッドを貼り付けて動かしながら実装するスタイルで書きました。
  • 自慢したいところ:
    • I, V, X, L, C, D, M は冒頭の定数に1回ずつしか出現していないです。
  • コードを書くのにかかった時間(ざっくりでよいです。10分、1時間、3日、etc.): 何度か全体的に書き直してましたが、2時間くらいでした。
  • だいたいのプログラミング歴: ruby は10年くらいです
  • 実際に解いてみた感想
    • パズルを解くみたいで楽しみながらやりました。
  • 自分のロジックを詳しく解説したブログ記事(もしあれば)
    • romanize
      • まず、以下の配列を作ります

        [["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"],
         ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"],
         ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"],
         ["", "M", "MM", "MMM"]]
        
      • 下の桁から、テーブルを参照して文字列を結合しています

    • deromanize
      • 最初は上の配列を後方からサーチして配列の添字番号で計算しようと思ったのですが、ふとシンプルな方法を思いついて変えました
      • 大小が前後する "4" だけ特殊ですが、他は単純に足せばよかったので、2行で済みました。
  • 伊藤さんにメッセージ(こちらももしあればw)
    • このような投稿の機会は初ですが、良い機会を与えていただき感謝します。
    • ruby好きなので、とても楽しい時間でした。

end

def deromanize(roman)
# write your code here
values = roman.split('').map { |v| ROMAN_PATTERNS.invert[v] }
values.map.with_index { |v, i| (values[i + 1]&.> v) ? -v : v }.sum
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

後日談ですが、このきっかけで rubocop のバグを報告できました。

rubocop/rubocop#13378

@JunichiIto
Copy link
Collaborator

参加ありがとうございました!動画でレビューしたのでこちらをご覧ください〜。
(勉強会の中でもレビューしましたが、動画は動画で撮っておいたのでよかったらどうぞ!)
https://www.youtube.com/watch?v=DbBMtE2t0sc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants