PaizaのDランクで苦戦
Dランクくらい簡単でしょうと思ってましたが、何気にはまってしまいました。
Paizaの問題は基本的に公開などしてはいけないのですが、
レベルアップ問題集に関しては公開しても問題ないそうなので苦戦したところをまとめました。
なお、このコーナー内の問題については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。 授業や研修にもご利用いただけますので、ぜひ教材などにもお使いください。
解いてた問題
aとbを足した数を出力して下さい
入力された値aとbを足した結果を表示する問題
やりたいことの流れ。
- 文字列の配列を数値に直す。
- 1件目と2件目を足して表示。
書いたコード
mapを使用して新しく数値型の配列を生成後、Reduceで配列の合計値を返却。
var numbers = lines.map(Number).reduce((a, b) => a + b); console.log(numbers);
提出してみましたが採点結果10点でひどい結果
JavaScriptの標準入力ではまる。
原因はこれ。
※「掛け算」の問題では入力が改行区切りで与えられましたが、今回は半角スペース区切りで与えられます。
標準入力のパターン
改行型
1 1
reader.on('line', (line) => { lines.push(line); });
連続型
11
reader.on('line', (line) => { input_lines = line.split(" ") });
今回の場合は連続型パターンを使わないといけない。
問題はよく読みましょう
参考サイト
SwiftUITutorial Building Lists and Navigation②
SwiftUITutorialで学んだことをまとめていきます。
Create the Row View
Section2で学べること
- 構造体の表示
- layout作成
Landmarkの表示
Jsonファイルから取得したデータが格納されているLandmark構造体を表示させる。
HStackはUI 部品を横方向に複数配置する時に使う。
今回の場合はlandmark.imageとTextを横並びに配置している。
.resizable()で画像のリサイズを行う。
.frame(width: 50, height: 50)で幅50,高さ50指定。
Spacer()で幅いっぱいにスペースを追加する。
struct LandmarkRow: View { var landmark: Landmark var body: some View { HStack { landmark.image .resizable() .frame(width: 50, height: 50) Text(landmark.name) Spacer() } } }
SwiftUIのPreview機能
これがないとPreviewが表示されない。
LandmarkRowにlandmarks配列の最初の一件を指定
struct LandmarkRow_Previews: PreviewProvider { static var previews: some View { LandmarkRow(landmark: landmarks[0]) } }
Customize the Row Preview
Section3で学べること
- PreviewLayoutの変更
PreviewLayout
Groupでまとめて、複数のPreviewを表示させる。
previewLayout(.fixed(width: 300, height: 70))でPreviewのサイズを指定できる。
struct LandmarkRow_Previews: PreviewProvider { static var previews: some View { Group { LandmarkRow(landmark: landmarks[0]) LandmarkRow(landmark: landmarks[1]) } .previewLayout(.fixed(width: 300, height: 70)) } }
LandmarkRow.swift
import SwiftUI struct LandmarkRow: View { var landmark: Landmark var body: some View { HStack { landmark.image .resizable() .frame(width: 50, height: 50) Text(landmark.name) Spacer() } } } struct LandmarkRow_Previews: PreviewProvider { static var previews: some View { Group { LandmarkRow(landmark: landmarks[0]) LandmarkRow(landmark: landmarks[1]) } .previewLayout(.fixed(width: 300, height: 70)) } }
SwiftUITutorial Building Lists and Navigation①
SwiftUITutorialで学んだことをまとめていきます。
Create a Landmark Model
Section1で学べること
struct
構造体のことで以下の特徴がある
- 継承できない
- クラスは参照型で構造体は値型
Hashable
hashについてはこちら
tokuty.hatenablog.com
Codable
API通信等で取得したJsonやプロパティリストを任意のデータ型に変換するプロトコル
これがないとJsonからStructのデータ変換が上手くいかない。
CLLocationCoordinate2D
位置情報を扱うときの型
coodinate.latitude:緯度 double型
coodinate.longitude:経度 double型
ファイルまでのパスを取得
guard let file = Bundle.main.url(forResource: filename, withExtension: nil) else { fatalError("Couldn't find \(filename) in main bundle.") }
ファイル内容を取得
do { data = try Data(contentsOf: file) } catch { fatalError("Couldn't load \(filename) from main bundle:\n\(error)") }
Jsonデータをデコード
do { let decoder = JSONDecoder() return try decoder.decode(T.self, from: data) } catch { fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)") }
作成したファイル
Landmark.swift
import Foundation import SwiftUI import CoreLocation struct Landmark: Hashable, Codable { var id: Int var name: String var park: String var state: String var description: String private var imageName: String var image: Image { Image(imageName) } private var coordinates: Coordinates var locationCoordinate: CLLocationCoordinate2D { CLLocationCoordinate2D( latitude: coordinates.latitude, longitude: coordinates.longitude) } struct Coordinates: Hashable, Codable { var latitude: Double var longitude: Double } }
ModelData.swift
import Foundation var landmarks: [Landmark] = load("landmarkData.json") func load<T: Decodable>(_ filename: String) -> T { let data: Data guard let file = Bundle.main.url(forResource: filename, withExtension: nil) else { fatalError("Couldn't find \(filename) in main bundle.") } do { data = try Data(contentsOf: file) } catch { fatalError("Couldn't load \(filename) from main bundle:\n\(error)") } do { let decoder = JSONDecoder() return try decoder.decode(T.self, from: data) } catch { fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)") } }
勉強会㉑
勉強会
今週はLT会お休みで普通のもくもく会してました。
Pythonの実行環境を揃える
Anaconda install
Pythonディストリビューション
www.anaconda.com
PyCharm install
やったこと
Pythonのパッケージ管理システムでライブラリをinstall
pyautogui ・・・キャプチャを撮ったり、マウス操作ができるライブラリ
pipコマンド
pip install pyautogui
キャプチャの撮り方
import pyautogui screenshot = pyautogui.screenshot() screenshot.save('キャプチャ.png')
キャプチャ画像読み込み
from PIL import Image img = Image.open('スクリーンショット.png') img.show()
1秒間停止
import time time.sleep(1)
完成したコード
import pyautogui import time from PIL import Image num = 0 sc = pyautogui.screenshot() while True: if num == 10: break print(num) sc.save(f'スクリーンショット{num}.png') img = Image.open(f'スクリーンショット{num}.png') img.show() num += 1 time.sleep(1) print('finish')
4月の振り返り。
今月からKPTはやめて普通に振り返ろうかと思います。
最近の出来事
- 6月から次の案件(Javaの予定
- 学習効率アップ
- FE試験が6月
- Swiftを学び始めた
- 宣言駆動開発を始める
学習効率アップの仕方
学習の効率化を進めていきたいので学習の見直しを図りたいと思います。 直近の課題は、学習時間が長いわりに結果が出ていない気がするので、学習方法の見直しをすること。 そこで効率の良い学習方法について調べてみると、驚きの事実が発覚しました。
プログラミングの勉強する時によく「一つの言語をしっかり学んでから次に行きなさい」というアドバイスが多いですが、
自分の場合はずっと続けていると飽きしまったり、興味があることがたくさんあるので、
ずっと好きなことを同時並行で学習し続けていました。 (アンチパターン 笑
実はこのやり方はインターリービングという勉強方法で同じ勉強を何時間もずっと続けるのではなく、
別の勉強も並行して進めていくことで学習効率アップに繋がる勉強方法でした。結果的にちゃんとしたやり方のようなので今後も続けて行きたいと思います。
スケジュールを決めて行動していく。
集中型学習ではなく分散型学習を進めていく。よくある一夜漬けの丸暗記はせずに時間を決めてみっちり学習を行い、集中して取り組むことで短時間でも結果を出す学習スタイルを確立したい。
特に資格をとるためだけの一夜漬けに近い形の勉強法は意味がないと思うので長くゆっくり時間をかけて学習していきたい。
そのためにはスタートとゴールを明確にして一日ごとのタスクを細分化していくことが重要である。
宣言駆動開発
毎週土曜日の朝、前日までにテーマを決めてLTをするようにしています。
意外とこれが良質なアウトプットになっているので今後も続けていく。
得られる事は資料作り、説明力、自ら考える能力などたくさんあります。
ノージャンルで行っているため、新たな発見もあり、宣言駆動開発おススメです。
SwiftUIアプリをiPhoneにinstall
SwiftUIアプリをiPhoneにinstallした際のまとめ。
やることリスト。
installまでの参考サイト
キーチェーン作成後、buildしてinstallするまで少し詰まったので以下にまとめました。
iPhone端末へのInstall
赤線の部分をinstall先のiPhone端末に変更する
もし表示されない場合はiPhone端末の許可設定を行いましょう。
それでもできない場合は接触が悪い可能性があるのでUSBの確認をしましょう。
Test.xcodeprojを選択する。
Teamを選択する。
Build実行後にiPhone端末の許可設定を行う。
設定 ⇨ 一般 ⇨ デバイス管理 installの許可をしましょう。
無事iPhone端末にinstall完了。
参考サイト
SwiftUIプロジェクト作成方法
【Xcode】超初心者のためのSwiftUIチュートリアル1|やこ|note
勉強会⑳
Hands-on and Lightning Talks
開催日時 2021年5月3日(月) 7:00-9:00
本日の発表者は私と、koboriさんとNakagawaさんの3人!
発表者 | テーマ | 資料 | 時間 |
---|---|---|---|
Nakagawa | Gitで難儀してる話 | 5分 | |
Toku | BootStrapのGridLayout | 発表用資料 | 20分 |
Kobori | BootStrapダウンロードして使うやり方(2つの方法)とカスタマイズについて | 45分 |
各テーマの感想
Gitで難儀してる話
gitのワークフローを使わずに開発を始めた結果、失敗した話。
mainブランチのみで開発を行っているため、main→派生ブランチ→派生ブランチのような開発フローで行ったが、
何をしているかわからなくなった。
結局mainに反映する際にcherrypickで必要なコミットのみpushした話。
BootStrapのGridLayout
GridLayoutを使うと簡単にレスポンシブ対応した、レイアウトを作成できる。
基本的に横幅を12分割するので、5分割などしたい場合は、独自のcssを定義する必要がある。
BootStrapダウンロードして使うやり方(2つの方法)とカスタマイズについて
前回はCDNから読み込んだが、今回はcss、jsファイルを直接サイトからDLして読み込む方法。
DLしたファイルを改造してオリジナルのcss、jsを作成する。
Scssも対応しているため、やり方の簡単な紹介。