Niedawno widziałem to pytanie przy przepełnieniu stosu. To świetne pytanie, ale jest jeden poważny problem z pytaniem. Pytają o najlepszy sposób, aby to zrobić. Np. Najłatwiejszy do odczytania, najbardziej idiomatyczny, schludny itp. Czy oni nie wiedzą, że to nie ma znaczenia? Powinieneś zapytać, jak to zrobić, używając jak najmniej bajtów kodu!
Ponieważ wątpię, czy to pytanie zostanie docenione przy przepływie stosów, postanowiłem zadać je tutaj.
Wyzwanie
Musisz napisać możliwie najkrótszy program lub funkcję, która generuje wszystkie możliwe sposoby przeplatania dowolnych dwóch dowolnych ciągów. Na przykład, jeśli dwa ciągi są 'ab'
i 'cd'
, wynikiem jest:
['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']
Jak widać, a
jest zawsze wcześniej b
i c
zawsze jest wcześniej d
.
IO może mieć dowolny rozsądny format. Użyj tego kodu python, aby sprawdzić, aby sprawdzić wyniki. (kredyt: 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
Próbka 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']
Jak zwykle obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach. Ponieważ pytanie pierwotnie dotyczyło Pythona, chciałbym zobaczyć najkrótszą odpowiedź na python. (I nie, pyth to nie python). Zachęca się jednak do odpowiedzi w dowolnym języku.