Автор | Сообщение |
|
Отправлено: 28.11.22 07:52. Заголовок: Комбинаторика. Задания 8
В задаче № 5750. (М. Байрамгулов) Ваня составляет 6-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно убрать три буквы и получить слово КОТ. Сколько различных слов может составить Ваня? Прошу уточнить условие. Что имеется ввиду? Все возможные перестановки с повторениями из 6 букв, в которых есть буквы К О Т в любом порядке или же порядок расположения этих букв важен? Ответ не сходится {from itertools import * al='КОМПЬЮТЕР' a = list(product(al, repeat=6)) b = list(permutations(al, 6)) k=0 for i in a: sl=''.join(i) #print(sl) k1=sl.find('К') k2=sl.find('О') k3=sl.find('Т') if 'К'in sl and 'О'in sl and 'Т'in sl: if k1<k2<k3: #print(sl) k=k+1 print('Размещения с повторениями ',k) for i in b: sl=''.join(i) #print(sl) k1=sl.find('К') k2=sl.find('О') k3=sl.find('Т') if 'К'in sl and 'О'in sl and 'Т'in sl: if k1<k2<k3: #print(sl) k=k+1 print('Перестановки ',k) #Ответ: 11249 # product(al, repeat=6) дает 8550 # Перестановки - permutations 10950}
| |
|
Ответов - 22
, стр:
1
2
All
[только новые]
|
|
|
Отправлено: 28.11.22 07:56. Заголовок: Комбинаторика № 5749
(№ 5749) (М. Байрамгулов) Миша составляет 5-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно переставить буквы и получить палиндром. Сколько различных слов может составить Миша? Ответ на сайте 8649...Ответ не сходится, у меня 729 {from itertools import * al='КОМПЬЮТЕР' c=0 sl='' b = list(product(al, repeat=5)) k=0 print('Перестановки ',k) for i in b: sl=''.join(i) #print(sl) if sl[0]==sl[4] and sl[1]==sl[3]: print(sl) k=k+1 print('Количество слов ',k) }
| |
|
|
Отправлено: 30.12.22 04:11. Заголовок: Елена_10 пишет: так..
Елена_10 пишет: цитата: | так, что в них можно переставить буквы и получить палиндром |
| У меня тоже 729, видимо мы одинаково понимаем вопрос, но не совсем так, как его ставит автор! Может быть, что под переставить буквы нужно понимать следующее, допустим было слово ОРПОР перестановкой двух символов получим палиндром - РОПОР В таком случае, даже из любого слова, состоящего из трех разных символов, например ПРООР или ПРРОО можно построить как минимум по 2 палиндрома!
| |
|
|
Отправлено: 29.12.22 06:15. Заголовок: Посмотрите решение, ..
Елена_10 пишет: цитата: | порядке или же порядок расположения этих букв важен? Ответ не сходится |
| Порядок важен! Посмотрите решение, предложенное Поляковым К.Ю., и сможете скорректировать свое решение count = 0 from itertools import product for n in set(product( 'КОМПЬЮТЕР', repeat=6 )): n = ''.join(n) if n.find('К') >= 0 and n.rfind('Т')>= 0: for j in range(n.find('К')+1, n.rfind('Т')): if n[j] == 'О': count += 1 break print( count )
| |
|
|
Отправлено: 29.12.22 06:22. Заголовок: а можно и так: ss =..
а можно и так: ss = set() from itertools import product for n in set(product( 'КОМПЬЮТЕР', repeat=6 )): n = ''.join(n) if n.find('К') >= 0 and n.rfind('Т')>= 0: for j in range(n.find('К')+1, n.rfind('Т')): if n[j] == 'О': ss.add(n) print( len(ss) )
| |
|
|
Отправлено: 30.12.22 03:29. Заголовок: А вот еще более упрощенный вариант задачи 302 ege 8
ss = set() from itertools import product for n in set(product( 'КОМПЬЮТЕР', repeat=6 )): n = ''.join(n) if n.find('К') >= 0 and n.rfind('Т')>= 0: if n.find('О', n.find('К'), n.rfind('Т'))>0: ss.add(n) print(len(ss))
| |
|
|
Отправлено: 07.01.23 11:53. Заголовок: Ответ верен, если бу..
Ответ верен, если буквы могут повторяться. Иначе верный ответ 2400 В решении Полякова (если распечатать учтенные им слова) есть такие слова: 'КОКТКК', 'ККОКТК', 'КОТККК', 'ККККОТ', 'КККОКТ', 'ККОТКК', 'КОКККТ', 'КККОТК' Буква К повторяется...
| |
|
|
Отправлено: 08.01.23 10:11. Заголовок: Ж пишет: Ответ вере..
Ж пишет: цитата: | Ответ верен, если буквы могут повторяться. Иначе верный ответ 2400 В решении Полякова (если распечатать учтенные им слова) есть такие слова: 'КОКТКК', 'ККОКТК', 'КОТККК', 'ККККОТ', 'КККОКТ', 'ККОТКК', 'КОКККТ', 'КККОТК' Буква К повторяется... |
| Пофиг, в условии оговорено, если убрать 3 буквы: 'КО КТ КК', где сказано, что они не должны быть буквами К? К примеру, убираем ровно три буквы, выделенных красным, и получаем слово - КОТ
| |
|
|
Отправлено: 07.01.23 14:43. Заголовок: Решение с помощью ре..
Решение с помощью регулярных выражений: alfavit='КОМПЬЮТЕР'; spisok=[] for slova in product(alfavit,repeat=6): # ответ 2400 #for slova in permutations(alfavit,6): # ответ 11249 slovo=''.join(slova) if fullmatch('.*К.*О.*Т.*',slovo): spisok.append(slovo) print(len(spisok))
| |
|
|
Отправлено: 09.01.23 05:10. Заголовок: Ж пишет: alfavit=..
Ж пишет: цитата: | alfavit='КОМПЬЮТЕР'; spisok=[] for slova in product(alfavit,repeat=6): # ответ 2400 #for slova in permutations(alfavit,6): # ответ 11249 slovo=''.join(slova) if fullmatch('.*К.*О.*Т.*',slovo): spisok.append(slovo) print(len(spisok)) |
| запустил ваш код и вот что получил: Traceback (most recent call last): ... if fullmatch('.*К.*О.*Т.*',slovo): NameError: name 'fullmatch' is not defined
| |
|
|
Отправлено: 09.01.23 05:20. Заголовок: s11kai пишет: NameE..
s11kai пишет: цитата: | NameError: name 'fullmatch' is not defined |
| Код удалось запустить, после небольшой доработки: import re alfavit='КОМПЬЮТЕР'; spisok=[] for slova in product(alfavit,repeat=6): # ответ 2400 #for slova in permutations(alfavit,6): # ответ 11249 slovo=''.join(slova) if re.fullmatch('.*К.*О.*Т.*',slovo): spisok.append(slovo) print(len(spisok)) Причем вместо указанного Вами ответа в 2400, он дал ответ 11249
| |
|
|
Отправлено: 08.01.23 10:04. Заголовок: Елена_10 пишет: № 5..
Елена_10 пишет: цитата: | № 5750. (М. Байрамгулов) Ваня составляет 6-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно убрать три буквы и получить слово КОТ. Сколько различных слов может составить Ваня? |
| А где здесь оговаривается, что буквы не могут повторяться? А раз нет, то и ответ = 11249
| |
|
|
|
Отправлено: 08.01.23 14:23. Заголовок: Ваня составляет 6-бу..
цитата: | Ваня составляет 6-буквенные слова из букв слова КОМПЬЮТЕР |
| Представьте, что вы разрезали слово на буквы и из них собираете новые слова. Там нет повторяющихся... , поэтому считаю, что формулировка неоднозначна. Это уже вопросы к русскому языку и его пониманию... Я понимаю так... Иначе, зачем в аналогичном задании 5720 все так подробно оговорено: цитата: | Алина составляет пятибуквенные слова из букв слова POLYGON, причем известно, что буквы в словах могут повторяться любое количество раз или же не встречаться вовсе. Помогите Алине найти количество различных слов, являющимися палиндромами и содержащими в середине гласную букву. |
|
| |
|
|
Отправлено: 09.01.23 05:05. Заголовок: Ж пишет: поэтому сч..
Ж пишет: цитата: | поэтому считаю, что формулировка неоднозначна. Это уже вопросы к русскому языку и его пониманию... |
| Нашел автора этого задания в ege8 от Полякова: 302) (М. Байрамгулов) Ваня составляет 6-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно убрать три буквы и получить слово КОТ. Сколько различных слов может составить Ваня? Что характерно, там стоит ответ 11249
| |
|
|
Отправлено: 09.01.23 05:32. Заголовок: Ж пишет: Представьт..
Ж пишет: цитата: | Представьте, что вы разрезали слово на буквы и из них собираете новые слова |
| А почему не взять "кассу" из букваря, где под каждой буквой лежит некоторое количество их копий
| |
|
|
Отправлено: 09.01.23 11:25. Заголовок: Возможно потому, что..
Возможно потому, что буквы сказали брать не из кассы, а из слова... А в слове КОМПЬЮТЕР ровно 9 букв и клонов нет... И я не оспариваю ответ, я беру на заметку, что авторы так понимают это задание. И в будущем буду учитывать их понимание. И есть же формулировки, которые эту неоднозначность не порождают: Сколько пятибуквенных слов можно составить из букв данного алфавита А, Б, В, Г, Д Вася составляет 5-буквенные слова, в которых встречаются только буквы А, Б, В, Г,
| |
|
|
Отправлено: 09.01.23 13:02. Заголовок: Ж пишет: сказали бр..
Ж пишет: цитата: | сказали брать не из кассы, а из слова |
| Если быть точнее, то ... из букв слова КОМПЬЮТЕР... ,а раз нет иных ограничений, то и следует, что слово: КОМПЬЮТЕР задает алфавит, из которого уже и собираются интересуемые слова Ну да ладно, чего зря "ломать копья" каждый остается при своем мнении, коль с самого автора не спросить.
| |
|
|
Отправлено: 23.02.23 17:29. Заголовок: Я решил задачку
Сначала мы получаем всевозможные палиндромы из данного набора букв, потом считаем возможное количество перестановок в этих палиндромах. from itertools import * l = [''.join(i) for i in product('КОМПЬЮТЕР', repeat=3)] m = set() for i in l: s = i + i[-2] + i[-3] for j in permutations(s): s2 = ''.join(j) m.add(s2) print(len(m))
| |
|
|
Отправлено: 24.02.23 04:17. Заголовок: Гоша Ищенко пишет: ..
Гоша Ищенко пишет: цитата: | from itertools import * l = [''.join(i) for i in product('КОМПЬЮТЕР', repeat=3)] m = set() for i in l: s = i + i[-2] + i[-3] for j in permutations(s): s2 = ''.join(j) #эту строку, например, можно удалить! m.add(s2) print(len(m)) |
| Красивое решение, но из анализа кода, осмелюсь предположить, что это решение для задачи: "301)(М. Байрамгулов) Миша составляет 5-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно переставить буквы и получить палиндром. Сколько различных слов может составить Миша?", а не про КОТА! 302) (М. Байрамгулов) Ваня составляет 6-буквенные слова из букв слова КОМПЬЮТЕР так, что в них можно убрать три буквы и получить слово КОТ. Сколько различных слов может составить Ваня? Но, в любом случае, не бывает программного кода, который нельзя сократить хотя бы на одну строку: from itertools import * l = [''.join(i) for i in product('КОМПЬЮТЕР', repeat=3)] m = set() for i in l: s = i + i[-2] + i[-3] for j in permutations(s): m.add(j) print(len(m))
| |
|
|
Отправлено: 24.02.23 14:15. Заголовок: Если из кода убрать ..
Я тут подумал, а что если из кода убрать одну строку и она при этом выдает тот же результат, то может быть можно вообще переписать данный код в одну строку! Рассуждаем примерно так: В слове КОМПЬЮТЕР всего 9 букв, следовательно в палиндроме на первых трех местах может стоять по 9 разных символов, причем символы стоящие на первом и пятом месте, как и, второй с четвертым, должны совпадать. Стало быть, количество слов - палиндромов, можно рассчитать по формуле N = 9 * 9 * 9 В питоне эта строка может выглядеть так: print('ответ:',9*9*9) ответ: 729 Вау!!! Видим, что ответ совершенно другой! Стало быть, программа, предложенная вами дает неверный результат! или, неверны мои рассуждения
| |
|
|
Отправлено: 24.02.23 14:32. Заголовок: Вот алгоритм, дающий..
Вот алгоритм, дающий одинаковый результат и программой, и, рассуждением! from itertools import product m = set() for x in product('КОМПЬЮТЕР', repeat=5): s = ''.join(x) if s == s[::-1]: # если слово читается слева и справа одинаково m.add(s) # запоминаем его с учетом отсутствия совпадений print('Вариант решения №1', len(m)) print('Вариант решения №2',9*9*9) В связи с чем, осмелюсь предположить, что не верен именно ваш ответ, Гоша Ищенко: 8649, а правильным будет ответ - 729 Страшно конечно, а вдруг я просчитался? Поправьте, на ошибках тоже учатся!
| |
|
|
Отправлено: 24.02.23 21:38. Заголовок: Гоша Ищенко! Прошу п..
Гоша Ищенко! Прошу прощения, я ошибался, поскольку учитывал только палиндромы, а нужно было считать слова, из которых можно получить палиндромы Вот лоханулся,так лоханулся!
| |
|
|
|
Отправлено: 25.02.23 05:40. Заголовок: Но мысль, о том что ..
Но мысль, о том что многострочный код можно переписать в однострочный, в данном случае была верна. Рассуждаем примерно так: • количество всех палиндромов 9*9*9 = 729 • всего разных букв 9 это означает, что есть ровно 9 палиндромов состоящих из одной буквы, т.е. 9 пятибуквенных слов, например, ККККК, ООООО, МММММ… • количество трехбуквенных палиндромов равно 729 – 9 = 720 • из трех символов ПАЛИНРОМА можно составить – КОМ, КМО, КММ, КОО => 4*3 = 12 слов • Итого слов будет: 720 * 12 + 9 = 8649 • Или в однострочном коде это будет выглядеть как-то так: print((9 * 9 * 9 – 9) * 12 + 9) Дорабатывать другие, предложенные мною коды не имеет смысла, но кто пожелает, можно сделать и это! А я остановлюсь на лаконичном, на мой взгляд, коде, предложенном Гошей Ищенко, только без красной строки
| |
|
Ответов - 22
, стр:
1
2
All
[только новые]
|
|
|