トップページに戻る    記事(OTN)    記事(CodeZine)   C++のサンプル集   C#のサンプル集   正規表現パズル
2006年 2月16日から2007年 7月28日までのブログ
2007年 8月 1日から2007年10月28日までのブログ
2007年10月20日から2008年 5月 8日までのブログ
2008年 5月22日から2008年 9月 3日までのブログ
2008年 9月 4日から2009年 2月 4日までのブログ
2009年 2月 7日から2009年 5月20日までのブログ
2009年 5月22日から2009年 7月13日までのブログ
2009年 7月15日から2009年11月11日までのブログ
2009年11月14日から2010年 3月13日までのブログ
2010年 3月15日から2010年 7月21日までのブログ
2010年 7月24日から2011年 3月29日までのブログ
2011年 3月30日から2012年 1月11日までのブログ
2012年 1月18日から2014年 3月18日までのブログ
2014年 3月21日から2014年11月15日までのブログ
2014年11月22日から2015年 3月 1日までのブログ
2015年 3月15日から2015年 5月30日までのブログ
2015年 6月 7日から2018年 4月24日までのブログ
2018年 7月21日から2021年 2月19日までのブログ
最新のブログ

●2015年3月15日(日)
コンピュータパズルへの招待 4問目 ペグソリティア 33穴英国盤
を再度解こうとしましたが、またしても計算量多すぎで挫折しました。
2次元配列で既出盤面を管理するのでなく
既出盤面をULong型で表現して、HashSetで管理すれば、十分かと思ったのですが、
それでも計算量多過ぎでした。

パリティについてしっかりと勉強して
枝切りを実装しないと無理ですね。
コンピューターパズルプログラミングの問題を9割以上解いてから再挑戦するとします。


●2015年3月31日(火)
Oracle12c新機能 row_limiting_clause
について調べたメモ

●Select文での評価順序は、order by句の後
●order by句の後で評価されるが、order by句は省略可
●Fetch First と Fetch Nextは、どっちを使ってもよいが、
   OffSet句がなければ、Firstを使い
   OffSet句があれば、Nextを使うほうが分かりやすい

●RowとRowsは、どっちを使ってもよいが、
   行数が、単一行が複数行かで使い分けると分かりやすい

●Fetch Next Row Onlyと書くと
   Fetch Next 1 Row Onlyと同じ意味となる

●With Tiesを指定すると最終行とタイの行も出力される

●例文
select RowNum as Val from dict Fetch First Row Only;
select RowNum as Val from dict Fetch First 5 Rows Only;
select RowNum as Val from dict order by Val OffSet 1 Row Fetch Next 2 Rows Only;
select RowNum as Val from dict order by Val Fetch First 4 Rows With Ties;


●2015年4月4日(土)
アルゴリズムの大局観を養いたいです。

IT Media 最強最速アルゴリズマー養成講座より引用

また、動的計画法では、「必要のない要素」まで考えてしまうことが多々あります。
例えば、今回の例題では「何番目の品物まで考えたか」を考慮すれば十分ですが、
「どの品物を運ぶことにしたか」などを考慮してしまうと、膨大な数となって処理できなくなります。
必要のない要素を含めても計算量に問題がなければ一応解くことはできますが、
問題をどう分解すればうまく動的計画法を使えるか、をしっかり考えた方が実力につながります。

このように、解き方の大筋の方針を決めるとき、
いわゆる「大局観」が養われているかどうかは重要です。
TopCoderで優秀なスコアをたたき出すRedCoderたちは、
たいていそうした勘所を外すことはありませんが、それでもたまには判断を誤るものです。
筆者の場合も意識してこうした大局観を鍛えてきたという記憶はなく、
実戦や日常的な勉強によって、気がついたら大局観が形成されてきたように思います。
このため、こうすれば大局観がよくなる、というアドバイスは非常に難しいのですが、
さまざまな問題に挑戦したりすることは非常に有意義だと思います。


●2015年4月5日(日)
AtCoderの過去問のセンター採点を解きました。
コンピューターパズルプログラミングと競技プログラミングの問題が解き終わったら、
AtCoderの問題を制覇したいですね。
提出したソースコードをメモしておきます。

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    //Constで定義すると警告が出るので、変数として定義
    static string InputPattern = "Input4";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("9");
            WillReturn.Add("131142143");
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("20");
            WillReturn.Add("12341234123412341234");
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("4");
            WillReturn.Add("1111");
        }
        else {
            for (int I = 1; I <= 2; I++) {
                WillReturn.Add(Console.ReadLine());
            }
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();

        IEnumerable<char> MarkArr = InputList[1].ToCharArray();

        var wkDict = new Dictionary<char, int>();
        for (char I = '1'; I <= '4'; I++) {
            wkDict[I] = MarkArr.Count(X => X == I);
        }

        IEnumerable<int> wkEnum = wkDict.Values;
        Console.WriteLine("{0} {1}", wkEnum.Max(), wkEnum.Min());
    }
}


