画面を王のタイルで埋める


24

次の13の正方形の王のタイルが飛行機を非周期的に並べることが証明されました。つまり、正方形が隣接するすべての辺が同じ色のグリッドに配置されている場合、パターンの変換はそれ自体と一致しません。

王のタイル

各タイルをテキストで3×3グリッドで表し、中央と隅にスペースを入れ、エッジにある赤、緑、青、黄、グレーの代わりに1〜5の数字を使用します。

 2      2      2      1      1      1      4      3      2      2      4      3      2
1 2    1 3    2 3    2 1    3 1    3 2    4 4    4 4    4 5    4 5    5 5    5 5    5 4
 3      2      3      2      3      2      1      2      1      4      1      2      2

ゴール

あなたの仕事は、幅と高さを取り込んで、それらの寸法で有効なWangタイルグリッドを出力するプログラムを書くことです。有効なタイルとは、隣接するすべてのタイルエッジが同じ色(または番号)であるタイルです。バイト単位の最小プログラムが優先されます。

入力はstdinまたはコマンドライン引数から取得し、出力はstdoutに送信する必要があります。正確な入力形式は、のように合理的に明白なものであれば何でもかまいません>>> wangtiler 3 2。幅と高さは常に正の整数です。

例(幅= 3、高さ= 2)

テキストタイルをレイアウトすると、隣接するエッジが必要な冗長な数字のペアを形成することに注意してください。

 1  2  1 
2 11 22 1
 2  3  2 
 2  3  2 
4 55 55 4
 1  2  2 

(これは適切な出力形式ではありません。)

これらを水平および垂直に圧縮して、以下を取得できます。

 1 2 1 
2 1 2 1
 2 3 2 
4 5 5 4
 1 2 2 

この圧縮形式は、使用する必要がある適切な出力形式です。奇数行には末尾スペースを含める必要があります。

グラフィカルボーナス

テキスト出力の代わりに、プログラムはタイルグリッドの画像を出力する場合があります。グラフィカルタイルは、正方形に配置された4つの45-45-90三角形で構成され、上のタイルのように簡単に区別できる5つの色を使用する必要があります。黒い境界線は不要です。グラフィカルタイルのサイズは少なくとも32×32ピクセルである必要があります。それらには「圧縮」は適用されません。

ボーナス画像の例:(上記の例と同じグリッド)

ボーナス例

ボーナスはマイナス150バイトの価値があります。

ノート

  • この13個のタイルのセットを使用する必要があります。
  • タイルは回転できません。
  • タイルは何回でも表示される場合があります(まったく表示されない場合もあります)。
  • 任意の寸法の有効なタイルが可能であると想定できます。

タイルは回転できないと思いますか?
マーティンエンダー14

@MartinBüttnerいいえ。表示されたとおりに提供されている13枚のタイルのセットを使用する必要があります。
カルビンの趣味14

各タイルを使用できる回数に制限はありますか?あなたの例では、1つのタイルを2回使用しました。
テウンプロンク14

@TeunPronkいや。ただし、必要に応じて何度でも使用してください(もちろん、エッジを適切に一致させるために、さらに多くを使用する必要があります)。
カルビンの趣味14

@ Calvin'sHobbies常に可能な解決策があると仮定するのは安全ですか?
テウンプロンク14

回答:


12

GolfScript、200文字

~\:W*):R;1,{)\:C"=QCy_~{MTKAis]?OyJE?~WvM"[64 2400]{base}/@{>}+,{:T;[C,W<!{C W~)=T 64/^8/8%}*C,W%0>{C-1=64/T^8%}*]0-!},1<.!!{1,+}*+.,R<}do);W/.0={' '\512/8%`}%n@{.[.0=8%\{' '\64/8%}/n]\{' '\8/8%`}%n}/

グラフィック出力のないASCIIバージョン。STDINに入力してください- ここで試してください。コードは単純なバックトラッキングアプローチを使用し、スペースを1行ずつ埋めます。

例:

> 3 2
 1 2 1
2 1 2 1
 2 3 2
5 4 4 5
 2 2 1

> 8 5
 1 2 1 2 1 2 1 2
2 1 2 1 2 1 2 1 2
 2 3 2 3 2 3 2 3
5 4 4 5 5 4 4 5 5
 2 2 4 2 2 2 4 2
5 4 5 5 4 5 4 4 5
 2 1 1 2 1 2 1 1
1 3 2 1 2 1 3 2 1
 2 2 2 3 2 2 2 2
