#Perl, 16 +2 = 18 bytes (with regex)
Perl, 16 +2 = 18 bytes (with regex)
Run with the -nl
flags. -E
is free.
say/^((.+)\2)+$/
Run as:
perl -nlE 'say/^((.+)\2)+$/'
Returns a list of the capture groups (a truthy) if pairable, null string if not pairable.
Explanation
The -nl
flags will run the code in a loop (-n
), putting the input (with trailing newline removed because of -l
) into the variable $_
each time, then evaluating the code each time input is entered, until the program is manually terminated. The -E
flag lets you evaluate code on the command line, and enables the say
command.
say/^((.+)\2)+$/
/^((.+)\2)+$/ #The regex engine
(.+)\2 #Find any set of at least one character, followed by itself
( )+ #Do this at least one time
/^ $/ #Make sure that this matches the entire string from start to end
say #Output the result of the regex
If a match is found (e.g. if the string is pairable), then the regex returns a list of the capture groups, which evaluates to a truthy, which is then passed to say
, and output. If no match is found, then the regex returns the empty string, which evaluates to falsy, which is then passed to say
, and output.
Sample:
$ perl -nlE 'say/^((.+)\2)+$/'
aaababbabbabbbababbaabaabaababaaba
baababaababaaba #Truthy
baababbabaaaab
#Falsy
bbababbb
bbb #Truthy
aabaaababbbaba
bababa #Truthy
abaabaaba
#Falsy