Задания
Версия для печати и копирования в MS Word
Тип 8 № 47005
i

Свет­ла­на со­став­ля­ет коды из букв слова ПА­РА­БО­ЛА. Код дол­жен со­сто­ять из 8 букв, и каж­дая буква в нём долж­на встре­чать­ся столь­ко же раз, сколь­ко в за­дан­ном слове. Кроме того, в коде не долж­ны сто­ять рядом две глас­ные и две со­глас­ные буквы. Сколь­ко кодов может со­ста­вить Свет­ла­на?

Спрятать решение

Ре­ше­ние.

За­ме­тим, что ал­фа­вит со­сто­ит из 6 букв: П, А, Р, Б, О, Л. Каж­дая буква долж­на встре­чать­ся в коде один раз, за ис­клю­че­ни­ем буквы А  — она может встре­чать­ся в коде три раза. Всего глас­ных букв  — 4, со­глас­ных букв  — 4.

По­ста­вим на первую по­зи­цию глас­ную букву, таких слов можно со­ста­вить 4 · 4 · 3 · 3 · 2 · 2 · 1 · 1  =  576. По­сколь­ку буква А встре­ча­ет­ся в коде 3 раза, а по­сколь­ку три буквы на трёх по­зи­ци­ях можно раз­ме­стить ше­стью спо­со­ба­ми, по­лу­чив­ше­е­ся ко­ли­че­ство слов не­об­хо­ди­мо по­де­лить на 6, тогда всего по­лу­ча­ем 96 слов.

Те­перь по­ста­вим на первую по­зи­цию со­глас­ную букву, таких слов можно со­ста­вить 4 · 4 · 3 · 3 · 2 · 2 · 1 · 1  =  576. По­сколь­ку буква А встре­ча­ет­ся в коде 3 раза, а по­сколь­ку три буквы на трёх по­зи­ци­ях можно раз­ме­стить ше­стью спо­со­ба­ми, по­лу­чив­ше­е­ся ко­ли­че­ство слов не­об­хо­ди­мо по­де­лить на 6, тогда всего по­лу­ча­ем 96 слов.

Таким об­ра­зом, ответ  — 96 + 96  =  192.

 

Ответ: 192.

 

При­ведём дру­гое ре­ше­ние на языке Python.

import itertools

alphabet = "ПА­РА­БО­ЛА"

vol = "ОА"

con = "ПРБЛ"

ar = itertools.permutations(alphabet, 8) #Раз­ме­ще­ние

arl = []

for e in ar:

arl.append(list(e))

a = set()

for e in arl:

flag = True

s = ""

for i in range(len(e)-1):

s += e[i]

if (e[i] in vol and e[i+1] in vol) or (e[i] in con and e[i+1] in con):

flag = False

if flag:

a.add(s)

print(len(a))

 

При­ведём ре­ше­ние Ильи Ан­дри­а­но­ва на языке Python.

from itertools import permutations

s1 = 'ПРБЛ'

s2 = 'АО'

count = set()

for var in permutations('ПА­РА­БО­ЛА', 8):

slovo = ''.join(var)

if all((slovo[i] in s1 and slovo[i+1] in s2) or (slovo[i+1] in s1 and slovo[i] in s2) for i in range(len(slovo)-1)):

count.add(slovo)

print(len(count))

 

При­ведём ре­ше­ние Бо­ри­са Са­ве­лье­ва на языке Python.

from itertools import product

sog = 'ПРБЛ'

gl = 'ОА'

s = product(sog,gl,sog,gl,sog,gl,sog,gl)

count = 0

for i in s:

p=''.join(i)

if p.count('П') == p.count('Р') == p.count('Б') == p.count('Л') == p.count('О') == 1 and p.count('А')== 3:

count += 1

print(count*2)

 

 

При­ведём ре­ше­ние Ивана Но­ви­ко­ва на языке Python.

from itertools import *

cnt = 0

gs = 'АО'

sgl = 'ПРБЛ'

gs_ix = [0, 2, 4, 6]

sgl_ix = [1, 3, 5, 7]

for i in permutations('ПА­РА­БО­ЛА',8):

a = ''.join(i)

if all(a[i] in gs for i in gs_ix) or all(a[i] in sgl for i in sgl_ix):

cnt += 1

print(cnt/3)

 

При­ведём ре­ше­ние Сер­гея Донец на языке PascalABC.NET.

begin

var word := 'ПА­РА­БО­ЛА';

var count := word.Permutations(word.Length).Distinct

.Where(s -> not s.IsMatch('[АО]{2}')) // Нет двух глас­ных под­ряд

.Where(s -> not s.IsMatch('[ПРБЛ]{2}')) // Нет двух со­глас­ных под­ряд

.Count.Print;

end.


Аналоги к заданию № 46966: 47005 Все