2024年の雑な振り返り

今年も書きます、毎年恒例年末の雑な振り返り。

法人化して5年が経った

  • 5年、早いな…!5年間も法人として存続できていることは本当にありがたいです。

仕事について

  • 今年もメインはウェブサイトの制作・更新などだったけど、今年は周年ロゴや企業ロゴのデザインをするチャンスもあり、楽しかった!まだ完成していないけど、企業ロゴのコンペで採用される大変嬉しい出来事もあった。やっぱりロゴデザイン好きだな〜と思う
  • 今年も Kaigi on Rails 2024 のいちデザイン担当として関わることができて楽しかった
  • 年の後半に、来年のことを見越していろいろ動き始めた。まだ書けないけど来年はチャレンジの年なのです、ドキドキ…

自分のアカウント名を刷新した

  • 自分のインターネット的ニュースといえばこれ
  • インターネット上のあらゆる自分のアカウント(ID、ユーザーネーム)を sugiwe に変更した
  • アカウント名については1年以上めちゃくちゃ悩んだけど、最終的に短くシンプルでユニーク(一意的)な文字列にできてものすごく気に入っている
  • 余談だけど、それまで自分は「本名+イラストアイコン」という組み合わせでインターネット上で活動することが多かったけど、色々と思うことがあって「ハンドルネーム+実写アイコン」のが良さそう、という結論に至っている(少なくとも2024時点では)

フィヨルドブートキャンプ(FBC

  • 2021年秋に入会してずっとお世話になっているプログラミングスクール、フィヨルドブートキャンプ
  • 気づいたら3年経ってしまった…。平均値よりかなり時間がかかっている、というかかなり上位の在籍期間だと思う😂
  • でも楽しいし、今年も勉強頑張ったなーと思う。「楽しさ」については去年よりかなり高まっている感じがあり、良い兆候
  • FBC内のオンラインイベントでLT登壇もした
  • 来年いよいよ卒業、できるはず…!理想は春かなと思っていたけど、現実的には夏前くらいなのかな。どうにか頑張ります🔥

プロジェクトFH

  • これは内緒ではないけどまだ広く告知もしていないというプロジェクトなのだけど、2024年の初め(厳密には2023年の終わり)から @juneboku さんと一緒に進めているプロジェクトがあって、めちゃくちゃ楽しいし勉強になっている。無理せず、だけど良い方向に進むように継続していけたらとても嬉しい。そして来年には広くお知らせできるように頑張りたい。
    • 楽しく使えるフィードリーダーを作っています。もしアルファ版を使ってみたい・興味があるという方がいらっしゃったら、ご連絡ください✨

生活

  • 相変わらずの早朝生活。早起き最高
  • 去年の振り返りで書いた娘の部屋問題は、ひとまず家全体の模様替えを実行して「自分と娘の共同部屋」という形で結構良いスペースができている。今のところ気に入ってくれていて嬉しい、すぐに「自分1人の部屋が欲しい」と言い出すかもしれないけれど😂
  • 今年は早朝に幾つかのルーティンを実施していて、最近始めたばかりのものもあるけど良い感じ
    • 体重の計測
    • ラジオ体操
    • 筋トレ(腕立て・腹筋・スクワット)
    • ウォーキングはやったりやらなかったりだったな〜、やりたい
  • 趣味の1人語りポッドキャストも毎週欠かさず配信できて良かった
  • Cosenseで書いている日記は365日毎日継続してて、もう丸2年が経過した
  • ドラムスティックを買い直した!とりあえず1人でスタジオ入りたいな
  • 家族のプロジェクトとして、YouTubeチャンネルを1つ作った。チャンネル登録・高評価よろしくお願いします!(言ってみたかったやつ)

2024年の総括

  • 2024年もあっという間だったなぁ。大変なこと・辛いこともあったような気もするけどあまり思い出せない。総じてめちゃくちゃ良い1年だったと思う。ありがたい。
  • 今年は後厄であったが、無事過ごすことができた

2025年やりたいこと

  • これまで通り、生活リズムを保って家族で仲良く楽しく過ごしたい
    • 生活リズムがかなり自分にとって重要であると年々思う
  • なんと言ってもフィヨルドブートキャンプを卒業したい!頑張る
  • 仕事面で大きなチャレンジがある。2025年、良い報告をしたい
  • プロジェクトFHを引き続き頑張りたい。2025年は広くお知らせできたらいいな
  • Ruby Silverを取る。2024年に取ろうと思ってたのにできなかった涙
  • 英語の技術書を読みたい
  • ポッドキャストは継続したい。そしてゲストを呼びたい
  • ドラムをちょくちょく練習して、かつてのバンド仲間とまた演奏したい

mixi2は『みてね2』かもしれないと思った話(小さなコミュニティの可能性)

mixi2、出ましたね。

mixi.social

まだアカウントお持ちでない方は、以下の招待リンクから作成できます。

mixi.social

ローンチのニュースを知り比較的すぐにサインアップができたので、色々と触っています。 使い初めの所感としては「優しげなTwitter」という感じで、ポジティブに受け止めました。

Slack / Discord 風のリアクションボタンが用意されており、またそのリアクションボタンのデザインが一通り可愛い感じだったり、コメントを投稿しようとすると「やさしいことばで返信しよう」と表示されているあたりに、mixi2が優しい世界を作ろうとしているんだなというのを感じることができました。

「やさしいことばで返信しよう」と書かれたコメント入力画面
やさしい機能

まぁここまでについてはいわゆる「つぶやき投稿型SNS」を今風に楽しく使いやすく形にしてくれたな、という感じで、もちろんこれだけでもSNSの1つの選択肢として充分に素敵なサービスだなと思ったのですが、ここ数日、コミュニティ機能にただならない可能性を感じ始めているのでこうして文章にしています。

コミュニティ機能とは

コミュニティ機能というのはmixi1(←暫定的にこう呼称します)でも搭載されていた機能で、好きなものや趣味・所属団体など、共通点のあるメンバーが登録して交流を楽しむための機能です。 mixi1では掲示板形式(掲示板って懐かしい)で好きにスレッドを立ててやりとりするような形でしたが、mixi2ではそのコミュニティのタイムラインだけに流れる投稿をすることができる感じです。

X(旧Twitter)でもコミュニティの機能はあり僕もいくつか参加していますが、そこまで頻繁に見てない感じです🙏)

