「ひとつ上の思考力」を読んで

Amazon Kindle Unlimitedで、あなたのおすすめに出てきた「ひとつ上の思考力」を読んでみた。

ひとつ上の思考力。。。
私のような凡人が本題から想像できるのは、

  • 木を見て森を見ずはあかんで
  • 自分が平社員なら、2つ上の視座、つまり部長になったつもりで考える

みたいな。 この予想を超えて見よ!!(鷹の目のミホーク)


ざっくりまとめると。。。

  • PDCAサイクルをきっちり回しましょう。(Plan, Doのやりっぱなしはあかんで)
  • 仕事の精度と生産性を高めるため、物事を抽象化して考え、その他の事象に転用せよ


PDCAダブルループと読んでいたり、抽象化思考や仮説思考を何か別の言葉で表していたりと、
全体を通して、ビビッとくるものはなく、テンション高くなるようなこともなく終わりました。。。



ただ、この本で心に残ったフレーズがあり、それは下記

- 人と課題(問題)を分けて考える。
- 「期待するのではなく、応援する」というスタンスでいる。


子育てに大切な言葉だな〜...としみじみ感じて、本をそっと閉じました。

C++ 最大値と最小値を同時に求める中級魔法 "std::minmax_element()"

最大値と最小値を同時に求める関数である

ドラクエでいうと、"std::minmax_element()"ってメラミくらいの威力でしょうか。


さて、こちらはCodewarにて問題を解く過程で使用しました。

メモ:

  • vector限定ではなく、イテレータであればOK。
  • minmaxを求める時の比較関数の指定も可能。
  • 戻り値の覚え方: min, maxの順。関数名"minmax_XXX"の記載順そのままと覚えるがよろし。

詳しくは、Google先生で検索する or ↓公式ドキュメントを参照するがよろし。


Example Code:

#include <algorithm>
#include <iostream>
 
int main() {
    const auto v = { 3, 9, 1, 4, 2, 5, 9 };
    const auto [min, max] = std::minmax_element(begin(v), end(v));
 
    std::cout << "min = " << *min << ", max = " << *max << '\n';
}

Output:

min = 1, max = 9


ホントは、std::min_element()とstd::max_element()を使って解きました、はい。。

他の人がこの関数を使って、スマートに解いていたので紹介しているだけです、はい。。


パフォーマンス(計算量とかメモリ使用量)については、
Google先生で、そのことに言及している記事があったが、めんどくさくて読んでない✕
今のところパフォーマンスはどうでもいいので、めんどくさくなってしょうがないよ、自分。
セルフコンパッションが高まってきたな、よし。

rect, polar, degrees, radians...まとめて覚えよ!!!

Pythonモジュールの話です。


cmath.rect

公式ドキュメントの記載

cmath.rect(r, phi)¶ 極座標 r, phi を持つ複素数 x を返します。値は r * (math.cos(phi) + math.sin(phi)*1j) に等しいです。

(例)

>>> cmath.rect(2**.5, math.pi/4) # phiを孤度法で指定
(1.0000000000000002+1j)

>>> cmath.rect(2**.5, math.radians(45)) #phiを度数法の45°から孤度法のラジアンに変換して指定
(1.0000000000000002+1j)

[注意] phiは、ラジアンで指定する必要があるので注意。 つまり、60°みたいな度数法じゃくて、π/4みたいな孤度法や。 後述のmath.radiansとの合わせ技で使うシーンがあるかも。

cmath.polar

[公式ドキュメント]https://docs.python.org/ja/3/library/cmath.html?highlight=polar#cmath.polar)の記載

cmath.polar(x)¶

x の極座標表現を返します。x の半径 r と x の位相 phi の組 (r, phi) を返します。polar(x) は (abs(x), phase(x)) に等しいです。

(例)

>>> cmath.polar(1+1j)
(1.4142135623730951, 0.7853981633974483)

直交座標から、距離と角度をパッと出すのに便利かも。

math.degrees

公式ドキュメントの記載

math.degrees(x)¶ 角 x をラジアンから度に変換します。

(例)

>>> math.degrees(math.pi)
180.0

ま、これはそのままだよね。
ラジアン-->度? 度-->ラジアン?どっちだっけ、あ〜〜〜〜!となりそうなので
モジュール名のdegreesは、変換後単位と覚えるとよろし。
Google先生に聞いたり、簡単に試すとすぐわかるけどね。

math.redians

公式ドキュメントの記載

math.radians(x)¶ ラジアンから度に変換します。

(例)

>>> math.radians(180)
3.141592653589793 # 180°はπなので、3.14XXXとなる。


問題

これらモジュールをマスターすると下記問題が簡単に解けるようになるのである。

f:id:atti_itta:20201222234836p:plain

Input: func(OA, AB, BC, alpha, beta, gamma)
Output: OCの長さ、OCの角度(OC辺<-->X軸マイナス方向)

Python 初期値を無限大にしたく

Codewarにて、初期値を無限大にしたい場面に遭遇。

無限大定義について、google先生ヒアリング。。

  • float型でのみ無限大を定義できる
  • int型は、桁数に制限がないという違う意味での無限大。

なので、今回はfloatで無限大を定義した。

(例) floatでの無限大

>>> f = float('inf') # infiniteのinf。たぶん。負の無限大は'-inf'で指定
>>> f > 100000000 # 適当な大きな数と比較
True
>>> f < 100000000
False
>>> 



そもそも、こんなinf使わなくても効率良く解けたというのは別の話。。。

Python math.floorとmath.ceilって何?

  • 少数点以下をどう扱うかのAPI。 切り捨て or 切り上げして、int型を返す。
  • floor : 小数点以下は切り捨て御免。
  • ceil : 少数点以下を切り上げる。
>>> import math
>>> math.floor(3.14)
3
>>> math.ceil(3.14)
4
>>> 


floorとceil、、、なるほど、ネーミングセンスよかですね。

Python f-string内で条件分岐したく候

f-string内で条件分岐する場合、下記のように書くとよろし。

# glassesが1より大きい場合、複数形にするという 
f"{glasses} glass{'es' if glasses > 1 else ''} of water."

# glasses > 1
2 glasses of water.
# glasses <= 1
1 glass of water.

pointは、""で囲ったら、内部では''を使う。逆もしかり。


codewarsのランキングの伸び悩み中....

”ACTION! トヨタの現場の「やりきる力」”の本を読んで、

kindle unlimitedに入っているので、今週何読もうかと、じゃがりこ放り込みながら本を検索。 Action! トヨタの現場の「やりきる力」
ドン!!とオススメに表示され、レビューも高評価だったので、 読むことに。。。


ワクワクしながら、↓↓期待して読んでみました。


  • "トヨタの現場の"と銘を打ってるので、トヨタ独自の門外不出なノウハウ、Tips的なものが知れる!?!?  (るろ剣でいう”飛天御剣流”が拝めるのか!?!?)


しかし、内容はどこかでよく耳にするものに、ご自身の経験として"トヨタでは"をつけてるようなもの。。。

  • 実行可能な粒度にブレークダウンして、物事を実行に移す
  • 適度な負荷をかけて、思考して、Xxする
  • ゼロベース思考で考える。
  • 視座を高く持つ

私にはちょっと期待はずれかな。。。
んーと、入社1-2年目だと新鮮かもしれない
それ以上だと、忘れかけていたものを思い出させてくれるのに有益かもしれない



いや、違う!
当たり前のことを当たり前に息を吸うようにやり、しかも高レベルでやっている、これこそがトヨタの真髄である。

自分も出来てなかったこと書いてあったしね。
著者さん、サンキューです♪