Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];

Вниз

Одно   Найти похожие ветки 

 
maga001   (2003-12-12 22:16) [0]

Уважаемые Мастера и Подмастерья!
Говорят, что экспериментально доказано, что люди читают слова по первой и последней букве, т.е. неважно в какой последовательности идут буквы в слове, главное что бы на месте были первая и последняя буква. Я сразу же задался целью сделать программу, которая будет обычный текст будет переделывать в вышеизложенный вид. Но ввиду того, что я новичок в делфи и тем более профан в таких делах, ничего токового не получилось, может кто сделает? Поделитесь кодом.
Заранее благодарен!


 
Юрий Зотов   (2003-12-12 23:46) [1]

Элементарно, Ватсон.

Вот Вам текст, полностью соответствующий тому, что Вы сказали:
Г...и, к...е же н...и и...а з...т на э...т н...й с...т!

Для начала прочитайте его, а потом запрограммируйте тот алгоритм, которым Вы это сделали. И все проблемы.


 
Ihor Osov'yak   (2003-12-13 00:05) [2]

2 [1] Юрий Зотов © (12.12.03 23:46)

А я первых два слова прочитал :-)


 
Johnmen   (2003-12-13 00:25) [3]

>Юрий Зотов © (12.12.03 23:46)
>Г...и, к...е же н...и и...а з...т на э...т н...й с...т!

Господи, какие же новички издалека заходят на этот несчастный сайт!

:)


 
maga001   (2003-12-13 00:43) [4]


> Вот Вам текст, полностью соответствующий тому, что Вы сказали:
> Г...и, к...е же н...и и...а з...т на э...т н...й с...т!

Нет почитайте "открытие" еще раз, буквы не должны быть пропущены, они должны просто поменяться местами.


 
maga001   (2003-12-13 00:45) [5]

Ребята, если такое с вашей точки зрения не возможно скажите сразу, а то такое ощущения что я какую-то глупость несусветную сморозил.


 
Игорь Шевченко   (2003-12-13 00:52) [6]

maga001 (13.12.03 00:45)

Возможно, и алгоритм примитивный. У слова не трогаются первая и последняя буквы, а остальные перемешиваются случайным образом.

Гдсоопи, ккиае нвоикчи иоднга здяхоат на эотт нысеачтснй сйат


 
maga001   (2003-12-13 01:02) [7]


> Игорь Шевченко

Этот "алгоритм" видел уже не раз, только хотелось бы увидеть это на языке Object Pascal, а мой "алгоритм" то весь текст перемешывает, то вообше буквы ковыряет.


 
Ihor Osov'yak   (2003-12-13 01:09) [8]

2 [5] maga001 (13.12.03 00:45)

Было уже месяц или два об этом.. Но имхо, это только для умеющих бегло читать..

Да, мысли желательно внятно излагать.. И, кстати, [2] не противоречит условиям, изложенным в [1]. А то, что "буквы не должны быть пропущены, они должны просто поменяться местами" упомянуто лишь в [4].

Да и реализация программная перестановки - элементрарна.. Тоже был разговор на эту тему - за сколько минут можно сделать.. У меня вышло где-то минут 5-8.. Начиная от запуска делфи, кончая тестированием.. Если есть интерес - исходник должен сохраниться :-)


 
maga001   (2003-12-13 01:12) [9]


> Ihor Osov"yak ©

Если бы его не было я бы сюда не писал :)))


 
Ihor Osov'yak   (2003-12-13 01:12) [10]

Сори, тогда речь шла о генерации всех возможных перестановок. А то, что тебе нужно - можно еще проще..


 
maga001   (2003-12-13 01:16) [11]


> Ihor Osov"yak ©

Про генерацию я знаю, было уже, только тут текст надо обработать.


 
Юрий Зотов   (2003-12-13 01:24) [12]

> maga001

Да Вы поймите главное. Разбить текст на слова и как-то там перемешать в них буквы - это не проблема, и пишется такая программа действительно за 5 минут. Но что потом?

Ну, получите Вы примерно такой текст, что привел Игорь в [6]. А дальше-то что?


 
maga001   (2003-12-13 01:34) [13]


