すらぼうの開発ノート

モバイルアプリエンジニアのメモ

【Python】選択ソート、挿入ソートの実装

選択ソート 配列から最小・最大値を探し,先頭要素と交換することを繰り返すことで整列を行う方法。 未整列部分の値を全て確認するので、等差数列的に計算数が加算され、時間計算量は0(n2)必要になる。 def selection_sort(arr): # 結果を出力するリスト res…

【Python】動的計画法

動的計画法 解決するべき問題を簡単に解決できる細かい問題に分割し、その細かい問題の解答を利用して大きな問題を解くこと。 動的計画法に向いている問題 再帰的な問題は向いている。 また最適部分構造(親問題が最適化を問うており、その子問題も同様に最適…

【Python】エラトステネスの篩を実装する

エラトステネスの篩 素数を見つけるためのアルゴリズム。 素数の倍数を除外していき、全ての数値を走査して最後まで除外されなかった数値群が素数となる。 ja.wikipedia.org 実装 # n以内の素数をリストで返す def sieve_of_eratosthenes(n): n += 1 if n ==…

【Python】式内展開、文字列補間(String Interpolation)の方法

fキーワードをクオートの前につける。 変数は{}で括る。 name = "taro" age = 20 print(f"My name is {name}. I am {age} years old.") # My name is taro. I am 20 years old. ランキング参加中プログラミング

【Python】2次元の正方行列をリスト内包表記で生成

[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24]] 上記の正方行列は次のように記述することで生成できる。 myMatrix = [[i + 5 * j for i in range(5)] for j in range(5)] print(myMatrix) # [[0, 1…

【Python】リスト(List)型データの生成・操作方法まとめ

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 リスト(List) 生成 直接要素を指定 リスト内包表記 文字列をリストに変換 任意の値を任意個数要素にもつリストを生成 操作 読み取り 特定インデックスの値 for文を使用して繰り返し処理 後…

【Python】インスタンスが格納されているアドレス

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 インスタンスを生成すると、その実態はヒープ領域に格納される。 以下のようにインスタンスが格納されているヒープ領域のアドレスを取得できる。 class Person: def __init__(self, name): se…