mixi2に感じる「小さなコミュニティ」の可能性

きっかけは、僕がフォローしている方で飼われているペットのファンクラブをコミュニティで作っているのを見つけたことでした。

mixi.social

mixi.social

(おもちもソイちゃんも可愛すぎる🥰)

mixi1やX(旧Twitter)でも似たような使い方をしていた・している方もいるかもしれないのですが、少なくとも自分としてはなかなか新鮮な使い方に感じて、コミュニティってこんなふうに使うこともできるのか〜ととても興味深く感じました。

僕は比較的大きな猫コミュニティにも参加していて、大きなコミュニティからどんどん自分の好きな猫の写真が流れてくるのはもちろんめっちゃ嬉しいのですが、身近な人が作った小さなコミュニティから流れてくるペットの写真や動画も同様に、もしかしたらそれ以上に、自分としては楽しく穏やかに見られるなと感じました。

(ということで僕も真似して、飼っているねこのファンクラブも作ってみました🐈🐈)

mixi.social

これって『みてね』では?

『みてね』というサービスをご存知でしょうか。

mitene.us

子どもの写真や動画をここにアップすると登録された家族に共有することができ、特に離れて暮らす祖父母などに手軽に子どもの様子を伝えることができるサービスとして人気を博しているサービスで、mixi2を運営しているのと同じMIXI社が運営されています。

mixi2で小さなコミュニティを作って写真を投稿し始めてふと思いました、mixi2の小さなコミュニティは、『みてね』に似てるかもしれない!

mixi.social

祖父母に自分の子どもの様子をシェアするように、身近な人たちにペットの様子をシェアできる。 まだフォローしているファンクラブは多くないのですが、これはめちゃくちゃハッピーなタイムラインが出来そうな予感がしています。