> Юрий Зотов ©

Дык, я не пытаюсь перпектуум мобиле изобретать на основе этого кода, если это так легко все пишется дайте посмотреть как это делается, просто хочеться узнать как это сделать правильно, а то у меня не получается никак.


 
Fantasist   (2003-12-13 01:38) [14]


> Говорят, что экспериментально доказано, что люди читают слова по первой и последней букве


А ну этот же текст уже весь интернет обошел:

По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы не чиатем кдаужю бкуву по отдльенотси, а все солво цликеом.

aoccdrnig to a rscheearch at an Elingsh uinervtisy, it deosn"t mttaer in waht oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht frist and lsat ltteer is at the rghit pclae. The rset can be a toatl mses and you can sitll raed it wouthit porbelm. Tihs is bcuseae we do not raed ervey lteter by it slef but the wrod as a wlohe


 
Stant   (2003-12-13 01:46) [15]

>Fantasist
Нормально читается. Толко вот не пойму, зачем нормальный текст надо "калечить"?

Наебру лобой тескт бсытро и без очепяток.


 
Ihor Osov'yak   (2003-12-13 01:53) [16]

2 [13] maga001 (13.12.03 01:34)

Книжек мало читаешь..

Выдергивай с одной строки рандомный символ (в пределах тела строки) и присоединяй к второй строке. Примерно так, как сделано дальше..
Зы - писалось без претензии на оптимальность:

unit fmainTossInnerChar;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
edSrc: TEdit;
btToss: TButton;
lbResult: TLabel;
procedure btTossClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

function DoIt(aPrm: string): string;
var
strBeg: string;
idx: integer;
begin
if length(aPrm) <= 2 then
begin
result := aprm;
exit;
end;
result := aprm[1];
strBeg := Copy(aPrm, 2, length(aPrm) - 2);
while length(strBeg) > 0 do
begin
if length(strBeg) = 1 then
begin
result := result + strBeg;
break;
end;
idx := Random(length(strBeg)) + 1;
result := result + strBeg[idx];

if idx = 1 then
begin
strBeg := Copy(strBeg, 2, length(strBeg) - 1);
continue;
end;

if idx = length(strBeg) then
begin
SetLength(strBeg, length(strBeg) - 1);
continue;
end;
strBeg := Copy(strBeg, 1, idx - 1) + Copy(strBeg, idx + 1, length(strBeg) - idx);
end;
result := result + aPrm[length(aPrm)];

end;

procedure TForm1.btTossClick(Sender: TObject);
begin //
lbResult.Caption := doIt(edSrc.Text);
end;

initialization

Randomize;

finalization

end.


 
Ihor Osov'yak   (2003-12-13 01:58) [17]

ps без strBeg вполне можно обойтись.. А если сделать битовый массив флажков с целью отметки уже "выдернутых" символов - то можно обойтись без медленных оппераций по удалению "выдернутого" из тела строки.. Хотя можно и без массива флажков.. Еще проще.. Сейчас набросаю еще..
выдергиваешь символ, а на его место - переставляешь последний...


 
Ihor Osov'yak   (2003-12-13 02:18) [18]

заблудился в условиях окончания цыкла, и то, что делается за 2 минуты, езолил 20. Ибо лень было за ручкой идти, картинку рисовать, а по старости в уме уже плохо соображаю :-)

unit fmainTossInnerChar;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
edSrc: TEdit;
btToss: TButton;
lbResult: TLabel;
procedure btTossClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

function DoIt(aPrm: string): string;
var
idx: integer;
idxLast: integer;
begin
if length(aPrm) <= 3 then
begin
result := aprm;
exit;
end;
result := aprm[1];
idxLast := length(aPrm) - 1;

while idxLast >= 2 do
begin
if idxLast = 2 then
begin
result := result + aPrm[2];
break;
end;
idx := Random(idxLast - 1) + 2;
result := result + aPrm[idx];
aPrm[idx] := aPrm[idxLast];
dec(idxLast);
end;
result := result + aPrm[length(aPrm)];

end;

