White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

ノートPCの選定基準

人によってこの辺の感性や、こだわりポイントは違うと思うので、ほかの人のPC選定基準も聞いてみたいと思いました。

https://inajob.hatenablog.jp/entry/new-note-pc

と書いてあるので、自分の基準を書いてみる。

  1. PC閉じてる時に充電池として使えること
  2. ~1.4kg
  3. iPS 1400x900~
  4. メモリ8GB~(VMやDocker使うなら16GB~)
  5. SSD 256GB~
  6. CPUはCore i5くらい

まず前提として、自分は色んなとこに持ち運んで使うので、軽い必要がある。更にスマホの充電に使うこともあるので、PC閉じててもUSB給電できる能力は必要。今は10000mAhのモバイルバッテリーとか安価に手に入るので、無くても良くなってきたけど。

画面サイズは1400x900(前のMacBookAir)くらいは人権。つまり巷でビジネス用に売られているHDサイズは論外。

メモリはVM Docker使わずにタブをそんなに開かなければ8GBでもなんとかなる。尤もメインで使ってるマシンはタブを30個とか開いているけど・・(13GB消費)。8GB未満とか、8GBでVM動かせとかはOS動かすのに負荷かかるので無理。え?4GBで32bitマシン?捨ててきなさい。

ストレージはVM貯めなければ192GBくらいでもなんとかなる。128GBは流石に今はきついかなぁ。

6に関して、軽量ノートのCPUは後で変えられないので、下手に低すぎると耐用年数的に却って損をする。

2と3の8GB/256GBだと10万切るモデルがちらほらあるけど、小型/16GB/512GBとかなると途端に値段が上がる。

 

んで自分の使ってるマシンはこんな感じ。

OSは、WindowsもWSLとか揃ってきたしいいかなぁと気もしなくもないけど、やっぱり手元でTerminal使いたい・・新しいWindowsのTerminalに期待かな。

 

いろいろ経緯があってX1 Carbonをサブで使っているけど、中古でLet's note NX2あたりにメモリSSD増設するくらいでもいいかもしれない。サブは給電能力期待してないし。

 

あ、Touch Barはお帰り下さい。

AtCoder Beginner Contest 131(ABC131)に参加しました

この日記も久々ですね。

ここ二ヶ月ABCも何回かは参加してたんですがなかなか振るわなかったり、サブ日記にある通りライブとか行ってたり*1してたんで、書いてませんでした。

 

今回のは3個解けたので、感想でも書いておきます。

A: S[0] == S[1] or S[1] == S[2] or S[2] == S[3]

B: 絶対値が最小の値を見つけて、全体の和からその値を引く(ちなみにprint文貼り付け忘れて1ペナ食らった)

D: 締切が近い方から片付ければいいと考え、締切時刻でソートして小さい順に取り出し、時刻が締め切りをオーバーしなければ成功としました。逆にこれで通らなかったらお手上げでしたね。

https://atcoder.jp/contests/abc131/submissions/6063588

 

C: 最初見て、愚直に値並べてC,Dで削っていっても時間間に合わないと感じたので、先にFまで見てFを解けるか試していました。結果的にCちょっと考えてた方がよかったですね。

