まいなすよんな日々

2014-10-03

カナオレが好きだ

久々にカナオレ。二期が楽しみですね。

カナオレルールはこちら→(http://www.nikoli.co.jp/ja/puzzles/kanaore.html)

20141003130343

分割にあんまりこだわらなかったので、先読みも常識範囲で解きやすくできてるんじゃないかなと。

テキストバージョンは以下に。

カナオレ アニメきんいろモザイクサブタイトルじゃ

+==+==+==+==+==+==+==+==+==+==+
‖  ‖  ‖  ‖  ‖9 ‖  ‖  ‖  ‖  ‖19 ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+
‖  ‖4 ‖  ‖  ‖  ‖11 ‖  ‖  ‖  ‖  ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖15 ‖  ‖  ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+
‖1 ‖  ‖  ‖7 ‖10 ‖  ‖14 ‖16 ‖  ‖  ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+
‖2 ‖5 ‖  ‖8 ‖  ‖12 ‖  ‖  ‖  ‖  ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+
‖  ‖6 ‖  ‖  ‖  ‖  ‖  ‖  ‖17 ‖  ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+
‖3 ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+
‖  ‖  ‖  ‖  ‖  ‖13 ‖  ‖  ‖18 ‖  ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖  ‖
+==+==+==+==+==+==+==+==+==+==+

1 ↑ ふしぎのくにの

2 ↑ ちつちやくたつて

3 → どんな
4 → ともだち
5 → できるかな

6 ← あめどきどきあや

7 ↓ おねえちやんと
8 ↓ いつしよ

9 → きんのありす
9 → きんのかれん

10 ↓ はらぺこかれん

11 ↓ きようは
12 ↓ なんのひ

13 ← ねないこだれだ

14 ↓ すてきな
15 ↑ ごにんぐみ

16 ↓ どんなにきみが
17 ↑ すきだか
18 ← あててごらん

19 ↓ きんいろのとき

2014-03-31

カナオレが好きだ

まいなすよんは、声優歌手田村ゆかりさんの大ファンです。

このほど行われた春のライブツアーでは、全国の会場に遊びに行きました。

以下のコメントから、どんなライブだったかを当ててくださいね。

……というような問題は作ってませんが、2014年田村ゆかりさんライブツアーに、埼玉仙台盛岡博多東京と参加させていただきました。いやあ楽しかった。とても幸せな一ヶ月でした。

ということでごく個人的な題材ですが、ライブツアーの各会場名でカナオレです。

ニコリのカナオレのページ

田村ゆかりさんの公式ページ


f:id:mainasuyon:20140331204842p:image

1 ↑ さいたま
2 ↑ すーぱーありーな

3 ↑ なごや
4 ↓ こくさいかいぎじょう
5 ↑ せんちゅりーほーる

6 ↓ ひろしま
7 ↓ ぶんかがくえん
8 ↓ えいちびーじーほーる

9 → ぐらんきゅーぶ
10 ↓ おおさか
11 → めいんほーる

12 → せんだい
13 ↑ さんぷらざほーる

14 ↑ いわて
15 ← けんみんかいかん
16 → だいほーる

17 ↑ ふくおか
18 ← さんぱれす
19 → ほてるあんどほーる

20 ↓ にほんぶどうかん

パズル的には「にほんぶどうかん」のところ、右下部分で少々先読みが必要になるかと思います。題材と作者の力量を勘案すると許容範囲かなと。面倒でしたら「にほんぶ」までは続けて下に伸ばしてくださいね。


答えはこちら

たまひぐらんきだいほて

しろなめいゅーぶーる

さありーほんぷらざほあ

ぱーゅおーさわてるーん

ーんちおるだいくおほど

すせぶさせんけふかにん

ごやんかがみんかいほか

かいぎくえんさかんう

こいえじょうぱれすぶど

くさいちびーじーほーる

2014-03-14

オモパとふくめん算と推理クロスが好きだ。

ニコリ146号が発売になってます。

まいなすよん作は5問採用。わーたくさん載ったー。以下軽くコメント


四角スライダー3

私を含めて3問掲載されていますが、3問ともプンちゃんですね。確かに解き筋が見えにくいタイプのパズルかとも思います。盤面を白めにする処理にしてみました。そっちの方が自分的にやりやすそうだったので。

ぬりめいず5

おお6問載ってる。なにをしたらいいか分かり易いですしね。ルールが多めなので、なんとなく満遍なく使うような展開にしたつもりではあります。ひとつのルールを追求するような問題も面白いかもですね。

クロット2

丸数字のゼロが出しにくい、という理由でクロットで0を使わないことが多い私ですあはは。まあ普通の問題です。1と3は丸の並びとか数字の大きさとか、見た目のキャッチもあって素敵だなと思うです。

ふくめん算1

漢字を使用して、上段の言葉が同じにならないようにすると、なんか大人なノリが出るように思えませんかそうですか。こういうのってパターン化して5分程度で出力できるシステムも組めるんじゃとは割と思っているんですけども、数年手がついていません。

推理クロス2

特集用に集めたワードのうち、スケルトンとかカナオレには数が足りないかなってものを流用して組みました。パズル的には、ヒントと、盤面上の決まる範囲のバランスがうまく取れたのではないかと。適当ですが。


ということでオモパ3問、(特集&言葉もの)2問でした。特殊パズル作家とお呼び下さいいや呼ばなくていい。ということでまた次回!

2013-09-11

スケルトンとオモパとカナオレとふくめん算が好きだ

ニコリ144号が発売になってます。

まいなすよん作は6問。わーたくさん載ったー。以下軽くコメント


きつねとたぬきのスケルトン

テーマパズルものその1。スケルトンを組むのって楽しいですね。

選び方的に3文字の単語が2つしか存在しないし、2文字の単語も使えないので、調節を利かせるのが大変といえば大変。

参考までに言うと、作成前には72単語用意してこの組み上がりです。


プロゴルファー○ 5

珍しく難しくしようと頑張った結果がこんな感じ。他を考えなければ、どのHにも2通り以上の辿りつき方があるようにしたような気が。達成できたかは記憶にないですが。

理詰めで解こうと思うと左下がやや考えると思うのですが、これは意図です。


ツナガッ10 4

解いてもらえれば「これがやりたかったのね」というのが見えるのでは。その部分から、次への展開がそれなりにうまく決まったなと思ってます。


タシマスさん 3

オモパ界の巨匠とアニキと俊英と新鋭と話してた時に出てきたネタ。2ヶ月忘れてなければ使いますねーとか言っていたのですが忘れてなくてめでたし。

前回今回と、私の問題はオモパの通常進化を踏んでいて、解道遊喜さんの問題は独自路線を行っている感じだなーと地味に興味深く思ってます。


カナオレ 2

テーマパズルものその2。カナオレ面白いですよね。今回はするする単語が抜けてゆくように処理してみました。

参考図書は近所の図書館にあったもの。検索しても個々の情報があまり見つからなかったので明示しました。使った資料は常に明示するのが、いわゆる業界のためには良いのかもですけども。


ふくめん算 1

テーマパズルものその3。ものすごく浮かれた文字列でどきどきしてしまいます。こんなのも良いですと自画自賛。「つきみうどん」をどうにかしようとした跡が見ようと思えば見つかる気がしますな。


オモパ3問と言葉もの3問となかなか片寄った144号でありました。いい感じですな。次もこの調子でいけるといいなーと思いつつ、今回はここまで。

2013-08-30

ビルディングパズルが好きだ。あるいはビルディングパズルをSugar制約ソルバーで解く。その2

とはいうものの看板に偽りありで、ビルディングパズルをSugar制約ソルバーで解く話自体は前回で完結してます。

今回は、「入力がさすがに面倒なので、Sugarスクリプトを生成するawkスクリプトでも書くか」という話です。

ニコリパズルの主要なものはPencilBoxという素敵なソフトがあるので、ファイル形式が流用できるのですが、ビルディングパズルにはテキストでいい具合に保存してくれるものが見つからなかったので、まずはそこから

といっても決定版を目指すわけでもないんで、私はこういうふうにしてみましたって受け取り方でひとつよろしく。

例題は前回のものを流用します。ただし、右側に数字がないと都合が悪いので、あまり意味はないですが数値を加えています。

f:id:mainasuyon:20130830151440p:image

普通のビルディングパズルは、外側の数字だけ記述すれば良いです。ということで上辺にtopのt、下辺にbottomのb、左辺にleftのl、右辺にrightのrを識別として用い、左から右へ、あるいは上から下へ増加していく座標を設定します。

f:id:mainasuyon:20130830151441p:image


一行目に盤面の大きさを記述することにして、例題をこの方法で記述すると、以下のようになります。

4 4
t 2 4
t 3 2
l 2 2
b 0 2
r 1 1

この形式から、前の記事で説明したSugarスクリプトを出力するawkスクリプトを以下に示します。

長いので「続きを読む」以下にします。

「続きを読む」以下はスクリプトだけにしたいのでここで書きますが、前回の記事と変数名が変わっています。

カナオレのスクリプトから流用したとこがあったので、上下をupとdownのuとdで作ってたのですが、あーこれなんか違うかと思ってtとbにしたら、board(or building)のbが使えなくなってしょぼん、とかいう事情もあったりなかったりしますが、まー細かいことを気にしてたら素敵な大人になれませんよってことで。

ということで今回はここまで。


{
 if(NR==1){
  ymax = $1;
  xmax = $2;

  # 盤面の定義
  for(j=0;j<ymax;j++){
   for(i=0;i<xmax;i++){
    printf("(int x_%02d_%02d 1 %d)\n",i,j,ymax);
   }
  }
  # 縦方向に入る数字はすべて違う
  for(j=0;j<ymax;j++){
   printf "(alldifferent ";
   for(i=0;i<xmax;i++){
    printf("x_%02d_%02d ",i,j);
   }
   printf ")\n";
  }
  # 横方向に入る数字はすべて違う
  for(i=0;i<xmax;i++){
   printf "(alldifferent ";
   for(j=0;j<ymax;j++){
    printf("x_%02d_%02d ",i,j);
   }
   printf ")\n";
  }
 }
 
 if($1=="t"){ #上から見た状況
  for(j=1;j<ymax;j++){
   printf("(int t_%02d_%02d 0 1)\n",$2,j);
  }
  for(j=1;j<ymax;j++){
   printf("( = t_%02d_%02d (if ( or ",$2,j);
   for(k=0;k<j;k++){
    printf("(> x_%02d_%02d x_%02d_%02d) ", $2 , k , $2 , j );
   }
   printf(") 0 1 ) )\n");
  }
  printf("( = %d ( +  ",$3-1);
  for(j=1;j<ymax;j++){
   printf("t_%02d_%02d ",$2,j);
  }
  printf(") )\n");
 }

 if($1=="l"){ #左から見た状況
  for(j=1;j<xmax;j++){
   printf("(int l_%02d_%02d 0 1)\n",$2,j);
  }
  for(j=1;j<xmax;j++){
   printf("( = l_%02d_%02d (if ( or ",$2,j);
   for(k=0;k<j;k++){
    printf("(> x_%02d_%02d x_%02d_%02d) ", k , $2 , j , $2 );
   }
   printf(") 0 1 ) )\n");
  }
  printf("( = %d ( +  ",$3-1);
  for(j=1;j<xmax;j++){
   printf("l_%02d_%02d ",$2,j);
  }
  printf(") )\n");
 }

 if($1=="b"){ #下から見た状況
  for(j=1;j<ymax;j++){
   printf("(int b_%02d_%02d 0 1)\n",$2,j);
  }
  for(j=1;j<ymax;j++){
   printf("( = b_%02d_%02d (if ( or ",$2,j);
   for(k=0;k<j;k++){
    printf("(> x_%02d_%02d x_%02d_%02d) ", $2 , ymax-1- k , $2 , ymax-1-j );
   }
   printf(") 0 1 ) )\n");
  }
  printf("( = %d ( +  ",$3-1);
  for(j=1;j<ymax;j++){
   printf("b_%02d_%02d ",$2,j);
  }
  printf(") )\n");
 }

 if($1=="r"){ #右から見た状況
  for(j=1;j<xmax;j++){
   printf("(int r_%02d_%02d 0 1)\n",$2,j);
  }
  for(j=1;j<xmax;j++){
   printf("( = r_%02d_%02d (if ( or ",$2,j);
   for(k=0;k<j;k++){
    printf("(> x_%02d_%02d x_%02d_%02d) ", ymax-1- k , $2 , ymax-1-j , $2 );
   }
   printf(") 0 1 ) )\n");
  }
  printf("( = %d ( +  ",$3-1);
  for(j=1;j<xmax;j++){
   printf("r_%02d_%02d ",$2,j);
  }
  printf(") )\n");
 }
}