indexメソッド 9(10min)

今日の1問は簡単だった

だけど、他の人が使っていたindexメソッドが便利そうだった。

自分はeach文にwith_indexなどを付けて使っているがindexメソッドを使えばもっと楽できそうな気がする。

indexメソッド

indexメソッドは引数に渡した文字が配列にある場合そのインデックス番号を返し、 文字列の場合は左から数えた番号を返す。 ただし、始まりは両方0番目から数えらる。

また、文字列でまとまった文字だった場合('ary'とか複数文字からなるもの)、一致した一番早い番号が返される。

p "astrochemistry".index("str")         # => 1
p "regexpindex".index(/e.*x/, 2)        # => 3
p "character".index(?c)                 # => 0

p "foobarfoobar".index("bar", 6)        # => 9
p "foobarfoobar".index("bar", -6)       # => 9
'''

[https://docs.ruby-lang.org/ja/latest/method/String/i/index.html:embed:cite]

AtCoder A - Overall Winner 8

今日の一問は、二人の複数の勝負結果がそれぞれの名前の頭文字で出力されるのでそれをもとに

  • どちらが通算で勝ち越しているか
  • 同数だった場合どちらが先に半数を超えたか

の処理をかいて判断し、多かった方または早かった方を出力するもの。

自分のコードは長くなったので他に言いコードないかなと思いそうさく。

以下の行動が短くまとまっていてよかった。

# frozen_string_literal: true
n = gets.to_i
s = gets.chomp
t = s.count('T')
puts((t > n - t || (t == n - t && s[-1] == 'A')) ? 'T' : 'A')

注目ポイントは「s[-1] == 'A'」ここ。 同数なら、最後に帳尻が合うはずなので最後の文字に注目してる点。 もっと頭を柔らかく考えていこうー

AtCoder 問題 B - Find snuke 7(10min)

 

 

atcoder.jp

一日一問。

基本的に過去問のA、B問題からやっている。

 

でも、今日選んだ問題は難しかったと思う。

正直わからなかった。だから、解説とほかの人の提出済みの答え見て将来、さっさとできるようになれたらいいなくらいの気持ちで、今は継続を主眼に行っている。

 

Find snuke の注目点

この問題の注目すべき点は、起点となる文字から八方向にそれぞれ値をとりに行く方法だ。実際思いつく人はすごいな、と感じた。

 

 

少し気になった睡眠アプリ 6(30min)

偶然昨日にみつけた睡眠アプリを紹介。 アプリの名前は「よひつじの森」。 他のアプリと比べてなぜか目を引かれてスマホに入れてしまった。

どんな所が気になったかや、簡単な機能紹介をしようおもう。 使用日数1日のなんちゃって紹介なので、あしからず。

yohitsuji.com

気になった所

漠然とした理由で本当に申し訳ないが、雰囲気が気になった。 よく見る睡眠アプリといえば、シンプルでスマートなものが多い。 そんな中で、ビジュアルやネーミングが考えられている、 このアプリは睡眠をテーマによく練られているアプリだなと思った次第。

それで個人開発だったらすごいなと思い、クリエイターを調べると何と集英社だった。 少しびっくりしたが納得。

機能

昨日は割とシンプル。

  • 睡眠時間の記録
  • 予定就寝時刻の記録
  • 就寝から起床時間の記録
  • ストーリー
  • 睡眠カレンダー
  • ミッション達成でもらえる睡眠BGM

他にもいくつか機能がある。例えば条件達成で新しい羊が牧場に加わるとか。 気になったら自分でスマホに入れてみてください。 好みはその人次第なので。

個人的にいいなと思ったのはアプリのhomeに表示される 就寝まで時間を表示してくれている機能です。

あと基本利用は無料でした。 正直、課金内容もしなくても良いような感じなので、 良心的だな~と思ったりして。

each_consについて 5(12min)

そういえばそんなのあったな。と思ったeach_consメソッドについて

挙動

each_consメソッドは簡単に言うと、ペアを作るメソッド。 何人組かは引数で指定できる。

コンビの法則は、指定した配列の一つ目の要素から指定引数分後の要素数をまとめてつくる。 言葉より下記の挙動を見た方がわかりやすい。

(1..10).each_cons(3){|v| p v }
# => [1, 2, 3]
#    [2, 3, 4]
#    [3, 4, 5]
#    [4, 5, 6]
#    [5, 6, 7]
#    [6, 7, 8]
#    [7, 8, 9]
#    [8, 9, 10]

似たようで違うメソッド

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/each_cons.html

each_slice 配列の要素を引数で指定した数にまとめて、区切る。 9個の要素があったら、3つの要素を持った配列が三つ返される

参考

docs.ruby-lang.org

rubyのgsubメソッド 4(15min)

まだ、初心者だが遊びでAtCoderを一日一問している。

今日そこで、知っているけどあまり使わなかったgsubメソッドについて

gsub

処理

gsubメソッドは指定した文字列を、特定の文字列に置き換えるメソッド。

引数

p "aaabbb".gsub("a", "A") 
#=> "AAAbbb"

"既存の文字列".gsub("変更したい文字","変更後の文字列")

 ブロック

p 'abcabc'.gsub(/[bc]/) {|s| s.upcase }  
#=> "aBCaBC"
"既存の文字列".gsub("変更したい文字") { |"抽出された文字"| "文字に対する処理" }

以上!

TCPについて 3(12min)

TCPについて

TCPはインターネットを構築る上で必要となるプロトコルの一つ。

プロトコルはメーカーやOSが違うサーバーなどがインターネット通信を行うのに必要な共通言語みたいなもの。

 

TCPは、その数あるプロトコルの中でトランスポート層に属すものでデータ転送を制御する。

 

特徴

データの到着確認

  • データが送信先に到着したか確認し、届いていなけば再送信を行う。
  • 再送信の判断はシーケンス番号を使用し応答確認する。

 

コネクション管理

  • 通信相手との間で通信を始める準備をしてから通信を始める
  • コネクション指向の通信を提供する

コネクション指向の通信のイメージは、相手に電話をする前にLINEで今は都合がいいかメッセージを送って、返事が来てから電話をするイメージ。

 

イメージ

まじめで丁寧に仕事する人。そのためでUDPに比べると仕事の速度は遅いが役割分担がなされている。