Cookpad Daily Ruby Puzzles Extraを解いた

RubyKaigi 2019 Cookpad Daily Ruby Puzzles の正解と解説 - クックパッド開発者ブログ

読んで面白かったので久しぶりにrubyを触ってExtraのパズル解いた。

Extra 1

Hello = "Hello"

# Hint: Stop the recursion.
def Hello
  Hello%() +
    " world"
end

puts Hello()

3-3と同様に()%()にして%記法にする。

リテラル (Ruby 2.6.0)

!の部分には改行を含めた任意の非英数字を使うことができます (%w、%W、%i、%I は区切りに空白、改行を用いるため、!の部分には使うことができません)。 始まりの区切り文字が括弧((',[',{',<')である時には、終りの区切り文字は 対応する括弧になります。括弧を区切り文字にした場合、対応が取れていれば 区切り文字と同じ括弧を要素に含めることができます。

Helloが1行目の宣言の変数に、%()が空文字列になるのはわかるけど、rubyはString並べると結合されんの……? 謎。

Extra 2

s = "Dž"
# Hint: https://techlife.cookpad.com/entry/2018/12/25/110240
s == s.upcase or
  s == s.downcase or puts "Hello world"

タイトルケース、そういうのがあるのか。勉強になります。upcaseでもdowncaseでもない第三のcase。

techlife.cookpad.com

完全に余談ですが、Unicode の大文字・小文字の話題になると、「Dz」という字の話をするのがお作法です。これは D と z の 2 文字ではなく、D と z が合体した 1 つの文字です。こういう文字を、digraph、二重音字と言います。この文字には、大文字・小文字に加え、タイトルケース(先頭の文字だけが大文字)の 3 種類があります。

Extra 3

def say
  s %= 'Small'
  t = 'world'
  puts "#{s} #{t}"
end

TracePoint.new(:line){|tp|
  tp.binding.local_variable_set(:s, 'Hello')
  tp.binding.local_variable_set(:t, 'Ruby')
  tp.disable
}.enable(target: method(:say))

say

結構時間かかった。s = 'Small'の前にTrasePointがs'Hello'をsetするので、s = 'Small'で上書きされそうになるのを、s %= 'Small'にしてやることで、Stringの%を使う自己代入にしてあげる。Stringの%はprintfと同じ規則でのフォーマットで、'Hello'にはフォーマット指定子が含まれないのでフォーマット後文字列は'Hello'のままとなる。合ってる?

もう一個の1文字回答なんなんだろう……。

感想

楽しかった。%が酷使されている気がする。

2019/4/26追記

Extra 3の別解分からないのでカンニングした。

blog.n-z.jp

def say\
  s = 'Small'
  t = 'world'
  puts "#{s} #{t}"
end

TracePoint.new(:line){|tp|
  tp.binding.local_variable_set(:s, 'Hello')
  tp.binding.local_variable_set(:t, 'Ruby')
  tp.disable
}.enable(target: method(:say))

say

\で行を繋げることで、def say s = 'Small'扱いにし、引数s(デフォルト値'Small')にしてあげることで、t = 'world'の行の評価前にsに'Hello'、tに'Ruby'がsetされて、評価後はs = 'Hello'、 t = 'world'になる。

バックスラッシュの行継続、メソッド定義での引数宣言の()が省略できる、引数のデフォルト値が代入と同じ形で表現できるためsayでの呼び出しで引数0でもエラーにならない、の三点。綺麗ですね。

docs.ruby-lang.org

プログラムは式を並べたものです。式と式の間はセミコロ ン(;)または改行で区切ります。ただし、バックスラッシュに続く改行は文 の区切りにならず、次の行へ継続します。

ひかりTVで画面が乱れがちなのをネットワーク構成を見直してなんとかした2

どうした

no6.hatenablog.com

なんとかなったかと思われたひかりTV君だったが、無線LANが不調。

なんで

前回の懸念点どおり、ルータにIPv6マルチキャストは流れているので無線LANでつないでる先は混雑してしまう。

ひかりTVを見ていてはスマホを繋げない。スマホを繋げていてはひかりTVを見ることはできない。

どうした

前回のL2スイッチをMLDSnooping機能付きのものに置き換えて不要なIPv6マルチキャストルーター側に流さないようにしてやる。

f:id:Number6:20190228152342p:plain
ネットワーク構成図

どうなった

無線LANは安定し、ひかりTVも見れるようになった。

懸念点

相変わらずルーターの下にひかりTVチューナー君がいないので、PCTVPlusなどでひかりTVチューナーにアクセスすることは不可能。

改善案1

ルーター - L2スイッチ - APにする。

f:id:Number6:20190228154513p:plain
改善案1

利点

欠点

  • 機器が多すぎる。コンセント何個使うんだよ。

改善案2

v6プラス対応&MLDSnooping機能付きルーターがあれば、解決する。
有識者により適した機器を教えていただいた。

f:id:Number6:20190228154547p:plain
改善案2

利点

欠点

  • それなりのお値段

暫定措置

PCからひかりTVにアクセスしたいときは、一時的にひかりTVチューナーをルーターにつなぐ。
そのままにしておくとやっぱり無線LANが死ぬので終わったら元に戻す。

所感

金が余ってるかネットワーク構成考えるの楽しい人以外にはひかりTVはオススメしない。

遠赤外線デスクヒーターを買った

どうした

デスクトップPCを足元に置いているので、冬になるとファンの風が足元にガンガン当たって寒い。自律神経がやられる。

前職でサーバールームの横に突貫で作られた外注席を思い出す(あれは本当にクソみたいな部屋でサーバールームの空気が足元のパネルの隙間からがんがん漏れていて夏でも人を殺しにかかっていた)足元を守る暖房器具を探していた。

買った

パネルによる防風効果と、遠赤外線による加熱を担う最適解が見つかった。

防風効果は問題なし。ヒーター効果は、じんわりと温かいが、椅子側ががら空きなので当たり前だがこたつほど暖かくはならない。

燃える心配はなさそうなので、なんかで包んであげるといいと思う。

映画見た

映画見た

最近見た

メガマインド

www.amazon.co.jp

メガマインド見た。ヴィランのメガマインドが幼馴染のヒーロー・メトロマンとの何度目かの戦いの最中、ついにメトロマンを殺すことに成功してしまい、対の存在を失ったメガマインドは……という話。

もしスーパーマンが同時に二人地球に来ていたら?もし片方は金持ちの家で育てられ何不自由なく育ち、片方は刑務所で育てられていたら?完全無欠のヒーローと稀代の天才ヴィランになったら?鏡写しのヒーローとヴィランの片方が欠けてしまったら?から始まり、ヴィランとしてヒーローを打倒し全てを手に入れた虚しさとヴィランとして生きていなかったら得られたものへの憧れ、そして反対にヒーローとして生きていては決して手に入れられなかったものを提示し、育ちを振り切ってヒーローへと転身する話。

育ちも適正も周りからの期待も振り切ってなりたいものになれという話に見える。ただ、そうすると冒頭の赤子のメガマインドちゃんへの親の期待は一体なんだったのか……。あれいるか?劇中で「親の期待に背いて自分のなりたいものになったヴィラン」がいるし、最後の着地が親の期待通りの人物に結局はなる=ハッピーエンド、みたいにならん?

ニンジャバットマン

wwws.warnerbros.co.jp


ニンジャバットマン見た。バットマンたちが戦国時代にタイムスリップして大暴れ!な話。

タイムスリップした先でボロ負けして未来の装備もボロボロ打つ手なしのときに、なぜか現地の蝙蝠衆にめちゃくちゃ懐かれて優しくされて(なんか言い伝えのおかげ)、よっしゃ俺この人達と頑張るぞ!と再起してジョーカー殴って帰ってくる話。帰ってくんのかよ。お前の失敗で戦国時代荒らして優しい原住民に触れていい気持ちになって帰ってきてんなブルース・ウェインブルース・ウェイン異世界転移バカンスもの。蝙蝠衆はもっとよく考えて欲しい。出番といい知能といいもん吉以下。一番印象に残った現地人はもん吉。ビジュアル面は良かった。できればゴッサムのバスツアーはよそでやってほしい。

シュガー・ラッシュ

www.disney.co.jp

ディズニーがメスガキブームに火をつけた作品。

スマブラSPを買った

どうした

www.smashbros.com
ニンテンドースイッチソフト、スマブラSPを買った。

f:id:Number6:20181210161317j:plain
2018年では謎のツイッターアカウントによって「ファルコン・ランチの文とともに妙な昼飯の写真をアップロードする人」として認知されているキャプテン・ファルコンさん

アドベンチャーモード

購入した直後にやることといえば、まずは使用キャラクターを全部開放することだ。70人いる。70人て…。
広大なマップに点在する敵シンボルに接触し、様々なルールでバトルを行っていく。この土日を費やして24時間弱かけて一周クリアした。ボリュームがすごい。

よい点
  • 見立てファイター
    • プレイアブルキャラクターとして参戦していないキャラクターが参戦キャラクターの体を借りて立ちはだかる。ロックマンの体を借りたウッドマンはリーフシールドばっかりしてくるなどの分かりやすいのから、ちょっとひねって見立ててくるのまで。ひねったやつは元ネタがわかるとちょっとうれしい。
  • 再現マップ
    • 他のゲームそのものなマップがある。元ネタがわかるとちょっとうれしい。
  • スピリットの構築
    • 無理難題がたまに出てくるが、スピリットと呼ばれるサポートキャラクターによる能力付け替えでメタを貼れる。ちょっとしたデッキ構築要素があって息抜きにいい。
よくない点
  • マップ移動がよくない。
    • 方向キーをいれつづけると道なりに歩いていくタイプだが、道の途中で止まる必要があるのは迷いの森の隠された通路を探すときぐらいなもので、大体のマップでは不要だ。後回しにした敵を探してまわるときにだるい。

今後

オンライン対戦の海原に漕ぎ出す。
プロコン(スプラトゥーン2モデル)のAボタンがヘタれてきたのでなんとかしないといけない。

追記

サードパーティー製の有線コントローラ買いました。使用感は違和感ないです。

f:id:Number6:20181213133615j:plain
アドベンチャー一周クリア記念画像

Marvel’s Spider-Man (PS4)

https://www.jp.playstation.com/games/marvels-spider-man/

最近アメコミ作品を読んでいて、ちょうど新作のゲーム出るみたいだから買おうぜ!となったので買った。

f:id:Number6:20180910141341j:plain
たむろっていた悪党をまとめておくスパイダーマン

f:id:Number6:20180910141438j:plain
強盗を無事撃退 店はメチャクチャ

f:id:Number6:20180910141511j:plain
やっほートニー・スターク見てるー?

f:id:Number6:20180910141526j:plain
ハロウィンパーティーでコスプレの人と

f:id:Number6:20180910141550j:plain
ハロウィンパーティーでコスプレ?の人と

f:id:Number6:20180910141616j:plain
ゲーム内でツイッターやってる人 事件を解決すると市民の声が更新されたり全然スパイダーマンと関係ないツイートも流れる

f:id:Number6:20180910141732j:plain
オットー・オクタビアス博士は義手の研究をしていて、世界中の人の為になる仕事をしているんだ ピーターはその助手!(カメラのフラッシュを焚き忘れる助手)

amzn.to

筑波山に行った

どうした

筑波山に行った。
goo.gl
しばらく山に行っていなかったので復帰戦として行こうぜという話が立ち上がったので行った。2018年の夏はイカれた記録的猛暑で、こんなとこで2020年の東京オリンピックやんの?正気?というのが世間で話題であり、サマータイムでなんとかしようぜとか泥棒捉えて縄を綯うような話が流れていくような季節だった。夏の低山は暑い・ハチがいる・暑いの三拍子揃った死の土地であるが、我々には関係ない。俺たちはとにかく山に登りたいのだ。

準備

夏の低山に行くことにしたわけだが、登山は天候に左右されるのでふたつのプランを用意した。大山(神奈川県)と筑波山(茨城県)である。幸いなことに予定日はどちらも良い天気に恵まれ、どっちでもいいなということになったのでつくばエクスプレスに乗れる筑波山へと向かうことになった。イカれた暑さは引いて、湿度の低い秋晴れ。絶好の登山日和となっていた。
久しぶりすぎて何を持っていけばいいのかはあやふやだった。ザック、水、登山靴はある。ハチが出るというので虫除けスプレーとムヒEXを持った。筑波山の山頂近くには茶屋がたくさんあるので昼飯は持っていく必要はないだろう。道中のハンガーノック対策に行動食に羊羹を持った。ストックはいらないだろう。服は…よくわからなかったので適当にシャツを着た。朝六時ごろに起きて、中央線に乗って秋葉原駅へと向かった。

行き

秋葉原駅で友人らと合流し、つくばエクスプレスに乗った。つくばエクスプレスは大体地下だった。日よけをあげてみたが、暗い中を走っているだけで見るものはなかった。みなで職場の話などをしつつ電車に揺られていると、さっと光がさした。電車は途中から外を走るようで、窓の外にはのどかな風景が広がっていた。利根川を渡り、筑波山が見えてきた。結構大きい。あれに登るのかとわざわざ疲れに行く自分を少し呪った。
地下のつくば駅から改札を出て地上に出て、筑波山へのシャトルバスへと乗った。無事座れた。

のぼり

https://goo.gl/maps/3RApT3GAkfF2
シャトルバスは筑波神社入口についた。大きな鳥居からスタートし、筑波神社に道中の無事をお祈りしてから白雲橋コースへと入る。麓の土産物屋を見ると、筑波山ガマの油売りの本場らしくガマ推しが強い。登山道入口は細く、途中からは岩場をよじ登る形になる箇所もあった。いろいろ崩れて段差が結構大きいところもある。上の方には大きい岩に名前をつけて名所にしてあるところがあった。何がパワースポットじゃ。発電してから言ってくれ。こっちは疲れてんだよ。

女体山山頂

高い。景色はいいが、一望できる岩の上は人で混んでいた。

男体山山頂

足の痛みを訴えながら男体山の方へと移動。こちらの山頂はあまり見晴らしがよくなかった。天候観測所が残っていて雰囲気があってよかった。

御幸ヶ原

ケーブルカー駅と展望台、茶屋がある開けた場所。昼食を取った。友人は名物つくばうどんを頼み、私はカレーライスを頼んだ。カレーライスはいい。業務用の味に外れはない。ちなみにつくばうどんは美味しかったそうな。俺もつくばうどんにすればよかった。

くだり

足が痛かったので諦めてケーブルカー使おうぜ!と主張していたが休憩したら治ったのでそのままくだることにした。御幸ヶ原コースを行く。ストックを持ってこなかった慢心を悔いながら降りた。道中何度もモアイ先生がハチにたかられていたが、原因は私の虫除けスプレーが香料つきだったようで面白かった。(笑い事ちゃうねんぞ)

帰り

筑波山温泉 つくば湯
降りてつくば湯で一休みし、つくば湯から出るバスで筑波神社入口バス停まで戻る。そこからシャトルバスでつくば駅へと戻った。帰りのバスは寝たので一瞬だった。せっかくなのでつくば駅周辺で名物の豚を食べようということになり、とんかつ屋を探してとんかつを食べた。
tabelog.com
最初はとんQつくば本店を目指していたが、混んでいたのでこちらのお店へ。実家のような安心感のある店舗で、とにかくとんかつがうまかった。キャベツもうまかったし、パセリもうまかった。レモンもうまいのはよくわからなかったが、レモンもうまかった。絶対オススメ。
その後はお土産に駅前でベーコン買って帰った。帰りの電車でも寝た。