Я хотел бы объединить и / или переставить слова из списка до 3 раз. Например:

Если у меня есть один список с:

apple
orange
cafe

и еще один список с:

11
22
33

он должен производить комбинации, такие как:

11appleorange22
33orange11cafe2211
orangecafe3333apple1133

По логике слово из любого списка можно повторять до 3 раз, не более. Но в любом порядке и любой перестановке. Как мне этого добиться?

2 ответа2

1

командная строка, eq cat test test test|shuf|head -n 18|grep -v ^$|paste -s -d"\0":

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

cat test test test приблизительное соответствие `` 1..3 ^ |% {gc test} `

Примерное соответствие shuf (перестановочные строки powershell в трубе):

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

head -n 18 примерная корреспонденция select -f 18

grep -v ^$ приблизительное соответствие ?{$_.Length -ne 0}

paste -s -d"\0" приблизительное соответствие %{$S+=$_};$S

когда увидеть командную строку:

cat test test test|shuf|head -n 18|grep -v ^$|paste -s -d"\0"

вообразил тип файла - test:

1
2
3
5

7
8

использовать test файла:

apple
orange
cafe
11
22
33

shuffle1.ps1:

$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

Для генерации текста из шаблонов больше подходят другие языки.

Требуется специалист по Common Lisp и C. Может быть, специалист по Haskell.

Если необходимо математическое символьное вычисление, то это, вероятно, Maxima.

Но вы всегда можете сделать любые инструменты, которые не предназначены для конкретных задач))).

Было бы очень хорошо, если бы вы полностью описали свою проблему. Архитектурно.

1

Если у вас под рукой есть компьютер с Linux (или Mac OS X), создайте файл с именем test с этим содержимым:

apple
orange
cafe
11
22
33

следуют шесть пустых строк. Затем запустите это:

cat test test test|shuf|head -n 18|grep -v ^$|paste -s -d"\0"

cat объединяет файлы, shuf перемешивает строки, head получает первые 18 строк (чтобы вы могли получить максимальную строку), grep исключает пустые строки и вставляет их вместе.

РЕДАКТИРОВАТЬ: Извините, только заметил тег Windows после публикации. Вы можете установить Cygwin для этого, но вы можете просто взять принцип и реализовать что-то еще.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .