Recientemente vi esta pregunta en stackoverflow. Es una gran pregunta, pero hay un problema fatal con la pregunta. Piden la mejor manera de hacerlo. Por ejemplo, el más fácil de leer, el más idiomático, el más ordenado, etc. ¿No saben que eso no es lo que importa? ¡Se supone que debes preguntar cómo hacerlo con la menor cantidad de bytes de código!
Como dudo que esa pregunta sea apreciada en stackoverflow, decidí preguntarla aquí.
El reto
Debe escribir el programa o función más breve posible que genere todas las formas posibles de intercalar dos cadenas arbitrarias. Por ejemplo, si las dos cadenas son 'ab'
y 'cd'
, la salida es:
['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']
Como puede ver, a
siempre está antes b
y c
siempre está antes d
.
IO puede estar en cualquier formato razonable. Use este código de Python para verificar y verificar su salida. (crédito: 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
Muestra 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']
Como de costumbre, se aplican las lagunas estándar y gana la respuesta más corta en bytes. Dado que la pregunta era originalmente sobre Python, me encantaría ver la respuesta más corta de Python. (Y no, pyth no es python). Sin embargo, se alientan las respuestas en cualquier idioma.