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

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

SeijiKitamura
Copy link

  • 頑張ったところ
    DRYなコード」を書くことに頑張りました。
    普段から「車輪の再開発」をしてしまうところがあり、そうならないように頑張りました。

  • ・苦労したところ
    内容を理解するのに苦労しました。
    いただいたテストファイルから読み始め、書かなければいけないコードはなんなのかを想像しました。普段は1人で開発しているため、実装したいこととテストコードはおおよそ想定の範囲でおさまりますが、今回のようにテストが先にできているというのは初めての経験で苦労しました。

  • 自慢したいところ
    約4000個のなかから該当する値を変換することがこのコードの目的になります。
    最初に以下3つのことが頭に浮かびました。
     ・Hashを使用
     ・ キーを検索して値を表示
     ・値を検索してキーを表示
    keyを数字にしvalueをローマ数字にしたHashを作成し、数字からローマ数字に変換する場合は「キー(数字)」を検索して「値(ローマ数字)」を使用すればいいことがわかります。それができれば「値(ローマ数字)」を検索して「キー(数字)」を求めることも可能になります。
    あとはどうやってそのHashを用意するかですが、すでにファイルが準備されていましたのでこれを使用しました。ルールをよく読み該当ファイルを使用しても問題がないことを確認できたことが自慢になります。

  • コードを書くのにかかった時間(ざっくりでよいです。10分、1時間、3日、etc.)
    30分ぐらいで完成しました。そのほとんどがDebugを有効にするための方法に費やしました。

  • だいたいのプログラミング歴
    Rubyを始めて10年ぐらいです。趣味で行っているので全くコードを書かない期間も3-4年あります。

  • 実際に解いてみた感想
    どうやったらルールの範囲内で最も短いコードを書くかを考えるのがとても難しかったです。

  • 自分のロジックを詳しく解説したブログ記事(もしあれば)
    ありませんのでここに詳しく書きます。ロジックというよりは考え方になります。
    プログラムを書いていて問題に直面するとそれを力技で解決しようとしてしまいます。出来上がったときは気持ちいいんですが、後でよくよく調べてみれば自分で実装したものとおなじメソッドやgemがすでにあったりすることがこれまでに多々ありました。そしてそれらと比べてみて自分で作ったものがいいと感じたことは一度もありません
    いろいろなメソッドやgemを使用していく中で最近は「使えるものは積極的に使った方が効率的だ」という考え方になってきました。
    プログラムは何かを表現するための手段でありプログラムを書くことが目的ではないと感じ今回のコードとなりました。

  • 伊藤さんにメッセージ(こちらももしあればw)
    Railsのコードを書いていてこまったときに検索するとほとんどの場合、伊藤さんの記事にたどり着きまず。いつもありがとうございます。いつか実際にお会いしてお礼を言えればなと思っています。
    今回私が提出したコードは正攻法とは言えず、どちらかというと邪道なのかもしれませんがそういった方法を選択できる状態で出題された伊藤さんの慈悲深さに感銘いたしました。趣味でプログラムを書いていますので誰かと一緒にコードを書いたりレビューを受けたりすることはなかったのですが、これを機会に一歩踏み出せたらなと思っています。そういう意味では貴重な経験をさせていただきました。ありがとうございます。

@SeijiKitamura
Copy link
Author

  • 頑張ったところ
    すでに会心のものを1回提出していましたがそれをいったんなかったことにし改めてロジックを組みました。前回の出来がよかったため今回作り直すモチベーションを維持することに頑張りました。

  • 苦労したところ
    数字を文字列に変換し1文字ずつ切り出して該当するローマ数字に変換しました。その際、感覚的には千の位から始めたいと思っていてもプログラム的には一の位から始めた方がより効率的だと気付くまでに時間がかかり苦労しました。

  • 自慢したいところ
    ローマ数字には「0」に該当するものがないと気付いたこと、そしてそれに対応するためダミーを代入したところが我ながらよく思いついたなと思っています。ダミーを代入することで切り出した数字を使用して配列から該当するローマ数字を取り出すことが簡単にできるようになりました。

  • コードを書くのにかかった時間(ざっくりでよいです。10分、1時間、3日、etc.)
    今回は3時間くらいかかりました。このロジックを書くことで得られるメリットとこのロジックを書くことで失う時間などのデメリットを比較した場合、パフォーマンスはかなり悪いと感じました。まだまだ未熟だなと感じています。

  • だいたいのプログラミング歴
    Rubyを始めて10年ぐらいです。趣味で行っているので全くコードを書かない期間も3-4年あります。

  • 実際に解いてみた感想
    できてしまえば「こんなものか」という感想です。
    もっと良い方法はないのかなと感じることはありませんでした。
    今自分ができることや知っていることを目いっぱい使って書きましたので力は出し切れたかなと思っています。
    普段は「もう少し簡単にわかりやすくできないか」という向上心を感じることもありますが、今回はお題を提出することが目的のためそういったものも感じませんでした。

  • 自分のロジックを詳しく解説したブログ記事(もしあれば)
    ブログ記事はありませんのでこちらに書かせていただきます。
    romanizeについては
    数字を文字列に変換し、文字数から桁を求め値と位を指定して該当するローマ数字を選択し表示しています。
    0に該当するローマ数字がないためダミーデータを代入した配列を用意し値と位を指定しています。
    1の位から処理した方が混乱が少ないためそのままでは逆方向からのローマ数字となってしまいますが、それをreverseして文字列を連結し表現しています。
    deromanizeについては
    romanizeを使用して総当たりで検索しています。
    当初、正規表現を使用して対応しようとしていました思いのほか難しく断念しました。検索範囲は1-3999と狭くこの方法でも十分対応できると思っています。

  • 伊藤さんにメッセージ(こちらももしあればw)
    前回と同じになります。

@JunichiIto
Copy link
Collaborator

参加ありがとうございました!動画でレビューしたのでこちらをご覧ください〜。
https://www.youtube.com/watch?v=m-wLGaNwxwI

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