解説にある通りなんですが、B-(A-1) - ( B // C + B // D - B//( (C*D)//gcd(C, D) ) - ((A-1) // C + (A-1) // D - (A-1)//( (C*D)//gcd(C, D) ) ) )が答えです。AtCoderはPython3.4系なのでfrom fractions import gcdしないと動きません。

https://atcoder.jp/contests/abc131/submissions/6081751

E, Fは全く歯が立ってないですね。もう少しグラフとかさらっと書けないといけません。

 

*1:6月は6回くらい行ってる

LeetCode weekly contest 133に参加しました

ちょっとAtCoderの方が伸び悩んだり、変なのが湧いたりしてモチベが下がったので、一旦LeetCodeというのに手をつけてみました。

(あとでtenka1の問題は解くつもりです)

AtCoderとの違い

  • これが一番大きいと思います。標準入力を読み取って回答を標準出力に出すのではなく、特定の関数が用意されて、それに合わせて適切な戻り値を返す形になります。Pythonで解く場合、関数の変数にintやList[str]など型ヒントがつくので推測は出来るかと思います
  • 問題が英語です(中国語もある?)。ただ例も結構書かれているし、GCJなんかに比べるとはるかに読みやすいです
  • 過去に開催されたコンテストを、一定の時間で解くVirtual Contestなんてのもあります
  • 過去の問題でも、回答すると進捗(Progress)には反映されます
  • 実際のコンテストに参加すると、参加賞として5コインは貰えるようです。それとは別にレーティングもあります

実際にコンテスト参加してみて

4問出題、1時間半で回答。で1問だけ解けました。問題の難易度はEasy, Easy, Medium, Hardの順だったのですが、2問目の方が3問目より難しかった気がします。先に3問目解いてたら解けたのかもしれません(が後述の問題あり)

1030Matrix Cells in Distance Order(Easy)

全てのセルを、あるセルから近い順に列挙する問題です。

leetcode1030

添付したgistの、上の様な形式で 問題が出され、下のように回答しました。->AC(15分)

問題文に「マンハッタン距離で」ということと、マンハッタン距離の定義自体書かれているので素直にソートすればいいだけなんですが、動作確認とかどうでもいいとこで時間かかりすぎっすね。 

1029Two City Scheduling(Easy)

2問目なのに問題番号が1番目より小さいのは仕様です。

2N人いてそれぞれ2つの都市に行くコストが与えられるので、コストが最小になるようにN人ずつ振り分けろという問題です。

一見単純そうにみえて、結構きつい問題でした。片方の都市に行くコストが小さい順にN人選んでもダメなんですよね。@naoya_tせんせーはDP使って解いてたようですが、本当にEasyなのか?

1031Maximum Sum of Two Non-Overlapping Subarrays

ある数列Aが与えられて、L個とM個を被らないように選び(どっちが左という決まりはない)、和を最大化させる問題です。

累積和の問題なので解いていけばいいです。が、自分のとこだと累積和自体がうまく計算できてないです。課題です。

1032Stream of Characters

時間内にたどり着けなかったのでよく読んでないですが、1文字ずつ与えて、それがある文字列に一致したらTrueを返せばいいんですかね?過去のクエリ文字を記憶して、それと一致かけないとダメな気がします。

 

まとめ

LeetCodeに参加してみました。AtCoderやってる人なら出来るんじゃないかなと思います。回答用に関数作るのはちと面倒。

 

 

「Coinhive事件裁判費用」に寄付しました #JHA_Coinhive

www.hacker.or.jp

表題のとおりです。宛先間違えてなければ明日送金されるはずです。(協会名、にほんなのかにっぽんなのかわからないですね)

 

個人的にはCoinhive

  • 告知して使わせるのはOK
  • 告知なしに走らせるのはOUT

と思っています。

 

とはいえ、既に辞めていたこと、対して稼いでいないこと(額の大小が問題ではないのかもしれませんが)等踏まえても 、せいぜい口頭で注意する程度なんじゃないかと思っています。逮捕して取り調べうけてPC差し押さえられて消されるのは酷いよね。

 

というか警察さんはこんなことよりドメイン乗っ取ったりする方をとっ捕まえてほしいです(これは手順が正規っぽいので逮捕難しそうですが)

 

 

あと地裁の判決で、「広告と同じようなものだからOK」とかいう判決が出てましたが、それはちょっと違うんじゃないかなと思いました。(特に興味のない)広告はうざいんで出来れば無くなって欲しいです、広告無いと困るビジネスはそろそろビジネスモデル変えたほうがいいです。

だいぶ前の話ですが、確かサラ金が手法に問題があってWeb広告を取りやめるって話になった時に、「サラ金はWeb広告の多くを占めてるから、無くなるとWebポータルがやって行けなくなる」と語った検索エンジン屋の人がいて、ああク◯だなとか思ったこともあります(誰とはいいませんが今VTuberやってる人です)。

 

---

 

ところでだいぶ前に勤めていた会社で、ちょっと違うんですが困ったことになったことがありまして。一言で言うと「ブラウザのURLを手で書き換えて接続したら、始末書を書かされそうになった」ということなのですが。

 

もうそろそろ時効かと思うんで、もうちょっと細かく書きます。

とある(表に出てない)システムでうまく表示がされないという問い合わせを同期から受けまして、その同期と同じURLでつなごうとしました。

そのシステムがユーザIDをgetパラメータで渡していたため、URLを書き換えたらもしかして他の人の見れるのでは?という気がして変えました。しかし何も表示されないので、別の情報も見て対策されてるのか、まあ当然だよねって感じでブラウザ閉じたんです。

そしたら後で、DB破損されてることが発覚し、アクセスログから自分がURL変えて繋いだことが原因だということもわかりました。そのシステム作った人の上司からは「なんでシステムがおかしいと思った時に報告しなかったんだ」とか「なんでこんなことしたんだ」とか問い詰められ、挙げ句の果てに「始末書書け」って言われました。

(いや、自分の見た目からだと正常に空のページが返ってきたとしか思えないし・・)とか(いやブラウザのURL書き換えただけなんだが・・そもそも同期からの依頼で調査してたわけだし)とか思ったりして、精神的苦痛を受けました。

こういったのってなんとかならないんですかねぇ。

AtCoder Beginner Contest 124(ABC124)に参加しました

前に用事があって遅れたのに、Cが早解き問題でした。そしてAをスマホから提出したら改行されてなくて一回RE食らいました。お通夜モードです。

A:

AとBの方大きい側をピックアップして足して、1引いて、もう一回AとBの大きい方を足す。

https://atcoder.jp/contests/abc124/submissions/4947013

B:

順番にH_i > H_j(jは1~i-1まで)を満たすか判定すればいいです。

https://atcoder.jp/contests/abc124/submissions/4950397

C:

最初に反転しないで2つ目以降一致したら反転するのと、最初から反転させるのの2通りの判定を試す必要があります。

今回なぜかintの値が等しい物同士の比較が不一致になることがあったりして、int関数かけたりしたせいで、問題の割に時間食いました・・何が違ったんだろう?

https://atcoder.jp/contests/abc124/submissions/4953203

D:

1の塊と0の塊に分けて木でも作って、順番に最適なのを取っていく方法を考えましたが、WAとTLE起こしました。そもそも塊見なくて、0->1と1->0に変化するとこ見てればいいんですね。

ただ解説見て実装しても通らないです。。

これが分かりやすそうなので参考にしてみます。

 https://atcoder.jp/contests/abc124/submissions/4964740 

Google Code Jam 2019 - Round 1aに参加しました

結果は1問目だけSmall解けて4191位。ボーダーは1問目Small+3問目Largeを2時間で解くことなんで遠いですね。

 

1問目

RxCのマスを一定の条件の下、全部移動するという問題。

全探索しました。少なくともメモ化するなり、もっと効率の良い方法があるでしょうね。

Smallだけ通過。

gistce682390114b6ed68ce929cef1285093

 

2問目

問題が意味不明だったのでパス。

3問目

恐らく後ろから数文字が一致する組み合わせを、文字毎に区別してカウントするという問題のはずですが・・サンプルは通りましたがWAでした。

一個気づいたのは、

PA
KA
PI
QI

みたいな物が出された場合、

  • Aで韻を踏んでるからPAとKA
  • Iで韻を踏んでるからPIとQI

の4つは取れますよねぇ。このケースはサンプルに無いんで分かりづらいです。

あと何が不足してるんだろう?まあどちらにせよメモ化とかしないとLarge無理ですが。

gista4b13cd8fc9a0939fd1c6e2b1611dbff

Google Code Jam 2019 - Qualification Roundに参加しました

naoya_tさんがカラオケボックスで行うと聞いたので、参加しました。Qualification Roundは他の人との相談OKでした。

結果はAとBが全部通って41ptで通過です。

A

各桁を順番に見ていって、4だったらAのその桁の1を立てるってことをしました。例えば4桁目が4だったらAに+10^4するとか。

毎回N - Aに4の文字が含まれるか見てました。しかし後々考えたら4の時に10^桁増やすので、上位の桁の値が減ることないですね。チェックする数値が0とかならまた変わってきそうですが。

あと毎回数値を10で割って桁数確認してたのですが、最初に桁数数えといてそれだけループ回せばよかったですね。

・・等等いろいろひどいのですが、こんなのでも10^100通りました。Python3のintしゅごい。

gist8ca90e38ae148ccd51e1c8beee4fc837

B

スタートとゴールを結んだ線に対して線対称、もっと言えばSとEを交換すれば完了(・・という助言を頂きました。ただただ感謝)

gist978874d8cb7f5eecb5cf62946e603503

C

まずLarge無視して2つの素数の全探索を行おうと思ったのですが、手元で動いてSampleも通ったのに、本編ではRuntime Errorが出て動きませんでした。Python3.4.3, Python 3.5.1で動作確認済みです。なぜだ・・

REエラーで通らなかった

ABCもあったので途中で断念しました。