Xcode10.1でiPadOS13をビルドする
現象
先日かいたこの記事に従って13.3のデバイスサポートファイルをよしなに配置する
すると
dyld_shared_cache_extract_dylibs failed xcode
というエラーが出てビルドに失敗するようになった
対処法
$ cd ~/Library/Developer/Xcode/iOS DeviceSupport/13.3 (17C54)/Symbols/System/Library/Caches/com.apple.dyld $ touch .processed_dyld_shared_cache_arm64e
これでXcodeを再起動すればビルドできるようになった
参考
LeetCode#5 Merge Two Sorted Lists
2つのソート済みのListがあるからそれをマージしろっていう問題。 学生の時にCか何かでやった気がする
class Solution { func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { if l1 == nil {return l2} if l2 == nil {return l1} var result:ListNode? = ListNode.init(0) if l1!.val < l2!.val { result = l1 result!.next = mergeTwoLists(l1!.next, l2) } else { result = l2 result!.next = mergeTwoLists(l1, l2!.next) } return result } }
これはほぼ最適解ママだった、気がする
LeetCode#4 ZigZag Conversion
今日もやった。受け取った文字列を指定された行数でジグザグに配置したものを変えす。説明が難しい。
たとえば、"あいうえおかきくせこさしすせそ" という文字列と3を引数に受け取ったら、
になる。行数が4で指定されたら
になる。
公式の問題を読んだほうが良いかもしれない。
解いたコードがこれ。
ジグザグが一回りする文字数は、2 * numRows - 2で求められる。
上から1行ごとに計算していくとよさそうだった。
class Solution { func convert(_ s: String, _ numRows: Int) -> String { if numRows == 1 {return s} let length:Int = s.count let cycleLen:Int = 2 * numRows - 2 var ans:String = "" for i in 0..<numRows { for j in stride(from: 0, to: length - i, by: cycleLen) { ans.append(s[s.index(s.startIndex, offsetBy: i + j)]) if (i != 0) && (i != numRows - 1) && (j + cycleLen - i < length) { ans.append(s[s.index(s.startIndex, offsetBy: j + cycleLen - i)]) } } } return ans } }
この方法の他にもソートする方法があるらしい。
LeetCode#3 Palindrome Number
今日はEasyのPalindrome Numberをやった。
回文数っていうらしい。
数字を逆さまにした時に同じならtrue, 違うならfalseを返す。(負の数の場合、マイナスも一文字としてカウントするので問答でfalseになる)
先日のReverse Integerと同じように一の位から順番にポップ&プッシュして回分数を作るといい。 で、愚直にやったのがこれ。
class Solution { func isPalindrome(_ x: Int) -> Bool { var origin:Int = x var palindrome:Int = 0 while origin > 0 { palindrome = palindrome * 10 palindrome += origin % 10 origin = origin / 10 } return palindrome == x } }
Stringにキャストして、String.reversed()したら一行でできるらしい。
LeetCode#2 Reverse Integer
Intで来る数字を逆転させる問題。123だったら321に。
-2の31から2の31乗-1まで許容してその範囲を超えると0を返す。
で書いたコードがこれ。
class Solution { func reverse(_ x: Int) -> Int { var num = x var res:Int = 0 var tmpArray: [Int] = [] let isNegative:Bool = num < 0 num = isNegative ? num * (-1) : num while num > 0 { tmpArray.append(num % 10) num = num / 10 } var i:Int = 1; tmpArray = tmpArray.reversed() for tmpNum in tmpArray { res = res &+ tmpNum * i i *= 10 } res = isNegative ? res * (-1) : res return res > Int32.max || res < Int32.min ? 0 : res } }
LeetCodeはアルゴリズムを教えてくれるのでそれをみながらコードを書き直してみる。
基本的には文字列の反転と同じように最後の桁をポップして結果の先頭にプッシュする処理を繰り返すことでできる。 オーバーフローのチェック方法は、(ポップした数字+今までの計算結果)/10がSwiftでいうInt32.maxと等しいかつ、ポップした数字が7を超えていれば正の数のオーバーフローになる。 らしいんだけど、今回の問題をSwiftで解く分には、Int型で計算してれば2の31乗でオーバーフローは起きないのでループの最後にチェックすれば良さそう
最終的にこうなった
class Solution { func reverse(_ x: Int) -> Int { var num:Int = x var res:Int = 0 while num != 0 { let pop:Int = num % 10 num = num / 10 res = res * 10 + pop if res > Int32.max || res < Int32.min { return 0 } } return res } }
Swiftの型についてはここを参考にした
応用情報技術者試験に合格したので勉強法を書いとく
タイトル通り。令和元年秋期の試験に合格した。
勉強期間としては1ヶ月位。で、合格点ギリギリだった。両方60点前半
このくらいやれば合格ラインの上くらいに立てるのか、くらいに思ってもらえればと。
前提
- ITパスポートを学生時代にとった、基本情報はとってない
- 仕事で何かしらの言語でプログラミングをしている
- 仕事でSQLを書いたことがある このくらいのレベル感でした。
用意したもの
- Trelloアカウント
- 参考書 午前はこれ
午後はこれ
やったこと
午前問題を一通り読む
5日位で午前問題の参考書を流し読みした。こういう問題があるんだなってわかればOKくらいの気持ちでやった。やらなくてもよかったかもしれない。もしくは5日もいらなかったかも。
次の過去問をひたすら解くほうが効果的だと思う。
午前の過去問をひたすら解く(試験3週間前〜)
ひたすら解いた。
下記の過去問道場で3年前の試験回から順に問題を解いていって、正答率が80%を超えなかったらもう1周同じ問題を解く。80%を超えたら1つ前の回に進むっていうのを繰り返してた。
www.ap-siken.com
これの正答率と進捗をTrelloで管理してた。普通に今やってる回くらいは覚えられるんだけどこうするとこんだけやったんだなぁみたいな気持ちになるのでモチベ維持に良い。(言うほどたくさんやってないけども)
飽きたらたまに模擬試験形式で問題を解いてみて自分の今の実力を確認したりしてた。自分は試験1週間前で正答率70〜80%くらいだった気がする。
午後の問題を解く(試験1週間前〜)
午後の参考書を読みながら各章の後ろにある感じの問題を解いてた。午後は選択式なので自分の得意そうな分野を絞っておくといい。困ったらマネジメント系を選んでおけば午前の分野+一般常識で答えられるやつが多い気がする。
つらくなったり飽きたりしたら午前の過去問を解く。
あとは試験を受けるだけ。
がんばって起きる。
自分が選んだ午後問題は以下
- 情報セキュリティ
- データベース
- 情報システム開発
- プロジェクトマネジメント
- サービスマネジメント
xcode10.1ではiOS12.4.1をサポートしてないと言われた時
レイアウトの調整をしていてiPadで確認しようとビルドしようとした所下記のようなエラーが。
This iPad Pro (12.9-inch) (3rd generation) is running iOS 12.4.1 (16G102), which may not be supported by this version of Xcode.
xcode10.1ではiOS12.4.1をサポートしてませんとのこと。 ぐぐってみると以下のQiitaが出てきた。
これの対策2をとった。 1.下記から今回ビルドしたいOSのビルドサポートファイルをダウンロードする。
2.ダウンロードしたファイルを下記のディレクトリに置く Application/Xcode/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
3.xcodeを再起動
これで解決