Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scala NativeでAtCoderに 入門してみた

tsatow
September 09, 2024

Scala NativeでAtCoderに 入門してみた

Scala NativeでAtCoderに入門してみた話です。

tsatow

September 09, 2024
Tweet

More Decks by tsatow

Other Decks in Programming

Transcript

  1. 自己紹介
 名前: 佐藤 貴比呂
 会社: SIer => SIer => 株式会社kubell

    趣味: 
 - 釣り
 - 運動(サッカー→ホッケー→柔道→チアリーディング)
 SNS: - Twitter(Satoooooooooooo) - Github(tsatow)

  2. なんでAtCoderに入門?
 - 最近コード書いてない
 - ここ1年弱の主な仕事→ミドルウェアのリプレイス等→検証タスク多め 
 - プライベートが忙しい(言い訳)
 - 最近はイカ釣りにどハマりしてる

    
 - 2-7月は毎週マルイカを追ってた 
 - 直近はヤリイカ・スルメイカ 
 - もうすぐアオリイカ開幕ですね^^ 
 - エンジニアならプライベートもコードを書くものなのでは? 
 - すみません、釣りが本業なので... 
 
 →隙間時間にコツコツやれる競プロが良さそう

  3. なんでScala Native?
 - 勉強を兼ねてRustでやる?
 - 隙間時間にサクッとできなさそう 
 - 知ってる言語でやりたい 


    
 - なんかJVM言語は起動時間が含まれるので不利らしい...(知らんけど)
 
 うーん...🤔
 

  4. とりあえず何から始める?
 いきなりコンテストには参加したくない。オレは慎重な男...
 
 
 - とりあえず過去問精選10問でも解いてみるか...
 - AtCoderの過去問の中からけんちょんさんが精選したもの 
 -

    難易度は(ただAC通すだけなら)易しめで入門にオススメっぽい 
 - 自分にはちょうど良さそう 
 ???「何十年も修行して達人にでもなるのを待ってから戦場に出...」
 ぼく「うるせえ!!!!」

  5. で、実際使ってみての感想
 - めっちゃ速い
 - 省メモリ
 - が、結構ハマった
 - Javaのライブラリでサポートされてないものがある(java.util.Scannerとか) 


    - 実行してみないとわからない 
 - テストの実行時でトラブル 
 - ScalaTest、munitで上手く動かなかった 
 - とりあえず公式ドキュメントで言及されてるJUnitを使うのが無難かも? 
 - エラーが発生した時にUnknown Sourceだらけで辛い 
 - (単に準備不足すぎるだけかも...) 
 Exception in thread "main"java.lang.NumberFormatException: For input string: "" at java.lang.Integer$.fail(Unknown Source) at java.lang.Integer$.parseInt(Unknown Source) at java.lang.Integer$.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at scala.collection.StringOps$.toInt$extension(Unknown Source) at Main$.$anonfun$2$$anonfun$1(Unknown Source) at Main$$$Lambda$4.apply(Unknown Source) at scala.collection.ArrayOps$.map$extension(Unknown Source) at Main$.$anonfun$2(Unknown Source) at Main$$$Lambda$2.apply$mcII$sp(Unknown Source) at scala.runtime.java8.JFunction1$mcII$sp.apply(Unknown Source) at scala.collection.StrictOptimizedIterableOps.strictOptimizedMap(Unknown Source) at scala.collection.immutable.Range.strictOptimizedMap(Unknown Source) at scala.collection.StrictOptimizedIterableOps.map(Unknown Source) at scala.collection.immutable.Range.map(Unknown Source) at Main$.main(Unknown Source) at Main.main(Unknown Source) at <none>.main(Unknown Source)
  6. JVM版と比較すると?
 
 
 実行環境
 実行時間(ミリ秒)
 メモリ(KB)
 提出から結果出るまで(秒) 
 第1問
 ABC086

    A
 Scala Native
 3
 4688
 58
 Scala(JVM)
 226
 51776
 17
 第2問
 ABC081 A
 Scala Native
 2
 4668
 58
 Scala(JVM)
 203
 51268
 19
 第3問
 ABC081 B
 Scala Native
 3
 5896
 48
 Scala(JVM)
 248
 52584
 21
 第4問
 ABC087 B
 Scala Native
 9
 9424
 58
 Scala(JVM)
 287
 56572
 17
 第5問
 ABC083 B
 Scala Native
 9
 9424
 58
 Scala(JVM)
 287
 56572
 17
 ※かなり雑に解いてます
  7. JVM版と比較すると?
 
 
 実行環境
 実行時間(ミリ秒)
 メモリ(KB)
 提出から結果出るまで(秒) 
 第6問
 ABC088

    B
 Scala Native
 1
 4940
 68
 Scala(JVM)
 232
 52000
 21
 第7問
 ABC085 B
 Scala Native
 1
 4016
 48
 Scala(JVM)
 211
 52076
 20
 第8問
 ABC085 C
 Scala Native
 65
 16076
 63
 Scala(JVM)
 354
 63608
 26
 第9問
 ABC049 C
 Scala Native
 5
 8584
 46
 Scala(JVM)
 354
 62996
 22
 第10問
 ABC086 C
 Scala Native
 583
 284700
 59
 Scala(JVM)
 571
 78892
 23
 ※かなり雑に解いてます