최근 에 stackoverflow 에서이 질문을 보았습니다 . 좋은 질문이지만 그 질문에는 한 가지 치명적인 문제가 있습니다. 그들은 최선의 방법을 요구하고 있습니다. 예를 들어, 가장 읽기 쉽고, 가장 관용적이며, 가장 까다 롭지 않습니다. 가장 적은 바이트의 코드로 어떻게해야하는지 물어봐야합니다!
stackoverflow에 대한 질문에 감사 할 것이므로 여기에서 질문하기로 결정했습니다.
도전
임의의 두 문자열을 인터리브하는 가능한 모든 방법을 생성하는 가능한 가장 짧은 프로그램 또는 함수를 작성해야합니다. 예를 들어 두 문자열이 'ab'
and 'cd'
인 경우 출력은 다음과 같습니다.
['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']
당신이 볼 수 있듯이, a
항상 이전이다 b
, 그리고 c
항상 전에이다 d
.
IO는 합리적인 형식 일 수 있습니다. 이 파이썬 코드를 사용하여 출력을 확인하십시오. (신용 : JeD )
def shuffle(s,t):
if s=="":
return [t]
elif t=="":
return [s]
else:
leftShuffle=[s[0]+val for val in shuffle(s[1:],t)]
rightShuffle=[t[0]+val for val in shuffle(s,t[1:])]
leftShuffle.extend(rightShuffle)
return leftShuffle
샘플 IO :
shuffle("$", "1234"):
['$1234', '1$234', '12$34', '123$4', '1234$']
shuffle("az", "by"):
['azby', 'abzy', 'abyz', 'bazy', 'bayz', 'byaz']
shuffle("code", "golf"):
['codegolf', 'codgeolf', 'codgoelf', 'codgolef', 'codgolfe', 'cogdeolf', 'cogdoelf',
'cogdolef', 'cogdolfe', 'cogodelf', 'cogodlef', 'cogodlfe', 'cogoldef', 'cogoldfe',
'cogolfde', 'cgodeolf', 'cgodoelf', 'cgodolef', 'cgodolfe', 'cgoodelf', 'cgoodlef',
'cgoodlfe', 'cgooldef', 'cgooldfe', 'cgoolfde', 'cgoodelf', 'cgoodlef', 'cgoodlfe',
'cgooldef', 'cgooldfe', 'cgoolfde', 'cgolodef', 'cgolodfe', 'cgolofde', 'cgolfode',
'gcodeolf', 'gcodoelf', 'gcodolef', 'gcodolfe', 'gcoodelf', 'gcoodlef', 'gcoodlfe',
'gcooldef', 'gcooldfe', 'gcoolfde', 'gcoodelf', 'gcoodlef', 'gcoodlfe', 'gcooldef',
'gcooldfe', 'gcoolfde', 'gcolodef', 'gcolodfe', 'gcolofde', 'gcolfode', 'gocodelf',
'gocodlef', 'gocodlfe', 'gocoldef', 'gocoldfe', 'gocolfde', 'goclodef', 'goclodfe',
'goclofde', 'goclfode', 'golcodef', 'golcodfe', 'golcofde', 'golcfode', 'golfcode']
평소와 같이 표준 허점이 적용되고 바이트 단위의 최단 답변이 이깁니다. 질문은 원래 파이썬에 관한 것이기 때문에 가장 짧은 파이썬 답변을보고 싶습니다. (아니요, pyth는 파이썬이 아닙니다). 그러나 모든 언어로 답변을 권장합니다.