---
title: Scalaワイワイ勉強会#5LT登壇資料
tags: 
author: [nozomitaguchi](https://convert.docswell.com/user/nozomitaguchi)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/P7RM1D2KJ9.jpg?width=480
description: 2025/03/14にFOLIOで開催されたScalaワイワイ勉強会#5のLT登壇資料です。
published: March 14, 25
canonical: https://convert.docswell.com/s/nozomitaguchi/ZDNVE8-2025-03-14
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/P7RM1D2KJ9.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/PJXVY1D5EX.jpg)

問題 1


# Page. 3

![Page Image](https://bcdn.docswell.com/page/3JKQ32XRJD.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LE3PG45GJ5.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/8EDL1QDNJG.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/V7P2QLXN78.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/2JVD5QLYJQ.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/5EGY6WXWEL.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/4JQM438Q7P.jpg)

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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/K74VQ12YJ1.jpg)

問題 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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LJ13PGMN7G.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GJWP2KDM72.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/4EZKDZGME3.jpg)

問題 2


# Page. 14

![Page Image](https://bcdn.docswell.com/page/Y76Q1ZY57V.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/G75R4WGGE4.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/9J2DVQYDJR.jpg)

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


# Page. 17

![Page Image](https://bcdn.docswell.com/page/DEY23WGMEM.jpg)

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


# Page. 18

![Page Image](https://bcdn.docswell.com/page/VJN8V9G378.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/YE9K62WPE3.jpg)

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


# Page. 20

![Page Image](https://bcdn.docswell.com/page/GE8RZ5NXJD.jpg)

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


# Page. 21

![Page Image](https://bcdn.docswell.com/page/LELKDYPNJR.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/4JM2PN4QJW.jpg)

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


# Page. 23

![Page Image](https://bcdn.docswell.com/page/PJRM1DWKE9.jpg)

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


# Page. 24

![Page Image](https://bcdn.docswell.com/page/PEXVY1P57X.jpg)

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


# Page. 25

![Page Image](https://bcdn.docswell.com/page/3EKQ32DRED.jpg)

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


# Page. 26

![Page Image](https://bcdn.docswell.com/page/L73PG4RGE5.jpg)

問題 3


# Page. 27

![Page Image](https://bcdn.docswell.com/page/87DL1QYNEG.jpg)

問題 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


# Page. 28

![Page Image](https://bcdn.docswell.com/page/VJP2QL6NJ8.jpg)

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


# Page. 29

![Page Image](https://bcdn.docswell.com/page/2EVD5Q3YEQ.jpg)

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


# Page. 30

![Page Image](https://bcdn.docswell.com/page/57GY6W3W7L.jpg)

問題 3. 重複組合わせを作る
val comb =
mutable.Set.empty[(Int, Int)]
for {
i &lt;- ints
j &lt;- ints if !comb.contains(j -&gt; i)
} comb.add(i -&gt; j)
Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved.
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/4EQM435QJP.jpg)

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


# Page. 32

![Page Image](https://bcdn.docswell.com/page/KJ4VQ19YE1.jpg)

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


# Page. 33

![Page Image](https://bcdn.docswell.com/page/LE13PGKNJG.jpg)

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


# Page. 34

![Page Image](https://bcdn.docswell.com/page/GEWP2KPMJ2.jpg)

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


# Page. 35

![Page Image](https://bcdn.docswell.com/page/47ZKDZKM73.jpg)

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


# Page. 36

![Page Image](https://bcdn.docswell.com/page/YJ6Q1ZQ5JV.jpg)

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


# Page. 37

![Page Image](https://bcdn.docswell.com/page/GJ5R4WRG74.jpg)

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


# Page. 38

![Page Image](https://bcdn.docswell.com/page/LE3PG4PPJ5.jpg)

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


# Page. 39

![Page Image](https://bcdn.docswell.com/page/8EDL1QL3JG.jpg)

おわりに


# Page. 40

![Page Image](https://bcdn.docswell.com/page/V7P2QL2P78.jpg)

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


# Page. 41

![Page Image](https://bcdn.docswell.com/page/2JVD5QDVJQ.jpg)

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


# Page. 42

![Page Image](https://bcdn.docswell.com/page/5EGY6WY1EL.jpg)

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


# Page. 43

![Page Image](https://bcdn.docswell.com/page/4JQM43MN7P.jpg)

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


