Что нового

Сравнение рандомных символов с символами из txt-файла

louie1743shkirondo

Новичок
Сообщения
28
Репутация
0
В общем, есть задача: генерировать рандомные символы(в данном случае - буквы) в максимальном количестве 9 и затем сравнивать их с теми, что находятся в txt-файле. В txt-файле есть строчки с именами, скрипт должен, при нахождение совпадения, выдавать сообщение, дескать он такой молодец и нашёл одно из имён...
Моя проблема заключается в том, что, да, он генерирует рандомные буквы, но постоянно повторяет одну и ту же 2-3 раза... Мне бы хотелось узнать подробнее, как это можно исправить/реализовать.

P.S.
С Autoit я знаком не так давно, возможно имею недостаточно знаний и опыта. Буду рад любым предложениям.
 
Автор
L

louie1743shkirondo

Новичок
Сообщения
28
Репутация
0
Alofa сказал(а):
louie1743shkirondo сказал(а):
(в данном случае - буквы)
- Буквы какого алфавита и в каком регистре?
- дайте пример txt файла.

Буквы английского алфавита, а что насчёт примера.. Имена в нижнем регистре и на английском. Каждое новое имя с новой строчки.(Дабы их читать FileReadLine-ом)
 

Вложения

  • Names1.txt
    476 байт · Просмотры: 3

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вот, например рандомные слова от 1 до 9 букв с не повторяющимися подряд буквами в слове
Код:
For $n = 1 To 1000 ;создать 1000 слов
	$Text = ''
	$Last = ''
	For $i = 0 To Random(0, 8, 1)
		$Letter = Chr(Random(97, 122, 1))
		If $Letter <> $Last Then
			$Last = $Letter
			$Text &= $Letter
		Else ; Если буква повторилась счётчик $i не увеличиваем
			$i -= 1
		EndIf
	Next

	ConsoleWrite($Text & '   ' & StringLen($Text) & @CRLF)
Next
До какого времени генерировать буквы ? до первого совпадения или иначе как ?
Лучше читать не FileReadLine-ом , а прочесть весь документ в массив и дальше работать с массивом - в разы быстрее будет
Не понятна цель этого, может лучше рандомно выдёргивать имя из файла ?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
louie1743shkirondo
Ваша логика уже неправильная. Генерация случайных чисел допускает совпадение значений идущих подряд.

ra4o [?]
с не повторяющимися подряд буквами
Что с этим делать - isabella, emma?
 
Автор
L

louie1743shkirondo

Новичок
Сообщения
28
Репутация
0
Garrett сказал(а):
louie1743shkirondo
Ваша логика уже неправильная. Генерация случайных чисел допускает совпадение значений идущих подряд.

ra4o [?]
с не повторяющимися подряд буквами
Что с этим делать - isabella, emma?

Да, но тут в другом дело... Получается всегда что-то вроде этого: bbffhhyyeerriioojjhhhhffaa
А причину я понять не могу..


Добавлено:
Сообщение автоматически объединено:

ra4o сказал(а):
Вот, например рандомные слова от 1 до 9 букв с не повторяющимися подряд буквами в слове
Код:
For $n = 1 To 1000 ;создать 1000 слов
	$Text = ''
	$Last = ''
	For $i = 0 To Random(0, 8, 1)
		$Letter = Chr(Random(97, 122, 1))
		If $Letter <> $Last Then
			$Last = $Letter
			$Text &= $Letter
		Else ; Если буква повторилась счётчик $i не увеличиваем
			$i -= 1
		EndIf
	Next

	ConsoleWrite($Text & '   ' & StringLen($Text) & @CRLF)
Next
До какого времени генерировать буквы ? до первого совпадения или иначе как ?
Лучше читать не FileReadLine-ом , а прочесть весь документ в массив и дальше работать с массивом - в разы быстрее будет
Не понятна цель этого, может лучше рандомно выдёргивать имя из файла ?

