さんぽみち

なにか思いついたときとかに気まぐれに更新されます。

Stateモナドは一度実装すべき

はじめに そういや Haskell で State モナドの挙動をちゃんと理解してなかったなぁと思ったのでとりあえず別言語で実装してみたらすんなり理解できた話。 チュートリアルを書きたいわけではないので、自分がなぜ理解に苦しんだのかについて焦点を当てたいと…

SQLは怖くない

SQL

はじめに SQLって要するに集合論だと聞いたのに、全然それがわからない!って人向けです。 多くの説明が手続き的に説明されており、前提知識が0の人のみがわかりやすい説明です。 せっかく分野を超えて一般的である集合論が根っこにあり多くの人が身に付け…

FWと聞いて

あなたは何の略だと思いましたか? ファームウェア(Firmware)だと思ったあなた "FW IT" でググると最初に出てくるからこの業界では恐らく最も一般的な解釈ですよ! きっと組み込み屋さんですね。 この"FW"は他の"FW"に比べて地位が低いと思うのは気のせい…

Java Decoratorの装飾関係をリストで表現する

はじめに Decorator パターンにおいて、 Component と Decorator は Component を親の階層に持つ 1 : 1 の関係にあります。 子ノードが常に一つの木構造を想像すると近いと思います。 元から使いやすいパターンではありますが、この "階層を持つ" というのが…

Java Decoratorパターンが何かに似ていると引っかかった

はじめに 今回はGoFデザインパターンの一つである "Decoratorパターン" について考察します。 なぜ Decorator であるかの理由は、最近たまたま出てきて引っ掛かりを覚えたからです。 ごちゃごちゃした内容になります。 2016/07/29大部分修正 下書きで保存し…

Java Tupleの実装

はじめに Javaには二つの型を格納できる Tuple しか標準ライブラリには存在しないようです。 不便なので動きやすくするためにとりあえず10個の型引数までに対応した Tuple を作ります。 実装方法 実装方法について、 1. 型引数の数に対して1つずつクラスを定…

Java 推論型を利用したい

はじめに 今後Javaを使うことがほぼ確定となったため勉強します。 でもいい題材がないので思いついたものやJavaで不便に感じることを解消する形のものを実装しつつ、Javaをつかんでいきたいと思います。 実装内容 Javaでは推論型が基本的に使えません。 しか…

C# 定数関数(遅延評価)のキャッシュ

はじめに 遅延評価に定数関数を用いることが結構ある毎日です。 定数関数が副作用を含んでいない時に何度も評価するのは意味がなく無駄に感じます。 そこで、こんな悩みを解決する方法を今日思いついたので紹介したいと思います。 何も考えない時の実装 評価…

C#で Project Euler P11

問題 上の 20×20 の格子のうち, 斜めに並んだ4つの数字が赤くマークされている. 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30…

C#で Project Euler P10

問題 Problem 10 「素数の和」 10以下の素数の和は 2 + 3 + 5 + 7 = 17 である. 200万以下の全ての素数の和を求めよ. Problem 10 - PukiWiki 方針 C#で Project Euler P3 - さんぽみち で作成した素数生成器を使って足していくだけ。 解答 using System; usi…

C#で Project Euler P9

はじめに 方針を書いてますが、あくまで方針であり証明などは省いてます。 気になる方はgoogle先生に聞くと答えてくれるので聞いてみてください。 問題 Problem 9 「特別なピタゴラス数」 ピタゴラス数(ピタゴラスの定理を満たす自然数)とは a < b < c で以…

C#で Project Euler P8

はじめに ソースの前に、簡単な方針を今回から書きます。 問題 次の1000桁の数字のうち, 隣接する4つの数字の総乗の中で, 最大となる値は, 9 × 9 × 8 × 9 = 5832である. 73167176531330624919225119674426574742355349194934 969835203127745063262395783180…

C#で Project Euler P7

