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

Ис­пол­ни­тель Ре­дак­тор по­лу­ча­ет на вход стро­ку цифр и пре­об­ра­зо­вы­ва­ет её. Ре­дак­тор может вы­пол­нять две ко­ман­ды, в обеих ко­ман­дах v и w обо­зна­ча­ют це­поч­ки цифр.

А)  за­ме­нить (v, w).

Эта ко­ман­да за­ме­ня­ет в стро­ке пер­вое слева вхож­де­ние це­поч­ки v на це­поч­ку w. На­при­мер, вы­пол­не­ние ко­ман­ды за­ме­нить (111, 27) пре­об­ра­зу­ет стро­ку 05111150 в стро­ку 0527150.

Если в стро­ке нет вхож­де­ний це­поч­ки v, то вы­пол­не­ние ко­ман­ды за­ме­нить (v, w) не ме­ня­ет эту стро­ку.

Б)  на­шлось (v).

Эта ко­ман­да про­ве­ря­ет, встре­ча­ет­ся ли це­поч­ка v в стро­ке ис­пол­ни­те­ля Ре­дак­тор. Если она встре­ча­ет­ся, то ко­ман­да воз­вра­ща­ет ло­ги­че­ское зна­че­ние «ис­ти­на», в про­тив­ном слу­чае воз­вра­ща­ет зна­че­ние «ложь». Стро­ка

ис­пол­ни­те­ля при этом не из­ме­ня­ет­ся.

 

Цикл

    ПОКА усло­вие

        по­сле­до­ва­тель­ность ко­манд

    КОНЕЦ ПОКА

вы­пол­ня­ет­ся, пока усло­вие ис­тин­но.

В кон­струк­ции

    ЕСЛИ усло­вие

        ТО ко­ман­да1

    КОНЕЦ ЕСЛИ

вы­пол­ня­ет­ся ко­ман­да1 (если усло­вие ис­тин­но).

В кон­струк­ции

    ЕСЛИ усло­вие

        ТО ко­ман­да1

        ИНАЧЕ ко­ман­да2

    КОНЕЦ ЕСЛИ

вы­пол­ня­ет­ся ко­ман­да1 (если усло­вие ис­тин­но) или ко­ман­да2 (если усло­вие ложно).

 

Дана про­грам­ма для Ре­дак­то­ра:

НА­ЧА­ЛО

ПОКА на­шлось (11)

    ЕСЛИ на­шлось (112)

        ТО за­ме­нить (112, 6)

        ИНАЧЕ за­ме­нить (11, 3)

КОНЕЦ ПОКА

КОНЕЦ

 

Ис­ход­ная стро­ка со­дер­жит де­сять еди­ниц и три двой­ки, дру­гих цифр нет, точ­ный по­ря­док рас­по­ло­же­ния еди­ниц и двоек не­из­ве­стен. Какую наи­боль­шую сумму цифр может иметь стро­ка, ко­то­рая по­лу­чит­ся после вы­пол­не­ния про­грам­мы?

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

Ре­ше­ние.

Сумма цифр будет наи­боль­шей, если стро­ка будет вы­гля­деть, на­при­мер, таким об­ра­зом: 1121121121111. В этом слу­чае ал­го­ритм три раза за­ме­нит по­сле­до­ва­тель­ность цифр 112 на 6, после чего два раза за­ме­нит 11 на 3. В этом слу­чае сумма будет равна 6 · 3 + 3 · 2  =  24.

 

Ответ: 24.

 

При­ведём ре­ше­ние Му­ра­вье­ва Кон­стан­ти­на на языке Python.

from itertools import product

al = []

maxx = 0

for i in product('12', repeat=13):

i = str(''.join(i))

if i.count('1') == 10 and i.count('2') == 3:

if not(i in al):

al.append(i)

for a in al:

c = 0

while '11' in a:

if '112' in a:

a = a.replace('112','6',1)

else:

a = a.replace('11','3',1)

for k in a:

c = c + int(k)

if c > maxx:

maxx = c

print(maxx)

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ско­го на языке Python.

s='112'*3+'1'*4

while '11' in s :

if '112' in s:

s=s.replace('112','6',1)

else:

s=s.replace('11','3',1)

print(s.count('6') * 6 + s.count('3') * 3)

 

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

s='12'

z=[]

for a1 in s:

for a2 in s:

for a3 in s:

for a4 in s:

for a5 in s:

for a6 in s:

for a7 in s:

for a8 in s:

for a9 in s:

for a10 in s:

for a11 in s:

for a12 in s:

for a13 in s:

w=a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13

if w.count('1')==10 and w.count('2')==3:

while '11'in w:

if '112'in w:

w=w.replace('112','6',1)

else:

w=w.replace('11','3',1)

z.append(sum(int(i) for i in w))

else:

break

print(max(z))

 

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

import random

l = []

for i in range(1,1000):

n = [1,1,1,1,1,1,1,1,1,1,2,2,2]

z = random.shuffle(n)

x = str(n[0]) + str(n[1]) + str(n[2]) + str(n[3]) + str(n[4]) + str(n[5]) + str(n[6]) + str(n[7]) + str(n[8]) + str(n[9]) + str(n[10]) + str(n[11]) + str(n[12])

while '11' in x:

if '112' in x:

x = x.replace('112', '6', 1)

else:

x = x.replace('11', '3', 1)

x = str(x)

l.append(int(x[0]) + int(x[1]) + int(x[2]) + int(x[3]) + int(x[4]))

print(max(l)))

 

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

import itertools

def process(s):

while '11' in s:

if '112' in s:

s = s.replace('112', '6', 1)

else:

s = s.replace('11', '3', 1)

return s

max_sum = 0

for positions in itertools.combinations(range(13), 3):

arr = ['1'] * 13

for pos in positions:

arr[pos] = '2'

s = ''.join(arr)

processed = process(s)

current_sum = sum(int(c) for c in processed)

if current_sum > max_sum:

max_sum = current_sum

print(max_sum)


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

Раздел кодификатора ФИПИ: 1.6.2 Вы­чис­ли­мость. Эк­ви­ва­лент­ность ал­го­рит­ми­че­ских мо­де­лей