ということでこういう投稿をしました。

mixi.social

みなさん、自分の飼っているペットのファンクラブを作って写真を投稿していってください〜!

追伸:
Podcastでも最新回でmixi2について喋っています、よろしかったらこちらも聴いてください📻

listen.style

【フィヨルドブートキャンプ】チーム開発のgood first issueでモブプロをした話

この記事は フィヨルドブートキャンプ Part 1 Advent Calendar 2024 の1日目の記事です。
フィヨルドブートキャンプのアドベントカレンダー2024は、Part1とPart2があります。

🔖 目次

👨🏻 自己紹介

@sugiwe (すぎえ)と申します。
デザイナーという肩書きでロゴデザインやウェブ制作、その他様々なデザイン業務を行なっています。
2021年10月よりプログラミングスクールの フィヨルドブートキャンプ (以下、FBCと呼称)に入り、仕事をしながらプログラミング学習を進めています。

bootcamp.fjord.jp

先日、ようやくチーム開発というプラクティスに到達しました!
この記事では、チーム開発のgood first issueをモブプロで行ったことについて紹介いたします。

✏️ 用語解説

まずざっくりと用語解説をします。
記事全体がちょい長いので、ここはご存知の方は読み飛ばしていただいて構いません💨

チーム開発とは(クリックで開閉)

📝 チーム開発とは

チーム開発とは、FBCの終盤で取り組むプラクティス(課題)の1つです。FBC受講生が学習のために普段使っているEラーニング用Webアプリケーションの開発に参加し、自分たちが使っているアプリを自分たちで開発していくという、とてもエキサイティングなプラクティスです。
担当するissueごとにポイントが割り振られており、合計20ptのissueをcloseさせたらプラクティス完了となります。

github.com

good first issueとは(クリックで開閉)

📝 good first issueとは

good first issueとは、その名の通り初めて行うのに適したissueです。
(元々GitHubがissueに付与するためにあらかじめ用意してあるラベルの1つだったようで、FBCにおいてはまずチーム開発の流れに慣れるために、修正内容自体はごく簡単な文字修正やリンク追加などのissueに割り振られているようです)

good first issue: 初回のコントリビューターに適した Issue を示します
デフォルトラベルについて

モブプロとは(クリックで開閉)

📝 モブプロとは

モブプロとはモブプログラミングの略です。

モブプログラミング 【mob programming】
プログラミングをグループの共同作業として行う手法の一つで、3人以上のチームが同じコード編集画面を見ながら作業を進める。一人がコードをタイプする「ドライバー」、残りのメンバーがドライバーへ記述内容を指示する「ナビゲーター」となる。
モブプログラミング(モビング)とは - IT用語辞典 e-Words

<モブプロについての補足>
定義上のモブプロでは「ドライバー」は他メンバーからの指示に従ってコードをタイピングしていきますが、今回はこの定義に沿っていません。
good first issueに取り組むにあたって、僕がissueの内容を読み上げたりどこのコードをどういじるのかを声に出して作業しているところを他の人に見ていただき、何か困ったことがあったらアドバイスをしてもらったり、そうじゃなくても見ている人が何か気づいたことや気になることがあればドンドン声をかけていただく、という形式のものでした。
(なので厳密には「モブプロ」ではないのですが、FBC内ではこのスタイルのことも「モブプロ」と呼んでいる気がします。他のちょうどいい言葉があるといいのになぁ)

🧑🏻‍💻 なぜモブプロでやったのか?

FBCのgood first issueを進めるにあたって、「Good First Issue 攻略」というFBC生向けのドキュメントがあります。
ものすごく丁寧な説明が掲載されたドキュメントで、基本的にはこのドキュメントに沿って進めればgood first issueは問題なくクリアできるのではと思います。

ではなぜわざわざモブプロでやったのかというと、理由は大きく2つあります。

  1. 先輩受講生がやっていて楽しそうだったから
  2. モブプロ・ペアプロの開催が増えてほしいから

1. 先輩受講生がやっていて楽しそうだったから

