leetcode: add two numbers
問題
結果
解けずにギブアップした
振り返り
ポイント - 解き方 ループか再帰か - 再帰の終了条件 よく分かってなかった。 シンプルに考えたら確かに、両方値がnilだったら足す方法がないからnilを返せばよかった。 l1,l2の片方が値ある時も足せないからそのまま返せばよかった
桁あがり どう渡すかわからんかった 答え見たら、確かにnextが取得できるなら、それと足せばよかったなと理解。
再帰はやっぱり苦手。 木構造のデータは再帰のベースの操作と終了条件がイメージできると良いなと 階層を跨ぐ操作をするときにうまく再帰関数に乗るのがコツかなと理解した。
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
if l1 == nil && l2 == nil {
return &ListNode{}
}
if l1 == nil {
return &ListNode{Val: l2.Val, Next: addTwoNumbers(l1, l2)}
}
if l2 == nil {
return &ListNode{Val: l1.Val, Next: addTwoNumbers(l1, l2)}
}
return &ListNode{Val: l1.Val + l2.Val, Next: addTwoNumbers(l1.Next, l2.Next)}
}
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
if l1 == nil && l2 == nil {
return nil
}
if l1 == nil {
return l2
}
if l2 == nil {
return l1
}
sum := l1.Val + l2.Val
digit10, digit1 := splitDigit(sum)
next := addTwoNumbers(l1.Next, l2.Next)
if digit10==1 {
next = addTwoNumbers(next, &ListNode{Val: 1})
}
return &ListNode{Val: digit1, Next: next}
}
func splitDigit(num int) (int, int) {
if num >= 10 {
return 1, num-10
}
return 0, num
}
LeetCode: Two Sum
Two Sum
整数配列Numsとターゲットの整数Targetが与えられたときに、Numsのいずれか2つの合計がTargetになる組み合わせをNumsの添字で返す。
私の回答
func twoSum(nums []int, target int) []int { nums_len := len(nums) max_num := 0 for _, n := range nums { if max_num < n { max_num = n } } check_nums := make([]bool, nums_len) for i:=0; i < nums_len; i++ { if check_nums[i]{ continue } check_nums[i] = true for j:= i+1; j < nums_len; j++ { if target == (nums[i]+nums[j]) { fmt.Println(nums[i],nums) return []int{i, j} } } } return []int{} }
一番最初に、チェック済みの配列を管理する手法でしらみ潰しにチェックしていく方法が思いついた。 回答としては通ったが、結構速度は遅かった。 回答を見て、外側のループですでにチェック済みの管理ができていることに気づき、チェックを外したのが下の回答。 それでもそこまで早くなかった。ただ、シンプルには解けることがわかった。
回答を見て修正した内容
func twoSum(nums []int, target int) []int { nums_len := len(nums) for i:=0; i < nums_len; i++ { for j:= i+1; j < nums_len; j++ { if target == (nums[i]+nums[j]) { return []int{i, j} } } } return []int{} }``` # LeetCodeにあった解 mapを使ってmapに解があるかを調べるのと、解がなかったときに、numに添え字の番号を入れておきループを回しながら調べる感じだった。 numは重複もあるはずなので、二つの合計を調べる時にしか利用できない方法ではあるが非常に理にかなっていると感じた。
func twoSum(nums int, target int) int { m := make(map[int]int) for i, num := range nums { complement := target - num if j, ok := m[complement]; ok { return int{j, i} } m[num] = i } // Return an empty slice if no solution is found return int{} }
# 感想 やっぱり、基本的な構文が日本語を書くみたいに出てこないので、まだまだ母国語になるには時間がかかりそう。 さいきん、山口周さんのYoutubeで誰かの名言として言っていた「考えたように生きろ、でなければ生きたように考えてしまう」が完全にプログラムで自分に起きていることに思えたので、アイディアができたらすぐ書くよりも、考えてからコードを書きたい。
焙煎カリブレーション
はじめに
久しぶりに、焙煎でお世話になっている方に自分の焙煎のカリブレーションをしてもらった。 いつも焙煎した後は一人でカッピングをしているため、自分以外の焙煎師にみてもらうことは非常にありがたかった。 今回の学びは、 - 焙煎の味作りをするときに優先するべきところは、クリーンカップ、スイートネス、フレーバー、アフターテイストであること。 - 大きい焙煎のエラーをなくすことが大事。 - 自分の取りやすい味を踏まえて、大きい焙煎のエラーを減らせるようにすること。 - 良い焙煎を並べて、比較することで大きい方針の確認をすることで、自分の焙煎の比較だけで悩まないこと。
今回の焙煎
今回は、typica washedを焙煎した。
意識した点としては、
- 前半でカロリーを十分かけること。
- 豆温度150度からは火力を下げて、メイラードの時間を取る。
- ディベロップの火力を下げずに一定にして、アンダーを減らすこと。

講評
自分の評価
カロリー不足ではなさそう フレーバーもある 金属味を感じる カラメルが強い
メイラードからの火力をおとすのを早くして、カラメル感を減らす 金属味を減らすために、ボトムに落ちるまでの火力を落とす
焙煎師さんからの評価
フレーバーは出ている。 雑さが出ている。 とにかく苦い
ディベロップの火力が高すぎるからカロリーがオーバーになっている。ディベロップのファンか火力を落とす
個人的な振り返り
苦味が取れてなかったことが、すごくショック。言われた後は結構苦いと感じるようになった。 焙煎師さんから金属味とかは確かにディフェクトとして出ているけど、苦味の方が全然ディフェクトとして重大なエラーだよと言われ、 確かに調整する順番として間違っていたなと思った。 ただ、苦味というのがディベロップのカロリー過多で起きる可能性があるというのは知らなかったので勉強になった。 フレーバー出すことを意識していたのが出て良かった。
次の焙煎
次は苦味を減らしたい。ディベロップのファンを増やしてカロリーを減らしてみる。 その後、メイラードで火力を落とすのをもう少し早めにする。
その他
その時に1st. crackの焙煎確認をしていたので、一緒にカップを撮らせてもらった。 その大会は、配られるサンプルと同じように焙煎できるかを1次予選としているらしく、わざとディフェクトのある焙煎に合わせることで焙煎の理解を求められる。 その時に、サンプルの焙煎のエラーが出る理由を焙煎師さんと話したら、大体考察が同じで、結構嬉しかった。 そのほかに、自分が東京で買ってきたLeaves coffeeの豆を一緒にカップを取ったがクリーンカップや中まで火が通っていることに感動した。 自分が目指す焙煎の一つの正解例だなと思った。
プリン
https://www.lettuceclub.net/recipe/dish/36469/
プリン好きなんだけど、簡単につくりたいのでレンジを使ったレシピのメモを残しておく。
分量は上のリンクを参考にしてる。
プリン液
・卵(Mサイズ)…4個(約200g)
・牛乳…250ml
・砂糖…50g
バニラエッセンス 5滴
カラメルソース
・砂糖…40g
水 40g
一番最初にカラメルソースを作る。砂糖と水を鍋に入れ、弱火で火にかける。色が茶色くなってきたらギリギリまだ火を弱め、煮詰める。煮詰まってきたら、適量水を加えて延ばす。
また、プリン液を作るために牛乳と砂糖を混ぜるためにレンジで牛乳温めモードで温める。
次に、砂糖を溶かした牛乳に卵とバニラエッセンスを混ぜる。できたプリン液適当な器に網でこしながら移す。自分は網にはアク取りを使っている。
器に注いだプリン液の上からカラメルをかける。器にラップをする。
電子レンジに器を並べ、200wで5分レンジ、2分置いて、3分レンジ、2分置いて、3分レンジ、2分置いて、3分レンジで温める。
粗熱をとって、冷蔵庫で寝かす。温かいときに食べたい気持ちになるが、冷蔵庫で寝かすことで滑らかな質感になると感じる。
改善したいところ
アク取りを使うと、卵白が詰まってプリン液をこすのが大変。
レンジ待ちが長い
EBMに関するホワイトペーパーを読んでみた感想1
はじめに
最近、開発チームのDEVOPSの文脈で開発チームの生産性を示すFour Keysより大きな概念が出てきた。 大きな組織の生産性や組織力を計測し、組織力を向上させながら目標に向かうことを目的としたEvidence-Based Managementというものです。
今回は先輩にお薦めされたScrum.orgのホワイトペーパーを読みながら理解を深める。 www.scrum.org
感想
前書き
ここでは、一般的に組織(自分の解釈では何かのプロダクトやサービスを提供する企業や団体)の管理者や経営者などは抱えているチームのパフォーマンスを知りたいという欲求から計画(プロジェクト)に対しての評価を行っているが、実際に評価を行う対象は顧客に対して提供した価値(アウトカム)で評価計測するべきであると述べている。
私の感想としては、計画に対しての評価も重要だとは思う。直接顧客の反応を知ることができる組織ばかりでもないから。だが、そのような構造的な問題がないのであれば顧客に提供した価値で測ることは完全に同意するし、計測方法を教えてほしいと思った。
価値を計測する
ここでは、EBMの範囲内での価値の定義をしている。以下の二つの価値である。 1. 「現在の価値(CV: Current Value)」: 顧客が今まさに体験している価値 2. 「未実現の価値(UV: Unrealized Value)」: 顧客が体験したいがまだ体験していない価値
次に、価値の計測方法に触れている。 まず、あまり良くない例としてNPSを挙げていた。(NPSは顧客に10点満点でサービス評価をしてもらって、9-10だと非常に高く評価してもらっていて、7-8なら良い方、6以下は普通か無関心かといった顧客からの愛着や信頼を計測する手法) NPSの問題点として、評価が不正確であったり計測の頻度の問題、回答と行動の乖離などがあるとしていた。
価値を計測する一つの方法として、プロダクトにFBの仕組みを取り入れ顧客の行動を計測することを挙げている。 また、スクラムチームであれば上記の計測をスプリントゴールに組み込むことでスプリントやスプリントゴールの達成状況を計測可能にしていくことができるといっている。 計測手段のグラデーションについても述べており、「提供機能を誰が使ったか」〜「提供機能によって顧客のゴールが達成できたか」など考え方次第で様々考えられるとのこと。 同時に計測頻度にも言及している。スクラムチームが新機能をリリースできる頻度によって、価値の測定頻度が変わるため、なるべく新鮮な評価をもとに開発するためにも提供スピードの向上した方がいいといっている。
EBMでの価値の定義は必ずといっていいほど、どの資料にも書かれている。この節で説明しているNPSとかプロダクトから計測できる価値の例は現在の価値(CV)の方なのかな。未来の価値(UV)の例はよくわからなかった。 価値を測るためにプロダクトに計測機構を備えると良いということだが、計測する方法も様々あるのでピンポイントで計測したい価値を表す計測内容を考える力も必要だなと思った。自分が今思いつくものだったら、PV数とかABテストとかリードタイムとか応答速度とかがあるけど、手札増やさねば...
## 価値提供のパフォーマンスを計測する ここでは、前書きと同様に計画通りに実行できたか、アウトプットができたかなどの計測に注目している組織の問題点に触れている。顧客に対して価値のあるものを提供できているかという問いについては考えられていないという問題点についてである。
次に、前節で述べた価値を計測する手法を使うと現在の価値が計測できるという前提のもと、計測するとチームのパフォーマンスについて以下のような把握ができることを示している。 1. CVが上昇傾向なら、チームのパフォーマンスは上昇傾向である。傾きも鋭角であれば急速に向上している。 2. CVが横ばいなら、パフォーマンスも横ばいと考えられる。パフォーマンスやゴール設定の自問自答が必要。 3. CVが下降傾向なら、顧客の満足度低下の理由を考えるべき。ニーズの変化やプロダクトの品質を疑い理由を考えるべき。
また、CVと未実現の価値(UV)の関係も説明している。UVはCVの補完的な傾向があり、自分のイメージとしては100点を満点とすると「100点-CV=UV」のような関係だと述べられている。なので上のCVのパフォーマンスの評価を裏返すとそのままUVの考察ができる。
この節でやっとUVとはどのような位置付けか分かった気がする。ただポテンシャルをどのように見積もるかっていうのはマネージャーの感とかによるのかなと思ったりする。いや、市場規模とかユーザー数とかを分母にして計算するって感じなのかな。わからん...
提供スピードを計測する
提供スピードの定義をEBMでは「市場に出すまでの時間(T2M: Time to Market)」と定義している。 まず組織で提供スピードに関心を持つべき理由の整理から始めている。それは、「チームが新しい機能をより迅速に提供し、その価値を計測し、FBをもとに適用ができるから」と述べている。
T2Mの計測はスタートはアイディア出しから始まり、FBの収集で終わる。提供スピード(開発〜顧客利用)のみの指標を用いない理由は、顧客に価値を届けるすべての作業を考慮しないことも良くないし、価値が届けられているか計測しないと意味のあるスピードの計測ができない。 アイディア出し〜FBを計測するモチベーションの一つとして「提供するもののほとんどは無駄である可能性が高い」ということが挙げられていた。
私はEBMを齧った程度だったのでT2Mへの解像度が一気に上がった説明だった。 プロダクトを市場に出すまでのスピードは速いほど競争優位性をもつから当然スピードが速い方が良いよねというのは誰でも思うことだけど、それに加えてアイディア出しとかFBの時間も含めて速い方が良いし、最初から最後まで計測対象だよねという考えはデータを意味あるものとする上で非常に重要な考え方だと思った。 「提供するもののほとんどは無駄である可能性が高い」というフレーズはどの資料を見ても書いてあるので、作者は結構トラウマでもある感じなのかなと勝手に察した。
チームの効果性を計測する
前節はスピードをを計測して早く提供できることの重要性について述べていたが、本節では現在の価値(CV)を向上させているかという効果を計測する重要性についても述べている。EBMでは「イノベーションの能力(A2I: Ability to Innovate)」と呼んでいる。 主に、顧客体験を向上させる時間がどれだけあるかという指標だ。直接的な価値を生む開発や企画以外の会議やマルチタスクといった無駄がどれだけ存在するかを知って、価値のある時間を増やすことを目的に計測するのだと自分は理解した。
チームのパフォーマンスを向上させる
チームのパフォーマンスを向上させるためにはどうするべきかという話をしていた。
これまで出てきたディシジョンツリーを使って、CV、UV、T2M、A2Iのどれに注視して取り組むべきかを決めると良いとの話だった。
忘れないでおきたいのは、あくまでも戦略的ゴールを達成するために現在の価値(未実現の価値の減少)を向上させることである。それを確かなものとするためにA2IやT2Mが十分な状態か確認し、改善するといった順番で顧客に対するアウトカムを生み出すループを組み立ていくことだ。
まとめ
これまでは多くの組織で、提供スピードを向上させることでアウトプットの回数を増やし市場に適応しようとしていたらしいが、本記事では提供スピードの向上がもたらすのは顧客の所感を計測可能にする頻度を高めることにあると考えている。 EBMでは学習スピードを高めることで価値を効果的に積み上げることでチームが中間ゴールや、戦略的ゴール向かって前進できると述べられている。
まとめ
本記事でも、具体的な指標についてはあまり触れられておらず、4つあった指標(CV、UV、T2M、A2I)のどれも抽象的な概念でしか語られていなかった。 ただ、このような指標は組織によって変わってくることが常だと思うので組織やチームで自律的に考えることが必要なのだろうと感じた。 一度チームで概念さえ共有できれば、建設的に話を進めることができそうだ。
EBMに関するブログを読んでの振り返り
はじめに
最近、会社の中でEBM(Evidence-Baseed Management)と呼ばれる、価値やアウトカム(成果、効果)基準として効果のあるビジネスの進め方があると聞き個人的に興味津々なトピックが出てきた。 資格も取りたいと思ったので、 まず初めにEBMを理解するために、会社の方がおすすめしていたブログを読んでみた。
このブログ↓ www.infoq.com
今やっている仕事って価値があるの?
ブログの最初からド直球なテーマで問いかけられた。 アジャイルの土台として、アジリティを重要としていることは知られている。 アジリティがあることで柔軟かつ効率的に目標に向かっていくことができるからだ。 ただし、アジリティがあるからと言って本当に価値があることができているかを確かめていることは意外と少ないように私自身思った。
記事では、MicrosoftやAmazonなどの企業が新規のアイディアを検証したときに、価値があったのは全体のうち1/3だけだったという例を挙げていた。 どの組織の誰がアイディアを出したかは関係ないとも書いてあり、ちゃんと計測してみないと誰が良い価値を生み出しているかはわからないとのことだった。 時間やリソースを無駄にしないためにも、価値を計測するして、大事なことだけするのが大事だよねということだろう。
価値の種類
細かい数値の話をする前に概念的な話もあった。 ビジネスにおける価値は何かと聞かれたら、やっぱり顧客体験だよねと記事では述べていた。 EBMの場合は現在価値と未実現の価値という2つの価値があって、これまでの実績(現在価値)だけじゃ組織が生み出せる価値ってわからないよねと記事では述べていた。
価値と目標
記事では、組織が新たな価値を生み出すときは未実現の価値を実現していったり、お客さんの満足度のギャップ埋めることが唯一の方法で目標を立てるなら、未実現の価値を参考に目標を立てるとよいと述べている。 また、目標は長期~短期までを立てて長期の目標を達成するためのマイルストーンを置いてくイメージで目標を立てるとよいとのことだった。 さらに、実践する時には仮説、検証サイクルを回しながら経験主義で目標達成をしていくといいよとも言っていた。
速度、効率は重要じゃないの?
速度と効率も大事だよというのが答えで、速度と効率があればたくさんのアイディアを検証できるからいいよねという考えから、EBMで市場投入までの時間も大事な指標だよねと言っていた。 また、価値を生み出す力もEBMではイノベーション能力という指標で表そうねと書いていた。
測定
計測するといっても、すでに速度とかコストは計算しやすいから計測している企業は多い。 だけど、実際価値があるかを計測で明らかにしているところは少ないよねと記事では述べている。 EBMの場合はアクティビティとアウトプットとアウトカムを計測する。 アクティビティは組織の人の行動。アウトプットは組織が生み出すもの。アウトカムは顧客が体験する新しい機能や改善した機能など。 アクティビティとアウトプットは組織の能力を向上させるために、アウトカムは組織が価値を提供できているかを確認するために使用する。
どこから手を付けようか?
基本的に、満足度のギャップ(未実現の価値)が大きいことが多いので、そこから手を付けるのがよいとのこと。 満足度のギャップが大きいことはよいことで、伸びしろがあるととらえたほうが良い。
次に取り掛かるべきはどれだけ効率的で迅速にサービスを提供するか(市場投入までの時間)で新しい機能を出すのに6か月以上かかる場合はまずは重点的に取り掛かるべきとのこと。
もし、すぐにサービス提供できても、有効性のある機能を提供すること(イノベーション能力)が足りない場合はそれも取り組む必要がある。
土台が整ってくると、価値の計測が提供できるようになってくる。ただし、デジタルサービスの場合は数日でリリースできる能力が必要とのことだった。
振り返り
普段の仕事の価値を測れるようになると大事なことだけできるよな。と当たり前のことを思った。 価値の話では価値には現在と未実現の価値があることが興味深かった。この記事だけでは未実現の価値って満足度だけが指標何だろうか、完全に理解はできなかった。 EBMを運用する上で目標を達成するために価値を計測するわけだが、価値がいい感じに計測できるようになるまでには結構な能力が必要だなと感じた。
フットサルの駆け引き
2024/02/04の練習
メニュー
6vs3
ピッチを二分割にして、攻撃側が分割されたエリアに3人ずつ配置。ボールサイドに守備が2人、ボールのないサイドに1人。攻撃側が三本パスを通すと反対のサイドにパスできる。
ポイント
攻撃の意図は3vs 2の攻略。中央のフィクソが守備の圧縮を崩しパスコースを増やせるか。エイトでファーの守備を惑わせることも効果的。
守備の意図は攻撃のパスが三本通るまでに同サイドのパスコースを消しパックできるか。
感想
攻撃は早めに三本パスを通せると、駆け引きなく反対サイドに返せた。今回はサイドのフィクソが高い位置を取ることが多く、サイドからサイドへ守備の間を狙うパスが多かった。
2人組のシュート練習
パラ、ワンツー
ダイヤゴナルからの落としでシュート、ワンツー意識からのカットイン
中央とサイドの2枚でのコンビネーション攻撃の練習。中央のフィクソとサイドのアラが平行位置でスタート。フィクソがサイドのアラにパスを出し、その間にフィクソが目の前の守備に近づく形で駆け引きをして背中にスペースを作る。アラは中央のフィクソに返すと、上記のいずれかの抜け出し、ボールを受けて最後はシュート。
ポイント
中央のフィクソが駆け引きをして、対応してくる守備を外し起点をつくる。
サイドのアラはパラやワンツーするときに、フィクソのタイミングを見ながら抜け出す。
感想
フィクソが駆け引きをするときにサイドの状況が見えておらず、準備ができてない状況で受けてアラに返すことが多かった。
アイコンタクトで、お互いのタイミングを図ると良さそう。
守備がいると駆け引きで守備を外すイメージがつきそう
3vs3 キーパーあり
ゲーム形式。相手陣でボールを取るとそのまま攻撃できる。自陣でボールを取ると一度キーパーに戻してからスタート。1セット2分。
ポイント
今日の2枚でのシュート練習を実践する。フィクソは目の前の守備との駆け引きと、サイドのアラとの関係で崩すこと。サイドのアラもワンツーやカットインを使って裏を取ったり、展開をする。
感想
最初はお互いがどの動きをしたいかが見えなかったが、次第にワンツーやパラができる様になった。縦関係が多くパスコースが無くなることで詰まりがちなことが多かった。一度サイドに開いた配置にすることで、守備のスライドを遅らせたりやスキマを使えるようになりそう。
振り返り
攻撃の2枚の関係ではプレーの選択を合わせるためのリズムが大事。そのためには、味方とアイコンタクトをしながら、タイミングを合わせる練習が必要。顔を上げて駆け引きを感じてみる。
また、今日のシュート練習は「守備との1vs1駆け引き」と「パラ、ワンツーなどの2vs1」の状況を組み合わせていた。1vs1の駆け引きができるタイミングのイメージを作ること、2vs1の関係で味方とアイコンタクトをすることで、成功確率を上げていきたい。
特に1vs1の駆け引きは、駆け引きができる状態を作るところから練習してみても良いかも。試合中に自分たちで意図的に配置を作れると、プレーの再現性も上がりそう。