投稿

LeetCodeのEasy問題を解いて勉強するSwift Two Sum編

イメージ
LeetCodeのEasy問題を解いて勉強するSwift Two Sum編 新しくSwiftを触ることになりそうなので ひとまずコードを書いてみることにする。 LeetCodeのEasy問題は比較的解き方を知っている(はず)なので、Python3で書いていた部分をどのような書き方に直すのかを色々思い出しつつ試行錯誤していく。 書いている人のレベル感 Swiftビギナー。基本的な文法すらあやふやなので始めて数日レベルと言っても過言ではない。 LeetCode お題が与えられ、その内容に合わせてコードを書き、提出して合ってるかどうかを確認できる。 問題はソフトウェアエンジニアのコーディング面接で出されたお題をそのまま引用していることがほとんど。 次回 LeetCodeのEasy問題を解いて勉強するSwift Valid Palindrome編 Two Sum Two Sum LeetCodeを始めた大多数の人が恐らく一番最初に解くであろう問題。 一番簡単な二重for文で書いた場合。 ただし遅い。 class Solution { func twoSum ( _ nums : [ Int ] , _ target : Int ) - > [ Int ] { for i in 0 . . < nums . count { for j in i + 1 . . < nums . count { if nums [ i ] + nums [ j ] == target { return [ i , j ] } } } return [ ] } } 速度を改良した書き方の場合。 class Solution { func twoSum ( _ nums : [ Int ] , _ target : Int ) - > [ Int ] { var seen = [ Int : Int ] ( )

'Cannot preview in this file -- active scheme does not build this file. 'を解決した話

イメージ
'Cannot preview in this file – active scheme does not build this file. ’ 問題 新しくデスクトップに作ったSwiftUIプロジェクトを触ろうと思ったらこのメッセージが出てプレビューが停止した。 再起動しても現象が直らなかったので改めて原因を調査したので備忘。 原因 プロジェクトをiCloudドライブに保存していたから発生していた。 遥か昔に同じ現象に陥っていた人がおり、 公式のフォーラムに質問 していたので同様の対策を(iCloudドライブに保存されないように)して起動したら問題が解決した。

Python3とWarlus operatorの話。

イメージ
:= ⇦なんか可愛い ぼちぼち遊びで解いてるLeetCode。 374. Guess Number Higher or Lower を解いた後にいい感じの解き方あるかなーってDiscussを流し見していると、 こんな解答があった。 やってることは自分で実装した二分探索と同じことをやっているが、その中の解法でこんな書き方あったなってことでメモがてら残しておく。 ちなみにその書き方はこれ。 while ( res : = guess ( myGuess ) ) != 0 : 名前を知らなかったけどWarlus演算子っていうらしい。セイウチって呼んでた。 :=  ⇦目と牙に見えますよね?だからWarlus(セイウチ)ってことらしいです んで、上のコードのやっていることとしては res = guess ( myGuess ) while res != 0 : と同じで、これを1行で書けるよーってこと。 機能自体は Python3.8 のリリースノートに書いてあったので結構前に使えるようになっていたはずなのですが、そこまで最新機能を追いかけていなかったのでここでメモとして残して勉強したってことで。

一人暮らしだけどPanasonicの「ななめドラム洗濯乾燥機 NA-LX127AL/R」を購入した話。

イメージ
 ドラム式洗濯機の洗濯にあたって。 色々考えたが、タイムイズマネーの考えに則って購入に至りました。 現状洗濯物を突っ込んで回すだけで洗濯が完了するのはこんなにもストレスが少ないことなんだと痛感しています。 ドラム式洗濯機万歳。 背景 一人暮らし男性 ジム通いが日課のため一人暮らしにしては洗濯物が多い めんどくさがり という三点を踏まえて読んでいただければ幸いです。 購入機種 パナソニック ななめドラム洗濯乾燥 12kg 左開き 液体洗剤・おしゃれ着洗剤・柔軟剤 自動投入 マットホワイト NA-LX127AL-W 購入時の判断要素 ヒーター式乾燥か、ヒートポンプ方式か ここは結構重要視していました。比較してみると分かるのですが、回す回数がある程度多いということが予想できたので初期費用が高くとも最終的に電気代が安く済む傾向のあるヒートポンプ方式であることを重視していました。一人暮らしに特化した某SHARPのコンパクトドラムやPanasonicのCubleみたいな機種はヒーター乾燥なのでかなり早い段階で外していました。 自動洗剤投入があるか これは大体上位機種ならついています。 洗濯物を突っ込めばとりあえず回せるというのは個人的に大きな魅力だったので選ぶ際の要素になりました。 買ってみて気付いたけど大容量の洗剤が丸々一つ突っ込めるくらい洗剤タンクが大きい。 入れ替える手間が少なくてとても良い。 メルカリで値崩れしなさそうな機種であるか 最近はメルカリでドラム式洗濯機を買う人も増えているらしく、数年後に売りに出した時にそこそこの値がつくと買い替えの際に購入資金の足しになりそうだなと思ったので調べました。その際にそれぞれのメーカーで数年前の機種がどれくらい値落ちしているかを調べたところ、私の観測範囲の中ではPanasonicの機種は他のメーカーのドラム式洗濯機に比べて値崩れの幅が少なかったです。 導入時の注意点 寸法は正しくチェックしよう。 当然の話なのですが、洗濯機を置くのに十分なスペースがないと置けません。 築年数が古い物件だとドラム式洗濯機を置くことを考慮した設計になっていない事があるため注意しましょう。 注意すべき点としては、奥行き、横幅、設置面から水栓までの高さ・・・だけではありません。 玄関の横幅や、賃貸マンションならばエレベーターが存在するのか、存在する場合には

AirPods Proの装着中に「ブー」というバイブみたいな異音が出る様になったのでApple Storeに持っていった話。

イメージ
  なんかずーっとブーってなり始めた ので。 これは流石に故障か・・・?と思いApple Storeに予約をして持っていってみた。 すると購入した時期によってはそういった不具合がハードウェア側に見られることが多い生産時期があるらしく、無料で交換対象になった。 詳細は ここ にあるが、特定の条件に合致すると対象になるようだ。 今回は両耳のAirPods Proが修理の対象になっていたようで、両方とも変えてもらった上にイヤーピースの替えまで貰ってしまった。 しかし、2年前くらいに買ってからすでに2回も交換しにApple Storeを訪れるハメになっているので、AirPods Proは耐久性が高くないのかもしれない。 それにしてもAppleのサポートを受けにいくと最初に名前を名乗ってくるのだがあれはマニュアルなのだろうか。 サービスの質はいいし、対応も早いと思うので満足はしているが、毎回名乗ってくるのはあまり馴染みがないタイプの接客なので毎回面食らってしまう。 そんな話。

ブログからGoogle Adsenseを削除した話。

イメージ
 削除しました。 多分現時点で既に広告は表示されなくなっているはず。 理由はいくつかありますが、まあ端的に言うと広告を載せた時に見にくくなる割に金にならないなという点から削除しました。 このブログは自分が分からなかったことを備忘録的に書くこともあるのですが、書いたことを思い出すために会社のPCからアクセスしたりすることもあります。 忘れっぽいからしょうがない。 で、ブログにアクセスしました。 直後から広告の嵐ですよ。 正直目的の記事に辿りつくまでにストレスが溜まったので、こりゃやめたほうがいいかなーって思い始めました。 個人端末ならBraveみたいなブラウザとかアドブロック的なものを入れたりすることもできますが、社用のPCとかでわざわざ見に来てくださった人に不快な思いをさせなくても良いだろうと。 後はAdsense単体では正直お金は貰えない。 ここら辺はアクセス数とかの問題があるのでなんとも言えませんが、よっぽどPV数を稼がない限りはそこまで魅力的な金額にはならないです。 そもそも論になりますが、この手のジャンルのブログで収益を上げようとすることが間違いですしね。 ということで削除しました。 あ、代わりにAmazonとか本当に良かったものを紹介するときにアフィリエイト付けます。

BinarySearch(二分探索)を実装するときにPython3とJavaでは書き方が異なる話。

イメージ
二分探索の書き方 なぜこのような書き方をしなければならないのか? 二分探索の書き方 を実装するときにPythonでは中間値の宣言を mid = ( left + right ) // 2 で済みますが、Javaでは以下のような書き方をする必要があります。 mid = left + ( right - left ) / 2 ; ちなみにこれはC++にも当てはまります。 mid = left + ( right - left ) / 2 ; なぜこのような書き方をしなければならないのか? 何故このような書き方をしなければならないかというと、仮に left + right の値が 2^31-1 よりも大きければ、オーバーフローして負の値になるからです。 例えば、Javaでそのような長さの配列が与えられ、読み込んでしまった場合には例外として ArrayIndexOutOfBoundsException が発生します。 C++の場合には不正な書き込みが発生し、メモリ破壊などに繋がることもあります。 Pythonでは整数値にはオーバーフローがなく、オーバーフローを意識するような処理を書かなくても処理を行うため、とてつもなく大きな値でも計算時の精度は落ちません。 二分探索を書くときには気をつけようってことで一応メモを残しておきます。

int[26],int[128],int[256]の話。

イメージ
LeetCodeのLongest Substring Without Repeating Charactersにて LeetCodeのLongest Substring Without Repeating Charactersにて Sliding Windowアルゴリズムを実装している例を写経している時に int [ ] chars = new int [ 26 ] ; という表現を見つけたので何故このような宣言をしているかを調べた。 結果としては単純にアルファベットの数分の領域を確保するために行なっているよう。 他にも int [ ] chars = new int [ 128 ] ; や、 int [ ] chars = new int [ 256 ] ; が存在するが、これらは int[128] は ASCII用、 int[256] は拡張 ASCII用ということだった。 ASCIIは7ビット、拡張ASCIIは8ビットを使用していることを考えれば容易に思いつくはずなのに、調べないと分からなかったので記事にしました。 多分また調べるんだろうなぁ…

JavaのEnumについて

イメージ
この記事を書いた理由 この記事を書いた理由 最近買った Elements of Programming Interviews in Java: The Insiders’ Guide にて以下のようなコードがあったため。 これ自体は書いてあるコメントの通り配列 A と pivotIndex を引数に貰い、最初に pivotIndex より小さな値、その後に pivotIndex と同じ値、その後に pivotIndex よりも大きな値の順に配列を並び替えるというアルゴリズム。 Enum に馴染みが余りなかったため気になって調べた。 列挙型といい、使うと定数を宣言するのに読みやすいコードになるらしい。 そしてその後にちょくちょく登場する ordinal 。これは enum 型から列挙した内容の順番を取り出し、比較に使えるというもの。 定数を列挙できるのは便利なように見えるので使えたら使いたい。 でも使わないんだろうなぁ・・・ そういえばこの本はKindle版で売っていたので買いました。やっぱり電子書籍だと自炊しなくて良いから楽ですね。

数値の配列が与えられた時、配列の最初に偶数が現れるよう並び替える

イメージ
出典 Elements of Programming Interviews in Python: The Insiders’ Guide (English Edition) 問題 数値の入った配列が渡されます。 偶数の値が最初に現れるように配列の値を並べ替えなければしてください。 なお、追加で配列を用意してはなりません。 解法 # List[int] -> None def even_odd ( A ) : next_even , next_odd = 0 , len ( A ) - 1 while next_even < next_odd : if A [ next_even ] % 2 == 0 : next_even += 1 else : A [ next_even ] , A [ next_odd ] = A [ next_odd ] , A [ next_even ] next_odd -= 1 # Time Complexity O(N) # The additional space complexity O(1) 値が2で割り切れる時はイテレーションのインデックスを後ろにずらし、そうでない場合には入れ替え(スワップ)と後ろのインデックスを前にずらすことで比較的容易に実装が出来ます。

姿勢の悪さを改善するべくサンワサプライのキーボードとダイソーの300円マウスを買った

イメージ
仕事の時に余りにも前傾姿勢 すぎたので。 2022年は姿勢を美しくしようということでディスプレイを覗き込まなくても良い環境を作ろうと思いました。 買ったのは サンワサプライ Bluetoothキーボード SKB-BT25BK と ダイソーでたまたま売っていた300円のゲーミングマウス風マウス。 この記事もそれらを使って書いていますが中々快適。 打鍵感もいいし。 やはり外付けモニターのみだと視線が上がって覗き込まなくて良い。 当初は昇降デスクを買いたいなと思っていたけれどもそんなに必要か?という貧乏性からくるお金使いたくない欲が爆発してその案は四散した。 後捨てるのめんどくさそう。偏見かもしれないけど。 次に考えたのがPCスタンド。 でもなんか側から見たらちょっと間抜けに見えるのでボツ。 ということで貧乏性と見栄えを気にして2000円くらいのキーボードと330円のマウスでなんとかしました。 ボーナス入ったらHHKBとか買おうかと思っていたけどそんな欲も消し飛ぶくらいには落ち着いています。なんか不思議。