连接字母


10

受到这款小游戏的启发。

挑战

给定网格的初始位置(始终为5x5)作为输入,如下所示:

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

您需要连接字母(相同的字母在一起),删除所有空白-区域。字母将永远是A,B,C,D and E

每对字母必须由一条可以成直角弯曲的非分支线连接(使用相同的字母表示该线)。

确保输入的每个起始字母正好2次,并且始终具有所有起始字母AE。

可以从stdin读取输入,也可以从某个函数的arg字符串中读取输入,甚至可以从数组/ matriz / chars列表中读取字符,这是最方便的编码语言方式。

因为这是最短的代码以字节为单位获胜!


不仅每个问题都有一个解决方案,而且规则适用于所有问题(没有空格,没有分隔的字母)。并且保证输入至少具有一个正确的输出。

让我们开始连接字母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不是重复项,因为此挑战可确保输入正确。
内森·美林

输入是否保证每个起始字母正好2次?会总是有所有的开头字母A-E吗?
Ton Hospel'3

1
@NathanMerrill似乎相差很小。我无法想象对可解性的检查将占用大部分代码。
马丁·恩德

1
@MartinBüttner在我的挑战中,对可溶性的检查挑战,无需连接。尽管这两个挑战将具有相似之处,但在我看来它们却截然不同。
内森·美林

4
对于此类问题,我最喜欢的技术是使用随机数填写职位,以避免回溯并在遇到问题时停止。这仅在保证解决方案的情况下才有效,否则程序将永远运行(如果保证解决方案,则您可以经常编写代码,以便长时间运行不会成倍地延长运行时间)。对于这种技术的问题非常不同的
吨Hospel

Answers:


4

Perl中,130个 128 127字节

包括+4 -n0(程序无法从命令行运行,因此-也会计算空间)

使用STDIN上的输入进行调用:

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

^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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.