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

Scala NativeでAtCoderに 入門してみた

Avatar for tsatow tsatow
September 09, 2024

Scala NativeでAtCoderに 入門してみた

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

Avatar for tsatow

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
 ※かなり雑に解いてます