|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.03.2015, 18:50 | #1 |
Форумчанин
Регистрация: 21.05.2014
Сообщений: 121
|
Ребус (TurboPascal, FreePascal)
Всем привет!
Я решал задачу, и потом когда решил отправил её на тестирование у меня не прошёл 2 тест (тесты нельзя просматривать) Я пол часа мучился с кодом, так и не нашёл ошибки Вот условие и код, пожалуйста помогите! Задача H. Ребус Имя входного файла: rebus.in Имя выходного файла: rebus.out Ограничение по времени: 2 секунды Ограничение по памяти: 256 мегабайт На прошлом уроке английского Пете задали домашнее задание. Оно заключалось в разгадывании ребусов. Каждый ребус — это последовательность картинок. С двух сторон от каждой картинки могут располагаться апострофы. Каждая картинка обозначает некоторое слово. Предположим, что перед некоторой картинкой нарисовано i апострофов, а после нее j апострофов. Это значит, что у слова, которое сопоставляется картинке, необходимо убрать i букв с начала и j с конца, а оставшуюся его часть записать вместо картинки и апострофов. Так необходимо сделать с каждой картинкой и окружающими ее апострофами. После этого нужно «склеить» получившиеся кусочки в одно слово. Оно и будет разгадкой ребуса. У Пети нет проблем с тем, чтобы сопоставить каждой картинке слово. Но ему очень лень заниматься отбрасыванием лишних букв и склеиванием слов. Поэтому он попросил вас помочь ему. Дана строка, которая состоит из маленьких латинских букв, апострофов (символов с кодом 39), а также пробелов, которые разделяют слова. Апостроф относиться к некоторому слову, если между ними нет пробела. Если апостроф стоит слева от слова, то у него необходимо убрать одну букву с начала, если справа — с конца. Потом необходимо склеить все слова в одно. Например, пусть дана строчка «team ’ ’ ’ ’ school ’ ’ olympiad’ ’ ’». В первом слове ничего изменять не надо, так как к нему не относится ни один апостроф. Во втором необходимо убрать первые четыре буквы и получить «ol», из третьего слова получится «ymp». После скеливания трех кусочков получим строку «teamolymp». Формат входного файла В первой строке входного файла дан ребус, длиной не более 100 символов, который необходимо решить. Гарантируется, что в строчке присутствуют только апострофы (код символа — 39), пробелы и маленькие латинские буквы, а также, что ребус корректен — нет слова, у которого нобходимо удалить букв больше, чем его длина. Формат выходного файла Выведите одно слово — ответ на ребус. Примеры rebus.in team ’ ’ ’ ’ school ’ ’ olympiad’ ’ ’ rebus.out teamolymp Вот мой код: var s,rebus: string; st: array [1..100] of string; i,l,k,k1,j,a,u,u1,y: longint; begin assign(input,'rebus.in'); reset(input); assign(output,'rebus.out'); rewrite(output); readln(s); s:=' '+s+' '; for i:=2 to length(s)-1 do { Ищем все слова в строке s} if s[i] <> ' ' then begin if s[i-1] = ' ' then l:=i; if s[i+1] = ' ' then begin inc(a); st[a]:=copy(s,l,i-l+1); {Все найденные слова помещаем в массив} end; end; for i:=1 to a do {начинаем разгадывать ребус, берём первое слово} begin u:=0; u1:=0; k:=0; k1:=0; for j:=1 to length(st[i]) do if st[i][j] = #39 then inc(k) {считаем сколько в начале ' и как только следующий символ не ' , то начинаем цепочку действий} else begin for y:=length(st[i]) downto length(st[i]) div 2 do if st[i][y] = #39 then inc(k1); {1. Считаем сколько кавычек в конце слова} u1:=k1*2; {2. Даём переменной u1 количество ' в конце слова умноженных на 2 (так как столько же букв нужно будет убрать)} u:=k*2+1; {3. Даём переменной u количество ' в начале слова умноженных на 2 и +1} for u:=u to length(st[i])-u1 do {4. И от u до длинны слова минус u1 даём переменной ребус по символу из слова} rebus:=rebus+st[i][u]; break; {потом переходим к новому слову} end; end; writeln(rebus); {И так получается строка из символов некоторых слов, которая являеться разгадкой ребуса} end. Задачу решил, большое спасибо Smogg за помощь! Последний раз редактировалось VladKB1; 08.03.2015 в 14:21. |
07.03.2015, 19:26 | #2 |
Форумчанин
Регистрация: 21.05.2014
Сообщений: 121
|
Номер страницы (TurboPascal, FreePascal)
Всем заранее спасибо!
|
07.03.2015, 21:04 | #3 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
Код:
Код:
|
07.03.2015, 22:16 | #4 |
Форумчанин
Регистрация: 21.05.2014
Сообщений: 121
|
|
07.03.2015, 23:23 | #5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
При чем здесь разные? Тебе как бы намекают, что множество имен переменных, имена которых не несут ни какого смысла затрудняют чтение и отладку программы. Даже маленькой. А отладка проги в 1000 строк с такими именами переменных равносильна подвигу
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
08.03.2015, 00:06 | #6 | |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
Цитата:
3 переменных еще туда-сюда понять про что они, но десяток - перебор Последний раз редактировалось Smogg; 08.03.2015 в 00:31. |
|
08.03.2015, 01:42 | #7 |
Форумчанин
Регистрация: 21.05.2014
Сообщений: 121
|
Вроде помог разобраться, если нет извините (исправил самое первое сообщение)
|
08.03.2015, 14:05 | #8 | |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
Цитата:
Комменты, конечно же, лучше, чем осмысленные имена, но обычно их очень лень писать и полагаешься на "самодокументированность кода". Да вот досада, у каждого свое представление о "самодокументированности кода". Уже корректирабельно: Код:
Последний раз редактировалось Smogg; 08.03.2015 в 14:07. |
|
08.03.2015, 14:18 | #9 | |
Форумчанин
Регистрация: 21.05.2014
Сообщений: 121
|
Цитата:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ребус на Делфи | Jane_Air | Помощь студентам | 4 | 11.01.2014 18:40 |
Ребус Delphi2010 | Василий01 | Помощь студентам | 3 | 24.12.2012 16:08 |
Ребус! | prelest' | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 30.05.2011 22:59 |
Ребус | Junger | Помощь студентам | 5 | 30.05.2011 10:29 |
Ребус | solnze.90 | Паскаль, Turbo Pascal, PascalABC.NET | 10 | 11.01.2011 23:23 |