procedure TForm1.btTossClick(Sender: TObject);
begin //
lbResult.Caption := doIt(edSrc.Text);
end;

initialization

Randomize;

finalization

end.


 
Ihor Osov'yak   (2003-12-13 02:23) [19]

а вообще-то такие вещи ( я имею ввиду реализацию номер 2), намного красивее на ассеблере смотрятся.. Но уже лень..


 
Ske4er   (2003-12-13 02:56) [20]

:) Пока пробовал сам Мастер Ihor Osov"yak уже написал :). Мож взглянуть на мой - не оптимальный, но короткий.

Я кинул на форму 2 Едита и Кнопку. У кнопки обравотчик - edit2.Text:=mix(edit1.text);

Ну а сама функция -
function Mix (word : string): string;
var
wordMixed : string;
i,j : integer;
begin
randomize;
wordMixed:="000000000000000000000000000000";
wordMixed[1]:=word[1];
wordMixed[length(word)]:=word[length(word)];
for i:=2 to length(word)-1 do
begin
repeat
j:=random(length(word)-2)+2;
until (word[j]<>"0");
wordMixed[i]:=word[j];
word[j]:="0";
end;
result:=copy(wordMixed,1,length(word));
end


 
Ske4er   (2003-12-13 03:01) [21]

Забыл предупредить - функция на одно слово. Как разбивать стоку на слова найдешь при желании на http://delphibase.endimus.ru/


 
Ihor Osov'yak   (2003-12-13 03:19) [22]

2 [20] Ske4er © (13.12.03 02:56)

несколько замечаний.
- randomize; желательно вызывать только раз. Нажмите ф1, там єтот момент, кажется, прокоментирован..
- как идентификатор формального параметра не желательно использовать идентификатор стандартного типа (я имею ввиду word)
- создаете искуственные преграды на длинну входного слова, причем без контроля на превышение этой преграды.. Я понимаю, что реальные слова длинной меньше, чем вы предусмотрели, но нужно отказываться от такого стиля. Рано или позно, сделав за прывычкой, пулучите немного неприятностей..
- внутренний цыкл, где подбираем "cвободный" рандом-индекс немного гоняться будет.. Честно говоря, я также примерно так думал делать, когда говорил о массиве флажков, но именно через эти лишние гонки и отказался от такого подхода.. Но, впрочем, это наверно оптимальние, чем мой первый вариант.


 
Ihor Osov'yak   (2003-12-13 03:20) [23]

блин, опячаткм на опячатке.. Спать пора :-)


 
KosilkA   (2003-12-13 06:17) [24]

proecdure TFrom1.Butotn1Oncilck(Sedner:Tobejct);
bgein
shomwessage("Пмочеу этот код у меня не раобтает?");
end;


 
Кен   (2003-12-13 07:52) [25]

Это открытие было сделано англичанами, а у них слова короткие. look, book и так далее.
Попробуйте переставить буквы в слове "конституционный" и потом прочитать.


 
Anatoly Podgoretsky   (2003-12-13 10:14) [26]

Юрий Зотов © (12.12.03 23:46) [1]
Попрошу не выражаться


 
Anatoly Podgoretsky   (2003-12-13 10:17) [27]

maga001 (12.12.03 22:16)
О сколько нам открытий чудных, готовит просвещенья век


 
Ihor Osov'yak   (2003-12-13 12:24) [28]

2 [24] KosilkA © (13.12.03 06:17)

Да ладно, нужно же иногда в детсво поиграть :-)


 
Ske4er   (2003-12-13 14:13) [29]

Спасибо за замечания. 3 и 4 знал, но решил что для для данной конктретной задачи "прокатит" :) Большой спасибо за 2е, не когда не задумывался, но сразу видно что привычка плохая :)

1:

Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.

" Обычно randomize вызывается 1 раз и не вызывайте его в том же цикле что и random."


 
blackman   (2003-12-13 14:17) [30]

> єтот
Где такую букву взял ? Тоже хочу :)


 
Ihor Osov'yak   (2003-12-13 14:26) [31]

2 [29] Ske4er © (13.12.03 14:13)