1つ目の理由はシンプルで、先輩がやっていてなんか楽しそうだったから、ということに尽きます。

上述の「Good First Issue 攻略」というドキュメント内に、先輩受講生がgood first issueでモブプロを呼びかけているDiscord画面のスクリーンショットがありました。これを見てシンプルに「good first issueでモブプロやるの面白そうだな、自分もやってみたいな」と思ったのがモブプロ開催をしたキッカケです。

(「Good First Issue 攻略」内にもチーム開発に参加し、はじめて Issue に着手する際はペアプロ・モブプロを開催するのがおすすめです。サポートしてもらいましょう。と記載されています)

先輩受講生がモブプロ開催を呼びかけているところ

2. モブプロ・ペアプロの開催が増えてほしいから

実は、僕はこれまでも以下のシーンでモブプロやペアプロ等を経験したことがありました。

  • ラクティスで詰まってしまいメンターさんに依頼してペアプロを実施した
  • 勝手にモブプロ」というFBC内のイベントでみんなでワイワイとモブプロした
  • (これはモブプロではないですが)各種輪読会で不定期にドライバーを担当する

メンターさんや受講生の皆さんが温かく見守ってくれるというのが非常に大きいですが、こういった経験から「モブプロは見るのもやるのもめっちゃ役に立つし、なんといっても楽しい!」という印象を持っていました。

また、もっとFBC内でモブプロが開催されて欲しいという想いもあったので、それならまず自分でやってみようということで開催することにしました。

もっとモブプロ開催が増えていくといいなと思っています😄

👣 モブプロ開催までの流れ

モブプロ開催は非常に簡単です。

  1. 日時を決める
  2. 告知する
  3. 開催する

これだけです。

ただ、ビビリの僕は、実は「呼びかけてもボッチだったらどうしよう…」という恐怖心を持っていました😂
それもあって、告知をする前に自分の日報で参加してくれる人がいることを確認した上で開催告知をした、という流れでした。

日報内で参加してくれるとコメントをいただきました。圧倒的感謝…!

めでたくボッチにならないことが確定したので、FBC用のDiscord内で開催告知をしました。

Discord内でモブプロ開催を告知するsugiweの投稿
Discord内での告知。スタンプでの反応が嬉しかったです!

※1回やってみて思うのは、参加者が少なくてもボッチだとしても失うものは何も無いので、今後もっと気軽に開催したいなーとも思っています。(むしろボッチ開催の実績を解除したい)

😸 モブプロをやった感想

普段参加している輪読会後の時間に開催だったということもあり、輪読会に参加しているメンバーの皆がモブプロにも参加してくださいました!
Discord内の輪読会用ボイスチャンネルからモブプロ用チャンネルに一斉に移ってきてくれて、めちゃくちゃ嬉しかったです✨

実はモブプロをするにあたって、「モタついてしまったらどうしよう…」という不安があり、事前にコードの準備まではしていないですがざっくりどんなふうに進めれば良いかをイメトレして臨んでいました。

ちなみにその時のPRは以下です。

github.com

蛇足ですが僕はポッドキャストが大好きなので、ポッドキャストのリンクを追加するというissueを担当させてもらえたのも何気に嬉しかったです😄

🏋️ モブプロ開催で得られたこと

イメトレの甲斐もあり、作業自体はかなりスムーズに進めることができました。

「じゃあモブプロじゃなくても良かったんじゃないのか?」と思われたかもしれませんが、そんなことは無かったです。モブプロに参加してくださった方に、ドキュメントには載っていない色々なアドバイスをもらうこともできました。

  • issueやその他GitHub上で質問するときは、必ずメンションをつけるようにする(使い分けた方がいいかなと思ったりもしましたが、変に遠慮しても気づいてもらえないので遠慮は不要)
  • good first issueはテストが無くても問題ないことが多いけど、基本的には何か修正をしたらテストを追加すべき
  • 複数のissueを同時に進めてデモを行う際、手元でブランチをその都度切り替えると大変なので、複数のブランチをまとめたデモ用ブランチをローカルに作っておくと便利
  • レビューを担当した際、最終的にOKのタイミングでApproveを押さないといけない。(コメントで「OKです」とするだけではApproveしたことににならないので注意)