5 4 5 4 4 5 4 5 4
 2 1 2 2 1 2 1 2

グラフィカルボーナス、スコア122、272文字-150ボーナス

~\:W*):R;1,{)\:C"=QCy_~{MTKAis]?OyJE?~WvM"[64 2400]{base}/@{>}+,{:T;[C,W<!{C W~)=T 64/^8/8%}*C,W%0>{C-1=64/T^8%}*]0-!},1<.!!{1,+}*+.,R<}do);W["P3\n"32W*" "3$,32*n 1n]\{{:^;512:X;16,{[^8%]1$*[^X/8%]31*@.+>[^64/8%]31*++32<}:F%8:X;16,-1%{F}%+}%zip{{+}*{8+2base(;~}%' '*n}/}/

異なる出力フォーマッタを使用した同じ基本コード。出力はPPM形式の画像です(つまり、単に出力をファイルにリダイレクトしますimage.ppm)。色は問題のタイルとわずかに異なりますが、はっきりと区別できます(1->青、2->緑、3->シアン、4->赤、5->マゼンタ)。

16x12の例:

16x12 wangの例


16

Python(565-150 = 415)

ところで...左と上のタイルで次のタイルを単純に決定することはできないようです。互いに合ういくつかのタイルの組み合わせがあります。
このソリューションは、タイルが収まらない場合に、考えられるすべての組み合わせとバックトラックを左から右、上から下のブルートフォースで埋めます。

13タイルプルーフの詳細:13枚のWangタイルの非周期的なセット

幅と高さは WH

赤、緑、青、黄色とノワールで指定されたRGBYおよびN

import Image,sys
W,H=map(int,sys.argv[1:])
R=99
G=R<<8
B=G<<8
Y=G+R
N=0
s="RGB";u=32;g=[[0,0]]*W*H;k=f=0
def t(c):i=Image.new(s,(2,2));k=i.load();q=16;k[1,0],k[1,1],k[0,1],k[0,0]=c;return i.resize([64]*2).rotate(45).crop((q,q,q+u,q+u))
while k<H*W:
 z=g[k][1];v=-1;j=k/W;i=k%W
 while z<13:
    l=map(eval,"GGGRRRYBGGYBGGBBRRGYYNNNNYBGBGBGRGRYRGGRRGGBBYYYYNNN"[z::13])
    if(j<1or g[(j-1)*W+i][0][2]==l[0])and(i<1or g[j*W+i-1][0][1]==l[3]):g[k]=[l,z+1];v=1;z=99
    z+=1
 g[k][1]*=(v>0);k+=v
m=Image.new(s,(W*u,H*u))
for e in g:m.paste(t(e[0]),(f%W*u,(f/W)*u));f+=1
m.show()

出力。実際の配色ではありません...眩しすぎます。これにより、興味深いインテリアパターンが作成される可能性があります...:

ここに画像の説明を入力してください


14
がneopolitan Minecraftの...
カルバンの趣味

大きな画像を追加できますか?私はそれがどのように見えるか興味があります
誇りに思ってhaskeller 14

1
@proudhaskeller拡大写真:Imgur。壁紙メーカー:リンク
ベクトル化14

1
これは確かに定期的に見えます-何が欠けていますか?
誇りに思ってhaskeller

ほぼ周期的..ここでより対照的な例:Imgur
ベクトル化14

2

Haskell、208バイト

p x|x<2/3=(3!x)3"3212"3
p x=(0.5!x)1"45423"2
f=floor
(k!x)l s m=do{i<-[0,x..];[' ',s!!(2+f(i+x)-f i)]}:do{i<-[0,l*x..];s!!mod(f i)m:" "}:p(k*x)
t n=take$2*n+1
main=do(w,h)<-readLn;putStr.unlines.t h$t w<$>p 1

検索せず、数学だけ。実行例:(8,5)stdinで指定、出力

 2 2 2 2 2 2 2 2 
4 5 4 5 4 5 4 5 4
 1 2 1 2 1 2 1 2 
3 2 3 2 3 2 3 2 3
 2 3 2 3 2 3 2 3 
4 5 5 4 4 5 5 4 4
 4 2 2 2 4 2 2 2 
4 4 5 4 5 5 4 5 4
 1 1 2 1 1 2 1 2 
3 2 1 3 2 1 3 2 3
 2 2 2 2 2 2 2 3 

Ideoneでオンラインで実行

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.