AtCoder Beginner Contest 110(ABC110)に参加しました
A,B,C完。Dは約数いちいち出してたらダメなのはわかりましたが・・?
A:
2桁 + 1桁の足し算の形になるので、2桁の数値の10の位に一番大きい値を持ってくればよし。
pythonのリストにA, B, Cを格納して、最大の要素をdeleteする形で取り除きました。
https://beta.atcoder.jp/contests/abc110/submissions/3251160
B:
首都も含めたx(とX)の最大値が y(とY)の最小値より少なればOK
・・ということに今更気づきました。
解いたときは愚直にx(とX), y(とY)を全部回して大小比較してました。
https://beta.atcoder.jp/contests/abc110/submissions/3253074
C:
アルファベットの種類を無視して頻度が一緒なら成立します。
なので各文字毎にdefaultdictで個数を数え、valuesだけ取りだしソートして一致判定をしました。
https://beta.atcoder.jp/contests/abc110/submissions/3254915
D:
バカ正直に約数を取りに行ったら、サンプルの段階でTLEしてました。
おそらく素因数分解を使うのでしょうが・・
python/scikit-learnのperceptronを使ってみた
上の本を読んでいたらperceptronの紹介があったので、手元で動かしてみた。
(5, 1), (1, 5)と中心を離して正規分布を生成してるので、100%分類できるだろうと思ったら一個だけハズレが出た。残念。
参考:
Numpyのndarrayとmatrixでは*の結果が異なる
(この記事はQiitaからの転載になります。)
すごい初歩的な話なんですが・・
In [1]: import numpy as np In [2]: H = np.matrix([[1, 2], [3, 4]]) In [3]: H * H Out[3]: matrix([[ 7, 10], [15, 22]]) In [4]: J = np.array([[1, 2], [3, 4]]) In [5]: J * J Out[5]: array([[ 1, 4], [ 9, 16]])
という感じに、np.matrixの*は行列の掛け算であるのに対し、np.arrayは要素毎の積(アダマール積)になってるんですね。np.arrayの方もnp.dotを使えば行列の掛け算になります。
In [6]: np.dot(J, J) Out[6]: array([[ 7, 10], [15, 22]])
np.powerっていう関数もあるんですが、これは単に要素毎のべき乗を取ってるようで、
In [8]: np.power(J, 2) Out[8]: array([[ 1, 4], [ 9, 16]]) In [9]: np.power(H, 2) Out[9]: matrix([[ 1, 4], [ 9, 16]])
とどちらも同じ結果になるのですが、行列のべき乗は関数ないんでしょうか? x >= 1 なら、
def matpow(A, x): B = A for _ in range(x - 1): B = np.dot(B, A) return B
In [14]: matpow(J, 2) Out[14]: array([[ 7, 10], [15, 22]])
で行ける感じもするんですが、ndarray用に作ってるのにmatとか付けるのがイケてなかったり、0乗や逆行列はどうすんだって問題もあります。
ちなみに ** 演算子はnp.matrixではnp.powerと違う挙動をします。
In [13]: H ** 2 Out[13]: matrix([[ 7, 10], [15, 22]])
皆さんどうしてるんでしょうか?
これに対するコメント
numpy.matrixは使わない
ベクトルも明示的に行列(1行n列、もしくは、n行1列)として定義する
+、*、@を使う
AtCoder Beginner Contest 109(ABC109)に参加しました
C問題何回か間違えたけど解けた!
A:
Aが偶数もしくはBが偶数ならばCは必ず偶数になる。AもBも奇数ならCに奇数を選んで奇数にできる。
https://beta.atcoder.jp/contests/abc109/submissions/3152172
B:
i番目のW, W_iが過去のsetに含まれていない、かつW_iの最後の文字がW_i+1の先頭の文字と同じ場合はYes。そうでなければNo。最初dict.has_key()とか使おうと思ったけどpython3.4には無かった?(inが使えた。そもそもdictである必要すらなかった)
https://beta.atcoder.jp/contests/abc109/submissions/3154570
C:
最初は|X - x_i|の最小値が正解かと思ったけど、
1 4
1 7 11
みたいな時に成り立たないことがわかった。
それじゃあ最小公倍数かと思ってmath.gcd()を使ったのだけど、REが出てしまった。少し悩んだ結果、gcdは3.4までfractionモジュールの中にあるって事がわかり、手元のpython3.6環境と違うので自前でgcdを用意したら通った。
https://beta.atcoder.jp/contests/abc109/submissions/3159180
D:
問題の意味はわかったけど解き方がわからなかった。一筆書きでよかったのん(解説みながら)
【読了】エンジニアの知的生産術
エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB+DB PRESS plusシリーズ)
- 作者: 西尾泰和
- 出版社/メーカー: 技術評論社
- 発売日: 2018/08/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
一回読み終えた。
軽い感想としては"土台となる部分は提供するから、あとは自分で考えてね"って感じか。印象に残った部分としては調査(種まき)・抽象化、パターン化(発芽)・検証(促進)のサイクルとか、タスクを達成可能なレベルまでに落とす、GTD(まず頭の中にあるもの全部書きだして、そこから優先度をつける)、KJ法、あたりか。()内間違ってるかも。参考文献の紹介の仕方は丁寧。
ただ今の自分にすぐ適応できるかっていうと、そこまでの気力は・・って感じ。
一般的な自己啓発っぽさは無いんで読んで損は無いと思う。
少し(が数時間後か数日後か不明だけど)後になったらまた読み返してみる。
「エンジニアの知的生産術」を買った(2)
昨日買った「エンジニアの知的生産術」を6章途中まで読んだので、軽く感想+メモ。
エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB+DB PRESS plusシリーズ)
- 作者: 西尾泰和
- 出版社/メーカー: 技術評論社
- 発売日: 2018/08/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
まず4章では読むことに焦点を当てている。情報をみつけることと理解を組み立てることについて述べている。速く読むことと遅く読む場合の違いについても述べている。くり返し読むことと出力することは必要。自分は読んで気になった部分をメモしているが、この方法は役に立たないようだ。残念。
次に5章。これはそのままの引用になるけど、”考えがまとまらないという悩みを解決するために、まず書き出して十分な情報があるかを確認し、それから書き出したものを机の上で物理的にまとめていく方法を学びました”とある。具体的にはまず付箋に何でもいいから書いていってあとでKJ法でまとめ上げていく感じか。うちだとふせんを並べるのは場所的につらそう。モニタも24インチと小さいし・・まずはMac上で動くふせんアプリを探したほうがいいかな?
そして6章(途中)。アイデアの思いつくために有用な方法について、4つの方法が示されている。さらに情報収集の方法として言語化されていないものを言語化されたものに変換することを提案している。(次に磨き上げる方法について述べているがそれはまた後日)
今回読む時間を25分程度に区切り集中し、読んだページ数/時間で計測してみた。大体0.4ページ~0.7ページ/minでかなり遅いと思われる。しかもこれで余り頭に入ってないから残念な感じだ。夜間はTwitterのTLが画面横に並んでいてたまに目につくのが遅れる要因になるのだけど、それらがない昼間でも0.5ページ/min程度なので。1ページ3分の音読よりは少し早いか。
あとこの本に限ったことじゃないけど、"モデル"って単語の意味がわからなくなってきた・・誰か説明頼む。プラモデルもモデルだし、データサイエンスの分野でもモデリングって言葉もあるし。
以降メモ。
4章
本を読むことの目的。娯楽、情報を見つけること。理解を組み立てること
"本から得た材料と自分の経験などを組み合わせて構造化していく「理解を組み立てる」イメージのことを忘れてはいけない"
"読んでいない本について堂々と語る" 歴史の文脈で位置づけを知る。人から聞く。ざっと読む。
"4回読んでいます"
"「準備の大事さ」「段階的詳細化」「繰り返し読むこと」"
"「調査」では、表紙や裏表紙、目次などから情報収集をします。「キーワード探し」は、本を20ページごとに開いて、目に付いたキーワードをメモします。"
"質問を作る" "再度5〜15分程度、本を読みます" "文章を大きな塊ごとにざっと見て、必要そうだと思ったところを2〜3文だけつまみ食いする読み方です。""質問を作ることに集中します。"
"マインドマップを作る"
"読んだ本のページ数、かかった時間、主観的な理解度を記録す
ることで自分の理解力を把握し、得たい理解度に合わせて入力の速度をコ
ントロールする"
"適切なバランスがわからなければ速い側に倒すとよいでしょう"
"見出しへの注目"
"書籍のタイトルやサブタイトルは、私は信用していません"
"図は注目に値します。"
"箇条書きも注目に値する"
"、「読みたいときに」「読みたいところから読む」の原則をしっかり守れ""本3冊に目を通す」と設定するなら、努力によって達成可能になります"
"時間を区切ってふせんに抜き書きを作る"
"一番のお勧めは復習のための教材を作ることを目的とすること"
"間隔を開けてくり返し読むことが重要"
5章 考えをまとめるには
"まずは5分間、レポートで言及するとよさそうな情報を思い付く限り書き出してみましょう"
"関係ありそうな情報を全部書き出します"
"質を求めてはいけない"
"100枚書く"
"多すぎる情報をどうまとめるか""並べて一覧性を高くする""関係のありそうなものを近くに移動"
"KJ法"
"グループ編成は主観的なものなのです"
分類はしない。
関係がありそうなものを集める。類似だけじゃなくて対立、包含、時間変化、因果も関係。
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
“束ねたふせんをまた広げる””文章化してアウトプットする”
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
“A4 の紙に貼っています”
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
外山滋比古繋がりで「思考の整理学」を久々に読みたくなった。あれどこ行ったかにゃー。
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
今更だけど細かく見出しが設定されてるのはプログラミングみたいでいいですね
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
“育てるフェーズ”“有用であるかどうかを実験によって検証し、修正していくことが必要”
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
川喜田二郎のW型問題解決モデル、そのまんまデータサイエンティストのビジネス寄り課題解決に使えるんじゃ・・
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
“芽生えは管理できない””耕すフェーズで仮の不完全なアイデアでもすべて記録して おき、予定期間内にアイデアが芽生えなかった場合はその不完全なアイデ アで育てるフェーズに進むように計画しましょう”
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
“自分を一人のインタビュー対象として尊重し、主観的にどう思 っているのかをきちんと聞いてあげる必要があります。”
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
U理論はなんかしっくり来なかったのであとでまた読み返す
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
s/U理論/U曲線
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
“創造は主観的”
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
“違和感と暗黙知”
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
“Thinking At the Edge(TAE)は、まだうまく言葉にできていない、しか し重要だと感じるものを言語化させる方法論です注 39。違和感に注目して言 語化を進めていくのが TAE の興味深い特徴です”
— しょうゆ@4thday2参加 (@shsub) September 5, 2018
「エンジニアの知的生産術」を買った
昨日電子版を買って、3章まで読んだ。
エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB+DB PRESS plusシリーズ)
- 作者: 西尾泰和
- 出版社/メーカー: 技術評論社
- 発売日: 2018/08/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
1章では情報収集・モデル化・検証の学びのサイクルについて書かれていて、2章ではやる気が出ない状態をどうやって解決するかについて書かれている。また3章では脳の記憶について書かれていて、さらに繰り返すことが必要、繰り返すのもテストを行ったほうがよいと書かれている。
ちょっと最近の自分は乱雑に情報を眺めることとが多く、具体的な成果も上げられていない(ちょこっとatcoderをやってたりはするが)ので、この本を読んでなんか足しにできるようにする。現状検証やアウトプットが足りていないと思う(ので、こうやってブログに書くことでアウトプットしている)
本の内容としては別に"エンジニアの"とつけなくてもいい感じはあるが、いきなりPythonの話が出てきたりするのでエンジニア向きではあると思う。あと3章でいきなり脳の構造に行くのは話が飛びすぎ、とも思った。ただ自分が現状抱えているもやもや感を解消する助けにはなりそうだと思っている。
以下読んだときのメモ。
“それを学ぶことは諦めて、よりやる気の出ることに気持ちを切り替えたほ うがよいです。”ほう
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
“SMART criteria 組織の目標設定を想定して作られた基準なので、個人が(ry)オーバースペックです”
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
”目標が明確化されている””目標が達成可能である””大まかに全体像を把握している”
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
“内部構造を解説したドキュメントがあればそれを読む ディレクトリ構造を読む ファイル構成を読む 略語を調査する データ構造を知る 関数どうしの呼び出し関係を把握する 関数を読む”
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
“25 分間で章見出しとキーワードを赤ペンで囲う作業をしました。「論 文を詳細に理解する」という不明確で遠いゴールの代わりに、時間を区切っ て明確なゴールを作り、大まかな構造を頭に入れようとしたわけです。”
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
“大雑把に情報収集できないなら、片っ端からやるしかありません。”
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
”抽象化とは具体的な対象から重要な部分だけ抜き出すことだ と学びました。モデルとは現実の複雑なシステムから、重要な一部だけを 抜き出したものだと学びました。プログラミングにおけるモジュールの使 われ方は、まさに抽象化であり、モデル化ですね。”
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
1章では情報収集・モデル化・検証の学びのサイクルについて書かれている。
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
“GTD では、まずは「気になること」を全部 1ヵ所に集めます。”
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
“「気になることすべての整 理」にはとても時間がかかるので、まずはその一部である「今日やること」の 整理に集中しましょう”
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
“まず金銭価値が高くリスクも高いフィーチャから実装 し、次に金銭価値が高くてリスクが低いフィーチャを実装し、最後に金銭 価値が低くてリスクも低いフィーチャを実装せよ、金銭価値が低くてリス クが高いフィーチャは実装するな”
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
“緊急だが重要でないタスク❸に対して No と言い、その時間を❷(重要だが緊急でない)のタスクに割り当てるのです” 図の数値が間違ってるので注意
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
2章ではやる気が出ない状態をどうやって解決するか。タスクを一つに絞って、タスクの粒度を細かくする。また計測することで見積もり精度をあげる。
— しょうゆ@4thday2参加 (@shsub) September 4, 2018
3章では脳の記憶について書かれていて、さらに繰り返すことが必要、繰り返すのもテストを行ったほうがよいと書かれている。
— しょうゆ@4thday2参加 (@shsub) September 4, 2018