我的琴弦兼容性如何?


12

介绍

考虑两个字符串相同长度的大号和整数ķ≥0 。出于此挑战的目的,我们说如果存在长度为K的字符串C使得A是串联BCB的连续子字符串,则这些字符串是K兼容的。请注意,ABAB的子字符串,因此AB始终是L兼容的(但对于另一些K <L,也可能是K兼容的)。

输入值

您的输入是两个正长度相同的字符串,由大写和小写ASCII字母组成。

输出量

您的输出应为最低的非负整数K,以使输入与K兼容。

考虑输入

A = HHHHHH
B = HHttHH

它们不兼容0,因为A不是的子字符串HHttHHHHttHH。它们也不是1兼容的,因为无论将哪个字母放在上,A都不是子字符串。但是,A 的子字符串,其中C是两个字母的字符串。因此,输入是2兼容的,正确的输出是。HHttHH#HHttHH# HHttHHHHHHttHHHH2

规则和计分

您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。

测试用例

兼容性条件是对称的,因此交换两个输入不应更改输出。

E G -> 1
E E -> 0
aB Bc -> 1
YY tY -> 1
abcd bcda -> 0
abcXd bxcda -> 4
Hello Hello -> 0
Hello olHel -> 1
aBaXYa aXYaBa -> 1
aXYaBa aBaXYa -> 1
HHHHHH HHttHH -> 2
abcdab cdabcd -> 2
XRRXXXXR XRXXRXXR -> 4
evveeetev tetevevev -> 7
vzzvzJvJJz vJJvzJJvJz -> 10
JJfcfJJcfJfb JcfJfbbJJJfJ -> 5
GhhaaHHbbhGGH HHaaHHbbGGGhh -> 9
OyDGqyDGDOGOGyG yDGqOGqDyyyyOyD -> 12
ffKKBBpGfGKpfGpbKb fGpbKbpBBBffbbbffK -> 9
UZuPPZuPdVdtuDdDiuddUPtUidtVVV dtUPtUidtVVVtDZbZZPuiUZuPPZuPd -> 21

排行榜

这是一个堆栈片段,用于按语言生成排行榜和获奖者名单。为了确保您的答案显示出来,请以表格标题开头

## Language, N bytes

您可以使用删除线标记<s>57</s>将旧的分数保留在标题中:将显示为57

Answers:


8

珀斯,16岁

lhf}QjT,vzvz+k.:

查找A的最短子字符串,该子字符串插入B的两个副本之间会导致包含A的字符串。

如果第二行没有引号,这可能会短两个字节,但这感觉很奇怪?

测试套件


4

Python 3中,155个 168 157字节

总计为的长度A。比较的开始A到结束,B然后从总数中减去。比较的开始B到结束,A然后从总数中减去。除非total等于长度,否则返回total的绝对值,在这种情况下,返回0。

def f(A,B):
    T=L=len(A)
    C=D=1
    for i in range(L,0,-1):
        if A[:i]==B[-i:]and C:
            T,C=T-i,0
        if A[-i:]==B[:i]and D:
            T,D=T-i,0
    return (0,abs(T))[T!=-L]

编辑:处理f("abcdab","cdabcd")==2案件


3
不幸的是,这并不工作f("abcdab", "cdabcd")应该是2
尼尔

@Neil好抓住。我将其添加到测试用例中。
Zgarb


@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu我正在查看图像并想到:“这是使用表情符号的不错的调试器主意,但我看不到错误……”。我认为该附加组件将对该网站造成严重破坏。
NonlinearFruit

3

视网膜,49字节

.*?(?<=^(?=(.*)(?<4-3>.)*(.*) \2.*\1$)(.)*).+
$#4

在线尝试!(稍作修改即可一次运行所有测试。)

诀窍在于,我们需要回溯A我们在中找不到的部分B,并且到目前为止,我还没有找到一种方法来解决此问题,而不必烦恼环视和平衡组。


3

Jolf,40个字节

Wά)Ζ0W<ζli)? h++i]Iζ+ζniIoά0nΖhζ}onhn}wn

尝试一下!

我对Jolf很陌生,在弄清楚这一点的同时学到了很多东西。似乎有点尴尬,但仍然有可能进一步打下去。在撰写此说明时,甚至删除了2个字节。

说明:

  Wά)                                      While ά (initialized to 16)
     Ζ0                                    Set ζ to 0
       W<ζli)                              While ζ < length(A)
             ? h++i]Iζ+ζniIoά0n            Set ά to 0 if (A + a substring from B of length n + A) contains B
                               Ζhζ         Increment ζ
                                  }onhn    Increment n (initialize to 0
                                       }wn Decrement n and print

我没有认真尝试过,这可能是一个最佳解决方案,但是我建议尝试在范围上进行映射。(s0zli如果您想尝试此方法,将为您提供数组[0 ...长度i]。)
Conor O'Brien

@CᴏɴᴏʀO'Bʀɪᴇɴ嗯,我来看一下...还有在查看文档/源代码时我不小心看到的if命令吗?还是唯一的选择?与无关的第三个论点?
膨胀

?如果在Jolf中,则最接近。就像是三元组。?ABCs returns B`,如果a为真,C否则为。
Conor O'Brien


2

JavaScript(ES6),110个字节

(a,b)=>{for(i=0;;i++)for(j=i;j<=a.length;j++)if(b.startsWith(a.slice(j))&&b.endsWith(a.slice(0,j-i)))return i}

通过从中间切出更长的块a直到匹配两端的方式进行工作b。循环不是无限的,因为它将在或之前停止i == a.length

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.