【Python】メモ化再帰による再帰処理の効率化

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 メモ化再帰 再帰処理において、同じ引数の計算を何度も行う場合がある。 そこで計算結果をメモとしてキャッシュして効率化をはかること。 例えば以下が計算結果をキャッシュする前。 (例とし…

【Python】構文エラーと論理エラー

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 構文エラー (syntax error) コマンドの中に誤った文字列が含まれていること。 # printの誤り prin("hello") 論理エラー プログラムはコンパイルできるが、エンジニアの意図通り動作しないこと…

【Python】グローバル変数の注意点

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 グローバル変数は、プログラムの実行中常にメモリを占有する グローバル変数は、グローバルスコープに紐づけられる グローバルスコープはプログラムのどこからでもアクセスできるスコープ ど…

【Python】ローカルスコープから、グローバルスコープの変数を更新するには

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 スコープ データや関数の影響範囲のこと。 ローカルスコープとグローバルスコープがあり、 ローカルスコープは特定のクラスや関数内の、制限された領域のこと。 ローカルスコープ内で定義され…

【Python】再帰処理で最大公約数を実装する

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 再帰処理 再帰処理とは、とある処理の中で、自分自身を呼び出す処理のこと。 詳しくは以下の記事で紹介した。 note-tmk.hatenablog.com 最大公約数 複数の数値が存在するとき、各数値の約数の…

【Python】ハノイの塔の実装

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 ハノイの塔 3本の棒と複数の円盤を用いたシンプルなパズル。 円盤を目的の棒に、なるべく少ない移動回数で移動させるというもの。 円盤は全てサイズが異なり、サイズの小さい円盤は大きい円盤…

【Python】フィボナッチ数列の実装

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 フィボナッチ数列 次の漸化式で表現される数列をフィボナッチ数列と呼ぶ。 計算量はO(2n)である。 F0 = 0 F1 = 1 Fn = Fn-1 + Fn-2 (n ≥ 2) ja.wikipedia.org フィボナッチ数列は自然界でも観…

【Python】再起処理で文字列を圧縮

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 テキストデータの圧縮 Recursionの練習問題で、以下のような問題が出た。 # 文字列を以下のように圧縮する関数を書け "aaabbbbccd" → "a3b4c2d" この関数は再起処理を用いるとシンプルに実装…

【Python】再帰処理を実装する際のコツ

現在Recursionに取り組んでいる。 そこで学んだことをメモする。 再帰処理 再帰処理とは、とある処理の中で、自分自身を呼び出す処理のこと。 例えば以下のような処理。 def sum(n): if n == 0: return 0 return sum(n-1) + n これを実行すると以下のように…

【読書メモ】アジャイルサムライ

感想を書いていく。 (function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a; b[a]=b[a]||function(){arguments.currentScript=c.currentScript ||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)}; c.getElementById(a)||(d=c.createEle…

【読書メモ】プロジェクトマネジメントの本物の実力がつく本

読書中にメモった内容を記載。 一言で言うと、プロジェクトマネジメントの実力は「周囲への誠実さ」と「包括的なスキル」を身につける必要がある、と感じた。 以下商品リンクとメモ。 (function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a; b[a]=b[a]||func…

【Flutter】The imported package '***' isn't a dependency of the importing package. Try adding a dependency for '***' in the 'pubspec.yaml' がでたら見直す点

flutterにて開発を行っていた際、次のようなワーニングが表示された。 The imported package 'パッケージ名' isn't a dependency of the importing package. Try adding a dependency for 'パッケージ名' in the 'pubspec.yaml' 以下のリントツールのルール…

【Flutter】Run / Debug / Profile の違い

Flutterではコードを実行する際にモードが3つ用意されている。 Release Debug Profile それぞれ次のような用途で用いる。 Release 以下のコマンドで実行する。 flutter run --release 特徴は以下。 リリース準備をする際に用いる assert()は無効 実行速度が…

【Flutter】「Good Code, Bad Code」をFlutter(Dart)で実践してみる

本書の概要 理論編 実践編 ユニットテスト編 実践編の適用例 コードを読みやすくする 名前は機能の要約 コメントはわかりにくい名前の代替案になるべきではない コメントはなぜそのコードが存在するかを説明すると良い 冗長なコメントはつけない コードは1行…

【Swift】UIViewControllerのライフサイクル

メソッド viewDidLoad() viewWillAppear() viewDidAppear() viewWillDisappear() viewDidDisappear() サンプルコード UIViewControllerにはライフサイクルがあり、ライフサイクルの節目ごとに処理を行うためのメソッドが用意されている。 以下で各メソッドの…

【Storyboard / Swift】UILabelの文字列を全て表示する方法

UILabelはデフォルト設定の場合、サイズを超える文字列が入力されると切り捨てられてしまう。 全ての文字列を全て表示する場合、Linesプロパティに0を入れると表示される。

【Swift】Cocoa Touch ClassとSwift Fileの違い

Xcodeで新しいファイルを作成する際に、いくつかの選択肢がある。 その際に「Swift File」と「Cocoa Touch Class」というものが表示される。 この2種類のファイルの違いについて説明する。 違い 「デフォルトの状態で何が書かれているか」が異なる。どちらも…

【レビュー】SCRUM BOOT CAMP THE BOOK スクラムチームではじめるアジャイル開発

概要 この本が向いている人、向いていない人 向いている人 向いていない人 各パートごとのレビュー 基礎編 実践編 まとめ 概要 スクラム開発を実際の開発現場でどのように実行すれば良いかのヒントを与えてくれる書籍。 「基礎編」「実践編」とパートが分か…

【Flutter】Riverpodの使い方

ランキング参加中プログラミング Riverpodとは 使い方 インストール providerをグローバルで宣言 アプリ全体をProviderScopeでラップ ConsumerWidgetなどを継承したクラスを作成 providerから状態を取得 ref.watch ref.listen ref.read サンプル カウンター…

【Flutter】Constraints(制約)について

FlutterはUIを作成する際にConstraintsという情報を扱っている。 そのConstraintsを説明した記事が公式から出ている。 docs.flutter.dev このポストでは上の記事を読んで、個人的にメモに残したい内容を記載する。 Constraintsはウィジェットのサイズと位置…

【Flutter】ClipPathの使い方

ClipPathとは 使い方 ウィジェットをClipPathでラップ CustomClipperを継承したclipperクラスを作成 三角形 台形 曲線状に凹んだ正方形 星型 clipperクラスをClipPath.clipperに指定 ClipPathとは api.flutter.dev 画面上に表示されるウェジェットの形状を設…

【Flutter】Material Design 3 の適用方法、デモアプリの起動方法

Material Design 3 とは プロジェクトへの適用方法 デモアプリ Material Design 3 とは m3.material.io Googleのデザイナーがメンテナンスしているデザインシステム。 バージョン2と比べて、全体的に柔らかい印象のデザインになっている。 Flutterでは現在バ…

【Flutter】LinearGradientの使い方

LinearGradientとは 使い方 2色のグラデーションを作成する 3色のグラデーションを作成する 2色の間隔を指定したグラデーションを作成する 任意の開始・終了位置のグラデーションを作成する LinearGradientとは api.flutter.dev LinearGradientはグラデーシ…