これらは、チーム開発を進めるにあたって必須とも言えることばかりですが、モブプロをしていなければ知るのが遅くなってしまったのは間違いないので、モブプロ実施によって初めのタイミングでキャッチアップできて本当によかったです。

モブプロ・ペアプロのメリットとして「改めて共有するまでもないコツなどをシェアできる」ということは一般的にもよく挙げられますが、今回このメリットを強く実感しました。

あとはなんといっても、モブプロ自体が楽しいです。PRを出した瞬間にDiscordの拍手機能で祝ってもらえて嬉しかったです😄✨

モブプロやペアプロ、自分ももっとやりたいし、FBC全体でもっと沢山開催されるといいなと思いました。

🔥 終わりに

20ptのissueをcloseさせたら完了となるチーム開発ですが、現状で僕が割り振られているのは9pt分です。まだ半分の手前といったところなのでこれから困難が待ち受けているような気がしますが、今のところは難しさを感じながらも楽しく取り組めています。

FBCで学習をしていくにあたっての最近の自分のテーマは「できることを楽しむ」です。 (そのテーマで1ヶ月ほど前にLT発表もしました!)

speakerdeck.com

引き続き、「楽しむ」を大切にしてFBCでの学習を続けていきたいと思います。

🚀 余談の裏目

最後に余談となりますが、僕はチーム開発で「出来るだけ自分で立てたissueを担当する」という裏目標を掲げています。

(※チーム開発ではメンターさんからissueを割り振ってもらい取り組んでいきますが、issueは誰でも自由に立てることができます)

自分が立てたissueを担当するというのはメリット・デメリット両面あると思いますが、個人的には大きなやりがいを感じています。(毎日自分が使っているアプリで自分が欲しいと思った機能を自分で実装できるなんてサイコーだと思いませんか?)これについてはチーム開発のプラクティスが全て終わってから改めて別記事で書きたいと思っています🚀

📅 明日のアドカレ

ここまで読んでくださりありがとうございました!

明日のフィヨルドブートキャンプのアドベントカレンダー2024は、以下の予定です!

  • Part 1: chihaso さん
  • Part 2: okuramasafumi さん

フィヨルドブートキャンプのアドベントカレンダー2024は始まったばかりです、この後も素敵な記事がたくさんアップされて来ますのでお楽しみに✨

📣 終わりの終わりに宣伝

今回のアドベントカレンダーとは別で、ふと思い立って1人アドベントカレンダーを立ち上げました。宣伝も兼ねつつ、挫折しないよう自分にプレッシャーをかけるためにここでお知らせいたします🚀

内容は「AtCoder過去問(主にA問題)をRubyで1日1問解く」です。さらに、解いてる様子を画面録画しており、その動画をYouTubeに配信したページを毎日掲載していきます。

これは1人でやってるのでモブプロではないのですが、ブツブツ言いながらAtCoderを解く様子を動画で眺めるのはモブプロへの参加者を疑似体験しているとも言える気がするので、もし良かったらたまに覗いていただけると嬉しいです。

adventar.org

お試しの11/30分と初回の12/1分はすでにアップ済みです。(途中、おそらくブラウザの問題でテスト結果が出ず若干グダっております、省エネのため極力編集に手間をかけずやっているのでご容赦ください😂)

www.youtube.com

ブログをWordPressからはてなブログに引っ越した

タイトルの通り、WordPressで構築していたブログをはてなブログに全部移してみた。

友人知人がはてなブログを書いている関係ではてなスターをよく使っているけど、僕のはてなアカウントがはてなスター用みたいになってるので、せっかくならブログもはてなに移してはてなの世界に浸かってみようという気持ちから。

WordPressからエクスポートしてはてなブログにインポート。思ったより簡単にできて驚いた。

