
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.217.4] |
![]() |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Цитата UnFleshed_One, 06.09.03, 00:15:13 Вручную? Они все ровно укладываются? А те у которых хвосты (типа 1) остаются отбросил? Зачем вручную? Написал программу, перебирает ~250000 комбинаций/сек. Все строчки укладываются ровно. Хвостов нигде нет. |
Сообщ.
#17
,
|
|
|
Не должно, задачи так не ставятся, где-то должна быть наё@ка. :
![]() |
Сообщ.
#18
,
|
|
|
Неужели все пять миллионов заканчиваются на А и У? (мне самому лень писать
![]() |
Сообщ.
#19
,
|
|
|
Значит так. Программа перебрала меньше 0.1\% (примерно, конечно), а уже нашла 30 миллионов вариантов! И все они подходят под исходную строку!
Даже если предположить, что исходная строка Цитата , а не 1010100000001000 11000 101110110 10101010000011001001 Цитата (т.е. пробелы тоже играют роль), то останится еще куча всевозможных комбинаций. 10101000000010001100010111011010101010000011001001 Что делать дальше не знаю. На всякий случай вот эта программа (FreePascal): ![]() ![]() const ss:ansistring='А - 01, Б - 1000, В - 011, Г - 110, Д - 100, Е - 0, Ж - 0001, З -1100, И - 00, Й - 0111, К - 101, Л - 0100,'+ ' М - 11, Н - 10, О - 111, П - 0110, Р - 010, С - 000, Т - 1, У - 001, Ф - 0010, Х - 0000, Ц - 1010, Ч - 1110, Ш - 1111,'+ ' Щ - 1101, Ь - 1001, Ы - 1011, Э - 00100, Ю - 0011, Я - 0101, 1 - 01111, 2 - 00111, 3 - 00011, 4 - 00001, 5 - 00000, 6 - 10000, 7 - 11000, 8 - 11100, 9 - 11110, 0 - 111111, * - 01000,'; //ss - эта наша таблица кодировки const //t='1010100000001000 11000 101110110 10101010000011001001'; t='10101000000010001100010111011010101010000011001001'; // t - строчка для разбора var s,q:array[1..50]of ansistring; // буквы и и их коды соответственно k,l,h:integer; // k - число кодовых символов f:ansistring; // времменая строка r:string; //результат z:Longint; ///// самая главная функция ///// декодирует строчку t начиная с позиции i (учитывает пробелы) procedure decode(i:integer); var x:integer; zzz:boolean; begin if i=length(t)+1 then // Все? Строчка закончилать? begin inc (z); if z and 63=0 then writeln(z,' ',r); exit; end; zzz:=false; for x:=1 to k do //Поиск следующего кода if copy(t,i,length(q[x]))=q[x] then begin r:=r+s[x]; decode(i+length(q[x])); r:=copy(r,1,length(r)-1); zzz:=true; end; if (not zzz)and(t[i]=' ') then decode(i+1); //обработка случая с пробелом в строке t end; begin //начало k:=0; f:=ss; // парсинг строки ss; заполнение массивов q и s repeat l:=pos(',',f); if l=0 then break; inc(k); h:=pos(' ',f); s[k]:=copy(f,1,h-1); delete(f,1,h+2); l:=pos(',',f); q[k]:=copy(f,1,l-1); delete(f,1,l+1); until length(f)=0; //Просто посмотрим, правильно ли сработал разбор строки ss for l:=1 to k do writeln(s[l],' ',q[l]); r:=''; // результата еще нет z:=0; // найдено 0 решений decode(1); // начинаем поиск с первого символа end. |
Сообщ.
#20
,
|
|
|
А можно немного комментариев, давно паскаль не видел...
|
Сообщ.
#21
,
|
|
|
Вот fenix710 офигеет, когда с утра увидит столько "ответоов".
И не старайтесь. Полного решения (программы) всё равно (за одну ночь) не напишите. Т.к. решения в чистом виде просто не существует. albom, ты же сам в своём первом сообщении писал, что это невозможно. |
Сообщ.
#22
,
|
|
|
А можно немного комментариев, давно паскаль не видел...
|
Сообщ.
#23
,
|
|
|
Добавил коментарии, должно хватить....
Цитата zx1024, 06.09.03, 00:51:53 Вот fenix710 офигеет, когда с утра увидит столько "ответоов". И не старайтесь. Полного решения (программы) всё равно (за одну ночь) не напишите. Т.к. решения в чистом виде просто не существует. albom, ты же сам в своём первом сообщении писал, что это невозможно. А мы еще анализатор какой-нибудь попробуем к проге прикрутить. ![]() |
Сообщ.
#24
,
|
|
|
Да, неслабо... Действительно вариантов море. Все дело в 'T' которая там каждой бочке затычка... (предлагаю ее отбросить
![]() ![]() ![]() #include "stdafx.h"<br>#include <string><br>#include <stdio.h><br>#include <fstream><br><br>using namespace std;<br>ofstream of;<br><br>string letters[][2]=<br>{<br> "A","01","Б","1000","В","011","Г","110","Д","100","Е","0","Ж","0001","З","1100",<br> "И","00","Й","0111","К","101","Л","0100","М","11","Н","10","О","111","П","0110",<br> "Р","010","С","000","Т","1","У","001","Ф","0010","Х","0000","Ц","1010","Ч","1110",<br> "Ш","1111","Щ","1101","Ь","1001","Ы","1011","Э","00100","Ю","0011","Я","0101",<br> "1","01111","2","00111","3","00011","4","00001","5","00000","6","10000","7","11000",<br> "8","11100","9","11110","0","111111"," ","01000" <br>};<br><br>void<br>find(string s,string decoded)<br>{<br> for(int i=0;i<42;i++) // checking every letter<br> {<br> for(int j=0;j<letters[i][1].length();j++)<br> {<br> if(s[j]!=letters[i][1][j])break;<br> }<br> if(j==letters[i][1].length()) // if all bytes matching<br> {<br> decoded+=letters[i][0]; // found one letter<br> string str=s.substr(j,-1); // cut it<br> if(str=="")<br> {<br> of<<decoded.c_str()<<"\n"; // finish<br> continue;<br> }<br> else<br> find(str,decoded); // next letter<br> }<br> }<br>}<br><br>int <br>main(int argc, char* argv[])<br>{<br> string s("10101000000010001100010111011010101010000011001001");<br> of.open("res.txt");<br><br> find(s,"");<br> return 0;<br>} |
Сообщ.
#25
,
|
|
|
Цитата fenix710, 05.09.03, 21:54:33 задача: На заре развития радио была разработка сигналов для общния между радиолюбителями всего мира. эта система был ???а придумана американским художником Морзе. с развитием вычислительной техники эту систему попытались применить для приема/передачи компьютерной информации. вот что из этого получилось: точка представлена сигналом 0, тире - сигналом 1. получена последовательность сигналов: 1010100000001000 11000 101110110 10101010000011001001 можнл ли, используя нижеуказанную таблицу, расшифровать полуенный код, и что из этого выйдет. А - 01, Б - 1000, В - 011, Г - 110, Д - 100, Е - 0, Ж - 0001, З -1100, И - 00, Й - 0111, К - 101, Л - 0100, М - 11, Н - 10, О - 111, П - 0110, Р - 010, С - 000, Т - 1, У - 001, Ф - 0010, Х - 0000, Ц - 1010, Ч - 1110, Ш - 1111, Щ - 1101, Ь - 1001, Ы - 1011, Э - 00100, Ю - 0011, Я - 0101, 1 - 01111, 2 - 00111, 3 - 00011, 4 - 00001, 5 - 00000, 6 - 10000, 7 - 11000, 8 - 11100, 9 - 11110, 0 - 111111, разделитель - 01000 Плохая таблица ![]() Наилучший вариант представления символов в Unicode. |
Сообщ.
#26
,
|
|
|
Столько ответов и все к одному ---) НЕльзя
!) Во-первых кто сказал что цц не могут идти подряд ????? может быть передается закодированоое сообщение и там и цц и юю 2) код не только не префексный но и не постфиксный ведь тогда можно было бы раскадировать с конца 3) если мне память не изменяет то это известная проблема соответствий Поста которая в общем случае не решаема |
Сообщ.
#27
,
|
|
|
Цитата fenix710, 05.09.03, 21:54:33 задача: На заре развития радио была разработка сигналов для общния между радиолюбителями всего мира. эта система был ???а придумана американским художником Морзе. с развитием вычислительной техники эту систему попытались применить для приема/передачи компьютерной информации. вот что из этого получилось: точка представлена сигналом 0, тире - сигналом 1... Данное описание кода Морзе не полное и использоваться для кодирования чего либо не может. Код Морзе основан на длительностях сигналов. Есть минимальная длительность сигнала (импульса). Длительность точки равна минимальной длительности. Длительность импульса тире равна трем минимальным длительностям. Пауза между импульсами кода одного символа равна минимальной длительности. Пауза между символами равна тройной минимальной длительности. Пауза между словами равна пяти минимальным длительностям. Заменив только точку нулем, а тире единицей, теряется более половины информации. Для передачи цифровой информации есть более эффективные и помехозащищенные методы кодирования (и модуляции) , манчестерский код, манчестерский-2, с востановлением нуля/единици, ... Совместно с контролем четности/нечетности, контрольной суммой, мажоритарным контролем, контролем по модулю 2, кодами обнаружения и воссановления ошибок (коды Хемминга). |
Сообщ.
#28
,
|
|
|
Цитата albom, 06.09.03, 00:11:10 Взял я вот эту строчку 10101000000010001100010111011010101010000011001001. И за пять минут нашел, что ей соответствует более 4 миллионов вариантов. И как из них выбрать нужный? ответ единственный: КА5ЕА3ЕЕААГГКАА5ГАЕА |
Сообщ.
#29
,
|
|
|
Цитата ответ единственный: КА5ЕА3ЕЕААГГКАА5ГАЕА И как же ты нашел этот ответ??? |
Сообщ.
#30
,
|
|
|
Ммм да, не на ту кнопочку нажимал.
Если пробелы считать разделителями, имеется 48 498 610 288 128 вариантов. А вот программка ![]() ![]() <br>decode([],[]).<br>decode(Str,[X|Xs]):- cod(X,Xc), append(Xc,Rest,Str), decode(Rest,Xs).<br><br>cod('А', "01").<br>cod('Б', "1000").<br>cod('В', "011").<br>ну и т д.<br> |