Мы знаем что у нас нечетное число букв, причем что нечетность приходится на букву Б (7) Все палиндромы длиной во все буквы Тогда каждый палинром имеет такую схему: [некий набор альфа]Б[альфа в обратном порядке] Разных альф может быть тоже 35 и состоит из половины букв Ч и (7-1)/2 = 3 букв Б Обозначим все колво букв Ч = 2x, а половину - х Значит у нас тут Перестановки с повторениями, колво которых 35 35 = (x+3)! / (x!3!) 35 * 3! = (x+3)(x+2)(x+1) 7 * 5 * 3 * 2 = (x+3)(x+2)(x+1) можно представить так 7 * 6 * 5 = (x+3)(x+2)(x+1) очевидно что 7 = х + 3 т.е. х = 4 А букв Ч = 2х = 2 * 4 = 8
# Код на ruby 2.2.3p173 def zadanie(line, time) line = line.gsub(/[^MD]/, "") time.times { |i| k = 0 while k < line.size - 1 do if line[k..k + 1] == "MD" line[k], line[k + 1] = line[k + 1], line[k] k+=1 end k+=1 end p [i+1,line] } return line end # # Примеры применения # p zadanie("MDDDMMDMDDDDDM", 10) p zadanie("MMDMMMDDDMDDDMD", 10)
Все палиндромы длиной во все буквы
Тогда каждый палинром имеет такую схему:
[некий набор альфа]Б[альфа в обратном порядке]
Разных альф может быть тоже 35 и состоит из половины букв Ч и (7-1)/2 = 3 букв Б
Обозначим все колво букв Ч = 2x, а половину - х
Значит у нас тут Перестановки с повторениями, колво которых 35
35 = (x+3)! / (x!3!)
35 * 3! = (x+3)(x+2)(x+1)
7 * 5 * 3 * 2 = (x+3)(x+2)(x+1)
можно представить так
7 * 6 * 5 = (x+3)(x+2)(x+1)
очевидно что 7 = х + 3 т.е. х = 4
А букв Ч = 2х = 2 * 4 = 8
Надеюсь понятно
def zadanie(line, time)
line = line.gsub(/[^MD]/, "")
time.times { |i|
k = 0
while k < line.size - 1 do
if line[k..k + 1] == "MD"
line[k], line[k + 1] = line[k + 1], line[k]
k+=1
end
k+=1
end
p [i+1,line]
}
return line
end
# # Примеры применения
# p zadanie("MDDDMMDMDDDDDM", 10)
p zadanie("MMDMMMDDDMDDDMD", 10)
Вывод
[1, "MDMDMMDMDDDMDDDM"]
[2, "DMDMDMMDMDDDMDDM"]
[3, "DDMDMDMMDMDDDMDM"]
[4, "DDDMDMDMMDMDDDMM"]
[5, "MDMDMMDMDDMM"]
[6, "MDMDMMDMDMM"]
[7, "MDMDMMDMMM"]
[8, "MDMDM"]
[9, "MDMDMDDD"]
[10, "MDMDMDD"]
"MDMDMDD"