Я хотел бы знать, может ли терминал человечности вычислить различные комбинации (как NCR в математике). Но я не хочу просто количество возможных комбинаций, но самих комбинаций.
Обновление: После большего количества исследования, я нашел, что мне нужен не калькулятор комбинации, но тот, который делает перестановки.
Сам Shell имеет утилиту для генерации различных комбинаций. Я не совсем уверен в техническом термине для этого, но здесь - как он работает:
$ echo {1,2,3}{1,2,3}{1,2,3}
111 112 113 121 122 123 131 132 133 211 212 213 221 222 223 231 232 233 311 312 313 321 322 323 331 332 333
$ echo {a,b,c}{a,b,c}{a,b,c}
aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cab cac cba cbb cbc cca ccb ccc
$ echo {0,1}{0,1}{0,1}{0,1}
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Это не идеально, хотя, если я помню правильно, я пытался генерировать список украинских номеров телефона (в научных целях, конечно), и закончил с ошибками. Таким образом, оболочка имеет, это - пределы. Инструмент, записанный на конкретном языке программирования, мог бы иметь лучшее применение.
Я не знаю ни о каких больших инструментах командной строки для этого, но можно записать, что тот легко с помощью Python включал itertools библиотеку. Например, я просто описал этот сценарий:
#!/usr/bin/env python2
"""
Script based in part on StackOverflow answer at:
http://stackoverflow.com/questions/17434070/generating-all-combinations-of-a-list-in-python
"""
import sys
import itertools
if len(sys.argv) <= 1:
print 'No arguments provided; exiting.'
sys.exit()
args = sys.argv[1:]
count = 0
for combolength in range(0, len(args) + 1):
for subset in itertools.combinations(args, combolength):
print '#' + str(count) + ': ' + ' '.join(subset)
count += 1
Принятие Вас имеет python2.3 + установленный, можно вставить тот сценарий в файл, названный 'combinations.py', и затем выполнить эту команду в терминале в то время как в содержании каталога:
python combinations.py arg1 arg2 arg3 arg4 arg5
Это примет любое количество аргументов.
Так, например, если я хочу все комбинации номеров 1, 2, 3 и 4, я могу работать:
python combinations.py 1 2 3 4
И я доберусь:
#0:
#1: 1
#2: 2
#3: 3
#4: 4
#5: 1 2
#6: 1 3
#7: 1 4
#8: 2 3
#9: 2 4
#10: 3 4
#11: 1 2 3
#12: 1 2 4
#13: 1 3 4
#14: 2 3 4
#15: 1 2 3 4
Это не должны быть числа. Можно попробовать:
python combinations.py pig cow duck
и доберитесь:
#0:
#1: pig
#2: cow
#3: duck
#4: pig cow
#5: pig duck
#6: cow duck
#7: pig cow duck
Надеюсь, что помог!
P.S. При пропавших без вести Python по некоторым причинам можно установить его с:
sudo apt-get install python
Версия по умолчанию должна быть прекрасной.
Обновление: Я сделал пару маленьких опечаток первым разом, когда так удостоверьтесь, что Вы рассматриваете мой ответ снова, если Вы были смущены сначала.