問題 Problem 7 「10001番目の素数」 素数を小さい方から6つ並べると 2, 3, 5, 7, 11, 13 であり, 6番目の素数は 13 である. 10 001 番目の素数を求めよ. Problem 7 - PukiWiki 解答 using System; public static class P7 { public static void Main() { Co…

C#で Project Euler P6 別解

はじめに C#で Project Euler P6 - さんぽみち の効率のいい方法を見つけので実装しました。 どう考えてももっと早くなりそうだったのでちゃんと考えました。 手続的な実装というよりも一般項を求めることがメインです。 問題 Problem 6 「二乗和の差」 最初…

C#で Project Euler P6

問題 Problem 6 「二乗和の差」 最初の10個の自然数について, その二乗の和は, 12 + 22 + ... + 102 = 385 最初の10個の自然数について, その和の二乗は, (1 + 2 + ... + 10)2 = 3025 これらの数の差は 3025 - 385 = 2640 となる. 同様にして, 最初の100個の…

C#で Project Euler P5

問題 2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり, そのような数字の中では最小の値である. では, 1 から 20 までの整数全てで割り切れる数字の中で最小の正の数はいくらになるか. Problem 5 - PukiWiki 解答 P5.cs using System; public s…

C#で Project Euler P4

問題 左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である. では, 3桁の数の積で表される回文数の最大値を求めよ. Problem 4 - PukiWiki 解答 using System; public static class …

C#で Project Euler P3

はじめに P2はフィボナッチ数列の級数に関する問題だけど、問題に魅力を感じなかったので飛ばしました。 で、僕としては好みなP3をやります。 そういや問題には直接関係ないけど、C#って末尾再帰の最適化してくれないのね。。。 再帰的に書こうと思ってたけ…

C#で Project Euler P1

はじめに 暇だったのでやってみた。 本家 : About - Project Euler 日本語: Project Euler - PukiWiki テンプレート using System; public static class P { public static void Main() { Console.WriteLine(Calc()); } private static int Calc() { } } …

C# VSで埋め込んだリソースの場所

C#

わからなくてはまったのでメモ <プロジェクトの名前空間>.<リソースを追加したときに格納されるフォルダ、デフォルトで"Resources">.<追加したリソースのファイル名> にあった。 調べ方はこんな感じ。 var asm = System.Reflection.Assembly.GetExecutingAss…

C# EventArgsの継承とかイベントのnullチェックがめんどくさい

C#

のでこんな拡張メソッド作ってみた、便利。 using System; ///<summary>汎用のEventArgsを生成するためのクラス</summary> public static class GenericEventArgs { public static GenericEventArgs<TArg> Create<TArg>(TArg arg) { return new GenericEventArgs<TArg>(arg); } } ///<summary>汎用のEventAr</summary></targ></targ></targ>…

C# ジェネリックメソッドの定義がえぐい

はじめに C# 続・メソッドチェーンしたくて仕方なかった - さんぽみち とかで使いたい処理が いっぱい出てきて、作ってた時に思ったメソッド達を作ってたら見た目がひどいものができました。 なのでそれを乗っけてみます。 成果物 まずはこちら。 HighOrderF…

C# 続・メソッドチェーンしたくて仕方なかった

はじめに 前回の続きです。 前回 C# メソッドチェーンしたくて仕方なかった - さんぽみち これを拡張したり根本的に変えたりしたら面白いものができたので記事にしてみます。 前回のあらすじ メソッドチェーン楽しい ↓ 途切れさせるやつ大っ嫌い ↓ チェーン…

C# メソッドチェーンしたくて仕方なかった

C#

はじめに メソッドチェーン楽しいですよね! Linqとか使ってると止まらなくなっちゃいますが、これに慣れるとどんなものからでもチェーンで書きたくなります。 そこで、ストレスを感じず楽しくコーディングするために、汎用的に使えるものを考えてみました。…

Haskellの勉強 その3 : genD, gcdex

Haskellの学習として、RSA暗号を実装してC#と比較しながら勉強していく。 今回は主に拡張ユークリッド互除法についての実装。 Haskellの再帰的な記述方法が中心。

式がうまく表示されない…

下のこれがうまく表示できないんだけどなんで… \begin{eqnarray*} a_{1,1}=b_{1,1} \end{eqnarray*} ↓中身 a{1,1}=b{1,1} これだとうまく表示される \begin{align} a_{2,2}=b_2 \end{align} ↓中身 a_{2,2} = b_2 うまくいく例 \begin{eqnarray*} a_1=b_1\new…

Haskellの勉強 その2 : genN, genPhiN

HaskellでC#と比較しながらRSA暗号を実装しながら学習する。 本エントリではnとφ(n)を生成する関数の実装を行いながら、基本的な構文を習得する。

Haskellの勉強 その1

はじめに Haskell の勉強記録を書いていこうとして、熱中して気づけば5時間ほど書いていたのですが、なんというか、すごく長くなってしまいました!! これではいかんと思い、もともと分割するつもりでは書いていましたがさらに細かく分割することにしました…

Haskellの勉強 その0

はじめに 関数型プログラミング言語であるHaskellを最近勉強してます。 動機としては、圏論と関数型プログラミング言語の関係を聞いて、そういえば関数型の言語ってやったことなかったなーって思ったから。 手続型の言語しか触ったことがなかったので考え方…

比較演算を行わないバブルソート

はじめに とりあえず何か書きたかったので、一発ネタで前に作った比較演算を行わないバブルソート。 だいぶ前に書いたので今見ると無駄が多い!! 全体を通して言えることだけども、数字に 1 を掛けると変化せず、 0 を掛けると 0 へつぶれることを利用して…

はじめに

勉強したこととか気になったこと、誰かに見せびらかしたいことなんかを気が向いたときにかきためていきます。