古いブログの方はどうすればいいんだっけ、ちょくちょくアクセスもあったり過去記事のURLはSNSなどに残っていたりもするので、すぐ消すのも忍びない。Canonical設定みたいなやつでSEO的に新しいドメイン(=このはてなブログ)にSEOパワーを移せる的な話があったような気がする、全てうろ覚え😂

ドメインの失効が60日後らしく、1年延長するかどうか、悩む…。

あと広告が思ったより目立つので広告を消したい。はてなProか…。

そもそも、毎日の日記は Cosense に書いてるので、はてなブログに何を書くのかというのもまだちゃんと考えていない。 プログラミング関連のまとまった文章などについてはこちらに書いていくのがいいかな〜

【Ruby基礎】AtCoder Beginner Contest 083 A - Libra

■はじめに

Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。 基本的にはAtCoderというプログラミングコンテスト競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)

■問題

●出典

AtCoder Beginner Contest 083のA問題 https://atcoder.jp/contests/abc083/tasks/abc083_a

●問題文

上皿天秤は、左の皿に乗っているおもりの重さの合計を L とし、右の皿に乗っているおもりの重さの合計を R としたとき、 L > R なら左に傾き、L = R なら釣り合い、L < R なら右に傾きます。

高橋君は、上皿天秤の左の皿に重さ A のおもりと重さ B のおもりを、右の皿に重さ C のおもりと重さ D のおもりを置きました。

上皿天秤が左に傾くなら Left を、釣り合うなら Balanced を、右に傾くなら Right を出力してください。

●制約

  • 1≤A,B,C,D≤10
  • 入力はすべて整数である

●入力

入力は以下の形式で標準入力から与えられる。

A B C D

●出力

上皿天秤が左に傾くなら Left を、釣り合うなら Balanced を、右に傾くなら Right を出力せよ。

■回答

●愚直に書く

直感的に宇宙船演算子が使えないかなと思ったけど、まずは愚直に書いていく。

a, b, c, d = gets.split.map(&:to_i)
ab = a + b
cd = c + d

if ab > cd
  puts "Left"
elsif ab == cd
  puts "Balanced"
else
  puts "Right"
end

通った!

●メソッド化して書く

メソッドを作る練習のために、あえてそういう書き方をするコーナー。

今日はスキップ。

リファクタリング/別アプローチ

宇宙船演算子、調べてやってみた。

a, b, c, d = gets.split.map(&:to_i)
answer = ["Balanced", "Left", "Right"]
puts answer[a + b <=> c + d]

通った!うれしい〜!!

●他の方の回答例

上位の方々も、変数に入れないとか色々コードを短くする技は使っているけど宇宙船演算子を使っていた。

●出てきたメソッド等

公式リファレンスを見る訓練。

■振り返りなど

宇宙船演算子を使えて嬉しかった。 直感的に思いつけたのと、実際使うにあたって一回配列に入れてそのインデックスを取るという流れも調べずに思いつけて良かった。

【Ruby基礎】AtCoder Beginner Contest 082 A - Round Up the Mean

■はじめに

Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。 基本的にはAtCoderというプログラミングコンテスト競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)

■問題

●出典

AtCoder Beginner Contest 082のA問題 https://atcoder.jp/contests/abc082/tasks/abc082_a

●問題文

2 つの正整数 a, b が与えられます。 a, b の平均値を x とします。 x の小数点以下を切り上げて得られる整数を出力してください。

●制約

  • a, b は整数である。
  • 1≤a,b≤100

●入力

入力は以下の形式で標準入力から与えられる。

a b

●出力

x の小数点以下を切り上げて得られる整数を出力せよ。

■回答

●愚直に書く

切り上げってのが厄介。 余りを切り上げるメソッドとかあるのかな、それを調べる前にまずは愚直に「aとbを足して奇数だったら1足して、それから2で割る」で答えは出そう。

a, b = gets.split.map(&:to_i)
sum = a + b
puts sum % 2 == 1 ? (sum + 1) / 2 : sum / 2

通った!

●メソッド化して書く

メソッドを作る練習のために、あえてそういう書き方をする。

メインメソッド、計算するメソッド、標準入力を取得するメソッドの3つを作成。

def main
  a, b = read_nums
  puts get_average(a, b)
