J'ai récemment vu cette question sur stackoverflow. C'est une excellente question, mais il y a un problème fatal avec la question. Ils demandent la meilleure façon de le faire. Par exemple, les plus faciles à lire, les plus idiomatiques, les plus soignés, etc. Ne savent-ils pas que ce n'est pas ce qui compte? Vous êtes censé demander comment le faire avec le moins d'octets de code!
Comme je doute que cette question soit appréciée sur stackoverflow, j'ai décidé de la poser ici.
Le défi
Vous devez écrire le programme ou la fonction la plus courte possible qui génère toutes les manières possibles d'entrelacer deux chaînes arbitraires. Par exemple, si les deux chaînes sont 'ab'
et 'cd'
, la sortie est:
['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']
Comme vous pouvez le voir, a
c'est toujours avant b
, et c
c'est toujours avant d
.
IO peut être dans n'importe quel format raisonnable. Utilisez ce code python pour vérifier et vérifier votre sortie. (crédit: 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
Exemple d'E / S:
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']
Comme d'habitude, les failles standard s'appliquent et la réponse la plus courte en octets l'emporte. Puisque la question portait à l'origine sur python, j'aimerais voir la réponse la plus courte en python. (Et non, pyth n'est pas python). Cependant, les réponses dans n'importe quelle langue sont encouragées.