Di recente ho visto questa domanda su StackOverflow. È un'ottima domanda, ma c'è un problema fatale con la domanda. Stanno chiedendo il modo migliore per farlo. Ad esempio, più facile da leggere, più idiomatico, più pulito ecc. Non sanno che non è quello che conta? Dovresti chiedere come farlo con il minor numero di byte di codice!
Dal momento che dubito che questa domanda sarà apprezzata su StackOverflow, ho deciso di porla qui.
La sfida
È necessario scrivere il programma o la funzione più breve possibile che generi tutti i modi possibili per intercalare due stringhe arbitrarie. Ad esempio, se le due stringhe sono 'ab'
e 'cd'
, l'output è:
['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']
Come puoi vedere, a
è sempre prima b
ed c
è sempre prima d
.
IO può essere in qualsiasi formato ragionevole. Usa questo codice Python per verificare il tuo output. (credito: 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 di esempio:
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']
Come al solito, si applicano scappatoie standard e vince la risposta più breve in byte. Poiché la domanda era originariamente su Python, mi piacerebbe vedere la risposta più breve di Python. (E no, pyth non è python). Tuttavia, le risposte in qualsiasi lingua sono incoraggiate.