Да, вы правы... Так будет проще.. Но как именно прочесть весь документ в массив? Если несложно, можете показать на простом примере?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вот, перебирает буквы , пока не найдёт совпадение
Код:
#include <file.au3>
#include <Array.au3>
$Path_File = @ScriptDir & '\Names1.txt'
$aArray = FileReadToArray($Path_File)

Do
	$Text = ''
	$Last = ''
	For $i = 0 To Random(0, 8, 1)
		$Letter = Chr(Random(97, 122, 1))
		If $Letter <> $Last Then
			$Last = $Letter
			$Text &= $Letter
		Else ; Если буква повторилась счётчик $i не увеличиваем
			$i -= 1
		EndIf
	Next
	_ArraySearch($aArray, $Text)
Until Not @error
ConsoleWrite($Text & '   ' & StringLen($Text) & @CRLF)
с повторами букв пока ничего не делал
Вот, если допустить повторы
Код:
#include <file.au3>
#include <Array.au3>
$Path_File = @ScriptDir & '\Names1.txt'
$aArray = FileReadToArray($Path_File)

Do
	$Text = ''
	For $i = 0 To Random(0, 8, 1)
		$Text &=  Chr(Random(97, 122, 1))
	Next
	_ArraySearch($aArray, $Text)
Until Not @error
ConsoleWrite($Text & '   ' & StringLen($Text) & @CRLF)
только ерунда всё это , вероятность нахождения коротких имён гораздо больше, чем длинных, у меня , например находит постоянно или "mia" или "zoey", иногда "lily"
Вы скажите - чего Вы хотите этим добиться, может по-другому это реализовать ?
А причину я понять не могу..
Покажите, как Вы генерируете строку , найдём причину такого поведения
 
Автор
L

louie1743shkirondo

Новичок
Сообщения
28
Репутация
0
ra4o сказал(а):
Вот, перебирает буквы , пока не найдёт совпадение
Код:
#include <file.au3>
#include <Array.au3>
$Path_File = @ScriptDir & '\Names1.txt'
$aArray = FileReadToArray($Path_File)

Do
	$Text = ''
	$Last = ''
	For $i = 0 To Random(0, 8, 1)
		$Letter = Chr(Random(97, 122, 1))
		If $Letter <> $Last Then
			$Last = $Letter
			$Text &= $Letter
		Else ; Если буква повторилась счётчик $i не увеличиваем
			$i -= 1
		EndIf
	Next
	_ArraySearch($aArray, $Text)
Until Not @error
ConsoleWrite($Text & '   ' & StringLen($Text) & @CRLF)
с повторами букв пока ничего не делал
Вот, если допустить повторы
Код:
#include <file.au3>
#include <Array.au3>
$Path_File = @ScriptDir & '\Names1.txt'
$aArray = FileReadToArray($Path_File)

Do
	$Text = ''
	For $i = 0 To Random(0, 8, 1)
		$Letter = Chr(Random(97, 122, 1))
		$Text &= $Letter
	Next
	_ArraySearch($aArray, $Text)
Until Not @error
ConsoleWrite($Text & '   ' & StringLen($Text) & @CRLF)
только ерунда всё это , вероятность нахождения коротких имён гораздо больше, чем длинных, у меня , например находит постоянно или "mia" или "zoey"
Вы скажите - чего Вы хотите этим добиться, может по-другому это реализовать ?


Да, это можно реализовать по-другому, несомненно, но я не обладаю должными знаниями для реализации сие задачи... Но мне понравилась ваша идея: впихнуть весь документ в массив, это гораздо легче (если знать, как это сделать, кнчн же :rofl:)

Я пытаюсь как-то решить основную свою задачу:
Вводить имя(InputBox, как пример) и уже по нему выдавать информацию про его значение и всё остальное(Инфу брать из интернета).. Но это не к это теме(
В любом случае, спасибо, попытаюсь учиться на своих ошибках, ну и следовать вашим советам..
 
Верх