경쟁 프로에서 사용할 수있는 편리한 확장 목록 (Swift)
스스로 무기를 늘려가는 것이 경프로의 재미의 하나라고 생각하고 있으므로, 우선은 스스로 생각하는 것이 추천입니다.
아무래도 모를 때 내 기사가 도움이되면 기쁩니다
소개
이 기사는 Swift/Kotlin 애호회 Advent Calendar 2020의 11 일째 기사입니다.
비어 있기 때문에 묻었습니다.
경쟁 프로에서 사용할 수 있는 편리한 확장 메소드와 컴퓨티드 프로퍼티를 소개합니다.
주의
환경
5.2.1 (2021/01/24 현재 AtCoder)에서도 작동
경쟁 프로에서 사용할 수있는 편리한 확장 목록
자릿수 분할
설명
숫자의 자리수를 분할해, 자리수의 내림차순으로 정렬한 배열로 돌려줍니다.
소스 코드
private extension Numeric where Self: LosslessStringConvertible {
var digits: [Int] { string.digits }
}
private extension LosslessStringConvertible {
var string: String { String(self) }
}
private extension StringProtocol {
var digits: [Int] { compactMap { $0.wholeNumberValue } }
}
출력 예
1.digits -> [1]
32.digits -> [3, 2]
445.digits -> [4, 4, 5]
62096.digits -> [6, 2, 0, 9, 6]
참고 링크
합계
설명
배열 등 순서의 요소의 합계를 돌려줍니다.
소스 코드
private extension Sequence where Element: AdditiveArithmetic {
func sum() -> Element {
reduce(.zero, +)
}
}
출력 예
[1].sum() -> 1
[1, 3].sum() -> 4
[1, 3, 4].sum() -> 8
(1...5).sum() -> 15
참고 링크
Decimal → Int 변환
설명
Decimal
를 Int
로 변환합니다.나는
pow()
의 반환 값을 Int
로 원할 때 사용합니다.소스 코드
import Foundation
private extension Decimal {
var intValue: Int { NSDecimalNumber(decimal: self).intValue }
}
출력 예
pow(2, 3).intValue -> 8
pow(10, 6).intValue -> 1000000
참고 링크
10진수→2진수 변환
설명
10진수 숫자를 2진 문자열로 변환합니다.
digit
에 필요한 충분한 크기의 값을 전달하지 않으면 오버플로우하므로 주의입니다.아직 AtCoder에서 사용한 적이 없습니다.
소스 코드
private extension FixedWidthInteger {
func binaryString(digit: Int) -> String {
var result: [String] = []
for i in 0..<(Self.bitWidth / 8) {
let byte = UInt8(truncatingIfNeeded: self >> (i * 8))
let byteString = String(byte, radix: 2)
let padding = String(repeating: "0", count: 8 - byteString.count)
result.append(padding + byteString)
}
return String(result.reversed().joined().suffix(digit))
}
}
출력 예
0.binaryString(digit: 2) -> "00"
1.binaryString(digit: 2) -> "01"
2.binaryString(digit: 4) -> "0010"
8.binaryString(digit: 8) -> "00001000"
255.binaryString(digit: 8) -> "11111111"
256.binaryString(digit: 8) -> "00000000" // !!!: オーバーフロー
256.binaryString(digit: 12) -> "000100000000"
참고 링크
소수 판정
설명
정수가 소수인지 여부를 결정합니다.
아직 AtCoder에서 사용한 적이 없습니다.
소스 코드
private extension Int {
var isPrime: Bool {
guard self > 1 else {
return false
}
return (2..<self).lazy.filter { self % $0 == 0 } .count == 0
}
}
출력 예
1.isPrime -> false
2.isPrime -> true
3.isPrime -> true
4.isPrime -> false
5.isPrime -> true
참고 링크
회문 판정
설명
정수 또는 캐릭터 라인이 회문인지 판정합니다.
아직 AtCoder에서 사용한 적이 없습니다.
소스 코드
private extension Int {
var isPalindrome: Bool { String(self).isPalindrome }
}
private extension String {
var isPalindrome: Bool { self == String(self.reversed()) }
}
출력 예
1.isPalindrome -> true
2.isPalindrome -> true
10.isPalindrome -> false
11.isPalindrome -> true
100.isPalindrome -> false
101.isPalindrome -> true
참고 링크
결론
이상, Swift/Kotlin 애호회 Advent Calendar 2020의 11일째의 기사였습니다.
참고 링크
Reference
이 문제에 관하여(경쟁 프로에서 사용할 수있는 편리한 확장 목록 (Swift)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uhooi/items/ff1113c337d7a756d580텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)