Slide 1

Slide 1 text

@giginet

Slide 2

Slide 2 text

giginet/Peafowl

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

extension Tile: CustomPlaygroundDisplayConvertible { public var playgroundDescription: Any { // ṛͷը૾ΛFramework͔ΒऔΓग़ͯ͠ੜ੒ let bundle = Bundle(for: BundleIndicator.self) let path = bundle.path(forResource: String(describing: index), ofType: "png")! return NSImage(contentsOfFile: path)! } } 1MBZHSPVOE্ʹ೚ҙͷ෺ΛඳըͰ͖Δ 'SBNFXPSLͷը૾औ͖ͬͯͯฦ͢

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

extension Array: CustomPlaygroundDisplayConvertible where Element == Tile { public var playgroundDescription: Any { return createTilesImage(of: self) as Any } } /4(SBQIJD$POUFYUͰख഍ͷը૾Λಈతʹੜ੒ʢུʣ $POEJUJPOBM$POGPSNBODFͰ<5JMF>ʹ $VTUPN1MBZHSPVOE%JTQMBZ$POWFSUJCMFΛ࣮૷

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

੃಄ ໘ࢠ ໘ࢠ ໘ࢠ ໘ࢠ ࿨ྃܗ ॱࢠʢ࿈ଓͨ͠ṛʣ ࠁࢠʢಉ͡ṛʣ

Slide 10

Slide 10 text

ελοΫ

Slide 11

Slide 11 text

੃಄Λ164)

Slide 12

Slide 12 text

໘ࢠΛ164)

Slide 13

Slide 13 text

࡞Εͳ͘ͳͬͨΒ

Slide 14

Slide 14 text

101ͯ͠

Slide 15

Slide 15 text

࣍ͷΛ164)

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

ࣣରࢠܗ ࠃ࢜ແ૒ܗ ରࢠ ରࢠ

Slide 18

Slide 18 text

/// ௨ৗ࿨ྃܗ public typealias MeldedForm = (PairToken, MeldToken, MeldToken, MeldToken, MeldToken) /// ࣣରࢠܥ public typealias SevenPairsForm = (PairToken, PairToken, PairToken, PairToken, PairToken, PairToken, PairToken) /// ࠃ࢜ແ૒ܥ public typealias ThirteenOrphansForm = (PairToken, Tile, Tile, Tile, Tile, Tile, Tile, Tile, Tile, Tile, Tile, Tile, Tile) public enum WinningForm { case melded(MeldedForm) case sevenPairs(SevenPairsForm) case thirteenOrphans(ThirteenOrphansForm) } ରࢠ ໘ࢠ ࿨ྃܗ ରࢠ ରࢠ ഍

Slide 19

Slide 19 text

func detectForms(of: tiles: [Tile]) -> [WinningForm]? ṛ͔Β ࿨ྃܗΛ୳ࡧ

Slide 20

Slide 20 text

/// ໾ public protocol YakuProtocol: Hashable, CustomStringConvertible { var name: String { get } /// ຋ var concealedFan: Int { get } /// ͍ᷰԼ͕Γ຋ var openedFan: Int? { get } var isYakuman: Bool { get } static func make(with tiles: [Tile], form: WinningForm, picked: Tile, context: GameContext) -> Self? } खṛ ࿨ྃܗ ࿨ྃṛ ήʔϜঢ়ଶ ໾Λද͢QSPUPDPM

Slide 21

Slide 21 text

public struct அϠΦ۝: YakuProtocol { public let openedFan: Int? = 1 public let concealedFan: Int = 1 public let name = "அϠΦ" public static func make(with tiles: [Tile], ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ form: WinningForm, ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ picked: Tile, ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ context: GameContext) -> அϠΦ۝? { if tiles.allSatisfy({ !$0.isYaochu }) { return அϠΦ۝() } return nil } } શͯϠΦ۝ṛͰͳ͍͜ͱΛνΣοΫ 4XJGU͔Β ͍۬அ͸ೝΊͯΔ

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

ଘࡏܕͰ͸ͳ͍

Slide 24

Slide 24 text

let yaku: Set = [ AnyYaku(அϠΦ۝()), AnyYaku(ฏ࿨()), AnyYaku(໳લਗ਼ࣗ໚࿨()), ] ܕফڈ

Slide 25

Slide 25 text

ҎԼলུ #PYͰϥοϓͯ͠ܕΛফ͢

Slide 26

Slide 26 text

੃಄͸λϓϧ ໘ࢠ΋λϓϧ

Slide 27

Slide 27 text

ήʔϜঢ়ଶ ූᠹ఺

Slide 28

Slide 28 text

ߴ఺๏ ෳ਺ͷ఺਺ղऍ͕Ͱ͖Δͱ͖ʹ࠷ߴͷ݁ՌΛ࠾༻͢Δ͜ͱ

Slide 29

Slide 29 text

ࣣରࢠɺஅϠΦූᠹ఺ ෳ਺ͷ࿨ྃܗͱͯ͠ղऍͰ͖Δέʔε ࣣରࢠܗ

Slide 30

Slide 30 text

ೋഌޱɺஅϠΦූᠹຬ؏఺ ࣣରࢠɺஅϠΦූᠹ఺ ࿨ྃṛ ෳ਺ͷ࿨ྃܗͱͯ͠ղऍͰ͖Δέʔε ࣣରࢠܗ ௨ৗ࿨ྃܗ

Slide 31

Slide 31 text

ࣣରࢠܗ ௨ৗܗ ߴ͍ํΛ࠾༻ ղऍ͕ͭ

Slide 32

Slide 32 text

࿨ྃ഍ͷղऍͰූ͕มΘΔέʔε ࿨ྃṛ ࿨ྃṛʢ྆໘଴ͪʣ ࿨ྃṛʢቕு଴ͪʣ πϞɺ໾഍ූᠹ఺ πϞɺ໾഍ූᠹ఺

Slide 33

Slide 33 text

ղऍ͕ͭ ໾͸ಉ͡ ූ ූ

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

"WBJMBCMFPOXBUDI04

Slide 36

Slide 36 text

giginet/Peafowl