文字を接続します


10

この小さなゲームに触発されました。

チャレンジ

次のように、グリッドの初期位置(常に5x5)を入力として指定します。

-ABCD
-A---
---C-
---BD
--E-E

すべての空の-スペースを削除して、文字(すべて同じ文字)を接続する必要があります。文字は常にになりますA,B,C,D and E。

すべての文字のペアは、直角に曲がる単一の非分岐線で接続する必要があります(まったく同じ文字を使用して線を描きます)。

入力は、各開始文字が正確に2回あることが保証されており、常にすべての開始文字AEを持ちます。

入力は、標準入力、または関数への引数としての唯一の文字列、または文字の配列/行列/リストから読み取ることができ、コーディング言語に最も便利な方法です。

これはので、バイト単位の最短コードが勝ちます!


例

各問題に対する解決策は1つだけではありませんが、ルールはすべてに適用されます(空白や区切り文字はありません)。そして、入力には少なくとも1つの正しい出力があることが保証されています。

文字Aを接続してみましょう。

AABCD
AA---
AA-C-
AA-BD
AAE-E

次に、文字Bを接続します。

AABCD
AAB--
AABC-
AABBD
AAE-E

次に、文字Cを接続します。

AABCD
AABC-
AABC-
AABBD
AAE-E

次に、文字Dを接続します。

AABCD
AABCD
AABCD
AABBD
AAE-E

そして、最後にE:

AABCD
AABCD
AABCD
AABBD
AAEEE

別のサンプル

input:
E--E-
BB-C-
AD---
---C-
AD---

output:
EEEEE
BBECE
ADECE
ADECE
ADEEE

input:
A----
---B-
-C-C-
-D-D-
BE-EA

output:
AAAAA
BBBBA
BCCCA
BDDDA
BEEEA

@ Sp3000はdupではありません。このチャレンジでは正しい入力が保証されるためです。
— Nathan Merrill

入力は、各開始文字が正確に2回あることが保証されていますか?常にすべての開始文字が含まれA-Eますか?
— Ton Hospel 2016年

1
かなり小さな違いのように見える@NathanMerrill。可解性のチェックがコードの大部分を占めるとは思えません。
— マーティンエンダー

1
私の挑戦でMartinBüttner@、可解性のチェックはありません何の必要な接続、挑戦。2つの課題には類似点がありますが、私の心の中で大幅に異なると感じています。
— Nathan Merrill

4
このようないくつかの質問に対する私のお気に入りの手法は、乱数を使用して位置を埋め、バックトラックを回避し、解決策を見つけたら停止することです。これは、ソリューションが保証されている場合にのみ機能します。それ以外の場合、プログラムは永久に実行できます(ソリューションが保証されている場合は、長いランタイムが指数関数的に長時間発生する可能性が低くなるようにコードを記述することができます)。この手法の場合、質問は大きく異なります
— Ton Hospel

回答:


4

Perlの、130の 128 127バイト

+4を含む-n0(プログラムはコマンドラインからは機能しないため-、スペースもカウントされます)

STDINの入力を使用して呼び出します。

perl -n0 connectletters.pl
E--E-
BB-C-
AD---
---C-
AD---

Teminate ^Dか^Zまたは任意のシステム上のSTDINを閉じ

connectletters.pl:

/-/?map{$_="$`$_$'";s%\pL%$_="$`0$'";1while do{s/[$&-](.{5}|)0|0(.{5}|)[$&-]/0$+0/s};/$&/||$&%eg;!/1/&&do$0}A..E:exit!print
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.