Здесь борланды постеснялись в выражениях.. Поскромничали. Кнут, когда рассматривал генераторы псевдослучайных, очень акцентировал внимание на этом моменте. Конечно, не в контексте Делфи :-).
random генерирует неплохую псевдопоследовательность. Randomize ее рандомизирует, то есть гарантирует, что эта последовательность будет разной от запуска к запуску. Но если делать каждый раз Randomize перед Random - то это не значит, что полученная последовательность будет более качественной, чем в случае однократного вызова Randomize в пределах процесса с последующим многократным юзанием random. Скорее всего наоборот. И Кнут немного теоритически обьяснял этот эффект.. А практически можете проверить сами. Только перед тем посмотрите на критерии "хорошей" псевдослучайной последовательности.. В том же Кнуте, если лень смотреть в сторону буков по математике..


 
Всеволод Соловьёв   (2003-12-13 14:27) [32]


> Это открытие было сделано англичанами, а у них слова короткие.
> look, book и так далее.
> Попробуйте переставить буквы в слове "конституционный" и
> потом прочитать.

та да :)
Кстати, несмотря на то, что английский для меня не родной и знаю я его плоховато, но тем не менее, когда я начал читать английский текст в [14], я все понял.
А с русским так и еще легче. Пока не встретится слово конституционный :)))
Эотт ксонытцитионунй суд смаый ктонсцитоуниный из весх кннстутыцоиноих суодв на неашй паленте.

во всех трех случаях я это слово перемашеал по-разному.


 
Ihor Osov'yak   (2003-12-13 14:30) [33]

2 [30] blackman © (13.12.03 14:17)

на украинской раскладке клавиатуры.. Стоит сейчас три - укр, рус, анг, второпях иногда вместо рус переключаюсь на укр и наоборот.. Укр. текст с типично русским буквами, типа "ы" или "э","ъ" смотрится не менее оригинало и/или дебильно :-)


 
Ihor Osov'yak   (2003-12-13 14:34) [34]

2 [32] Всеволод Соловьёв © (13.12.03 14:27)

Наболело? :-(. Жители Украины поймут..
Но это уже оффтопик.. Сорри.


 
k-man   (2003-12-13 15:49) [35]


> Наболело? :-(. Жители Украины поймут..
> Но это уже оффтопик.. Сорри.

Как ничего не понявший не житель Украины прошу разъяснений


 
Ihor Osov'yak   (2003-12-13 16:02) [36]

2 [35] k-man © (13.12.03 15:49)

на другие сайты, например http://maidanua.org/ , там также есть форум..


 
k-man   (2003-12-13 16:38) [37]


> на другие сайты, например http://maidanua.org/ , там также
> есть форум..

Брр... ничего не понял.. Как связаны эти два поста


 
Ihor Osov'yak   (2003-12-13 16:55) [38]

2 [37] k-man © (13.12.03 16:38)
>Как ничего не понявший не житель Украины прошу разъяснений
см также выше о "ксонытцитионунй суд"..
на упомятумом мне сайте и форуме эта тема подробно рассматривается. В том числе последние решения этого суда.
Она там "в топик", здесь - нет..


 
Vuk   (2003-12-13 17:01) [39]

to Ihor Osov"yak:
Игорь, извините, но, видимо, не Вам стоит делать из топика оффтопик на ровном месте.


 
Ihor Osov'yak   (2003-12-13 17:12) [40]

2 [39] Vuk © (13.12.03 17:01)

ухожу, ухожу...
Я был не прав, извините.



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.01 c
1-11942
Russko
2003-12-22 09:26
2004.01.05
Программное создание директории (каталога)


3-11829
Slym
2003-12-08 08:43
2004.01.05
Какие транзакции поддерживает MS Access 2002(XP)?


14-12080
Виталя
2003-12-15 14:44
2004.01.05
Как установить компоненту, если есть только ф-лы dcu и dcr ?


14-12139
Stant
2003-12-12 12:31
2004.01.05
ХРеновые окна (от амер. Windows XP)


14-12062
ИМХО
2003-12-10 11:20
2004.01.05
Файл с расширением aw





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский