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
310
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.6k
FP in Julia « SIDE: J » for JuliaTokai #21
antimon2
1
280
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
410
Julia 新 LTS v1.10 解説 for JuliaTokai #20
antimon2
1
480
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
1
330
Julia クイズ ~API編~ for JuliaTokai #19
antimon2
1
270
Other Decks in Technology
See All in Technology
1人アドミンな私はAWSアカウント申請をSlackで完結したい!
ysuzuki
0
110
「今盗んで、後で解く」に備える ― AWSのポスト量子暗号入門
yama3133
2
280
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
120
20260930_Gemma4_Hands-on
tsho
0
180
Amazon Bedrock Agents ClassicからAmazon Bedrock AgentCoreへ移行した際、ガードレール設定が2箇所に割れた話
matsunobu
0
160
20260929_AmazonGuardDutyの検出通知メールにAWS DevOpsAgentの調査結果を追加する
yhana
1
390
可視化から始めたAI駆動開発_ochi_ver1.01 / AI-Driven Development Starting with Visualization_ver1.01
yayoi_dd
0
110
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
120
The kernel report
ennael
PRO
1
160
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
6
2.1k
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1.1k
HacobuにおけるFDEとは/登壇資料(戸井田 裕貴)
hacobu
PRO
1
630
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
For a Future-Friendly Web
brad_frost
183
10k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Technical Leadership for Architectural Decision Making
baasie
3
580
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
480
Rails Girls Zürich Keynote
gr2m
96
14k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
310
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
910
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
930
Testing 201, or: Great Expectations
jmmastey
46
8.3k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
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、ただしバージョンが古かった り現在通用しないテクニックもしばしばあるので注意)
ご清聴ありがとうございます。