Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末...
Search
GOTOH Shunsuke
December 08, 2024
Technology
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末 LT 大会 2024
あなたの知らない(概ね知らなくても良い)Juliaの世界
JuliaLangJa 年末 LT 大会 2024 LT発表資料
GOTOH Shunsuke
December 08, 2024
More Decks by GOTOH Shunsuke
See All by GOTOH Shunsuke
JuliaTokaiとしてはこれが最後かもしれない(仮) for NGK2026S
antimon2
0
320
JuliaでApp(仮) for JuliaTokai #23
antimon2
0
190
関数型まつりレポート for JuliaTokai #22
antimon2
0
310
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
1.7k
FP in Julia « SIDE: J » for JuliaTokai #21
antimon2
1
280
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
420
Julia 新 LTS v1.10 解説 for JuliaTokai #20
antimon2
1
490
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
1
340
Julia クイズ ~API編~ for JuliaTokai #19
antimon2
1
280
Other Decks in Technology
See All in Technology
CSS2026:OWS研究会・招待講演「世界観を、実装する」
atsush1_sada
2
130
その Valkey 使いこなしていますか?
onk
PRO
5
1.8k
「私が一番顧客に詳しい」を捨てる~ 全員が一次情報に精通する開発チームをつくり、PMが次のボトルネックへ染み出すまで
kaminashi
2
1.1k
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
3
990
Turning Repos into the Product Second Brain with an LLM Wiki
linedevth
0
130
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.4k
CTO Night|NotionのAIエージェントとFDE
kzkhykw1991
0
300
freeeにおける AI を用いた ブラウザ動作確認の自動化の取り組み
freee
PRO
0
110
野蛮なアジャイル [サイボウズ発!]組織の常識を覆した反骨のスクラム実践記 / Barbaric Agile - Enterprise Agile Study Group
ama_ch
0
120
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
250
LLM-as-a-Judgeは本当に信頼できるのか――評価器を評価する話
taka_aki
2
1k
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
120
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
810
Build your cross-platform service in a week with App Engine
jlugia
234
19k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
It's Worth the Effort
3n
188
29k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
750
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
The Cost Of JavaScript in 2023
addyosmani
55
10k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
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、ただしバージョンが古かった り現在通用しないテクニックもしばしばあるので注意)
ご清聴ありがとうございます。