Skip to main content

Command Palette

Search for a command to run...

AtCoder: abc239 (Swift)

Published
2 min read

A - Horizon

提出

B - Integer Division

  • コンテスト中はその場で解いたけれど、-∞に向かって切り捨てをするオペレーターを追加した
  • 本当は/_がわかりやすいと思ったけれど、許されなかった

提出

infix operator /-: MultiplicationPrecedence // FloorDiv

/// FloorDiv
/// - Returns: Division result floored towards negative infinity
func /- (lhs: Int, rhs: Int) -> Int {
    if rhs < 0 { return -lhs /- -rhs }
    return lhs >= 0 ? lhs / rhs : (lhs - rhs + 1) / rhs
}

C - Knight Fork

  • 最初、問題をちゃんと読めておらず勘違いした
    • こういった記述に対してまだ慣れていないのも原因か
    • 読み飛ばすことがちょくちょくある
  • 他の人の解答を見ているとパターンの表現方法が異なって興味深い
    • 自分はそれぞれを直接指定してしまった
    • 公式解説でもx、yの両方でも -2...2 の組み合わせを計算で弾いている
    • ここら辺の無駄を減らしたいと思ってしまうのは、不要な最適化なのだろうか
    • 手で直接パターンを書き出すのは、ミスをしそうだとは思う。
  • Swiftだと pow(Int, Int) がなく、不便だなと思う機会が何回かあったので、とりあえず関数を用意してみた
  • オペレーターも考えたが、pow(Double, Double) があるから、それを踏襲
  • より安全にな方にと、返り値はOptionalにしたけれども、気分という感じもする。

提出

/// Power of Ints
/// - Parameters:
///   - base: Base number to be powered
///   - index: The exponent
/// - Returns: Int of the exponential number. `nil` if the result is beyond Int.
func pow(_ base: Int, _ index: Int) -> Int? {
    let result = pow(Double(base), Double(index))
    guard result <= Double(Int.max) && result >= Double(Int.min) else { return nil }
    return Int(result)
}

D - Prime Sum Game

  • 本番は不精して素数の一覧を引っ張ってきた
  • 振り返りではエラトネスの篩で実装
  • 実装する際に素数でない場合のguard else continueしていたときに x += 1せずにループ…
    • while文とかでループする際には最初にdeferでループ条件をつける癖をつけたい
  • 普段あんまりstride(from:though:by)を使わないから慣れたい
  • contains(where:)とかもまだあまり使えていない
  • 提出

  • コンテスト中

  • 振り返り

E - Subtree K-th Max

  • コンテスト終了後だけれども、マージソートで実装した
  • 冷静に考えてみるとPriorityQueueはテンプレートに入れているのだから、それを活用すればよかった
  • 今回の問題はそこまで大きくないのだから、標準のソートでも制限内でできた
  • 自分の使えるツールとそれがどれぐらい使えるのか、判断できるようになりたい
  • 時間外とはいえ、自力でE問題を解けたことはよかった

提出

More from this blog

swift-collectionsのSortedCollectionsを試す方法

swift-collectionsを読み込む際にmainブランチを指定する 2024年4月14日現在のswift-collectionsのリリースバージョン1.1.0では、SortedCollectionsが含まれていません(取り除かれました…)。そのため、SortedCollectionsを利用するにはリリースブランチではなく、mainブランチを利用する必要があります。 package.swiftで指定する場合は、下記のようにdependenciesでブランチを指定します。 // swift-...

Apr 14, 20241 min read

Swift 5.9からの `swift package init` の変更点

先日、 swift package init コマンドを使った際にswift 5.9に合わせた変更点に気づきました。 情報があまりなく、私自身が戸惑ったこともあり、コマンドを実行する時の--typeを基準にどういった変更があったのか概要をまとめたいと思います。 Init template cleanup #6144 Swift Fromsでの議論によると、狙いとしてはシンプルなユースケースへの最適化にあるようです。 system-module、manifestと、empty これまであった、 s...

Dec 25, 20231 min read

アルゴ式: 961 Q4. 二部グラフ判定 (DFS ver.) (Swift)

Q4. 二部グラフ判定 (DFS ver.) なんとか毎日問題は解いていたけれども、ブログは空いてしまった Bool?に対してSwitch文を書こうとしたけれども、Optionalの場合は、.some()を挟むというので方針を変更 提出したコードはその名残が残ってしまった 提出はしていないけれども簡単な修正もした このブログを書いている際に、改めてSwitch分で書いたりもした(1, 2) 提出 AC

Jun 18, 20221 min read

Continuous Tumbling

123 posts

Learning Swift/Swift UI, and competitive programming. (he/him)