1 :
デフォルトの名無しさん:
パズルを出題してそれを解くプログラムを作るスレです。
みんなで楽しくアルゴリズムを考えましょう。
ずるしてらくしてかれいに2げっと
3 :
1:2006/07/21(金) 19:24:30
では数学板で見かけた問題。
ネズミが一匹、無限の広さをもつ碁盤の上に居る。
プレーヤーは一ターンの間にネズミの居ない任意の座標にブロックを一つおくことができる。
ネズミは一ターンの間に上下左右のいずれかの方向に一歩動くことができる。
ただし、ブロックのある座標には移動できない。
ネズミの四方がブロックで囲まれ、一歩も動けない状態になればプレーヤーの勝ち。
ネズミがいつまでも逃げることができればネズミの勝ち。
プレイヤーの先行として、ゲームはどちらが勝つか。
このゲームはプレイヤーが勝つことが数学板で証明されていたので
最短手数を求めてください。
4 :
1:2006/07/21(金) 19:27:35
数学板の面白い問題おしえて〜な 11問目の381に載ってました。
5 :
1:2006/07/21(金) 21:40:58
もう一問だしときますね。
n個の異なる文字を並べてできる長さnの文字列を考える。
このような文字列はn!個あるがこのn!個の文字列を
一列に並べ、隣り合う文字列がちょうど2文字だけ異なるように
するアルゴリズムを作れ。
たとえば3文字なら
abc
acb
bca
bac
cab
cba
と並べれば隣り合う文字列がちょうど2文字違うようになります。
グレイ符号が応用できそうな予感
スマソ
意味が分からん
n = 4 で普通に並べてみた
abcd
abdc
acbd ↑ ここがだめ
acdb
adbc ↑ ここがだめ
adcb
bacd ↑ ここがだめ
badc
bcad ↑ ここがだめ
bcda
bdac ↑ ここがだめ
bdca
cabd ↑ ここがだめ
cadb
cbad ↑ ここがだめ
cbda
cdab ↑ ここがだめ
cdba
dabc ↑ ここがだめ
dacb
dbac ↑ ここがだめ
dbca
dcab ↑ ここがだめ
dcba
こういう意味か
確かにグレイコードで置き換えたらうまくいくと思う
普通に全通りの並べ方をしらみつぶしにやればいいんじゃね?
計算時間?しらね。
単純に、隣り合う二文字を入れ替えた。
#include <stdio.h>
#include <string>
using namespace std;
int factorial(int i) {
if(i==0) {
return 1;
}
else if(i>0) {
return i*factorial(i-1);
}
else {
exit(1);
}
}
void main() {
int i,n;
string s;
char t;
printf("enter the number of sequence\n");
scanf("%d",&n);
for(i=0;i<n;i++) s+=(char)(i+'a');
for(i=0;i<factorial(n);i++) {
printf("%d: %s\n",i,s.c_str());
t=s[i%n]; s[i%n]=s[(i+1)%n]; s[(i+1)%n]=t;
}
}
>>11 実行してみたけど重複する文字列があるみたい。
これって結局階乗を出す問題だよね。
交換だけで階乗が出せればかなり有名になっているはずだから、スマートな解法はないと思う。
順列ですた。
という事で、順列を交換だけで出せるのって話です。
文字列を頂点として2文字違う文字列に辺があるグラフを考えれば
ハミルトン閉路問題に帰着される。
辺の数は結構多いし、ハミルトン閉路はありそうにも思えるがさて。
グラフの作成に O(n!) かかるのでは。
結局しらみつぶしと同じ予感。
もともと出力のサイズがn!なんだからそれは気にすること無い。
しらみつぶしの計算量は(n!)!なんだから全然違う。
普通出力ってひとまとめで一処理とみなす気が
出力の大きさがO(n!)なんだからどんなにがんばったって計算量がO(n!)を下回ることはない。
出力をひとまとめで一処理なんておかしいよ。
n文字の場合の結果をつかってn+1文字の場合を解けないものか。
, -: ': : : : : : :"⌒: ̄:` : 、
/: : : : へ._ : : : :へ、: : : \
__,く;へ_: : :| : : : : : : : \ ̄:ヽ、\
. /:__/: : :/: : |: :l: : : : : : : : \.: :ヽ: ヽ
/_//: : :/: / :|: l: : :ヽ: ヽ: : : : ヽ: : ヽハ
//: /: : : : : |: : l: : |: : |: : ヽ: :ヽ: : ヽ: : : : : : :ヽ: : ヽハ
. /:/: /: /: l: |: :,|: : ハ: : |: : : ヽ: :ヽ: : ヽ: : : : : : :ヽ : ヽ|
//: : l: :l: ::|: :|: :|: : :| ヽ lヽ : : :\: ヽ.: :\: : : ヽ:ハ: : : |
| l: : |: :|: : |: :|: ハ__,L. ヽ \" ̄「 T ト- 、;_: : : : :|: : :.|
| |: : |: :|: : |: ;|イ「 ヽ| \´\ヽ __」__i.\ \ : : |: : :| もう・・・仕方の無いことばかり言って・・・
| |: : |: :|: : くv' _」=i ヽ /「 i::::::o「\|ヽト: |: :/|
i l: : ハ: l: : :.ト / {:::::::〉 レヘ:.::::}゚i|/|: ::| .}レ': :|
∨:| Vヘ: ::ヘヽ vヘ:ハ ..く_二iつ|: :.:レ: :| : :|
ヽヽ∨へ:ハ ヾツ ////ハ:/::|: :|: : :|
∧: :i:ヘ.l // ` /: {:::::|: :l: : ハ
/:/: ∧: \ 。 ,.イ:|: :|::i:::|: :l: ::∧
//: : :}: ヽ`i:: 、. / .|::| :|:::i::::|: i:: : ∧
://: : : ハ: ヽ::::::ノT ' ‐ ' |::|: :V::::i∧: : : : ヘ
//: : ノ二 ヽ: :\ 〈ー 、 _____,トヘ: :∨::i::∧: : : :.∧
//:/ /⌒ \ ヽト、: :ヽ\_______ハ \:∨ハ:::∧: : : :} \
>>3 ネズミの問題は23手詰めと出た。この手順はピンとこないけど、うまく収束している。
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼
┼┼┼┼┼ ┼┼●┼┼ ┼┼●○┼ ┼┼●○┼ ┼┼●┼┼ ┼┼●┼┼
┼┼┼○┼ ┼┼┼○┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼○┼ ┼┼┼○┼
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼●
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼
┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼
┼┼●┼┼ ┼┼●┼┼ ┼┼●┼┼ ┼┼●●┼ ┼┼●●┼ ┼┼●●┼
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼○┼ ┼┼┼○┼ ┼┼○┼┼ ┼●○┼┼
┼┼┼○● ┼┼┼○● ┼┼┼┼● ┼┼┼┼● ┼┼┼┼● ┼┼┼┼●
┼┼┼┼┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼
┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼
┼┼●●┼ ┼┼●●┼ ┼┼●●┼ ┼┼●●┼ ┼┼●●┼ ┼┼●●┼
┼●┼┼┼ ┼●┼┼┼ ┼●┼┼┼ ┼●┼┼┼ ┼●┼┼┼ ┼●●┼┼
┼┼○┼● ┼┼○┼● ┼┼┼┼● ┼┼┼┼● ┼┼○┼● ┼┼○┼●
┼┼┼●┼ ┼●┼●┼ ┼●○●┼ ┼●○●┼ ┼●┼●┼ ┼●┼●┼
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼ ┼┼●┼┼ ┼┼●┼┼ ┼┼●┼┼
┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼ ┼┼┼●┼
┼┼●●┼ ┼┼●●┼ ┼┼●●┼ ┼┼●●┼ ┼┼●●┼ ┼┼●●┼
┼●●┼┼ ┼●●┼┼ ┼●●┼┼ ┼●●●┼ ┼●●●┼ ┼●●●┼
┼○┼┼● ●○┼┼● ●┼○┼● ●┼○┼● ●┼┼┼● ●┼●┼●
┼●┼●┼ ┼●┼●┼ ┼●┼●┼ ┼●┼●┼ ┼●○●┼ ┼●○●┼
┼┼●┼┼ ┼┼●┼┼ ┼┼●┼┼ ┼┼●┼┼ ┼┼●┼┼ ┼┼●┼┼
自己レス
>>24 ただし、ブロックの置き方はネズミの八方のみしか探索していないので。
正解なのかどうかすらわからん
テストケースの組み合わせを自動生成してくれるプログラム作ってくれんか?
たとえば入力を2,3,3としたら以下のような文字を出力してくれるような。
言葉ではうまく言えないが全ての組み合わせを生成してくれるやつ。
○、○、○、○、○、○、○、○、○、 、 、 、 、 、 、 、 、
、 、 、 、 、 、 、 、 、○、○、○、○、○、○、○、○、○
○、○、○、 、 、 、 、 、 、○、○、○、 、 、 、 、 、
、 、 、○、○、○、 、 、 、 、 、 、○、○、○、 、 、
、 、 、 、 、 、○、○、○、 、 、 、 、 、 、○、○、○
○、 、 、○、 、 、○、 、 、○、 、 、○、 、 、○、 、
、○、 、 、○、 、 、○、 、 、○、 、 、○、 、 、○、
、 、○、 、 、○、 、 、○、 、 、○、 、 、○、 、 、○
28 :
27:2006/07/23(日) 09:07:13
ちょっとずれた。
でも雰囲気はわかるよね。
29 :
24:2006/07/23(日) 09:24:01
>>26 それでは、実際にやってみましょう。必ず23手以内に詰ませてみせます。
一手目
┼┼┼
●○┼
┼┼┼
誰でもいいです。どうぞ
>>24 それ、探索にどのくらい時間かかるんだ?
ネズミの移動方向を入力できるようにして up してくれよ。
面白いゲームになりそうじゃね?w
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼
┼┼┼┼┼ ┼┼●┼┼ ┼┼●┼┼
┼┼┼○┼ ┼┼┼○┼ ┼┼┼┼┼
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼○┼
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼
┼┼┼┼┼ ┼┼┼┼┼ ┼┼┼┼┼
脱出成功
32 :
24:2006/07/23(日) 09:28:47
>>31 実はそれでも詰みますが、変化が複雑(時間がかかる)なので
>>29からどうぞ
┼┼┼┼┼ ┼┼┼┼┼
┼┼┼┼┼ ┼┼┼┼┼
●○┼┼┼ ●┼○┼┼
┼┼┼┼┼ ┼┼┼┼┼
┼┼┼┼┼ ┼┼┼┼┼
┼┼┼┼┼ ┼┼┼┼┼
34 :
24:2006/07/23(日) 09:40:46
>>30 Javaで書いてしまいましたが、1時間ぐらいで解けました。
3手目
┼┼┼┼┼
┼┼┼●┼
●┼○┼┼
┼┼┼┼┼
┼┼┼┼┼
┼┼┼┼┼
書き込みを楽にする為、最後の局面のみにしましょう。
┼┼┼┼┼
┼┼┼●┼
●┼┼┼┼
┼┼○┼┼
┼┼┼┼┼
┼┼┼┼┼
でもさ、
>>31 のが時間かかるってことは23手で詰まないっていう意味じゃないの?
36 :
24:2006/07/23(日) 09:44:12
3手目
┼┼┼┼┼
┼┼┼●┼
●┼┼┼┼
┼┼○┼┼
┼┼●┼┼
┼┼┼┼┼
いえ、探索に時間がかかります。
そういえばアレニウスの円っていう問題もあったね
┼┼┼┼┼
┼┼┼●┼
●┼┼┼┼
┼┼┼○┼
┼┼●┼┼
┼┼┼┼┼
ジダンの華麗なダンス炸裂してほしい
>>34 1時間は長いな。
最初の数手をテーブルにしたらインタラクティブな待ち時間にならんかな。
ネズミ側だけでいいんだけど。
既に2手サバ読まれてるし
41 :
24:2006/07/23(日) 09:47:04
7手目
┼┼┼┼┼
┼┼┼●┼
●┼┼┼┼
┼┼┼○┼
┼┼●┼●
┼┼┼┼┼
じつは4手目は最善手ではありません。
ほっほー
ネズミは曲がるとかなり手数損しそうですね
┼┼┼┼┼
┼┼┼●┼
●┼┼┼┼
┼┼┼┼┼
┼┼●┼●
┼┼┼○┼
ジダン突破
4手目
┼┼┼┼┼
┼┼┼●┼
●┼┼○┼
┼┼┼┼┼
┼┼┼┼┼
┼┼┼┼┼
45 :
24:2006/07/23(日) 10:05:00
>>40 ばれましたか。
5手目
┼┼┼┼┼
┼┼┼●┼
●┼┼○●
┼┼┼┼┼
┼┼┼┼┼
┼┼┼┼┼
4手目
┼┼┼┼┼
┼┼┼●┼
●○┼┼┼
┼┼┼┼┼
┼┼┼┼┼
┼┼┼┼┼
47 :
24:2006/07/23(日) 10:08:02
5手目
┼┼┼┼┼
┼┼┼●┼
●○┼┼┼
┼┼┼┼┼
┼┼┼┼┼
┼┼┼┼┼
>>44は最善手の一つですがこちらは違います。
6手目
┼┼┼┼┼
┼┼┼●○
●┼┼┼●
┼┼┼┼┼
┼┼┼┼┼
┼┼┼┼┼
49 :
24:2006/07/23(日) 10:08:53
5手目
┼┼┼┼┼
┼┼┼●┼
●○┼┼┼
┼●┼┼┼
┼┼┼┼┼
┼┼┼┼┼
┼┼┼┼┼
┼┼┼●┼
●┼┼┼●
┼┼┼○┼
┼┼┼┼┼
┼┼┼┼┼
51 :
24:2006/07/23(日) 10:12:54
7手目
┼┼┼┼┼
┼┼┼●┼
●┼┼┼●
┼┼┼○┼
┼┼┼●┼
┼┼┼┼┼
┼┼┼┼┼
┼┼┼●┼
●┼┼┼●
┼┼┼┼○
┼┼┼●┼
┼┼┼┼┼
53 :
24:2006/07/23(日) 10:38:19
┼┼┼┼┼┼┼ ┼┼┼┼┼┼┼ ┼┼┼┼┼┼┼ ┼┼┼┼┼┼┼
┼┼┼●┼┼┼ ┼┼┼●┼┼┼ ┼┼┼●┼┼┼ ┼┼┼●┼┼┼
●┼┼┼●┼┼ ●┼┼┼●┼┼ ●┼┼┼●┼┼ ●┼┼┼●┼┼
┼┼┼┼○┼┼ ┼┼┼┼○┼┼ ┼┼┼┼┼○┼ ┼┼┼┼┼○●
┼┼┼●┼┼┼ ┼┼┼●┼●┼ ┼┼┼●┼●┼ ┼┼┼●┼●┼
┼┼┼┼┼┼┼ ┼┼┼┼┼┼┼ ┼┼┼┼┼┼┼ ┼┼┼┼┼●┼
┼┼┼●┼┼┼ ┼┼┼●┼┼● ┼┼┼●┼○● ┼┼┼●┼○●
●┼┼┼●○┼ ●┼┼┼●○┼ ●┼┼┼●┼┼ ●┼┼┼●┼┼
┼┼┼┼┼┼● ┼┼┼┼┼┼● ┼┼┼┼┼┼● ┼┼┼┼┼┼●
┼┼┼●┼●┼ ┼┼┼●┼●┼ ┼┼┼●┼●┼ ┼┼┼●┼●┼
┼┼┼┼┼●┼ ┼┼┼┼┼●┼ ┼┼┼┼┼●┼ ┼┼┼┼┼●┼
┼┼┼●┼┼● ┼┼┼●●┼● ┼┼┼●●┼● ┼┼┼●●┼●
●┼┼┼●○┼ ●┼┼┼●○┼ ●┼┼┼●┼┼ ●┼┼┼●┼┼
┼┼┼┼┼┼● ┼┼┼┼┼┼● ┼┼┼┼┼○● ┼┼┼┼●○●
┼┼┼●┼●┼ ┼┼┼●┼●┼ ┼┼┼●┼●┼ ┼┼┼●┼●┼
┼┼┼┼┼●┼ ┼┼┼┼┼●┼ ┼┼┼┼┼●┼ ┼┼┼┼┼●┼
┼┼┼●●┼● ┼┼┼●●┼● ┼┼┼●●○● ┼┼┼●●○●
●┼┼┼●○┼ ●┼┼┼●○● ●┼┼┼●┼● ●┼┼┼●●●
┼┼┼┼●┼● ┼┼┼┼●┼● ┼┼┼┼●┼● ┼┼┼┼●┼●
┼┼┼●┼●┼ ┼┼┼●┼●┼ ┼┼┼●┼●┼ ┼┼┼●┼●┼
これで終わりにします。ちょいとでしゃばりすぎた感がありますので
明らかに勝負が見えたあとの収束が遅いように思います
>>27 意味が分からないんですけど
解説してください
56 :
27:2006/07/23(日) 11:44:04
うーん俺がアホなせいでなかなかうまく説明できないんだが。
テストというのは入力がいくつかあってその選択肢の組み合わせを考える。
>>27の例は入力が3つあって、一番目は選択肢が2つ、2番目、3番目は選択肢が3つあると思って。
で、1行目、2行目は一番目の入力の選択肢をどちらを選ぶかを表している。
3,4,5行目は2番目の入力の選択肢のうちどれを選ぶかを表している。
6,7,8行目は3番目の入力の選択肢のうちどれを選ぶかを表している。
各列はひとつのテストケースを表している。
たとえば一行目は一番目の入力=1、2番目の入力=1、3番目の入力=1
5行目は一番目の入力=1、2番目の入力=2、3番目の入力=2といった感じ。
で、選択肢の組み合わせを網羅的に生成してほしい。出力は
>>27のフォーマットで。
うまく説明できたかわからんがこんな感じです。
#include <string>忘れてた
60 :
27:2006/07/23(日) 16:47:41
そうそう。そんな感じなんですが、何とか1列1テストケースになりませんかね。
そのほうが何かとありがたいんですが。
>>56 主語や目的語を省略しすぎなんだよ
自分だけが分かってて相手が分かってないときに説明するんだから
62 :
27:2006/07/23(日) 16:55:52
ネズミが8方向に動けたら、つかまんなくなりそう。
どうなんだろ。
>>63 それじゃパズルとして綺麗じゃないような気がする(移動距離が長いものと短いものがあってイヤ)
どうせならヘックスでやってみるとおもしろいかもしれない。
65 :
デフォルトの名無しさん:2006/07/23(日) 18:24:24
66 :
27:2006/07/23(日) 18:29:29
>>65 いや、考えようによってはパズルといえなくもないかなーと。
これからは注意します。
ありがとうございました。
あのな、パズルってのは(ry
HEXのねずみ捕り面白そうだけど
ここで表現するの自体が難しそう
3x3のマス目で行なうマスターマインド(値は重複しない1〜9)の解答を得る
アルゴリズムってできないでしょうか?
3手で正解を得られるようなんですが。
難しくてサパーリわからん。
最低限ルールぐらい書いてもらおうか
どんなルールか知らんが3x3ならしらみつぶしで終わりそうな予感。
○○○
○○○
○○○
123
456
789
場所 1
数字 9
789
456
123
場所 1
数字 9
987
654
321
場所 4
数字 9
978
645
312
場所 8
数字 9
糞スレ化している・・・
○++○++○++○++○++
++○++○++○++○++
○++○++○++○++○++
++○++○++○++○++
○++○++○++○++○++
++○++○++○++○++
○++○++○++○++○++
++○++○++○++○++
○++○++○++○++○++
++○++○++○++○++
○++○++○++○++○++
++○++○++○++○++
HEXなってないかな・・・
盤だけ表示できても駒が
++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++
どぞ
六角形の碁盤
http://game9.2ch.net/test/read.cgi/gamestones/1071768398/l50 _____┌─┬─┬─┬─┬─┬─┐
_____| | | | | | |
____┌┴┬┴┬┴┬┴┬┴┬┴┬┴┐
____| | | | | | | |
___┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
___| | | | | | | | |
__┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
__| | | | | | | | | |
_┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
_| | | | | | | | | | |
┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
| | | | | |○| | | | | |
└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
_| | | | | |●| | | | |
_└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
__| | | | | | | | | |
__└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
___| | | | | | | | |
___└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
____| | | | | | | |
____└┬┴┬┴┬┴┬┴┬┴┬┴┬┘
_____| | | | | | |
_____└─┴─┴─┴─┴─┴─┘
_____┌─┬─┬─┬─┬─┬─┐
_____| | | | | | |
____┌┴┬┴┬┴┬┴┬┴┬┴┬┴┐
____| | | | | | | |
___┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
___| | | | | | | | |
__┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
__| | | | | | | | | |
_┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
_| | | | |○| | | | | |
┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
| | | | | | | | | | | |
└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
_| | | | | |●| | | | |
_└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
__| | | | | | | | | |
__└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
___| | | | | | | | |
___└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
____| | | | | | | |
____└┬┴┬┴┬┴┬┴┬┴┬┴┬┘
_____| | | | | | |
_____└─┴─┴─┴─┴─┴─┘
_____┌─┬─┬─┬─┬─┬─┐
_____| | | | | | |
____┌┴┬┴┬┴┬┴┬┴┬┴┬┴┐
____| | | | | | | |
___┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
___| | | | | | | | |
__┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
__| | | |●| | | | | |
_┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
_| | | | |○| | | | | |
┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
| | | | | | | | | | | |
└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
_| | | | | |●| | | | |
_└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
__| | | | | | | | | |
__└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
___| | | | | | | | |
___└┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
____| | | | | | | |
____└┬┴┬┴┬┴┬┴┬┴┬┴┬┘
_____| | | | | | |
_____└─┴─┴─┴─┴─┴─┘
これ対称性を考えると意外とパターン少ないな
HEXだとつかまんない予感。
85 :
デフォルトの名無しさん:2006/07/25(火) 02:00:43
オセロのパーフェクト決着の最短推移と最長推移をそれぞれ一種類ずつ求めよ。
盤面の左下のマスを [0,0] とし、はじめ [3,3] に置いてある色のプレイヤーが先攻とする。
ゲームの推移の記法は [3,5] [4,6] ... とする。
・・・こういうのはパズルとは言わないかも
86 :
デフォルトの名無しさん:2006/07/25(火) 02:08:54
満たすべきだろうね
グレイコードから作る方法なら満たせるでしょう
88 :
デフォルトの名無しさん:2006/07/25(火) 16:28:49
ところでHEXの座標ってどう表すの?
>>89 普通の表の片方の斜めだけに進めるようにする。
■■□
■☆■
□■■
■:進めるマス
□:進めないマス
--■■□
-■☆■
□■■
表示はこう
93 :
90:2006/07/25(火) 20:35:07
いや、俺の勘違い。やっぱPSPACEじゃなくてNPかも。
>>5の問題にグレイコードを応用するのは言うほど簡単じゃないとおも。
なかなか手ごわい。
95 :
デフォルトの名無しさん:2006/07/26(水) 02:21:43
>>5 最初と最後を合わせなくていいのなら
#!perl
$max=shift||die"pls spec len\n";$max<1&&die"too small len\n";
($len,@list,@old,$newchar)=(1,'a');
while($len++<$max){($n,@old,@list)=(chr(0x60+$len),@list);
for($i=length($old[0]);$i>=0;--$i){
for(@old){$v=$_;substr($v,$i,0,$n);push@list,$v;}
@old=reverse@old;}}print"$_\n"for@list;
新しい問題キボン。
>>5 一応、始めと終わりもつなぐようにはできたが。。。
http://www.uploda.org/uporg458911.cpp.html まず単純な並びをつくって、規則性のある並びに並び替える。
文字数n=4なら
00:abcd 06:bacd 12:cabd 18:dabc
01:abdc 07:badc 13:cadb 19:dacb
02:acbd 08:bcad 14:cbad 20:dbac
03:acdb 09:bcda 15:cbda 21:dbca
04:adbc 10:bdac 16:cdab 22:dcab
05:adcb 11:bdca 17:cdba 23:dcba
という並びから、
00:abcd 01:bacd 02:cabd 03:dabc
04:abdc 05:badc 06:cadb 07:dacb
08:acbd 09:bcad 10:cbad 11:dbac
12:acdb 13:bcda 14:cbda 15:dbca
16:adbc 17:bdac 18:cdab 19:dcab
20:adcb 21:bdca 22:cdba 23:dcba
という並びにする。このとき横の並びは互いに2文字異なっている。
次に00の行、04の行・・・20の行を互いに2文字異なるように並び替えるために、
先頭の'a'を除いて、n=3の時を応用する。
あと適当にreverseする。
グレイ符号のやり方は知らん
01:bacd 02:cabd
なってないですよ?
>>99 「互いに2文字異なっている」に「なってないですよ?」と言いたいのかな?
01:bacd
02:cabd
b,cを入れ替えた2文字違いだね。
ソースみると検算までしてるみたいだし、いいんでは。
5文字の時になんで始めと終わりが揃うのかフシギ
ああ、なってますね。すみません。
A) 00:abcd 06:bacd 12:cabd 18:dabc
B) 01:abdc 07:badc 13:cadb 19:dacb
C) 02:acbd 08:bcad 14:cbad 20:dbac
D) 03:acdb 09:bcda 15:cbda 21:dbca
E) 04:adbc 10:bdac 16:cdab 22:dcab
F) 05:adcb 11:bdca 17:cdba 23:dcba
番号を付け替える必要性は良く分からないのですが、
縦方向から横方向にスキャンを変える発想はよさそうですね。
さらに、
A) を左から右
C) を右から左
E) を左から右
B) を右から左
D) を左から右
F) を右から左
で A) に戻ればうまく循環できますね。
横方向に左右逆転しながら1行とびにスキャンすると循環という
規則性ありそうです。
0)0000 8)1000
1)0001 9)1001
2)0010 A)1010
3)0011 B)1011
4)0100 C)1100
5)0101 D)1101
6)0110 E)1110
7)0111 F)1111
0) -> 8) -> C) -> 4) -> 6) -> E) -> A) -> 2) -> 3) -> B) -> F) -> 7) -> 5) -> D) -> 9) -> 1) ->
とかで戻ってこれるのですが
これでグレイコードになってるのかどうか不明
0 - 8 - A - 2 - 6 - E - C - 4 - 5 - D - F - 7 - 3 - B - 9 - 1
の方が規則性あるかな
N*Nの格子状のグラフの部分グラフのうち連結なものの個数を数えよ。
エレガントな解法があるのかどうかは知りません。
さめがめとかマインスイーパーみたいなアルゴリズムかな
数学者のオナニーみたいな問題だな
塗りつぶしのアルゴリズム使えば超簡単だな
ノードと方眼紙の各マスが対応するから
ノードの連結=マスの隣接 → 塗りつぶしで区分け可能
110 :
デフォルトの名無しさん:2006/07/29(土) 06:36:22
おもしろい問題くれよ!
D言語用のFrameWorkを作れ
数独ってNP完全なんだってね。
数学板でやってた。
他のどんなNP問題を数独に帰着させられるんだろうな
SEND
+) MORE
----------
MONEY
なるほど、確かに数独と似ている・・・。
FIVE + SEVEN + ELEVEN + TWELVE + FIFTEEN + TWENTY = SEVENTY
SEND+MORE=MONEYは一意に解けてしまうからプログラムのネタにならなくて詰まらん。
語呂合わせにはなってないけど、A*BCDE=FGHIJを解く方が(個人的には)余程面白い。
答えあるのか?
120 :
118:2006/07/29(土) 23:45:22
>>119 数学的には(漏れには)解けなかったけど、単一解があるよ。
#記憶に間違いがなければw
一意に解けてしまうのはつまんないのではなかったのか
禿和露酢
123 :
118:2006/07/30(日) 01:28:13
んにゃ、数学的に解けなかったところに意味を見出しているだけだから。
例えば、SEND+MORE=MONEYだとS=9, M=1から始まって式を展開していけばすぐに求まってしまうから。
#まぁ、笑う前にやって味噌。
125 :
デフォルトの名無しさん:2006/07/30(日) 05:12:59
覆面算と数独が本質的に同じって話だが、何か?
そんな話はしていないのでは・・・
>>12 空いてる枡を─│└┘┌┐のいずれかで埋めて
全パターンやれば解けそう。
バックトラックでどこまで計算量削れるか?
だれか次の言語をBrainFuckにコンパイルするコンパイラ作って。
> ポインタをインクリメント
< ポインタをデクリメント
+ ポインタが示すメモリ位置のデータをインクリメント
- ポインタが示すメモリ位置のデータをデクリメント
. ポインタが示すメモリ位置のデータを出力
, ポインタが示すメモリ位置のデータに入力
[ ポインタが示すメモリ位置のデータがヌルなら対応する]までジャンプ
] ポインタが示すメモリ位置のデータがヌルじゃないなら対応する[までジャンプ
@n (nは整数)ポインタをn番地に設定
BrainFuckのスレ
http://pc8.2ch.net/test/read.cgi/tech/1036013915/l50
131 :
デフォルトの名無しさん:2006/10/31(火) 20:58:56
単位円周上にN個の点が与えられたときに、
そのうちのM個の点を頂点とする多角形の取りうる最大面積の値を求めよ。
仕様:
入力データは、最初の行はNとMの値が半角空白で区切られており、
直後に単位円周上の点のX座標とY座標の値が半角空白で区切られた行がN行続く。
解は小数点以下3桁以上の精度で1行に出力。
入力例:
4 3
1.0 0.0
0.7071 0.7071
0.0 1.0
-1.0 0.0
解答例:
1.000
132 :
デフォルトの名無しさん:2006/10/31(火) 20:59:45
漏れは4時間考えたが結局ヒントもらうまで解けなかったorz
134 :
デフォルトの名無しさん:2006/11/02(木) 01:15:21
どうやって小問題に分割するか
素数が無限個存在することを1行で証明せよ
(有限個の互いに異なる素数の積)+1 = 左辺の素数の集合に含まれない素数
137 :
デフォルトの名無しさん:2006/11/03(金) 00:04:17
(有限個の互いに異なる素数の積)+1 = 左辺の素数の集合に含まれない素数の倍数
139 :
デフォルトの名無しさん:2006/11/03(金) 01:41:24
何の証明にもなってないという事実は伏せておこう
望むだけ長く区間素数が現れないような条件を求めよ。
141 :
デフォルトの名無しさん:2006/11/03(金) 02:34:35
ここは数学のスレではありません><
>>136 (ある素数N以下の全素数の積)+1 = 左辺の素数の集合に含まれない素数
143 :
デフォルトの名無しさん:2006/11/08(水) 21:13:38
それが何故なのかを説明しないと証明にならんっつーの
素数の定義より明らか