●2015年4月14日(火)
ビルドとデプロイのバッチコマンドのメモ書き

rem ■■■ファイル共有を使用
net use "\\ServerName\c$" /user:administrator PassWord

cd /d "C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE"

setlocal

rem set BuildMode=Release
set BuildMode=Debug
set UsePause=1

echo %BuildMode%

Devenv /Rebuild /%buildMode% "slnファイルのパス"

rem ■■■確認用のPauseコマンド■■■
if "%UsePause%"=="1" pause

rem ■■■ビルド結果のdllをコピー■■■
xcopy /Y /R "ビルドしてできるdllのパス" "コピー先dllのパス"

endlocal


●2015年4月16日(木)
Cマガ電脳クラブの問題を解き終わったら、
消費税増税前に買いだめした技術書を全部読んでから、買う本の関連リンク集

●amazon --- 正規表現技術入門技術評論社 --- 正規表現技術入門正規表現技術入門 --- 番外編●特別コラムamazon --- プログラミングコンテスト攻略のためのアルゴリズムとデータ構造マイナビ --- プログラミングコンテスト攻略のためのアルゴリズムとデータ構造出るデ(`ω´) - Cozy Ozy1/30 発売!(iwi)の日記amazon --- プログラミングコンテストチャレンジブック [第2版]マイナビ --- プログラミングコンテストチャレンジブック [第2版]第二版が出ます! (iwi)の日記

さらに、日本語で解ける競技プログラミングのAOJとかAtCoderの問題も書籍化されたら、買って解きたい。


●2015年4月17日(金)
コンピューターパズルプログラミングが1通り終わったら、
着手したいSQLと正規表現関連のこと。

●図でイメージするOracle DatabaseのSQL全集の9回 model句を執筆
●正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus)を買って読みつつ、
  EmEditorで解ける面白い問題があったら、正規表現パズルに追加。
●図でイメージするOracle DatabaseのSQL全集の10回 DML文 (最後にDMLのサンプル集を付ける)を執筆
●詳説正規表現3版を、久しぶりに読む
●図でイメージするOracle DatabaseのSQL全集の11回 詳説正規表現のOracleの章を執筆


●2015年4月18日(土)
AOJの初心者向け問題を3問解きました。
Cマガ電脳クラブの問題が解き終わったら、
「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」で紹介されてる問題を解きたいですね。
AIZU ONLINE JUDGE --- AketiTest

Digit Numberを解いてて、調べたのですが、
入力行数が可変の時の、EOF判定は、
Console.ReadLine()の結果がnullかで判定できるようです。
MSDN --- Console.ReadLine メソッド 
戻り値
型 : System.String
入力ストリームの次の行。または次の行がない場合は null。

提出したソースコードをメモしておきます。
using System;
using System.Collections.Generic;

class Program
{
    //Constで定義すると警告が出るので、変数として定義
    static string InputPattern = "Input2";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("5 7");
            WillReturn.Add("1 99");
            WillReturn.Add("1000 99");
        }
        else {
            string wk;
            while ((wk = Console.ReadLine()) != null) WillReturn.Add(wk);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();

        foreach (string EachStr in InputList) {
            string[] IntArr = EachStr.Split(' ');
            int wkSum = int.Parse(IntArr[0]) + int.Parse(IntArr[1]);
            int Ketasuu = (int)Math.Truncate(Math.Log10(wkSum)) + 1;

            Console.WriteLine(Ketasuu);
        }
    }
}


●2015年4月24日(金)
amazon --- 正規表現技術入門
の発売に触発されて、正規表現のコンテンツを作ってみました。

正規表現パズル 文字クラスの中でのメタキャラ
文字クラスの中でのメタキャラは、動作が分かりづらいので実験してみた結果です。


●2015年4月26日(日)
メモ
だんだん壊れてきた自宅パソコンは、
更新する2フォルダを、定期的にFTPとUSBメモリにバックアップしつつ使う。
壊れたらパソコンを交換すること。

メモリは、交換後のパソコンに移すこと。

ほこりを掃除すると、調子がよくなるようである。


●2015年5月1日(金)
24-08 クロットの例題を解きましたが、
ニコリのパズルBox12の問題をさくっと解ける計算量になっているかの検証が残ってます。

ニコリのペンシルパズルを解いていて、気付きましたが、
ハンドソルブで相当な腕前がないと、
C#でコーディングしても、いい枝切りが実装できないですね。

なので、ニコリのペンシルパズルは、日々ハンドソルブしつつ、
ハンドソルブの腕前が相当なレベルになったものから順次、
C#でコーディングするとして、Cマガ電脳クラブの問題を再開するとします。

Cマガ電脳クラブはプログラムで解く事が前提な上に、解説もあるので、
最初にCマガ電脳クラブを制覇したほうが、学習効率が高いし、
半分解けたので、残りも解ける難易度であると思います。


●2015年5月3日(日)
24-08 クロットニコリ系パズルの逆襲[弍] : クロット 67を解くことができました。

どんな枝切りを実装して、いかに計算量を減らすかがポイントだと実感。
脳内で探索木をイメージできるようになりたい。


●2015年5月6日(水)
24-40 へびいちごを解きました。

ニコリのペンシルパズルは、難易度が高いです。
普通サイズは、解けるのですが、
ジャイアントサイズは、計算量を減らすことに徹しないと、無理そうです。


●2015年5月9日(土)
将棋の電王戦をきっかけに、Twitterを再開しました。
AketiJyuuzou(@AketiJyuuzou)さん | Twitter
土日限定でなにかつぶやきたい。


●2015年5月10日(日)
24-51 よせなべを解きました。

ニコリのペンシルパズルは、
バックトラックを行う前の下準備をうまくやれば、それなりに計算量を減らせるようです。


●2015年5月15日(金)
C# LINQメモ --- TakeメソッドとSkipメソッド
C#メモ --- 実行アセンブリのあるフォルダにあるテキストファイルのフルパスを取得


●2015年5月16日(土)
CodeIQコード銀行 スーパー肩車を解きました。

1000レコードが対象になってる問題では、ナイーブな実装で、4分たっても解が求まりませんでしたが、
最強最速アルゴリズマー養成講座:アルゴリズマーの登竜門、「動的計画法・メモ化再帰」
で勉強した、メモ化探索を使ったら、1秒もかからずに解が求まりました。

深さ優先探索が重いときは、メモ化探索が有効だと実感しました。


●2015年5月17日(日)
24-44 マカロを解きました。
ニコリのペンシルパズルをC#で解くのは、相変わらず、難しいです。


●2015年5月22日(金)
上野動物園に行って、見識を広めてきました。
携帯で撮った画像をメール経由でPCに送ったら、
パケット料が8900円になってしまった・・・
PCのメールと、携帯のメールの料金感覚は全然違うんですね・・・








●2015年5月23日(土)
購入したパズル関連のもの
2014-07-06 チェックメイク        1000円 ヨドバシ
2014-07-20 イージーキューブ2     1543円 丸善
2014-11-02 ラッキーパズル         300円 トリト
2014-11-02 ペンシルパズル入門     447円 トリト
2014-11-02 時間どろぼう           661円 トリト
2014-11-02 12ドミノベスト        1021円 トリト
2014-12-03 ラッキーパズル ブルー  864円 ヨドバシ
2014-11-25 バブルパズル           108円 セリア
2014-12-06 プラパズル6*10         432円 ヨドバシ
2014-12-06 フルーツキューブ      1460円 ヨドバシ
2015-01-06 ロンポス200           1320円 ヨドバシ
2015-01-29 ロンポス99            1250円 ヨドバシ
2015-02-08 ヘキサモンド           500円 トリト
2015-02-08 パズルBox10           1200円 トリト
2015-02-08 イージーキューブ1     1420円 トリト
2015-05-23 パズルBox12           1200円 ニコリビヨリ

購入額合計 14726円


●2015年5月24日(日)
20-098 そっくりアボロを解きました。
02-01 くじびきを解きました。


●2015年5月25日(月)
2次元配列でArray.TrueForAllメソッドは使えない。

Array.TrueForAll相当のメソッドを使うには、
IEnumerable<int>に変換してからAll拡張メソッドを使う必要あり。

危うく、C#のサンプル集の半分ぐらいのソースを修正するところでした :-)

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[,] TestArr = new int[5, 5];
        Console.WriteLine(TestArr.Cast<int>().All(X => X == 0));
    }
}


●2015年5月30日(土)
01-01 MaximumProfitを解きました。


TOEIC    わくすたブログ    DSP受験記   C++のサンプル集   C#のサンプル集   正規表現パズル