Форум: "Потрепаться";
Текущий архив: 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