Nó có lặp lại không?


20

Một chuỗi các ký tự lặp lại nếu nó chứa hai chuỗi con liên tiếp tương đương nhau.

Ví dụ, 2034384538452lặp đi lặp lại vì nó chứa 3845hai lần, liên tiếp.

Do đó, thách thức của bạn là quyết định xem một chuỗi có chứa một chuỗi con lặp lại hay không. Bạn có thể lấy đầu vào là một chuỗi hoặc một mảng các ký tự.

Bạn sẽ không bao giờ nhận được đầu vào trống và độ dài của chuỗi con (nếu nó tồn tại) có thể là 1 hoặc nhiều hơn.

Tôi sử dụng 10ở đây là giá trị trung thực và giả của tôi, nhưng bạn có thể sử dụng các giá trị khác nhau, miễn là chúng trung thực và giả trong ngôn ngữ của bạn.

Ví dụ:

abcab -> 0
bdefdefg -> 1
Hello, World! -> 1
pp.pp/pp -> 1
q -> 0
21020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021012102012101202102012021012102012021020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020120210201210120210201202101210201210120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120 -> 0

(Ví dụ cuối cùng được tạo ra từ số lượng giữa mỗi số 0 trong chuỗi Thue-Morse)


2
Tôi có thể sử dụng các giá trị không nhất quán, miễn là chúng vẫn còn đúng sự thật hoặc falsey không?
Erik the Outgolfer

@EriktheOutgolfer Tất nhiên
Okx

@trichoplax Tôi nghĩ rằng anh ta có nghĩa là các chuỗi dài liên tiếp> = 1.
Erik the Outgolfer

@EriktheOutgolfer "liên tiếp" là từ tôi đã bỏ lỡ. Cảm ơn bạn - nó có ý nghĩa hoàn hảo bây giờ.
trichoplax

Thay vào đó chúng ta có thể xuất 1 cho falsey và 0 cho sự thật không?
Kritixi Lithos

Câu trả lời:




7

Thạch , 6 5 byte

Ẇµ;"f

Đây là một chương trình đầy đủ. TIO không thể xử lý trường hợp thử nghiệm cuối cùng mà không cắt ngắn nó.

Hãy thử trực tuyến! (trường hợp thử nghiệm cuối cùng được rút ngắn thành 250 chữ số)

Làm thế nào nó hoạt động

Ẇµ;"f  Main link. Argument: s (string)

Ẇ      Words; generate all substrings of s.
 µ     New chain. Argument: A (substring array)
  ;"   Vectorized concatenation; concatenate each substring with itself.
    f  Filter; keep "doubled" substrings that are also substrings.
       This keeps non-empty string iff the output should be truthy, producing
       non-empty output (truthy) in this case and empty output (falsy) otherwise.

5

Toán học, 32 byte

StringMatchQ[___~~x__~~x__~~___]

Điều này có yêu cầu các chuỗi con lặp lại liền kề không?
DavidC

1
@Svetlana, bạn đúng rồi! Tôi đã không đưa abcab-> 0 vào tài khoản.
DavidC

1
StringContainsQ[x__~~x__]!StringFreeQ[#,x__~~x__]&cả hai đều ngắn hơn.
ngenisis


5

05AB1E , 5 byte

Œ2×åZ

Hãy thử trực tuyến!

Đầu ra 1 là giá trị trung thực và 0 là giá trị giả

Giải trình

Œ2×åZ
Œ     # Substrings of input
 2×   # duplicate them (vectorized)
   å  # Is the element in the input? (vectorized)
    Z # Maximum value from list of elements

4

Python , 38 byte

import re
re.compile(r'(.+)\1').search

Hãy thử trực tuyến!

Ngáp, một regex. Kiểm tra xem chuỗi có chứa một chuỗi gồm một trong số các ký tự được .+theo sau bởi cùng chuỗi đó vừa được bắt hay không. Đối tượng tìm kiếm đầu ra là Truthy nếu có ít nhất một kết quả khớp, như có thể được kiểm tra bởi bool.

Sử dụng compileở đây tiết kiệm hơn viết lambda:

lambda s:re.search(r'(.+)\1',s)

Python , 54 byte

f=lambda s:s>''and(s in(s*2)[1:-1])|f(s[1:])|f(s[:-1])

Hãy thử trực tuyến!

Tìm kiếm một chuỗi con bao gồm hai hoặc nhiều chuỗi bằng nhau được nối, như được kiểm tra s in(s*2)[1:-1]như trong câu trả lời này . Substrings được tạo đệ quy bằng cách chọn cắt ký tự đầu tiên hoặc cuối cùng. Điều này là theo cấp số nhân, vì vậy nó lần ra khỏi trường hợp thử nghiệm lớn.

Gần bỏ lỡ:

f=lambda s,p='':s and(s==p)*s+f(s[1:],p+s[0])+f(s[:-1])
f=lambda s,i=1:s[i:]and(2*s[:i]in s)*s+f(s[1:])+f(s,i+1)

Cái đầu tiên không sử dụng Python inđể kiểm tra các chuỗi con và do đó có thể được điều chỉnh theo các ngôn ngữ khác.


4

Pyth - 10 9 8 byte

f}+TTQ.:

