Терминал может вычислить комбинации?

Я хотел бы знать, может ли терминал человечности вычислить различные комбинации (как NCR в математике). Но я не хочу просто количество возможных комбинаций, но самих комбинаций.

Обновление: После большего количества исследования, я нашел, что мне нужен не калькулятор комбинации, но тот, который делает перестановки.

0
задан 28 September 2015 в 01:44

2 ответа

Сам 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

Это не идеально, хотя, если я помню правильно, я пытался генерировать список украинских номеров телефона (в научных целях, конечно), и закончил с ошибками. Таким образом, оболочка имеет, это - пределы. Инструмент, записанный на конкретном языке программирования, мог бы иметь лучшее применение.

3
ответ дан 28 July 2019 в 13:56

Я не знаю ни о каких больших инструментах командной строки для этого, но можно записать, что тот легко с помощью 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

Версия по умолчанию должна быть прекрасной.

Обновление: Я сделал пару маленьких опечаток первым разом, когда так удостоверьтесь, что Вы рассматриваете мой ответ снова, если Вы были смущены сначала.

2
ответ дан 28 July 2019 в 13:56

Другие вопросы по тегам:

Похожие вопросы: