Como combinar e permutar duas listas de palavras

0

Gostaria de combinar e / ou permutar as palavras de uma lista até 3 vezes. Por exemplo:

Se eu tiver uma lista com:

apple
orange
cafe

e outra lista com:

11
22
33

deve produzir combinações como:

11appleorange22
33orange11cafe2211
orangecafe3333apple1133

A lógica é a palavra de qualquer lista pode ser repetida até 3 vezes, não mais. Mas em qualquer ordem e qualquer permutação. Como posso conseguir isso?

    
por FernandoSBS 13.07.2013 / 15:29

2 respostas

1

linha de comando, eq cat test test test|shuf|head -n 18|grep -v ^$|paste -s -d"cat test test test" :

powershell $r=New-Object Random;1..3^|%{gc test}^|select -f 18^|%{[array]$A+=$_};1..$A.Count^|%{$A[$r.Next(0,$A.Count-1)]}^|?{$_.Length -ne 0}^|%{$S+=$_};$S

shuf correspondência aproximada '' 1..3 ^ |% {gc test} '

Correspondência aproximada de head -n 18 (sequências shuffle do powershell no pipe):

$r=New-Object Random; ... %{[array]$A+=$_};1..$A.Count^|%{$A[$r.Next(0,$A.Count-1)]}

select -f 18 correspondência aproximada grep -v ^$

?{$_.Length -ne 0} correspondência aproximada paste -s -d"%{$S+=$_};$S"

test correspondência aproximada test

quando vir a linha de comando:

cat test test test|shuf|head -n 18|grep -v ^$|paste -s -d"
1
2
3
5

7
8
"

imaginou o tipo de arquivo - %code% :

apple
orange
cafe
11
22
33

use o arquivo %code% :

$r=New-Object Random;1..3|%{gc test}|select -f 18|%{[array]$A+=$_};1..$A.Count|%{$A[$r.Next(0,$A.Count-1)]}|?{$_.Length -ne 0}|%{$S+=$_};$S

shuffle1.ps1:

powershell $r=New-Object Random;1..3^|%{gc test}^|select -f 18^|%{[array]$A+=$_};1..$A.Count^|%{$A[$r.Next(0,$A.Count-1)]}^|?{$_.Length -ne 0}^|%{$S+=$_};$S

Para gerar texto a partir de modelos, é mais adequado em outro idioma.

Precisa de um especialista em Common Lisp e C. Pode ser um especialista em Haskell.

Se necessário computação simbólica matemática, então é provável que o Maxima.

Mas você sempre pode fazer quaisquer ferramentas que não sejam projetadas para tarefas específicas))).

Será muito bom se você descrever seu problema completamente. Arquitetonicamente.

    
por 14.07.2013 / 16:57
1

Se você tem um computador Linux à mão (ou Mac OS X pode fazer), crie um arquivo chamado test com este conteúdo:

apple
orange
cafe
11
22
33

seguido por seis linhas vazias. Então corra isto:

cat test test test|shuf|head -n 18|grep -v ^$|paste -s -d"
apple
orange
cafe
11
22
33
"

cat concatena os arquivos, shuf embaralha as linhas, head recupera as primeiras 18 linhas (assim você pode ter sua string máxima), grep exclui linhas vazias e colar cola a linha.

EDITAR : Desculpe, só notei a tag do windows após postar. Você pode instalar o Cygwin para isso, mas você pode muito bem apenas pegar o princípio e implementar em outra coisa.

    
por 14.07.2013 / 01:28