【Mac】ターミナル, bash コマンド, シンボリックリンク
頻繁に使うコマンドを列挙。 シンボリックリンクの変更に関しては参考URLより。
Command + t … 新しいタブを開く Command + w … 現在のタブを閉じる Shift + Command + → … 右のタブに移動 Shift + Command + ← … 左のタブに移動
ショートカットキー 説明 Ctrl + A カーソルを行頭へ Ctrl + E カーソルを行末へ Ctrl + K カーソル位置から行末までを削除 Ctrl + U カーソル位置から行頭までを削除 Ctrl + W カーソル位置から単語の先頭までを削除 Ctrl + D カーソル位置の文字を削除
参考:
コマンドラインの操作(カーソル移動・文字削除・補完) - Linux入門 - Webkaru
シンボリックリンクを上書きしてリンク先を変更する | 俺的備忘録 〜なんかいろいろ〜
Bashのコンソールで単語移動するショートカット - Qiita
Macでターミナルを使うときはショートカットキーを覚えよう!! - よんちゅBlog
LINQ基礎
クエリ演算子
LINQが用意しているメソッドのこと。
クエリ演算子は全て IEnumerable<T>
に対する拡張メソッドとして定義されている。
シーケンス
標準クエリ演算子の操作対象のデータをシーケンスと呼ぶ。配列や List<T>
等。
クエリ遅延実行/即時実行
遅延実行
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 5 namespace Program 6 { 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 string[] names = { 12 "Tokyo", "New Delhi", "Bangkok", "Paris", 13 }; 14 var query = names.Where(x => x.Length <= 5); 15 16 foreach (var item in query) 17 Console.WriteLine(item); 18 19 Console.WriteLine("----------------"); 20 21 names[0] = "Osaka"; 22 foreach (var item in query) 23 Console.WriteLine(item); 24 } 25 } 26 }
Tokyo Paris ---------------- Osaka Paris
Whereメソッドが呼び出されても、検索はその時には行われずに、
実際に値が必要になったとき(foreachで要素を取り出したとき)に、クエリが実行される。
即時実行
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 5 namespace Program 6 { 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 string[] names = { 12 "Tokyo", "New Delhi", "Bangkok", "Paris", 13 }; 14 var query = names.Where(x => x.Length <= 5).ToArray(); // 配列に変換 15 16 foreach (var item in query) 17 Console.WriteLine(item); 18 19 Console.WriteLine("----------------"); 20 21 names[0] = "Osaka"; 22 foreach (var item in query) 23 Console.WriteLine(item); 24 } 25 } 26 }
Tokyo Paris ---------------- Tokyo Paris
ToArrayメソッドが呼び出されたときにクエリが実行され、結果が配列に格納される。
ToList メソッドに変えても同じ。Countメソッドとかも即時実行。
参考 :
実戦で役立つ C#プログラミングのイディオム/定石&パターン:書籍案内|技術評論社
LINQ クエリの概要 (C#) | Microsoft Docs
【C#】Lake Counting
大きさがNxMの庭があります。そこに雨が降り、水溜まりができました。 水溜りは8近傍で隣接している場合につながっているとみなします。全部でいくつかの水たまりがあるでしょうか?(8近傍とは、次のWに対する*の部分を指します。) *** *W* *** 制約 N,M ≦ 100
using System; namespace Program { class Program { public static int N = 10; // 庭の広さ(縦) public static int M = 12; // 庭の広さ(横) public static int MAX_N = 0; public static int MAX_M = 0; public static char[][] field = { new []{'W', '.', '.', '.', '.', '.', '.', '.', '.', 'W', 'W', '.'}, new []{'.', 'W', 'W', 'W', '.', '.', '.', '.', '.', 'W', 'W', 'W'}, new []{'.', '.', '.', '.', 'W', 'W', '.', '.', '.', 'W', 'W', '.'}, new []{'.', '.', '.', '.', '.', '.', '.', '.', '.', 'W', 'W', '.'}, new []{'.', '.', '.', '.', '.', '.', '.', '.', '.', 'W', '.', '.'}, new []{'.', '.', 'W', '.', '.', '.', '.', '.', '.', 'W', '.', '.'}, new []{'.', 'W', '.', 'W', '.', '.', '.', '.', '.', 'W', 'W', '.'}, new []{'W', '.', 'W', '.', 'W', '.', '.', '.', '.', '.', 'W', '.'}, new []{'.', 'W', '.', 'W', '.', '.', '.', '.', '.', '.', 'W', '.'}, new []{'.', '.', 'W', '.', '.', '.', '.', '.', '.', '.', 'W', '.'} }; public static void dfs(int x = 0, int y = 0) { field[x][y] = '.'; for (int dx = -1; dx <= 1; dx++) { for (int dy = -1; dy <= 1; dy++) { int nx = x + dx; int ny = y + dy; if (0 <= nx && nx < N && 0 <= ny && ny < M && field[nx][ny] == 'W') { dfs(nx, ny); } } } } public static void solve() { int res = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (field[i][j] == 'W') { dfs(i, j); res++; } } } Console.WriteLine(res); // 3 } public static void Main(string[] args) { solve(); } } }
競技プログラミング
競技プログラミングを始めるにあたって参考にさせてもらった記事
TopCorder登録
Adventer
「競プロ!!」 競技プログラミング Advent Calendar 2017 - Adventar
C# で競プロをする話 - うにゅーん、って感じだ
競技プログラミングのための C# (4.0 以降) の Tips 詰め合わせ - C♯の勉強
環境構築
MacでC#のコードをコンパイルして実行する - Qiita
MacのAtomでOmniSharpを使う | C# / note.nkmk.me
Tips
[Sy] Topcoder SRM に初参加してハマったこと&感想 | Syntax Error.
競技プログラミングのための C# (4.0 以降) の Tips 詰め合わせ - C♯の勉強
TopCoder SRM 648 Div1 | tatsyblog
Configuring the TopCoder Arena for C# developers - Productive C#
例外処理
例外処理
例外処理とは、本来ならばプログラム中で起こってはいけないことが起こってしまうことを言う。 例外が起こったときでもプログラムが異常な動作をしないよう、例外処理(exception handling)を行う必要がある。 例外をキャッチするのは、異常な状態を回復させ、処理を継続する場合のみ。
例外が発生する可能性のある側では、 throw 文を使って例外が起こったことを利用側に知らせる。
throw 例外クラスのインスタンス
この throw
文は想定外のことが起こった場所に挿入する。
throw
文によって投げられる例外は、 System.Exception
クラスの派生クラスのインスタンスである。
それ以外のクラスのインスタンスを throw することは出来ない。
ex:
try { 例外が投げられる可能性のあるコード } catch(例外の種類) { 例外処理コード } finally { 例外発生の有無にかかわらず実行したいコード リソースの破棄などを行う }
別の例外をスローする
try { } catch (FileNotFoundException ex) { throw new MyAppException("ファイルが見つかりませんでした", ex) }
変数 ex
には例外オブジェクトが格納されている。
例外オブジェクトを参照することで、例外の詳細情報を知ることが出来る。
例外が発生したことを把握したい場合・例外の再スロー
try { } catch (FileNotFoundException ex) { Log.Write(ex.ToString()); // Log出力 throw; }
特定の例外発生時に、それを無視して処理を継続させたいケースもある。
その場合は、なんの目的でその例外をキャッチするのか、なぜその例外を無視するのかをコメントで残すようにする。
例外を throw
する場合、InnerException
を破棄してはいけない。
参考: 例外処理 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C 実戦で役立つ C#プログラミングのイディオム/定石&パターン:書籍案内|技術評論社