Trả về một danh sách tất cả các chuỗi con lặp lại (nếu không có, là một danh sách trống, đó là giả mạo)

Thử nó

Giải trình:

f}+TTQ.:
      .:    # All substrings of the input (implicit):
f           # filter the list of substrings T by whether...
  +TT       # ...the concatenation of the substring with itself...
 }   Q      # ...is a substring of the input

1
Nếu bạn cho rằng đầu vào trong dấu ngoặc kép f}+TTQ.:hoạt động từ 1 Byte ít hơn: liên kết
KarlKastor




2

Perl 6 , 11 byte

{?/(.+)$0/}

Kiểm tra nó

Mở rộng:

{        # bare block lambda with implicit parameter 「$_」

  ?      # Boolify the following
         # (need something here so it runs the regex instead of returning it)

  /      # a regex that implicitly matches against 「$_」
    (.+) # one or more characters stored in $0
     $0  # that string of characters again
  /
}

2

PHP, 32 byte

<?=preg_match('#(.+)\1#',$argn);

Chạy như ống với -F. Xin lỗi Jörg, tôi đã nhận thấy Bạn đã đăng cùng .

phiên bản không regex, 84 82 byte

    for($s=$argn;++$e;)for($i=0;~$s[$i];)substr($s,$i,$e)==substr($s,$e+$i++,$e)&&die

thoát với mã trả lại 0cho một lần lặp lại, hết thời gian (và thoát với lỗi) cho không có. Chạy như ống với -nr.
giả định đầu vào ASCII có thể in được; thay thế ~với a&bất cứ ASCII.


1

JavaScript (ES6), 19 byte

s=>/(.+)\1/.test(s)

Thế còn /(.+)\1/.test?
Luke

Đó là những gì tôi có, @Luke.
Shaggy

@Shaggy Tôi tin rằng anh ấy có nghĩa là /(.+)\1/.testbản đệ trình hoàn chỉnh.
Rò rỉ Nun

@Luke /(.+)\1/.testlà không liên kết (không có this). f=/(.+)\1/.test;f('aa')sẽ không làm việc, ví dụ. Bạn sẽ cần/./.test.bind(/(.+)\1/)
Artyer

Bạn có thể chơi gôn tới: ::/(.+)\1/.test(15 byte)
Downgoat


1

V , 6 byte

ø¨.«©±

Hãy thử trực tuyến!

Phòng thử nghiệm!

Chương trình đầu ra 0 các giá trị falsey và một số nguyên dương cho các giá trị dương.

(Lưu ý rằng có một lỗi nhỏ, vì vậy tôi phải đạt được 1 byte. Bây giờ sau khi sửa lỗi, tôi sẽ có thể thay thế bằng\x82 )

Giải trình

ø                     " This is a recent addition to V. This command takes in a regex
                      " and replaces the line with the number of matches of the regex
 ¨.«©±                " The compressed regex. This decompresses to \(.\+\)\1

1

Japt, 8 + 1 = 9 8 byte

f"(.+)%1

Hãy thử trực tuyến . Đầu ra nullcho sai lệch và một mảng chứa tất cả các chuỗi lặp lại cho sự thật.

Giải trình

 f"(.+)%1
Uf"(.+)%1" # Implicit input and string termination
Uf         # Find in the input
  "(.+)%1" #   a sequence followed by itself
 f         # and return the matched substring
           # output the return value

Các giá trị đầu ra không nhất quán được cho phép để bạn có thể sử dụng èđể trả về số lượng khớp và thả cờ.
Shaggy

Vâng. Tôi cũng có thể thả cờ để trả lại trận đấu, vì không có trận đấu nào trở lại null, đó là giả.
Luke

Đối với đầu vào 00, nó đầu ra 00. Bạn có chắc đây là sự thật trong Japt?
Okx

@Okx Chuỗi "00"là.
Sản phẩm ETH

@Okx; thử này . Các -Qcờ "prettyprints" đầu ra, do đó bạn có thể thấy rằng nó là một mảng chứa một chuỗi duy nhất.
Xù xì

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.