Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
GOTOH Shunsuke
December 08, 2024
Technology
0
170
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末 LT 大会 2024
あなたの知らない(概ね知らなくても良い)Juliaの世界
JuliaLangJa 年末 LT 大会 2024 LT発表資料
GOTOH Shunsuke
December 08, 2024
Tweet
Share
More Decks by GOTOH Shunsuke
See All by GOTOH Shunsuke
JuliaTokaiとしてはこれが最後かもしれない(仮) for NGK2026S
antimon2
0
170
JuliaでApp(仮) for JuliaTokai #23
antimon2
0
130
関数型まつりレポート for JuliaTokai #22
antimon2
0
250
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
1.4k
FP in Julia « SIDE: J » for JuliaTokai #21
antimon2
1
210
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
350
Julia 新 LTS v1.10 解説 for JuliaTokai #20
antimon2
1
370
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
1
280
Julia クイズ ~API編~ for JuliaTokai #19
antimon2
1
230
Other Decks in Technology
See All in Technology
小さく始めるBCP ― 多プロダクト環境で始める最初の一歩
kekke_n
1
410
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
160
Cosmos World Foundation Model Platform for Physical AI
takmin
0
880
Data Hubグループ 紹介資料
sansan33
PRO
0
2.7k
Tebiki Engineering Team Deck
tebiki
0
24k
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
640
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.4k
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
130
Greatest Disaster Hits in Web Performance
guaca
0
230
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
170
20260204_Midosuji_Tech
takuyay0ne
1
150
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
My Coaching Mixtape
mlcsv
0
48
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
94
Odyssey Design
rkendrick25
PRO
1
490
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
AI: The stuff that nobody shows you
jnunemaker
PRO
2
250
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
50
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
100
Technical Leadership for Architectural Decision Making
baasie
1
240
How GitHub (no longer) Works
holman
316
140k
A Tale of Four Properties
chriscoyier
162
24k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
あなたの知らない (概ね知らなくても良い) Juliaの世界 2024/12/08 JuliaLangJa 年末 LT 大会 2024 antimon2(後藤
俊介)
お品書き • お前誰よ? • 簡単な Julia の紹介 • JuliaTokai の紹介
• 本編
お前誰よ?
自己紹介 • 名前:後藤 俊介 • 所属:有限会社 来栖川電算 • コミュニティ:🌟JuliaTokai, 🌟機械学習名古屋,
⭐JuliaLangJa, Ruby東海, Python東海, … • 言語:Julia, Python, Ruby, … • SNS等: (@antimon2) • SNS等(2): (@antimon2.jl) • 著書:実践Julia入門
本編
あなたは、こんな書き方知ってますか?
① ~=◯◯
① ~=◯◯ (基本) • Julia の演算子は普通に(再)代 入できる! ◦ 関数を代入すると演算式でシンプ ルにコードを書くことができる
◦ ~ の場合、= との間の空白も省略 できる(~= という複合代入演算子 が存在しないため) ◦ ※普通にやると Base の演算子を 上書きしてしまうので注意! let ~=+ 2~3 # == 2 + 3 end #> 5 let ~=binomial (2:8).~2 # == binomial.(2:8, 2) end #> [1, 3, 6, 10, 15, 21, 28] # 三角数
① ~=◯◯ (応用) • for 式でも利用可能(ローカル スコープになるので安全) • コードゴルフの基本テク: ~=split
とすると ~s とも書け る(空白文字で分割)し s~◦ とも 書ける(右オペランドの値で分 割) → • (あと実は(予約語の後かつ)~の前の空 白も省略できる) for~=(+,-,*,/) println(2~3) end ## 5 ## -1 ## 6 ## 0.6666666666666666 let~=split,s="1 2 3\n4 5 6\n7 8 9" stack(.~(s~'\n'), dims=1) end #> 3×3 Matrix{SubString{String}}: #> "1" "2" "3" #> "4" "5" "6" #> "7" "8" "9"
② a>b=◯◯
② a>b=◯◯ (基本) • Julia の演算子は 《演算式》 =◯◯ という形で定義できる! ◦
比較演算子を定義する場合、戻り 値が Bool でなくても定義できる (エラーにはならない) ◦ ※普通にやると Base の演算子を 上書きしてしまうので注意!(2回 目)(多重定義(メソッド追加)では なく上書きとなることに要注意!) let a > b = a % b == 0 6 .> (1:6) end #> [true, true, true, false, false, true] let a>b=a+2b 6 .> (1:6) end #> [8, 10, 12, 14, 16, 18]
② a>b=◯◯ (応用) • コードゴルフの基本テク: ◦ 比較演算子の定義中に同じ比較演 算子が出てきても良い(再帰関数 の定義になる) ◦
比較演算子は Chain できるの で、再帰関数の終了条件を簡潔に (というかトリッキーだけど短く) 書ける! # 1以上N未満のフィボナッチ数を列挙( 1行ずつ出力) let N=100 n>r=println(r.den)≠r.num<n>1+1/r N>1//1 end ## 1 ## 1 ## 2 ## 3 ## 5 ## 8 ## 13 ## 21 ## 34 ## 55 ## 89
③ x.|>[f,g,h]
③ x.|>[f,g,h] (基本) • Julia には ブロードキャスティ ング という機能があり、関数を 手軽にベクタ化・次元拡張できる
• |>(パイプライン演算子)を組み 合わせると「1つ(または複数)」 の値を 複数の関数に適用 する こともできる! # 普通のブロードキャスティング sin.([1, 2, π/4]) #> [0.841471, 0.909297, 0.707107] # 関数適用のブロードキャスティング π/4 .|> [sin, cos, tan] #> [0.707107, 0.707107, 1.0] # 複数vs複数の例 [1 2 π/4] .|> [sin, cos, tan] #> [0.841471 0.909297 0.707107 #> 0.540302 -0.416147 0.707107 #> 1.55741 -2.18504 1.0 ]
③ x.|>[f,g,h] (応用) • コードゴルフ:Quine ◦ 現在見つかっている最短の Julia Quine(32bytes) ◦
補足:Quine とは(色々な定義が あるがここでは)ソースコードと全 く同一の出力をするプログラムの こと(ソースコードを読み込んで出 力するコードは反則)。 ".|>[show,print]".|>[show,print] ## ".|>[show,print]".|>[show,print] # 解説. # 1. `"a".|>show` は `"a"` と出力される # 2. `"a".|>print` は `a` と出力される # 3. `"a".|>[show,print]` は `"a"a` と出 力される # 4. `".|>[show,print]".|>[show,print]` は `".|>[show,print]".|>[show,print]` と出力される
④ A'B
④ A'B (基本) • A'B は A'*B と等価(乗算演算 子の省略、2x==2*xとかと同じ) •
v'v (v isa AbstractVector) なら ベクトルの内積 が計算できる • @.A'B(A'.*B)だと転置行列との 要素ごとの積(ブロードキャスティン グ) v = [1, 2, 3]; [100, 10, 1]'v #> 123 # 各桁の数字から10進数値を構築 v'v #> 14 # 内積 @.v'v # == v'.*v #> 3×3 Matrix{Int64}: #> 1 2 3 #> 2 4 6 #> 3 6 9
④ A'B (応用) • コードゴルフ:素数列挙 ◦ 2桁以下の素数列挙なら最 短(30bytes, 28chars) ◦
もっと大きい素数列挙だともっと 短く書く別の方法がある(というか そもそもメモリ使用量も計算量も O(N²)なので決して効率は良くな い) R=2:99;@.R[R∉[R'R]]|>println ## 2 ## 3 ## 5 ## 7 ## :《中略》 ## 83 ## 89 ## 97
⑤ A⊆B⊆A
⑤ A⊆B⊆A (基本) • A⊆B⊆A は issetequal(A, B) と等価(つまり「要素の組合 せが一致していれば
true」) • ご想像の通り コードゴルフ (ショートコーディング)以外の応 用は(たぶん)ありません!! A = 1:3; B = [3,1,2,1]; C = [3,1,4]; D = [3,1,2,4]; A⊆B⊆A #> true A⊆C⊆A #> false A⊆D⊆A #> false
⑤ A⊆B⊆A (応用) • コードゴルフ:順列列挙 ◦ A⊆R は必ず成立するので R⊆A とだけ書いている点も
注目。 ◦ その他色々な技を駆使しているの で(お暇な方は)ぜひ解読してみて ください! A>R=R⊆A≠println(join(A,-)),R.|>x->A<A∪x>R []>1:4 ## 1-2-3-4 ## 1-2-4-3 ## 1-3-2-4 ## 1-3-4-2 ## :《中略》 ## 4-2-1-3 ## 4-2-3-1 ## 4-3-1-2 ## 4-3-2-1
⑥ A<A∪x
• A∪x は [A;x] と大体同じ (!isa(A, Set) かつ x∉A ならば)
• A<A∪x は x∉A (!in(x,A))と 大体同じ ◦ 配列の大小比較は各要素の 辞書 式順序 比較(文字列比較と同様) ◦ なので「短い方の配列と要素が同 じ」ならば長い方が大きくなる! ◦ A の要素が大小比較できる必要は あり ⑥ A<A∪x (基本) A = 1:3; all(A∪x==A for x in 1:3) #> true all(A∪x==[A;x] for x in 4:10) #> true all(A<A∪x for x in 4:10) #> true
⑥ A<A∪x (応用) • コードゴルフ:順列列挙(再) ◦ 比較の Chain で A∪x
を再帰 処理に渡せる(バックトラッキン グ) ◦ その他色々な技を駆使しているの で(お暇な方は)ぜひ解読してみて ください! A>R=R⊆A≠println(join(A,-)),R.|>x->A<A∪x>R []>1:4 ## 1-2-3-4 ## 1-2-4-3 ## 1-3-2-4 ## 1-3-4-2 ## :《中略》 ## 4-2-1-3 ## 4-2-3-1 ## 4-3-1-2 ## 4-3-2-1
まとめ
まとめ • Julia でコードゴルフも意外と パズル要素が多くて楽しいよ! • Julia 楽しいよ!
参考
参考文献・リンク等 • Code Golf (コードゴルフコンペサイト) ◦ Wiki: Julia (JuliaのコードゴルフテクTips) •
Tips for golfing in Julia (コードゴルフTips、ただしバージョンが古かった り現在通用しないテクニックもしばしばあるので注意)
ご清聴ありがとうございます。