Scalaワイワイ勉強会#5LT登壇資料

1K Views

March 14, 25

スライド概要

2025/03/14にFOLIOで開催されたScalaワイワイ勉強会#5のLT登壇資料です。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Scalaで灰色問題を解いた時に面白く感じた関数の使い方 2025/03/14 Scalaワイワイ勉強会 in FOLIO @nozomitaguchi Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved.

2.

問題 1

3.

問題 1. 奇数文字目だけ抜き出す 問題 : 与えられた文字列を 前から数えて奇数文字目だけ抜き出した文字列に変換してください。 val string = “nozomitaguchi” // -> “nzmtgci” Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 3

4.

問題 1. 奇数文字目だけ抜き出す Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 4

5.

問題 1. 奇数文字目だけ抜き出す index と zip して collect ? Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 5

6.

問題 1. 奇数文字目だけ抜き出す string.zipWithIndex.collect { case (char, i) if i % 2 == 0 => char }.mkString Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 6

7.

問題 1. 奇数文字目だけ抜き出す Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 7

8.

問題 1. 奇数文字目だけ抜き出す もっと面白く 解きたいなぁ Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 8

9.

問題 1. 奇数文字目だけ抜き出す もっと面白く 解きたいなぁ sliding 使えば いける…? Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 9

10.

問題 1. 奇数文字目だけ抜き出す sliding とは・・・ ・第一引数(size: Int)のサイズをもつブロックにグループ化する ・第二引数(step: Int)ごとに要素を飛ばしてグループ化する。default は 1 。 // Iterator(List(1, 2), List(3, 4),List(5)) List(1, 2, 3, 4, 5).sliding(2, 2) // Iterator(List(1, 2), List(4, 5)) List(1, 2, 3, 4, 5).sliding(2, 3) Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 10

11.

問題 1. 奇数文字目だけ抜き出す これを使って 実装する と・・・ Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 11

12.

問題 1. 奇数文字目だけ抜き出す string.sliding(1, 2).mkString Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 12

13.

問題 2

14.

問題 2. N * N のマスを 90 度回転させる 問題 : N * N のマスを 90 度右に回転させてください。 val square = Array( Array(1, 2, 3), // -> (7, 4, 1) Array(4, 5, 6), // -> (8, 5, 2) Array(7, 8, 9)) // -> (9, 6, 3) Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 14

15.

問題 2. N * N のマスを 90 度回転させる Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 15

16.

問題 2. N * N のマスを 90 度回転させる 二重ループで index をコネ コネするか…? Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 16

17.

問題 2. N * N のマスを 90 度回転させる 二重ループで index をコネ コネするか…? index むず… 頭が千切れ ちゃう… Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 17

18.

問題 2. N * N のマスを 90 度回転させる // 7, 4, 1 // 8, 5, 2 // 9, 6, 3 (0 to 2).map( i => (0 to 2).map( j => square(2 - j)(i))) Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 18

19.

問題 2. N * N のマスを 90 度回転させる Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 19

20.

問題 2. N * N のマスを 90 度回転させる なんとかでき たけど、頭千 切れそう… Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 20

21.

問題 2. N * N のマスを 90 度回転させる なんとかでき たけど、頭千 切れそう… transpose 使ってシュッ と書けないか …? Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 21

22.

問題 2. N * N のマスを 90 度回転させる transpose とは・・・ ・多重配列を縦に持ち直すことができる。 ・なお二回連続で使うと元の配列に戻る // (1, 2, 3) => (1, 4, 7) // (4, 5, 6) => (2, 5, 8) // (7, 8, 9) => (3, 6, 9) square.transpose Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 22

23.

問題 2. N * N のマスを 90 度回転させる // (1, 2, 3) => (7, 4, 1) // (4, 5, 6) => (8, 5, 2) // (7, 8, 9) => (9, 6, 3) square.reverse.transpose Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 23

24.

問題 2. N * N のマスを 90 度回転させる // (1, 2, 3) => (3, 6, 9) // (4, 5, 6) => (2, 5, 8) // (7, 8, 9) => (1, 4, 7) square.transpose.reverse Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 24

25.

問題 2. N * N のマスを 90 度回転させる // (1, 2, 3) => (9, 8, 7) // (4, 5, 6) => (6, 5, 4) // (7, 8, 9) => (3, 2, 1) square .reverse.transpose .reverse.transpose Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 25

26.

問題 3

27.

問題 3. 重複組合わせを作る 問題 : 渡された配列に対する指定数の重複組合せを作ってください。 val ints = List(1, 2, 3) val size = 2 // (1,1),(1,2),(1,3),(2,2),(2,3),(3,3) Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 27

28.

問題 3. 重複組合わせを作る Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 28

29.

問題 3. 重複組合わせを作る 二重ループし て順番違うだ けのやつフィ ルタする…? Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 29

30.
[beta]
問題 3. 重複組合わせを作る

val comb =
mutable.Set.empty[(Int, Int)]
for {
i <- ints
j <- ints if !comb.contains(j -> i)
} comb.add(i -> j)
Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved.

30

31.

問題 3. 重複組合わせを作る Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 31

32.

問題 3. 重複組合わせを作る 汎用的じゃな いな・・・ Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 32

33.

問題 3. 重複組合わせを作る 汎用的じゃな いな・・・ combinations 使えばいける …? Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 33

34.

問題 3. 重複組合わせを作る combinations とは・・・ ・重複なしの組合せを作ることのできる関数 ・同じ組合せを生成する方法が複数ある場合は一つだけ返される(重要) ints.combinations(2) // List(1, 2) // List(1, 3) // List(2, 3) Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 34

35.

問題 3. 重複組合わせを作る Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 35

36.

問題 3. 重複組合わせを作る 同じ組合せを生成 する方法が複数あ るとき、一つだけ 返される…?? Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 36

37.

問題 3. 重複組合わせを作る 同じ組合せを生成 する方法が複数あ るとき、一つだけ 返される…?? それなら ints * 2 したら重複組合せ になりそう?? Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 37

38.

問題 3. 重複組合わせを作る (ints ::: ints).combinations(2) // or List.fill(size)(ints).flatten .combinations(size) Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 38

39.

おわりに

40.

おわりに Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 40

41.

おわりに 全然時間足り なかったな。 Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 41

42.

おわりに 全然時間足り なかったな。 ブログ書いた ので他のTips もご覧くださ いm(_ _)m Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved. 42

43.

ご清聴ありがとうございました。 つづきはこちら https://zenn.dev/folio_sec/articles/f48210cebf2ba9