end

def get_average(a, b)
  sum = a + b
  sum % 2 == 1 ? (sum + 1) / 2 : sum / 2
end

def read_nums
  gets.split.map(&:to_i)
end

main

通った!

リファクタリング/別アプローチ

そもそも余りを切り上げるようなメソッドがあれば一発なので調べる。

ceilメソッドが浮動小数点数を切り上げるらしい、ふむ。 そうすると標準入力で取得した整数を一旦浮動小数に変換してからceilして、最後にまた整数に戻すってこと?それはそれで冗長な気もする…。 あ、違う、ceilすれば浮動小数点数を切り上げた形の整数にしてくれるんだ。

a, b = gets.split.map(&:to_i)
sum = a + b

puts (sum.to_f / 2).ceil

通った!

●他の方の回答例

a, b = gets.split.map(&:to_i)
puts (a+b+1)/2

あ、そうか。。。。整数の割り算は小数点切り捨てられるから、「奇数なら1足して」見たいな場合分けは不要で、単純にsumに1を足して2で割れば求める結果になるじゃん…。ショック!

●出てきたメソッド等

公式リファレンスを見る訓練。

自身と等しいかより大きな整数のうち最小のものを返します。

この日本語がむずくて5分くらい考えてた汗。 1.2の場合、これ自身が少数だから「自身と等しい整数」はなくて、より大きな整数の最小のものってのが2、すなわち繰り上げてるってことね。

■振り返りなど

回り道していてショックだったけど、まぁceilとかを調べられたのでOK。

【Ruby基礎】AtCoder Beginner Contest 081 A - Placing Marbles

■はじめに

Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。 基本的にはAtCoderというプログラミングコンテスト競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)

■問題

●出典

AtCoder Beginner Contest 081のA問題 https://atcoder.jp/contests/abc081/tasks/abc081_a

●問題文

すぬけ君は 1,2,3 の番号がついた 3 つのマスからなるマス目を持っています。 各マスには 01 が書かれており、マス i には si が書かれています。

すぬけ君は 1 が書かれたマスにビー玉を置きます。 ビー玉が置かれるマスがいくつあるか求めてください。

●制約

  • s1,s2,s31 あるいは 0

●入力

入力は以下の形式で標準入力から与えられる。

s1s2s3

●出力

答えを出力せよ。

■回答

●愚直に書く

つまり1がいくつあるかってことだよね?

標準入力の取り方など色々忘れてるな、、、

文字列として取得してcharsメソッドで配列に分解して、それを数字にして足し込めば答えは出そう。

a = gets.chomp.chars
puts a[0].to_i + a[1].to_i + a[2].to_i

通った! しかしこれはあまりに愚直すぎるな、、、

少し調べた。 digitsメソッドで数字を位ごとに分割した配列にできて、それをsumすれば良さそう。

a = gets.to_i.digits.sum
puts a

通った!上のよりはスマートになった、かな?

●メソッド化して書く

メソッドを作る練習のために、あえてそういう書き方をする。 久しぶりなのでやっておくか…!

メインメソッド、計算するメソッド、標準入力を取得するメソッドの3つを作成。

def main
  a = read_num
  puts calculate(a)
end

def calculate(a)
   a.digits.sum
end

def read_num
  gets.to_i
end

main

通った! いつも処理用のメソッドの命名にちょっと悩むな…。

リファクタリング/別アプローチ

上の愚直に書くところで別アプローチを1つ書いていたのでここではスキップ

●他の方の回答例

p gets.sum-154

何これ😂 どうやら文字列をsumしており、unicodeとかそういうのの数値を利用しているのかな…?

p gets.count('1')

あーこれドンピシャのやつじゃないか、文字列の中から任意の文字が何回使われているかを探すメソッド。 これは思いつけるはずなので、思いつきたかった。

●出てきたメソッド等

公式リファレンスを見る訓練。

■振り返りなど

久しぶりで何もかも忘れていたので、引き続きリハビリしていく。 ちょっとしたメソッドなどもまた色々調べて使って思い出していきたい。