В питоне есть хороший модуль itertools. В нём есть комбинаторные функции - перестановки, размещения и куча других классных вещей. Давай вызовем itertools.permutations, передадим туда твоё число как строку и длину перестановок - 3:
permutations('123', 3) --> 123 132 213 231 312 321
permutations('100', 3) --> 100 100 10 1 10 1
Очередная перестановка, формально, представляется в виде списка. Переведём в строку: ''.join(i)
...И уберём ведущие нули: .lstrip('0')
import itertools
for i in itertools.permutations(input(), 3):
print(''.join(i).lstrip('0'))
# Ввод:
# 100
# Вывод:
# 10
# 1
Условие задачи позволяет нам выводить повторяющиеся перестановки. Если нас это не устраивает, мы можем добавить проверку уникальности через set:
checker = set()
s = ''.join(i).lstrip('0')
if not(s in checker):
print(s)
checker.add(s)
begin
var N, A, B, C, D: integer;
Readln(N, A, B, C, D);
if A > C then (A, B, C, D) := (C, D, B, A);
var s := 1.To(A - 1);
if B < C then // ( ) [ ]
s := s + B.Downto(A) + (B + 1).To(C - 1) +
D.Downto(C) + (D + 1).To(N)
else
if D < B then // ( [ ] )
s := s + SeqGen(C - A, t -> B - t) +
SeqGen(D - C + 1, t -> t + A + B - D) +
SeqGen(B - D, t -> A - t + B - D - 1) + (B + 1).To(N)
end
else // ( [ ) ]
SeqGen(D - B, t -> D - t) + SeqGen(B - C + 1, t -> A + t) +
(D + 1).To(N);
end;
s.Println;
end.
В питоне есть хороший модуль itertools. В нём есть комбинаторные функции - перестановки, размещения и куча других классных вещей. Давай вызовем itertools.permutations, передадим туда твоё число как строку и длину перестановок - 3:
permutations('123', 3) --> 123 132 213 231 312 321
permutations('100', 3) --> 100 100 10 1 10 1
Очередная перестановка, формально, представляется в виде списка. Переведём в строку: ''.join(i)
...И уберём ведущие нули: .lstrip('0')
Код
import itertools
for i in itertools.permutations(input(), 3):
print(''.join(i).lstrip('0'))
# Ввод:
# 100
# Вывод:
# 100
# 100
# 10
# 1
# 10
# 1
Условие задачи позволяет нам выводить повторяющиеся перестановки. Если нас это не устраивает, мы можем добавить проверку уникальности через set:
import itertools
checker = set()
for i in itertools.permutations(input(), 3):
s = ''.join(i).lstrip('0')
if not(s in checker):
print(s)
checker.add(s)
# Ввод:
# 100
# Вывод:
# 100
# 10
# 1
begin
var N, A, B, C, D: integer;
Readln(N, A, B, C, D);
if A > C then (A, B, C, D) := (C, D, B, A);
var s := 1.To(A - 1);
if B < C then // ( ) [ ]
s := s + B.Downto(A) + (B + 1).To(C - 1) +
D.Downto(C) + (D + 1).To(N)
else
if D < B then // ( [ ] )
begin
s := s + SeqGen(C - A, t -> B - t) +
SeqGen(D - C + 1, t -> t + A + B - D) +
SeqGen(B - D, t -> A - t + B - D - 1) + (B + 1).To(N)
end
else // ( [ ) ]
begin
s := s + SeqGen(C - A, t -> B - t) +
SeqGen(D - B, t -> D - t) + SeqGen(B - C + 1, t -> A + t) +
(D + 1).To(N);
end;
s.Println;
end.