- PR -

2文字しりとり

1
投稿者投稿内容
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2001-09-24 16:55
 三省堂デイリーコンサイス国語辞典にアクセスするWebサービスクライアントを書いてみました。
 末尾2文字が先頭2文字に合致する単語を探す2文字しりとりです。
 コマンドライン引数で指定した単語からスタートします。
 以下のような結果を出力します。

0: ぱそこん
1: こんあつ
2: あつあげ
3: あげあし
4: あしあと
5: あとあし
6: あしおと
7: おとあわせ
8: わせい
9: せいあ
10: いあい
11: あいあいがさ
12: がさい
13: さいあい
14: アイアン
15: あんいつ
16: いついつまでも
17: デモクラシー
Give Up I found 17 words.

 メインソースは以下の通りです。

using System;
using System.Collections;
using System.Xml;
using eastjj001.jp.co.est.btonic;

namespace eastjj001
{
class Class1
{
static private Hashtable used = new Hashtable();
static private ArrayList searcher( string last2letter )
{
Search sch = new Search();
FindData fd = sch.GetHeadings( last2letter, eastjj001.jp.co.est.btonic.enumSearchType.FORWARD, 1, 20, 20 );
ArrayList ar = new ArrayList();
if( fd.HeadingDatas != null )
{
foreach( HeadingData hd in fd.HeadingDatas )
{
XmlDocument doc = new XmlDocument();
try
{
doc.LoadXml( hd.HeaderXML );
}
catch( Exception e )
{
Console.WriteLine( "Warning, XML Parase Error: {0} '{1}'", e.ToString(), hd.HeaderXML );
continue;
}
XmlNode node = doc.SelectSingleNode("/headword/big/b");
if( node != null )
{
string target = node.InnerText;
if( target.Length > 2 )
{
switch( target[target.Length-2] )
{
case 'ん':
break;
case 'ン':
break;
case 'ー':
break;
case '・':
break;
default:
ar.Add( target );
break;
}
}
}
}
}
return ar;
}
static private void tryIt( string firstWord )
{
string target = firstWord;
int count = 0;
while( true )
{
Console.WriteLine( "{0}: {1}", count, target );
used[target] = 0;
ArrayList ar = searcher( target.Substring(target.Length-2, 2 ));
bool found = false;
foreach( object o in ar )
{
string cand = (string)o;
if( used[cand] == null )
{
target = cand;
count ++;
found = true;
break;
}
}
if( !found )
{
Console.WriteLine( "Give Up I found {0} words.", count );
return;
}
}
}
static void Main(string[] args)
{
if( args.Length != 1 )
{
Console.WriteLine("usage: eastjj001 FirstWord");
return;
}
if( args[0].Length < 3 )
{
Console.WriteLine("First Word must have more than 3 characters");
return;
}
tryIt( args[0] );
}
}
}

 なお、実行すると以下のようなエラーが出る場合があります。
 これは、辞書サーバから返ってくるデータ中のXML部分に未定義の実体がある場合です。おそらく正規のDTDには実体の宣言があると思いますが、それを参照するデータが無いので、パースできません。文字参照に変更する、といった何らかの対策を期待します。

Warning, XML Parase Error: System.Xml.XmlException: 宣言されていないエンティティ
'auml' への参照です。 行 1、位置 71 です。
at System.Xml.XmlValidatingReader.ResolveEntity()
at System.Xml.XmlLoader.ReadCurrentNode()
at System.Xml.XmlLoader.LoadChildren(XmlNode parent)
at System.Xml.XmlLoader.ReadCurrentNode()
at System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)
at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean prese
rveWhitespace)
at System.Xml.XmlDocument.Load(XmlReader reader)
at System.Xml.XmlDocument.LoadXml(String xml)
at eastjj001.Class1.searcher(String last2letter) in f:wtesteastjj001class
1.cs:line 23 '<headword><big><b>デモーニッシュ</b></big><sub>2</sub> <small>(ド
イツ)</small>d&auml;monisch</headword>'


_________________
川俣晶

[ メッセージ編集済み 編集者: autumn 編集日時 2001-09-24 16:56 ]

[ メッセージ編集済み 編集者: autumn 編集日時 2001-09-24 16:57 ]
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2001-09-24 16:59
 この掲示板システムって、行頭の空白文字が全部消えちゃうんですね。
 TABから空白に変えてもダメでした。

_________________
樋口/@IT
@ITスタッフ
会議室デビュー日: 2001/07/26
投稿数: 293
お住まい・勤務地: 東京都
投稿日時: 2001-09-25 01:26
川俣さんこんばんは。@ITの樋口です。

書き込んだ内容をなるべくそのままHTMLにしてますんで、行頭のタブとスペースは消えてしまいます。
コードを書くときにはコード部分を [code] と [/code] で囲んでください。行頭のスペースもそのまま保存して、等幅で表示されます。

詳しくは FAQ の中の BBコードをご参照くださいませ。
_________________
樋口 理
株式会社アットマーク・アイティ
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2001-09-25 13:46
> 書き込んだ内容をなるべくそのままHTMLにしてますんで、行頭のタブとスペースは消えて
> しまいます。
 「この投稿で HTML を使わない」をチェックしてますから、HTMLは関係ないでしょう。

> 詳しくは FAQ の中の BBコードをご参照くださいませ。
 「この投稿で BBコード を使わない」もチェックしてます。

 こりゃ、この掲示板システム駄目かも。
 やっぱり、これはWebサービスのサンプルプログラムとして、ソースをそのまま貼り付けられる掲示板システムを作って見せろということか?^^;

_________________
樋口/@IT
@ITスタッフ
会議室デビュー日: 2001/07/26
投稿数: 293
お住まい・勤務地: 東京都
投稿日時: 2001-09-25 14:24
樋口です。こまかい説明は省きますが……
引用:

autumnさんの書き込み (2001-09-25 13:46) より:
 「この投稿で BBコード を使わない」もチェックしてます。


BBコードを使わないをチェックすると、ダメなんです。
BBコードを使える状態で、[code][/code]タグを使うようにしていただけますか?

こんなかんじになります。
コード:

ここは行頭に空白なし。
ここは4文字空白入り
ここはタブ入り



あ、それから、以前に別の会議室で同じ話題が出たときに問題になったんですが、入力用のTEXTAREAでTABキーを押すとフォーカスが次のフィールドに移ってしまってタブが入力できないという(ブラウザの)「仕様」がありますので、タブの入力はお手数ですが他のエディタなどからコピー&ペーストで……
よろしくご理解とご協力のほどを。
_________________
樋口 理
株式会社アットマーク・アイティ
1

スキルアップ/キャリアアップ(JOB@IT)