From d1f8e6ba8bbf5f89690cb736227162eb9e54f523 Mon Sep 17 00:00:00 2001 From: Polina Date: Sun, 15 Jul 2018 15:38:20 +0300 Subject: [PATCH 01/12] Implement 2 levels of hometask_2 --- 2420/2/bad_words | 1 + 2420/2/options_file.rb | 61 ++++++++++++++++++++++++++++++++++++++ 2420/2/prepositions | 1 + 2420/2/versus.rb | 66 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+) create mode 100644 2420/2/bad_words create mode 100644 2420/2/options_file.rb create mode 100644 2420/2/prepositions create mode 100755 2420/2/versus.rb diff --git a/2420/2/bad_words b/2420/2/bad_words new file mode 100644 index 000000000..8c55ac594 --- /dev/null +++ b/2420/2/bad_words @@ -0,0 +1 @@ +6ля, 6лядь, 6лять, b3ъeб, cock, cunt, e6аль, ebal, eblan, eбал, eбать, eбуч, eбут, eблантий, fuck, fucker, fucking, xyев, xуй, xуя, xуе,xуй, xую, zaeb, zaebal, zaebali, zaebat, архипиздрит, ахуел, ахуеть, бздение, бздеть, бздех, бздецы, бздит, бздицы, бздло, бзднуть, бздун, бздунья, бздюха, бздюшка, бздюшко, бля, блябу, блябуду, блядь, бляди, блядина, блядище, блядки, блядовать, блядство, блядун, блядуны, бледунья, бледь, бледюга, блять, вафел, вафлёр, взъебка, взьебка, взьебывать, въеб, въебался, въебенн, въебусь, въебывать, выебать, выебал, выблядок, выблядыш, выеб, выебать,выебет, вы*бен, выебнулся, выебон, выебываться, выпердеть, высраться, выссаться, вьебен, гавно, гавнюк, гавнючка, гамно, гандон, гнид, гнида, гниды, говенка, говенный, говешка, говназия, говнецо, говнище, говно, говноед, говнолинк, говночист, говнюк, говнюха, говнядина, говняк, говняный, говнять, гондон, доебываться, долбоеб, долбоёб, долбоящер, дрисня, дрист, дристануть, дристать, дристун, дристуха, дрочелло, дрочена, дрочила, дрочилка, дрочистый, дрочить, дрочка, дрочун, е6ал, ебут, еб твою мать, ёб твою мать, ёбaн, ебaть, ебyч, ебал, ебало, ебальник, ебан, ебанамать, ебанат, ебаная, ёбаная, ебанический, ебанный, ебанныйврот, ебаное, ебануть, ебануться, ёбаную, ебаный, ебанько, ебарь, ебат, ёбат, ебатория, ебать, ебать-копать, ебаться, ебашить, ебёна, ебет, ебёт, ебец, ебик, ебин, ебись, ебическая, ебки, ебла, еблан, ебливый, еблище, ебло, еблыст, ебля, ёбн, ебнуть, ебнуться, ебня, ебошить, ебская, ебский, ебтвоюмать, ебун, ебут, ебуч, ебуче, ебучее, ебучий, ебучим, ебущ, ебырь, елда, елдак, елдачить, жопа, жопу, заговнять, задрачивать, задристать, задрота, зае6, заё6, заеб, заёб, заеба, заебал, заебанец, заебастая, заебастый, заебать, заебаться, заебашить, заебистое, заёбистое, заебистые, заёбистые, заебистый, заёбистый, заебись, заебошить, заебываться, залуп, залупа, залупу, залупаться, залупить, залупиться, замудохаться, запиздячить, засерать, засерун, засеря, засирать, засрун, захуячить, заябестая, злоеб, злоебучая, злоебучее, злоебучий, ибанамат, ибонех, изговнять, изговняться, изъебнуться, ипать, ипаться, ипаццо, Какдвапальцаобоссать, конча, курва, курвятник, лох, лошарa, лошара, лошары, лошок, лярва, малафья, манда, мандавошек, мандавошка, мандавошки, мандей, мандень, мандеть, мандища, мандой, манду, мандюк, минет, минетчик, минетчица, млять, мокрощелка, мокрощёлка, мразь, мудak, мудaк, мудаг, мудак, муде, мудель, мудеть, муди, мудил, мудила, мудистый, мудня, мудоеб, мудозвон, мудоклюй, на хер, на хуй, набздел, набздеть, наговнять, надристать, надрочить, наебать, наебет, наебнуть, наебнуться, наебывать, напиздел, напиздели, напиздело, напиздили, насрать, настопиздить, нахер, нахрен, нахуй, нахуйник, не ебет, не ебёт, невротебучий, невъебенно, нехира, нехрен, Нехуй, нехуйственно, ниибацо, ниипацца, ниипаццо, ниипет, никуя, нихера, нихуя, обдристаться, обосранец, обосрать, обосцать, обосцаться, обсирать, объебос, обьебать обьебос, однохуйственно, опездал, опизде, опизденивающе, остоебенить, остопиздеть, отмудохать, отпиздить, отпиздячить, отпороть, отъебись, охуевательский, охуевать, охуевающий, охуел, охуенно, охуеньчик, охуеть, охуительно, охуительный, охуяньчик, охуячивать, охуячить, очкун, падла, падонки, падонок, паскуда, педерас, педик, педрик, педрила, педрилло, педрило, педрилы, пездень, пездит, пездишь, пездо, пездят, пердануть, пердеж, пердение, пердеть, пердильник, перднуть, пёрднуть, пердун, пердунец, пердунина, пердунья, пердуха, пердь, переёбок, пернуть, пёрнуть, пи3д, пи3де, пи3ду, пиzдец, пидар, пидарaс, пидарас, пидарасы, пидары, пидор, пидорасы, пидорка, пидорок, пидоры, пидрас, пизда, пиздануть, пиздануться, пиздарваньчик, пиздато, пиздатое, пиздатый, пизденка, пизденыш, пиздёныш, пиздеть, пиздец, пиздит, пиздить, пиздиться, пиздишь, пиздища, пиздище, пиздобол, пиздоболы, пиздобратия, пиздоватая, пиздоватый, пиздолиз, пиздонутые, пиздорванец, пиздорванка, пиздострадатель, пизду, пиздуй, пиздун, пиздунья, пизды, пиздюга, пиздюк, пиздюлина, пиздюля, пиздят, пиздячить, педик, писбшки, писька, писькострадатель, писюн, писюшка, по хуй, по хую, подговнять, подонки, подонок, подъебнуть, подъебнуться, поебать, поебень, поёбываает, поскуда, посрать, потаскуха, потаскушка, похер, похерил, похерила, похерили, похеру, похрен, похрену, похуй, похуист, похуистка, похую, придурок, приебаться, припиздень, припизднутый, припиздюлина, пробзделся, проблядь, проеб, проебанка, проебать, промандеть, промудеть, пропизделся, пропиздеть, пропиздячить, раздолбай, разхуячить, разъ*б, разъ*ба, разебал, разъебай, разъебать, распиздай, распиздеться, распиздяй, распиздяйство, распроеть, сволота, сволочь, сговнять, секель, серун, серька, сестроеб, сикель, сила, сирать, сирывать, соси, сосать, спиздел, спиздеть, спиздил, спиздила, спиздили, спиздит, спиздить, срака, сраку, сраный, сранье, срать, срун, ссака, ссышь, стерва, страхопиздище, сука, суки, суходрочка, сучара, сучий, сучка, сучко, сучонок, сучье, сцание, сцать, сцука, сцуки, сцуконах, сцуль, сцыха, сцышь, съебаться, сыкун, трахае6, трахаеб, трахаёб, трахатель, ублюдок, уебать, уёбища, уебище, уёбище, уебищное, уёбищное, уебк, уебки, уёбки, уебок, уёбок, урюк, усраться, ушлепок, хyё, хyй, хyйня, хамло, хер, херня, хера, херовато, херовина, херовый, хитровыебанный, хитрожопый, хуeм, хуе, хуё, хуевато, хуёвенький, хуевина, хуево, хуевый, хуёвый, хуек, хуёк, хуел, хуем, хуенч, хуеныш, хуенький, хуеплет, хуеплёт, хуепромышленник, хуерик, хуерыло, хуесос, хуесоска, хуета, хуетень, хуею, хуи, хуй, хуйком, хуйло, хуйня, хуйрик, хуище, хуля, хую, хуюл, хуя, хуяк, хуякать, хуякнуть, хуяра, хуясе, хуячить, целка, чмо, чмошник, чмырь, шалава, шалавой, шараёбиться, шлюха, шлюхой, шлюшка, шлюхи, ябывает, *. diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb new file mode 100644 index 000000000..fa06aeac7 --- /dev/null +++ b/2420/2/options_file.rb @@ -0,0 +1,61 @@ +require 'optparse' +require './versus.rb' +require 'terminal-table' + +# rubocop:disable Layout/Tab +# rubocop:disable Style/UnneededInterpolation +# rubocop:disable Metrics/LineLength +# rubocop:disable Style/SymbolProc +# rubocop:disable Layout/BlockAlignment + +options = { name: '', top_bad_words: 0, top_words: 30 } +OptionParser.new do |opts| + opts.banner = 'Usage: example.rb [options]' + + opts.on('--top-bad-words [NUMBER]', Integer, 'Максимальное количество самых нецензурных участников') do |number| + options[:top_bad_words] = number + end + opts.on('--name [NAME]', String, 'Имя участника') do |name| + options[:name] = name + end + opts.on('--top-words [NUMBER]', Integer, 'Любимые слова человека') do |number| + options[:top_words] = number || 30 + end +end.parse! + +if options[:top_bad_words] > 0 + battler = Battler.battler_names_list.map { |name| Battler.new(name) } + battler = battler.sort_by { |name_battler| name_battler.bad_words_count } + battler = battler.pop(options[:top_bad_words]).reverse + rows = [] + battler.each { |member| rows << ["#{member.name}", "#{member.battles_count} батлов", "#{member.bad_words_count} нецензурных слов ", " #{member.words_in_battle} слова на батл ", " #{member.words_in_raund} слова в раунде"] } + table = Terminal::Table.new rows: rows + puts table +end + +unless options[:name].empty? + rows = [] + name_battler = [] + Battler.battler_names_list.each_index { |index| name_battler[index] = Battler.battler_names_list[index].split.first.to_str } + if name_battler.include?(options[:name]) + result = Battler.new(options[:name]).text_without_preposition.split(' ').each_with_object(Hash.new(0)) do |word, counter| + counter[word] += 1 + end + counter = result.to_a.sort_by { |_word, count| count } + counter = counter.pop(options[:top_words]).reverse + counter.each do |word, count| + rows << ["#{word}", "#{count} раз"] + end + table = Terminal::Table.new rows: rows + puts table + else + puts "Рэпер #{options[:name]} мне не известен. Зато мне известны: " + puts Battler.battler_names_list.pop(3) + puts '...' + end +end +# rubocop:enable Layout/Tab +# rubocop:enable Style/UnneededInterpolation +# rubocop:enable Metrics/LineLength +# rubocop:enable Style/SymbolProc +# rubocop:enable Layout/BlockAlignment diff --git a/2420/2/prepositions b/2420/2/prepositions new file mode 100644 index 000000000..dc02dbad4 --- /dev/null +++ b/2420/2/prepositions @@ -0,0 +1 @@ +а, а-ля, без, без ведома, безоблагодаря, близ, близко от, в, в виде, в зависимости от, в интересах, в качестве, в лице, в отличие от, в отношении, в пандан, в пользу, в преддверии, в продолжение, в результате, в роли, в связи с, в силу, в случае, в соответствии с, в течение, в целях, в честь, вблизи, ввиду, вглубь, вдогон, вдоль, вдоль по, взамен, включая, вкруг, вместо, вне, внизу, внутри, внутрь, во, во имя, во славу, вовнутрь, возле, вокруг, вопреки, вослед, впереди, вплоть до, впредь до, вразрез, вроде, вслед, вслед за, вследствие, встречу, выключая, для, для-ради, до, З, за, за вычетом, за исключением, за счёт, замест, заместо, И, из, из-за, из-под, из-подо, изнутри, изо, исключая, исходя из, К, к, касаемо, касательно, ко, кончая, кроме, кругом, Л, лицом к лицу с, М, меж, между, мимо, Н, на, на благо, на виду у, на глазах у, на предмет, наверху, навроде, навстречу, над, надо, назад, назади, накануне, наместо, наперекор, наперерез, наперехват, наподобие, напротив, наряду с, насупротив, насчёт, начиная с, не без, не считая, невзирая на, недалеко от, независимо от, несмотря, несмотря на, ниже, О, о, об, обо, обок, обочь, около, окрест, окроме, окромя, округ, опосля,опричь, от, от имени, от лица, относительно, ото, П, перед, передо, по, по линии, по мере, по направлению к, по поводу, по причине, по случаю, по сравнению с, по-за, по-над, по-под, поблизости от, повдоль,поверх, под,под видом, под эгидой, подле, подо, подобно, позади, позадь, позднее, помимо, поперёд, поперёк, порядка, посверху, посереди, посередине, посерёдке, посередь, после, посреди, посредине, посредством, пред, предо, преж, прежде, при, при помощи, применительно к, про, промеж, против, противно, противу, путём, Р, ради, рядом с, С, с, с ведома, с помощью, с прицелом на, с точки зрения, с целью, сверх, сверху, свыше, середи, середь, что, не, ты, не, н, и, -, я, это, з, же, у, теб, как, он, она, оно, они, бы, но, ведь, твой, -, так, если, этот, чтобы, мне, то, все, где, чем, тво, был, раунд, или, мы, только, теперь, уже, мой, даже, еще, его, кто, вы, меня. diff --git a/2420/2/versus.rb b/2420/2/versus.rb new file mode 100755 index 000000000..17389dd0d --- /dev/null +++ b/2420/2/versus.rb @@ -0,0 +1,66 @@ +# rubocop:disable Layout/Tab +# :reek:FeatureEnvy + +class Battler + FOLDER_PATH = '/home/polia/summer-2018/2420/2/'.freeze + attr_reader :name + + def initialize(name) + @name = name + end + + def self.battler_names_list + files = Dir.entries(FOLDER_PATH).reject { |file_name| File.directory?(file_name) || file_name[0].include?('.') } + name_battler = files.map { |all_file_names| all_file_names.lstrip.split(/\bvs\b|\bVS\b|\bпротив\b/).first } + name_battler.uniq + end + + def find_battles + Dir.chdir(FOLDER_PATH) + Dir.glob([" #{name}*", "#{name}*"]) + end + + def battles_count + find_battles.count + end + + def all_battles_text + text = '' + find_battles.each do |file_name| + text << IO.read("#{FOLDER_PATH}#{file_name}") + end + text.gsub!(/^\s+|\n|\r|\s+$|-|–/, ' ') + end + + def all_battles_words_count + all_battles_text.split.count + end + + def bad_words_count + bad_words = File.read("#{FOLDER_PATH}bad_words").split(' ') + sum_bad_words = 0 + bad_words.each_index do |index| + sum_bad_words += all_battles_text.gsub(bad_words[index]).count + end + sum_bad_words + end + + def words_in_battle + all_battles_words_count / battles_count + end + + def words_in_raund + all_battles_words_count / (battles_count * 3) + end + + def text_without_preposition + all_texts = all_battles_text.downcase! + prepositions_list = File.read("#{FOLDER_PATH}prepositions").split(',') + prepositions_list.each do |preposition| + all_texts.gsub!(/#{preposition}[аояиеёю ]/, '') + end + all_texts + end +end + +# rubocop:enable Layout/Tab From 04d2baa737c8acd04d57a367e9b7f39792f42d2c Mon Sep 17 00:00:00 2001 From: Polina Date: Mon, 16 Jul 2018 15:15:30 +0300 Subject: [PATCH 02/12] add fix with rubocop(2 hometask) --- 2420/2/README.md | 21 ++++++++++++ 2420/2/options_file.rb | 75 ++++++++++++++++++++---------------------- 2420/2/versus.rb | 14 ++++---- 3 files changed, 63 insertions(+), 47 deletions(-) create mode 100644 2420/2/README.md diff --git a/2420/2/README.md b/2420/2/README.md new file mode 100644 index 000000000..30bda2644 --- /dev/null +++ b/2420/2/README.md @@ -0,0 +1,21 @@ +# Mini-project Versus-battle + +# Info + +Данной программой возможны несколько анализов текста: +* Исследуование всех файлов с текстами батлеров, находящийся в корневой папке. +* Исследование текста на наличие мата. +* Проссмотр топ батлеров, использовавших наиболее часто матные слова. + +### Использование программы. Step-by-step. +1. Открываем Terminal, и переходим в директорию, где находится данный продукт. +2. В зависимости от решаемой задачи есть пара типов команд: +`--top-bad-words [NUMBER]` - вывод топ самых матерящихся людей в заданном количесвстве; +`--top-words [NUMBER] --name [NAME]` - вывод наиболее часто употребляемых слов во всех! текстах определенного человека. +Пример вызова команды: +` youfolderpath$ ruby options_file.rb --top-bad-words` [NUMBER] + 3. Для информации пропишите `ruby options_file.rb --help` + + # Возможные изменения в программе: + * Если вам захочется изменить( добавить или уменьшить) количество текстов, то вам следует файле `versus.rb`, 5 строка, указать полный путь к папке, где находятся данные текста. ВАЖНО! В данной папке должны находиться только текста батлеров. + * Значение [NUMBER] и [NAME] - ваши желания, однако употребление [NAME] на транслите не учтено. Т.е. "Галахат" и "Galahat" - в данном случае будут разными батлерами. [NUMBER] в дефолтном состоянии выведет 30 строк. diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb index fa06aeac7..1bdaa460a 100644 --- a/2420/2/options_file.rb +++ b/2420/2/options_file.rb @@ -2,12 +2,6 @@ require './versus.rb' require 'terminal-table' -# rubocop:disable Layout/Tab -# rubocop:disable Style/UnneededInterpolation -# rubocop:disable Metrics/LineLength -# rubocop:disable Style/SymbolProc -# rubocop:disable Layout/BlockAlignment - options = { name: '', top_bad_words: 0, top_words: 30 } OptionParser.new do |opts| opts.banner = 'Usage: example.rb [options]' @@ -16,46 +10,49 @@ options[:top_bad_words] = number end opts.on('--name [NAME]', String, 'Имя участника') do |name| - options[:name] = name + options[:name] = name end opts.on('--top-words [NUMBER]', Integer, 'Любимые слова человека') do |number| - options[:top_words] = number || 30 - end + options[:top_words] = number || 30 + end end.parse! if options[:top_bad_words] > 0 battler = Battler.battler_names_list.map { |name| Battler.new(name) } - battler = battler.sort_by { |name_battler| name_battler.bad_words_count } - battler = battler.pop(options[:top_bad_words]).reverse - rows = [] - battler.each { |member| rows << ["#{member.name}", "#{member.battles_count} батлов", "#{member.bad_words_count} нецензурных слов ", " #{member.words_in_battle} слова на батл ", " #{member.words_in_raund} слова в раунде"] } - table = Terminal::Table.new rows: rows - puts table + battler = battler.sort_by(&:bad_words_count) + battler = battler.pop(options[:top_bad_words]).reverse + rows = [] + battler.map do |member| + rows << [member.name.to_s, + "#{member.battles_count} батлов", + "#{member.bad_words_count} нецензурных слов ", + " #{member.words_in_battle} слова на батл ", + " #{member.words_in_raund} слова в раунде"] + end + table = Terminal::Table.new rows: rows + puts table end unless options[:name].empty? - rows = [] - name_battler = [] - Battler.battler_names_list.each_index { |index| name_battler[index] = Battler.battler_names_list[index].split.first.to_str } - if name_battler.include?(options[:name]) - result = Battler.new(options[:name]).text_without_preposition.split(' ').each_with_object(Hash.new(0)) do |word, counter| - counter[word] += 1 - end - counter = result.to_a.sort_by { |_word, count| count } - counter = counter.pop(options[:top_words]).reverse - counter.each do |word, count| - rows << ["#{word}", "#{count} раз"] - end - table = Terminal::Table.new rows: rows - puts table - else - puts "Рэпер #{options[:name]} мне не известен. Зато мне известны: " - puts Battler.battler_names_list.pop(3) - puts '...' - end + rows = [] + name_battler = [] + names = Battler.battler_names_list + names.each_index { |index| name_battler[index] = names[index].split.first } + if name_battler.include?(options[:name]) + result = Battler.new(options[:name]).text_without_preposition + result.split(' ').each_with_object(Hash.new(0)) do |word, counter| + counter[word] += 1 + end + counter = result.to_a.sort_by { |_word, count| count } + counter = counter.pop(options[:top_words]).reverse + counter.each do |word, count| + rows << [word.to_s, "#{count} раз"] + end + table = Terminal::Table.new rows: rows + puts table + else + puts "Рэпер #{options[:name]} мне не известен. Зато мне известны: " + puts Battler.battler_names_list.pop(3) + puts '...' + end end -# rubocop:enable Layout/Tab -# rubocop:enable Style/UnneededInterpolation -# rubocop:enable Metrics/LineLength -# rubocop:enable Style/SymbolProc -# rubocop:enable Layout/BlockAlignment diff --git a/2420/2/versus.rb b/2420/2/versus.rb index 17389dd0d..7d5a6f23e 100755 --- a/2420/2/versus.rb +++ b/2420/2/versus.rb @@ -1,12 +1,12 @@ -# rubocop:disable Layout/Tab # :reek:FeatureEnvy +#class Battler class Battler FOLDER_PATH = '/home/polia/summer-2018/2420/2/'.freeze attr_reader :name def initialize(name) - @name = name + @name = name end def self.battler_names_list @@ -27,7 +27,7 @@ def battles_count def all_battles_text text = '' find_battles.each do |file_name| - text << IO.read("#{FOLDER_PATH}#{file_name}") + text << IO.read("#{FOLDER_PATH}#{file_name}") end text.gsub!(/^\s+|\n|\r|\s+$|-|–/, ' ') end @@ -40,7 +40,7 @@ def bad_words_count bad_words = File.read("#{FOLDER_PATH}bad_words").split(' ') sum_bad_words = 0 bad_words.each_index do |index| - sum_bad_words += all_battles_text.gsub(bad_words[index]).count + sum_bad_words += all_battles_text.gsub(bad_words[index]).count end sum_bad_words end @@ -57,10 +57,8 @@ def text_without_preposition all_texts = all_battles_text.downcase! prepositions_list = File.read("#{FOLDER_PATH}prepositions").split(',') prepositions_list.each do |preposition| - all_texts.gsub!(/#{preposition}[аояиеёю ]/, '') - end + all_texts.gsub!(/#{preposition}[аояиеёю ]/, '') + end all_texts end end - -# rubocop:enable Layout/Tab From 4bd1a41121d7b4d869092ff704563cbee5b5880a Mon Sep 17 00:00:00 2001 From: Polina Date: Mon, 16 Jul 2018 21:25:47 +0300 Subject: [PATCH 03/12] Add some changes to the hometask_2, and add Readme --- 2420/2/Gemfile | 2 ++ 2420/2/options_file.rb | 12 +++++++----- 2420/2/versus.rb | 31 ++++++++++++++++++------------- 3 files changed, 27 insertions(+), 18 deletions(-) create mode 100644 2420/2/Gemfile diff --git a/2420/2/Gemfile b/2420/2/Gemfile new file mode 100644 index 000000000..f8b0bc25d --- /dev/null +++ b/2420/2/Gemfile @@ -0,0 +1,2 @@ +source 'http://rubygems.org' +gem 'commander' diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb index 1bdaa460a..f3a897b14 100644 --- a/2420/2/options_file.rb +++ b/2420/2/options_file.rb @@ -18,11 +18,13 @@ end.parse! if options[:top_bad_words] > 0 - battler = Battler.battler_names_list.map { |name| Battler.new(name) } - battler = battler.sort_by(&:bad_words_count) - battler = battler.pop(options[:top_bad_words]).reverse + battlers = Battler.battler_names_list + .map { |name| Battler.new(name) } + .sort_by(&:bad_words_count) + .pop(options[:top_bad_words]) + .reverse rows = [] - battler.map do |member| + battlers.map do |member| rows << [member.name.to_s, "#{member.battles_count} батлов", "#{member.bad_words_count} нецензурных слов ", @@ -37,7 +39,7 @@ rows = [] name_battler = [] names = Battler.battler_names_list - names.each_index { |index| name_battler[index] = names[index].split.first } + names.each_with_index { |name, index| name_battler[index] = name.split.first } if name_battler.include?(options[:name]) result = Battler.new(options[:name]).text_without_preposition result.split(' ').each_with_object(Hash.new(0)) do |word, counter| diff --git a/2420/2/versus.rb b/2420/2/versus.rb index 7d5a6f23e..214b365c7 100755 --- a/2420/2/versus.rb +++ b/2420/2/versus.rb @@ -1,8 +1,10 @@ # :reek:FeatureEnvy -#class Battler +# class Battler class Battler - FOLDER_PATH = '/home/polia/summer-2018/2420/2/'.freeze + Dir.chdir('/home/polia/2/2_WORK/') + FOLDER_PATH = Dir.pwd + VERSUS = /\bvs\b|\bVS\b|\bпротив\b/ attr_reader :name def initialize(name) @@ -11,23 +13,23 @@ def initialize(name) def self.battler_names_list files = Dir.entries(FOLDER_PATH).reject { |file_name| File.directory?(file_name) || file_name[0].include?('.') } - name_battler = files.map { |all_file_names| all_file_names.lstrip.split(/\bvs\b|\bVS\b|\bпротив\b/).first } - name_battler.uniq + name_battlers = files.map { |all_file_names| all_file_names.lstrip.split(VERSUS).first } + name_battlers.uniq end - def find_battles - Dir.chdir(FOLDER_PATH) - Dir.glob([" #{name}*", "#{name}*"]) + def all_battles + Dir.pwd + @all_battles ||= Dir.glob([" #{name}*", "#{name}*"]) end def battles_count - find_battles.count + @battles_count ||= all_battles.count end def all_battles_text text = '' - find_battles.each do |file_name| - text << IO.read("#{FOLDER_PATH}#{file_name}") + all_battles.each do |file_name| + text << IO.read("#{FOLDER_PATH}/#{file_name}") end text.gsub!(/^\s+|\n|\r|\s+$|-|–/, ' ') end @@ -36,8 +38,11 @@ def all_battles_words_count all_battles_text.split.count end + def bad_words + @bad_words ||= File.read("#{FOLDER_PATH}bad_words").split(' ') + end + def bad_words_count - bad_words = File.read("#{FOLDER_PATH}bad_words").split(' ') sum_bad_words = 0 bad_words.each_index do |index| sum_bad_words += all_battles_text.gsub(bad_words[index]).count @@ -46,11 +51,11 @@ def bad_words_count end def words_in_battle - all_battles_words_count / battles_count + @words_in_battle ||= all_battles_words_count / battles_count end def words_in_raund - all_battles_words_count / (battles_count * 3) + @words_in_raund ||= all_battles_words_count / (battles_count * 3) end def text_without_preposition From 882677716d90bc2da134bee19a68afd1698bee5e Mon Sep 17 00:00:00 2001 From: Polina Date: Wed, 18 Jul 2018 13:08:51 +0300 Subject: [PATCH 04/12] Fix mistakes, because programm didn't work --- 2420/2/README.md | 20 ++++++++++---------- 2420/2/bad_words | 2 +- 2420/2/options_file.rb | 11 ++++++----- 2420/2/versus.rb | 16 ++++++++-------- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/2420/2/README.md b/2420/2/README.md index 30bda2644..56b11e960 100644 --- a/2420/2/README.md +++ b/2420/2/README.md @@ -3,19 +3,19 @@ # Info Данной программой возможны несколько анализов текста: -* Исследуование всех файлов с текстами батлеров, находящийся в корневой папке. +* Исследование всех файлов с текстами батлеров, находящийся в корневой папке. * Исследование текста на наличие мата. -* Проссмотр топ батлеров, использовавших наиболее часто матные слова. +* Просмотр топ батлеров, использовавших наиболее часто матные слова. ### Использование программы. Step-by-step. 1. Открываем Terminal, и переходим в директорию, где находится данный продукт. 2. В зависимости от решаемой задачи есть пара типов команд: -`--top-bad-words [NUMBER]` - вывод топ самых матерящихся людей в заданном количесвстве; -`--top-words [NUMBER] --name [NAME]` - вывод наиболее часто употребляемых слов во всех! текстах определенного человека. +'--top-bad-words [NUMBER]' - вывод топ самых матерящихся людей в заданном количестве; +'--top-words [NUMBER] --name [NAME]' - вывод наиболее часто употребляемых слов во всех! текстах определенного человека. Пример вызова команды: -` youfolderpath$ ruby options_file.rb --top-bad-words` [NUMBER] - 3. Для информации пропишите `ruby options_file.rb --help` - - # Возможные изменения в программе: - * Если вам захочется изменить( добавить или уменьшить) количество текстов, то вам следует файле `versus.rb`, 5 строка, указать полный путь к папке, где находятся данные текста. ВАЖНО! В данной папке должны находиться только текста батлеров. - * Значение [NUMBER] и [NAME] - ваши желания, однако употребление [NAME] на транслите не учтено. Т.е. "Галахат" и "Galahat" - в данном случае будут разными батлерами. [NUMBER] в дефолтном состоянии выведет 30 строк. +' youfolderpath$ ruby options_file.rb --top-bad-words' [NUMBER] +3. Для информации пропишите 'ruby options_file.rb --help' + +# Возможные изменения в программе: +* Если вам захочется изменить( добавить или уменьшить) количество текстов, то вам следует файле 'versus.rb', 5 строка, указать полный путь к папке, где находятся данные текста. ВАЖНО! В данной папке должны находиться только текста батлеров. +* Значение [NUMBER] и [NAME] - ваши желания, однако употребление [NAME] на транслите не учтено. Т.е. "Галахат" и "Galahat" - в данном случае будут разными батлерами. [NUMBER] в дефолтном состоянии выведет 30 строк. diff --git a/2420/2/bad_words b/2420/2/bad_words index 8c55ac594..779486791 100644 --- a/2420/2/bad_words +++ b/2420/2/bad_words @@ -1 +1 @@ -6ля, 6лядь, 6лять, b3ъeб, cock, cunt, e6аль, ebal, eblan, eбал, eбать, eбуч, eбут, eблантий, fuck, fucker, fucking, xyев, xуй, xуя, xуе,xуй, xую, zaeb, zaebal, zaebali, zaebat, архипиздрит, ахуел, ахуеть, бздение, бздеть, бздех, бздецы, бздит, бздицы, бздло, бзднуть, бздун, бздунья, бздюха, бздюшка, бздюшко, бля, блябу, блябуду, блядь, бляди, блядина, блядище, блядки, блядовать, блядство, блядун, блядуны, бледунья, бледь, бледюга, блять, вафел, вафлёр, взъебка, взьебка, взьебывать, въеб, въебался, въебенн, въебусь, въебывать, выебать, выебал, выблядок, выблядыш, выеб, выебать,выебет, вы*бен, выебнулся, выебон, выебываться, выпердеть, высраться, выссаться, вьебен, гавно, гавнюк, гавнючка, гамно, гандон, гнид, гнида, гниды, говенка, говенный, говешка, говназия, говнецо, говнище, говно, говноед, говнолинк, говночист, говнюк, говнюха, говнядина, говняк, говняный, говнять, гондон, доебываться, долбоеб, долбоёб, долбоящер, дрисня, дрист, дристануть, дристать, дристун, дристуха, дрочелло, дрочена, дрочила, дрочилка, дрочистый, дрочить, дрочка, дрочун, е6ал, ебут, еб твою мать, ёб твою мать, ёбaн, ебaть, ебyч, ебал, ебало, ебальник, ебан, ебанамать, ебанат, ебаная, ёбаная, ебанический, ебанный, ебанныйврот, ебаное, ебануть, ебануться, ёбаную, ебаный, ебанько, ебарь, ебат, ёбат, ебатория, ебать, ебать-копать, ебаться, ебашить, ебёна, ебет, ебёт, ебец, ебик, ебин, ебись, ебическая, ебки, ебла, еблан, ебливый, еблище, ебло, еблыст, ебля, ёбн, ебнуть, ебнуться, ебня, ебошить, ебская, ебский, ебтвоюмать, ебун, ебут, ебуч, ебуче, ебучее, ебучий, ебучим, ебущ, ебырь, елда, елдак, елдачить, жопа, жопу, заговнять, задрачивать, задристать, задрота, зае6, заё6, заеб, заёб, заеба, заебал, заебанец, заебастая, заебастый, заебать, заебаться, заебашить, заебистое, заёбистое, заебистые, заёбистые, заебистый, заёбистый, заебись, заебошить, заебываться, залуп, залупа, залупу, залупаться, залупить, залупиться, замудохаться, запиздячить, засерать, засерун, засеря, засирать, засрун, захуячить, заябестая, злоеб, злоебучая, злоебучее, злоебучий, ибанамат, ибонех, изговнять, изговняться, изъебнуться, ипать, ипаться, ипаццо, Какдвапальцаобоссать, конча, курва, курвятник, лох, лошарa, лошара, лошары, лошок, лярва, малафья, манда, мандавошек, мандавошка, мандавошки, мандей, мандень, мандеть, мандища, мандой, манду, мандюк, минет, минетчик, минетчица, млять, мокрощелка, мокрощёлка, мразь, мудak, мудaк, мудаг, мудак, муде, мудель, мудеть, муди, мудил, мудила, мудистый, мудня, мудоеб, мудозвон, мудоклюй, на хер, на хуй, набздел, набздеть, наговнять, надристать, надрочить, наебать, наебет, наебнуть, наебнуться, наебывать, напиздел, напиздели, напиздело, напиздили, насрать, настопиздить, нахер, нахрен, нахуй, нахуйник, не ебет, не ебёт, невротебучий, невъебенно, нехира, нехрен, Нехуй, нехуйственно, ниибацо, ниипацца, ниипаццо, ниипет, никуя, нихера, нихуя, обдристаться, обосранец, обосрать, обосцать, обосцаться, обсирать, объебос, обьебать обьебос, однохуйственно, опездал, опизде, опизденивающе, остоебенить, остопиздеть, отмудохать, отпиздить, отпиздячить, отпороть, отъебись, охуевательский, охуевать, охуевающий, охуел, охуенно, охуеньчик, охуеть, охуительно, охуительный, охуяньчик, охуячивать, охуячить, очкун, падла, падонки, падонок, паскуда, педерас, педик, педрик, педрила, педрилло, педрило, педрилы, пездень, пездит, пездишь, пездо, пездят, пердануть, пердеж, пердение, пердеть, пердильник, перднуть, пёрднуть, пердун, пердунец, пердунина, пердунья, пердуха, пердь, переёбок, пернуть, пёрнуть, пи3д, пи3де, пи3ду, пиzдец, пидар, пидарaс, пидарас, пидарасы, пидары, пидор, пидорасы, пидорка, пидорок, пидоры, пидрас, пизда, пиздануть, пиздануться, пиздарваньчик, пиздато, пиздатое, пиздатый, пизденка, пизденыш, пиздёныш, пиздеть, пиздец, пиздит, пиздить, пиздиться, пиздишь, пиздища, пиздище, пиздобол, пиздоболы, пиздобратия, пиздоватая, пиздоватый, пиздолиз, пиздонутые, пиздорванец, пиздорванка, пиздострадатель, пизду, пиздуй, пиздун, пиздунья, пизды, пиздюга, пиздюк, пиздюлина, пиздюля, пиздят, пиздячить, педик, писбшки, писька, писькострадатель, писюн, писюшка, по хуй, по хую, подговнять, подонки, подонок, подъебнуть, подъебнуться, поебать, поебень, поёбываает, поскуда, посрать, потаскуха, потаскушка, похер, похерил, похерила, похерили, похеру, похрен, похрену, похуй, похуист, похуистка, похую, придурок, приебаться, припиздень, припизднутый, припиздюлина, пробзделся, проблядь, проеб, проебанка, проебать, промандеть, промудеть, пропизделся, пропиздеть, пропиздячить, раздолбай, разхуячить, разъ*б, разъ*ба, разебал, разъебай, разъебать, распиздай, распиздеться, распиздяй, распиздяйство, распроеть, сволота, сволочь, сговнять, секель, серун, серька, сестроеб, сикель, сила, сирать, сирывать, соси, сосать, спиздел, спиздеть, спиздил, спиздила, спиздили, спиздит, спиздить, срака, сраку, сраный, сранье, срать, срун, ссака, ссышь, стерва, страхопиздище, сука, суки, суходрочка, сучара, сучий, сучка, сучко, сучонок, сучье, сцание, сцать, сцука, сцуки, сцуконах, сцуль, сцыха, сцышь, съебаться, сыкун, трахае6, трахаеб, трахаёб, трахатель, ублюдок, уебать, уёбища, уебище, уёбище, уебищное, уёбищное, уебк, уебки, уёбки, уебок, уёбок, урюк, усраться, ушлепок, хyё, хyй, хyйня, хамло, хер, херня, хера, херовато, херовина, херовый, хитровыебанный, хитрожопый, хуeм, хуе, хуё, хуевато, хуёвенький, хуевина, хуево, хуевый, хуёвый, хуек, хуёк, хуел, хуем, хуенч, хуеныш, хуенький, хуеплет, хуеплёт, хуепромышленник, хуерик, хуерыло, хуесос, хуесоска, хуета, хуетень, хуею, хуи, хуй, хуйком, хуйло, хуйня, хуйрик, хуище, хуля, хую, хуюл, хуя, хуяк, хуякать, хуякнуть, хуяра, хуясе, хуячить, целка, чмо, чмошник, чмырь, шалава, шалавой, шараёбиться, шлюха, шлюхой, шлюшка, шлюхи, ябывает, *. +6ля, 6лядь, 6лять, b3ъeб, cock, cunt, e6аль, ebal, eblan, eбал, eбать, eбуч, eбут, eблантий, fuck, fucker, fucking, xyев, xуй, xуя, xуе,xуй, xую, zaeb, zaebal, zaebali, zaebat, архипиздрит, ахуел, ахуеть, бздение, бздеть, бздех, бздецы, бздит, бздицы, бздло, бзднуть, бздун, бздунья, бздюха, бздюшка, бздюшко, бля, блябу, блябуду, блядь, бляди, блядина, блядище, блядки, блядовать, блядство, блядун, блядуны, бледунья, бледь, бледюга, блять, вафел, вафлёр, взъебка, взьебка, взьебывать, въеб, въебался, въебенн, въебусь, въебывать, выебать, выебал, выблядок, выблядыш, выеб, выебать,выебет, вы*бен, выебнулся, выебон, выебываться, выпердеть, высраться, выссаться, вьебен, гавно, гавнюк, гавнючка, гамно, гандон, гнид, гнида, гниды, говенка, говенный, говешка, говназия, говнецо, говнище, говно, говноед, говнолинк, говночист, говнюк, говнюха, говнядина, говняк, говняный, говнять, гондон, доебываться, долбоеб, долбоёб, долбоящер, дрисня, дрист, дристануть, дристать, дристун, дристуха, дрочелло, дрочена, дрочила, дрочилка, дрочистый, дрочить, дрочка, дрочун, е6ал, ебут, еб твою мать, ёб твою мать, ёбaн, ебaть, ебyч, ебал, ебало, ебальник, ебан, ебанамать, ебанат, ебаная, ёбаная, ебанический, ебанный, ебанныйврот, ебаное, ебануть, ебануться, ёбаную, ебаный, ебанько, ебарь, ебат, ёбат, ебатория, ебать, ебать-копать, ебаться, ебашить, ебёна, ебет, ебёт, ебец, ебик, ебин, ебись, ебическая, ебки, ебла, еблан, ебливый, еблище, ебло, еблыст, ебля, ёбн, ебнуть, ебнуться, ебня, ебошить, ебская, ебский, ебтвоюмать, ебун, ебут, ебуч, ебуче, ебучее, ебучий, ебучим, ебущ, ебырь, елда, елдак, елдачить, жопа, жопу, заговнять, задрачивать, задристать, задрота, зае6, заё6, заеб, заёб, заеба, заебал, заебанец, заебастая, заебастый, заебать, заебаться, заебашить, заебистое, заёбистое, заебистые, заёбистые, заебистый, заёбистый, заебись, заебошить, заебываться, залуп, залупа, залупу, залупаться, залупить, залупиться, замудохаться, запиздячить, засерать, засерун, засеря, засирать, засрун, захуячить, заябестая, злоеб, злоебучая, злоебучее, злоебучий, ибанамат, ибонех, изговнять, изговняться, изъебнуться, ипать, ипаться, ипаццо, Какдвапальцаобоссать, конча, курва, курвятник, лох, лошарa, лошара, лошары, лошок, лярва, малафья, манда, мандавошек, мандавошка, мандавошки, мандей, мандень, мандеть, мандища, мандой, манду, мандюк, минет, минетчик, минетчица, млять, мокрощелка, мокрощёлка, мразь, мудak, мудaк, мудаг, мудак, муде, мудель, мудеть, муди, мудил, мудила, мудистый, мудня, мудоеб, мудозвон, мудоклюй, на хер, на хуй, набздел, набздеть, наговнять, надристать, надрочить, наебать, наебет, наебнуть, наебнуться, наебывать, напиздел, напиздели, напиздело, напиздили, насрать, настопиздить, нахер, нахрен, нахуй, нахуйник, не ебет, не ебёт, невротебучий, невъебенно, нехира, нехрен, Нехуй, нехуйственно, ниибацо, ниипацца, ниипаццо, ниипет, никуя, нихера, нихуя, обдристаться, обосранец, обосрать, обосцать, обосцаться, обсирать, объебос, обьебать обьебос, однохуйственно, опездал, опизде, опизденивающе, остоебенить, остопиздеть, отмудохать, отпиздить, отпиздячить, отпороть, отъебись, охуевательский, охуевать, охуевающий, охуел, охуенно, охуеньчик, охуеть, охуительно, охуительный, охуяньчик, охуячивать, охуячить, очкун, падла, падонки, падонок, паскуда, педерас, педик, педрик, педрила, педрилло, педрило, педрилы, пездень, пездит, пездишь, пездо, пездят, пердануть, пердеж, пердение, пердеть, пердильник, перднуть, пёрднуть, пердун, пердунец, пердунина, пердунья, пердуха, пердь, переёбок, пернуть, пёрнуть, пи3д, пи3де, пи3ду, пиzдец, пидар, пидарaс, пидарас, пидарасы, пидары, пидор, пидорасы, пидорка, пидорок, пидоры, пидрас, пизда, пиздануть, пиздануться, пиздарваньчик, пиздато, пиздатое, пиздатый, пизденка, пизденыш, пиздёныш, пиздеть, пиздец, пиздит, пиздить, пиздиться, пиздишь, пиздища, пиздище, пиздобол, пиздоболы, пиздобратия, пиздоватая, пиздоватый, пиздолиз, пиздонутые, пиздорванец, пиздорванка, пиздострадатель, пизду, пиздуй, пиздун, пиздунья, пизды, пиздюга, пиздюк, пиздюлина, пиздюля, пиздят, пиздячить, педик, писбшки, писька, писькострадатель, писюн, писюшка, по хуй, по хую, подговнять, подонки, подонок, подъебнуть, подъебнуться, поебать, поебень, поёбываает, поскуда, посрать, потаскуха, потаскушка, похер, похерил, похерила, похерили, похеру, похрен, похрену, похуй, похуист, похуистка, похую, придурок, приебаться, припиздень, припизднутый, припиздюлина, пробзделся, проблядь, проеб, проебанка, проебать, промандеть, промудеть, пропизделся, пропиздеть, пропиздячить, раздолбай, разхуячить, разъ*б, разъ*ба, разебал, разъебай, разъебать, распиздай, распиздеться, распиздяй, распиздяйство, распроеть, сволота, сволочь, сговнять, секель, серун, серька, сестроеб, сикель, сила, сирать, сирывать, соси, сосать, спиздел, спиздеть, спиздил, спиздила, спиздили, спиздит, спиздить, срака, сраку, сраный, сранье, срать, срун, ссака, ссышь, стерва, страхопиздище, сука, суки, суходрочка, сучара, сучий, сучка, сучко, сучонок, сучье, сцание, сцать, сцука, сцуки, сцуконах, сцуль, сцыха, сцышь, съебаться, сыкун, трахае6, трахаеб, трахаёб, трахатель, ублюдок, уебать, уёбища, уебище, уёбище, уебищное, уёбищное, уебк, уебки, уёбки, уебок, уёбок, урюк, усраться, ушлепок, хyё, хyй, хyйня, хамло, хер, херня, хера, херовато, херовина, херовый, хитровыебанный, хитрожопый, хуeм, хуе, хуё, хуевато, хуёвенький, хуевина, хуево, хуевый, хуёвый, хуек, хуёк, хуел, хуем, хуенч, хуеныш, хуенький, хуеплет, хуеплёт, хуепромышленник, хуерик, хуерыло, хуесос, хуесоска, хуета, хуетень, хуею, хуи, хуй, хуйком, хуйло, хуйня, хуйрик, хуище, хуля, хую, хуюл, хуя, хуяк, хуякать, хуякнуть, хуяра, хуясе, хуячить, целка, чмо, чмошник, чмырь, шалава, шалавой, шараёбиться, шлюха, шлюхой, шлюшка, шлюхи, ябывает, * diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb index f3a897b14..d344c85ca 100644 --- a/2420/2/options_file.rb +++ b/2420/2/options_file.rb @@ -26,8 +26,8 @@ rows = [] battlers.map do |member| rows << [member.name.to_s, - "#{member.battles_count} батлов", - "#{member.bad_words_count} нецензурных слов ", + " #{member.battles_count} батлов", + " #{member.bad_words_count} нецензурных слов ", " #{member.words_in_battle} слова на батл ", " #{member.words_in_raund} слова в раунде"] end @@ -39,10 +39,11 @@ rows = [] name_battler = [] names = Battler.battler_names_list - names.each_with_index { |name, index| name_battler[index] = name.split.first } + names.each { |name| name_battler << name.split.first } if name_battler.include?(options[:name]) - result = Battler.new(options[:name]).text_without_preposition - result.split(' ').each_with_object(Hash.new(0)) do |word, counter| + result = Battler.new(options[:name]) + .text_without_preposition.split(' ') + .each_with_object(Hash.new(0)) do |word, counter| counter[word] += 1 end counter = result.to_a.sort_by { |_word, count| count } diff --git a/2420/2/versus.rb b/2420/2/versus.rb index 214b365c7..ffb5575fa 100755 --- a/2420/2/versus.rb +++ b/2420/2/versus.rb @@ -2,7 +2,7 @@ # class Battler class Battler - Dir.chdir('/home/polia/2/2_WORK/') + Dir.chdir('/home/polia/summer-2018/2420/2/') FOLDER_PATH = Dir.pwd VERSUS = /\bvs\b|\bVS\b|\bпротив\b/ attr_reader :name @@ -12,13 +12,13 @@ def initialize(name) end def self.battler_names_list - files = Dir.entries(FOLDER_PATH).reject { |file_name| File.directory?(file_name) || file_name[0].include?('.') } + files = Dir.entries("#{FOLDER_PATH}/Texts/").reject { |file_name| File.directory?(file_name) } name_battlers = files.map { |all_file_names| all_file_names.lstrip.split(VERSUS).first } name_battlers.uniq end def all_battles - Dir.pwd + Dir.chdir("#{FOLDER_PATH}/Texts/") @all_battles ||= Dir.glob([" #{name}*", "#{name}*"]) end @@ -29,7 +29,7 @@ def battles_count def all_battles_text text = '' all_battles.each do |file_name| - text << IO.read("#{FOLDER_PATH}/#{file_name}") + text << IO.read("#{FOLDER_PATH}/Texts/#{file_name}") end text.gsub!(/^\s+|\n|\r|\s+$|-|–/, ' ') end @@ -39,13 +39,13 @@ def all_battles_words_count end def bad_words - @bad_words ||= File.read("#{FOLDER_PATH}bad_words").split(' ') + @bad_words ||= File.read("#{FOLDER_PATH}/bad_words").split(' ') end def bad_words_count sum_bad_words = 0 - bad_words.each_index do |index| - sum_bad_words += all_battles_text.gsub(bad_words[index]).count + bad_words.each do |bad_word| + sum_bad_words += all_battles_text.gsub(bad_word).count end sum_bad_words end @@ -60,7 +60,7 @@ def words_in_raund def text_without_preposition all_texts = all_battles_text.downcase! - prepositions_list = File.read("#{FOLDER_PATH}prepositions").split(',') + prepositions_list = File.read("#{FOLDER_PATH}/prepositions").split(',') prepositions_list.each do |preposition| all_texts.gsub!(/#{preposition}[аояиеёю ]/, '') end From 19347146dff3aa28cd9676d7ce0b6c2907438ad9 Mon Sep 17 00:00:00 2001 From: Polina Date: Wed, 18 Jul 2018 15:07:34 +0300 Subject: [PATCH 05/12] Create private mathod and freeze folder_path --- 2420/2/options_file.rb | 2 +- 2420/2/versus.rb | 39 ++++++++++++++++++++------------------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb index d344c85ca..cf735b75d 100644 --- a/2420/2/options_file.rb +++ b/2420/2/options_file.rb @@ -55,7 +55,7 @@ puts table else puts "Рэпер #{options[:name]} мне не известен. Зато мне известны: " - puts Battler.battler_names_list.pop(3) + puts names.pop(3) puts '...' end end diff --git a/2420/2/versus.rb b/2420/2/versus.rb index ffb5575fa..8270186da 100755 --- a/2420/2/versus.rb +++ b/2420/2/versus.rb @@ -2,8 +2,7 @@ # class Battler class Battler - Dir.chdir('/home/polia/summer-2018/2420/2/') - FOLDER_PATH = Dir.pwd + FOLDER_PATH = Dir.pwd.freeze VERSUS = /\bvs\b|\bVS\b|\bпротив\b/ attr_reader :name @@ -17,31 +16,14 @@ def self.battler_names_list name_battlers.uniq end - def all_battles - Dir.chdir("#{FOLDER_PATH}/Texts/") - @all_battles ||= Dir.glob([" #{name}*", "#{name}*"]) - end - def battles_count @battles_count ||= all_battles.count end - def all_battles_text - text = '' - all_battles.each do |file_name| - text << IO.read("#{FOLDER_PATH}/Texts/#{file_name}") - end - text.gsub!(/^\s+|\n|\r|\s+$|-|–/, ' ') - end - def all_battles_words_count all_battles_text.split.count end - def bad_words - @bad_words ||= File.read("#{FOLDER_PATH}/bad_words").split(' ') - end - def bad_words_count sum_bad_words = 0 bad_words.each do |bad_word| @@ -66,4 +48,23 @@ def text_without_preposition end all_texts end + + private + + def all_battles_text + text = '' + all_battles.each do |file_name| + text << IO.read("#{FOLDER_PATH}/Texts/#{file_name}") + end + text.gsub!(/^\s+|\n|\r|\s+$|-|–|,|\.|!|\?/, ' ') + end + + def bad_words + @bad_words ||= File.read("#{FOLDER_PATH}/bad_words").split(' ') + end + + def all_battles + Dir.chdir("#{FOLDER_PATH}/Texts/") + @all_battles ||= Dir.glob([" #{name}*", "#{name}*"]) + end end From 80228d0c826a49b18dbb88b445f1f1ab5a9cd1ca Mon Sep 17 00:00:00 2001 From: Polina Date: Thu, 19 Jul 2018 22:04:17 +0300 Subject: [PATCH 06/12] Add word endings --- 2420/2/options_file.rb | 23 ++++++++++++++++++++--- 2420/2/versus.rb | 2 +- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb index cf735b75d..4562f0277 100644 --- a/2420/2/options_file.rb +++ b/2420/2/options_file.rb @@ -24,12 +24,21 @@ .pop(options[:top_bad_words]) .reverse rows = [] - battlers.map do |member| + ending = '' + battlers.each do |member| + battles = member.battles_count + if battles < 2 + ending = '' + elsif battles > 1 && battles <= 4 + ending = 'a' + elsif battles >= 5 + ending = 'ов' + end rows << [member.name.to_s, - " #{member.battles_count} батлов", + " #{battles} батл" + ending, " #{member.bad_words_count} нецензурных слов ", " #{member.words_in_battle} слова на батл ", - " #{member.words_in_raund} слова в раунде"] + " #{member.words_in_raund} слов в раунде"] end table = Terminal::Table.new rows: rows puts table @@ -59,3 +68,11 @@ puts '...' end end + + +class TopBadWordsCounter + +end + +class BattlerMostUsableWordsCounter +end \ No newline at end of file diff --git a/2420/2/versus.rb b/2420/2/versus.rb index 8270186da..a64b8478f 100755 --- a/2420/2/versus.rb +++ b/2420/2/versus.rb @@ -60,7 +60,7 @@ def all_battles_text end def bad_words - @bad_words ||= File.read("#{FOLDER_PATH}/bad_words").split(' ') + @bad_words ||= File.read("#{FOLDER_PATH}/bad").split(',') end def all_battles From a84c6ecab01a175c8aec633342f257d0b1ecc3b6 Mon Sep 17 00:00:00 2001 From: Polina Date: Mon, 23 Jul 2018 10:50:24 +0300 Subject: [PATCH 07/12] Create new classes TopBadWords and BattlerMostUsableWords, new output --- 2420/2/.bundle/config | 2 + 2420/2/BattlerMostUsableWordsCounter.rb | 29 ++++++++ 2420/2/Gemfile | 1 + 2420/2/Gemfile.lock | 19 ++++++ 2420/2/TopBadWordsCounter.rb | 23 +++++++ 2420/2/options_file.rb | 91 +++++++++++-------------- 2420/2/row.rb | 35 ++++++++++ 2420/2/versus.rb | 25 +------ 8 files changed, 150 insertions(+), 75 deletions(-) create mode 100644 2420/2/.bundle/config create mode 100644 2420/2/BattlerMostUsableWordsCounter.rb create mode 100644 2420/2/Gemfile.lock create mode 100644 2420/2/TopBadWordsCounter.rb create mode 100644 2420/2/row.rb diff --git a/2420/2/.bundle/config b/2420/2/.bundle/config new file mode 100644 index 000000000..4d97827e4 --- /dev/null +++ b/2420/2/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_WITHOUT: "development:test" diff --git a/2420/2/BattlerMostUsableWordsCounter.rb b/2420/2/BattlerMostUsableWordsCounter.rb new file mode 100644 index 000000000..e61995b83 --- /dev/null +++ b/2420/2/BattlerMostUsableWordsCounter.rb @@ -0,0 +1,29 @@ +# class BattlerMostUsableWordsCounter +class BattlerMostUsableWordsCounter + FOLDER_PATH = Dir.pwd.freeze + attr_reader :text + + def initialize(text) + @text = text + end + + def run + result = text_without_preposition.split(' ') + .each_with_object(Hash.new(0)) do |word, counter| + counter[word] += 1 + end + counter = result.to_a.sort_by { |_word, count| count } + counter + end + + private + + def text_without_preposition + all_texts = text.downcase! + prepositions_list = File.read("#{FOLDER_PATH}/prepositions").split(',') + prepositions_list.each do |preposition| + all_texts.gsub!(/#{preposition}[аояиеёю ]/, '') + end + all_texts + end +end diff --git a/2420/2/Gemfile b/2420/2/Gemfile index f8b0bc25d..652bc504d 100644 --- a/2420/2/Gemfile +++ b/2420/2/Gemfile @@ -1,2 +1,3 @@ source 'http://rubygems.org' gem 'commander' +gem 'terminal-table' diff --git a/2420/2/Gemfile.lock b/2420/2/Gemfile.lock new file mode 100644 index 000000000..769b9abe6 --- /dev/null +++ b/2420/2/Gemfile.lock @@ -0,0 +1,19 @@ +GEM + remote: http://rubygems.org/ + specs: + commander (4.4.5) + highline (~> 1.7.2) + highline (1.7.10) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + unicode-display_width (1.4.0) + +PLATFORMS + ruby + +DEPENDENCIES + commander + terminal-table + +BUNDLED WITH + 1.16.2 diff --git a/2420/2/TopBadWordsCounter.rb b/2420/2/TopBadWordsCounter.rb new file mode 100644 index 000000000..1887c8f90 --- /dev/null +++ b/2420/2/TopBadWordsCounter.rb @@ -0,0 +1,23 @@ +# clas BadWordsCounter +class BadWordsCounter + FOLDER_PATH = Dir.pwd.freeze + attr_reader :text + + def initialize(text) + @text = text + end + + def run + sum_bad_words = 0 + load_bad_words.each do |bad_word| + sum_bad_words += text.gsub(bad_word).count + end + sum_bad_words + end + + private + + def load_bad_words + @load_bad_words ||= File.read("#{FOLDER_PATH}/bad_words").split(',') + end +end diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb index 4562f0277..b6a0e644a 100644 --- a/2420/2/options_file.rb +++ b/2420/2/options_file.rb @@ -1,6 +1,10 @@ require 'optparse' require './versus.rb' require 'terminal-table' +require './TopBadWordsCounter.rb' +require './BattlerMostUsableWordsCounter.rb' +require './row.rb' +require 'pry-rails' options = { name: '', top_bad_words: 0, top_words: 30 } OptionParser.new do |opts| @@ -12,67 +16,52 @@ opts.on('--name [NAME]', String, 'Имя участника') do |name| options[:name] = name end - opts.on('--top-words [NUMBER]', Integer, 'Любимые слова человека') do |number| + opts.on('--top-words [NUMBER]', Integer, 'Наиболее часто употребляемые слова') do |number| options[:top_words] = number || 30 end end.parse! if options[:top_bad_words] > 0 - battlers = Battler.battler_names_list - .map { |name| Battler.new(name) } - .sort_by(&:bad_words_count) - .pop(options[:top_bad_words]) - .reverse + all_information_about_battlers = Battler.battler_names_list.map do |name| + battler = Battler.new(name) + battles_count = battler.battles_count + words_in_battle = battler.words_in_battle + words_in_raund = battler.words_in_raund + count = BadWordsCounter.new(battler.all_battles_text).run + { name: name, + bad_words_count: count, + battles_count: battles_count, + words_in_raund: words_in_raund, + words_in_battle: words_in_battle } + end + all_information_about_battlers = all_information_about_battlers.sort_by { |key| key[:bad_words_count] }.reverse rows = [] - ending = '' - battlers.each do |member| - battles = member.battles_count - if battles < 2 - ending = '' - elsif battles > 1 && battles <= 4 - ending = 'a' - elsif battles >= 5 - ending = 'ов' - end - rows << [member.name.to_s, - " #{battles} батл" + ending, - " #{member.bad_words_count} нецензурных слов ", - " #{member.words_in_battle} слова на батл ", - " #{member.words_in_raund} слов в раунде"] + all_information_about_battlers.first(options[:top_bad_words]).each do |name| + rows << Row.new(name[:name], + name[:battles_count], + name[:bad_words_count], + name[:words_in_battle], + name[:words_in_raund]).run end table = Terminal::Table.new rows: rows puts table end -unless options[:name].empty? - rows = [] - name_battler = [] - names = Battler.battler_names_list - names.each { |name| name_battler << name.split.first } - if name_battler.include?(options[:name]) - result = Battler.new(options[:name]) - .text_without_preposition.split(' ') - .each_with_object(Hash.new(0)) do |word, counter| - counter[word] += 1 - end - counter = result.to_a.sort_by { |_word, count| count } - counter = counter.pop(options[:top_words]).reverse - counter.each do |word, count| - rows << [word.to_s, "#{count} раз"] - end - table = Terminal::Table.new rows: rows - puts table - else - puts "Рэпер #{options[:name]} мне не известен. Зато мне известны: " - puts names.pop(3) - puts '...' +return if options[:name].empty? +rows = [] +name_battler = [] +names = Battler.battler_names_list +names.each { |name| name_battler << name.split.first } +if name_battler.include?(options[:name]) + count_words = BattlerMostUsableWordsCounter.new(Battler.new(options[:name]).all_battles_text).run + count_words = count_words.pop(options[:top_words]).reverse + count_words.each do |word, count| + rows << [word.to_s, "#{count} раз"] end + table = Terminal::Table.new rows: rows + puts table +else + puts "Рэпер #{options[:name]} мне не известен. Зато мне известны: " + puts names.pop(3) + puts '...' end - - -class TopBadWordsCounter - -end - -class BattlerMostUsableWordsCounter -end \ No newline at end of file diff --git a/2420/2/row.rb b/2420/2/row.rb new file mode 100644 index 000000000..90e2ebd34 --- /dev/null +++ b/2420/2/row.rb @@ -0,0 +1,35 @@ +# :reek:TooManyInstanceVariables + +# class Row +class Row + attr_reader :name, :battles_count, :bad_words_count, :words_in_battle, :words_in_raund + + def initialize(name, battles_count, bad_words_count, words_in_battle, words_in_raund) + @name = name + @battles_count = battles_count + @bad_words_count = bad_words_count + @words_in_battle = words_in_battle + @words_in_raund = words_in_raund + end + + def run + rows = [name.to_s, + " #{battles_count} батл" + correct_ending, + " #{bad_words_count} нецензурных слов ", + " #{words_in_battle} слова на батл ", + " #{words_in_raund} слов в раунде"] + rows + end + + private + + def correct_ending + if battles_count < 2 + '' + elsif battles_count > 1 && battles_count <= 4 + 'a' + elsif battles_count >= 5 + 'ов' + end + end +end diff --git a/2420/2/versus.rb b/2420/2/versus.rb index a64b8478f..770fb7773 100755 --- a/2420/2/versus.rb +++ b/2420/2/versus.rb @@ -24,14 +24,6 @@ def all_battles_words_count all_battles_text.split.count end - def bad_words_count - sum_bad_words = 0 - bad_words.each do |bad_word| - sum_bad_words += all_battles_text.gsub(bad_word).count - end - sum_bad_words - end - def words_in_battle @words_in_battle ||= all_battles_words_count / battles_count end @@ -40,27 +32,12 @@ def words_in_raund @words_in_raund ||= all_battles_words_count / (battles_count * 3) end - def text_without_preposition - all_texts = all_battles_text.downcase! - prepositions_list = File.read("#{FOLDER_PATH}/prepositions").split(',') - prepositions_list.each do |preposition| - all_texts.gsub!(/#{preposition}[аояиеёю ]/, '') - end - all_texts - end - - private - def all_battles_text text = '' all_battles.each do |file_name| text << IO.read("#{FOLDER_PATH}/Texts/#{file_name}") end - text.gsub!(/^\s+|\n|\r|\s+$|-|–|,|\.|!|\?/, ' ') - end - - def bad_words - @bad_words ||= File.read("#{FOLDER_PATH}/bad").split(',') + text.gsub!(/^\s+|\n|\r|\s+$|-|–|,|\.|!|\?|"|:|;|\)|\(/, '') # \* end def all_battles From dd2f8a7862204b9cf98adeb553842af4e76e9038 Mon Sep 17 00:00:00 2001 From: Polina Date: Mon, 23 Jul 2018 11:22:15 +0300 Subject: [PATCH 08/12] delete files bundle and gemfile.lock --- 2420/2/Gemfile.lock | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 2420/2/Gemfile.lock diff --git a/2420/2/Gemfile.lock b/2420/2/Gemfile.lock deleted file mode 100644 index 769b9abe6..000000000 --- a/2420/2/Gemfile.lock +++ /dev/null @@ -1,19 +0,0 @@ -GEM - remote: http://rubygems.org/ - specs: - commander (4.4.5) - highline (~> 1.7.2) - highline (1.7.10) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - unicode-display_width (1.4.0) - -PLATFORMS - ruby - -DEPENDENCIES - commander - terminal-table - -BUNDLED WITH - 1.16.2 From 350b3ce110b6f16efc218214d0eee10072df5a30 Mon Sep 17 00:00:00 2001 From: Polina Date: Mon, 23 Jul 2018 11:26:30 +0300 Subject: [PATCH 09/12] delete on require pry-rails and change boundler file --- 2420/2/.bundle/config | 2 -- 2420/2/options_file.rb | 1 - 2 files changed, 3 deletions(-) delete mode 100644 2420/2/.bundle/config diff --git a/2420/2/.bundle/config b/2420/2/.bundle/config deleted file mode 100644 index 4d97827e4..000000000 --- a/2420/2/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ ---- -BUNDLE_WITHOUT: "development:test" diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb index b6a0e644a..eb516705c 100644 --- a/2420/2/options_file.rb +++ b/2420/2/options_file.rb @@ -4,7 +4,6 @@ require './TopBadWordsCounter.rb' require './BattlerMostUsableWordsCounter.rb' require './row.rb' -require 'pry-rails' options = { name: '', top_bad_words: 0, top_words: 30 } OptionParser.new do |opts| From 5f52c5d963434cf5303b703a1db19465d8761a53 Mon Sep 17 00:00:00 2001 From: Polina Date: Thu, 26 Jul 2018 13:51:45 +0300 Subject: [PATCH 10/12] Add class ouput for bad_words --- 2420/2/BattlerMostUsableWordsCounter.rb | 5 +-- 2420/2/TopBadWordsCounter.rb | 6 +--- 2420/2/options_file.rb | 47 ++++++++++--------------- 2420/2/outputtopbadwords.rb | 21 +++++++++++ 2420/2/versus.rb | 10 +++--- 5 files changed, 47 insertions(+), 42 deletions(-) create mode 100644 2420/2/outputtopbadwords.rb diff --git a/2420/2/BattlerMostUsableWordsCounter.rb b/2420/2/BattlerMostUsableWordsCounter.rb index e61995b83..4ac8b0001 100644 --- a/2420/2/BattlerMostUsableWordsCounter.rb +++ b/2420/2/BattlerMostUsableWordsCounter.rb @@ -21,9 +21,6 @@ def run def text_without_preposition all_texts = text.downcase! prepositions_list = File.read("#{FOLDER_PATH}/prepositions").split(',') - prepositions_list.each do |preposition| - all_texts.gsub!(/#{preposition}[аояиеёю ]/, '') - end - all_texts + prepositions_list.inject(all_texts) { |texts, preposition| texts.gsub(/#{preposition}[аояиеёю ]/, '') } end end diff --git a/2420/2/TopBadWordsCounter.rb b/2420/2/TopBadWordsCounter.rb index 1887c8f90..f7bd613c7 100644 --- a/2420/2/TopBadWordsCounter.rb +++ b/2420/2/TopBadWordsCounter.rb @@ -8,11 +8,7 @@ def initialize(text) end def run - sum_bad_words = 0 - load_bad_words.each do |bad_word| - sum_bad_words += text.gsub(bad_word).count - end - sum_bad_words + load_bad_words.inject(0) { |counter, bad_word| counter + text.gsub(bad_word).count } end private diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb index eb516705c..877c51f67 100644 --- a/2420/2/options_file.rb +++ b/2420/2/options_file.rb @@ -4,6 +4,7 @@ require './TopBadWordsCounter.rb' require './BattlerMostUsableWordsCounter.rb' require './row.rb' +require './outputtopbadwords.rb' options = { name: '', top_bad_words: 0, top_words: 30 } OptionParser.new do |opts| @@ -20,47 +21,35 @@ end end.parse! +BATTLERS_NAMES_LIST = Battler.battler_names_list.freeze + if options[:top_bad_words] > 0 - all_information_about_battlers = Battler.battler_names_list.map do |name| - battler = Battler.new(name) - battles_count = battler.battles_count - words_in_battle = battler.words_in_battle - words_in_raund = battler.words_in_raund - count = BadWordsCounter.new(battler.all_battles_text).run - { name: name, - bad_words_count: count, - battles_count: battles_count, - words_in_raund: words_in_raund, - words_in_battle: words_in_battle } - end - all_information_about_battlers = all_information_about_battlers.sort_by { |key| key[:bad_words_count] }.reverse - rows = [] - all_information_about_battlers.first(options[:top_bad_words]).each do |name| - rows << Row.new(name[:name], - name[:battles_count], - name[:bad_words_count], - name[:words_in_battle], - name[:words_in_raund]).run + all_information_about_battlers = OutputTopBadWords.out + rows = all_information_about_battlers.first(options[:top_bad_words]).inject([]) do |row, name| + row << Row.new(name[:name], + name[:battles_count], + name[:bad_words_count], + name[:words_in_battle], + name[:words_in_raund]).run end table = Terminal::Table.new rows: rows puts table end return if options[:name].empty? -rows = [] name_battler = [] -names = Battler.battler_names_list -names.each { |name| name_battler << name.split.first } +battler = Battler.new(options[:name]) +BATTLERS_NAMES_LIST.each { |name| name_battler << name.split.first } if name_battler.include?(options[:name]) - count_words = BattlerMostUsableWordsCounter.new(Battler.new(options[:name]).all_battles_text).run - count_words = count_words.pop(options[:top_words]).reverse - count_words.each do |word, count| - rows << [word.to_s, "#{count} раз"] - end + count_words = BattlerMostUsableWordsCounter.new(battler.all_battles_text) + .run + .pop(options[:top_words]) + .reverse + rows = count_words.inject([]) { |row, (word, count)| row << [word.to_s, "#{count} раз"] } table = Terminal::Table.new rows: rows puts table else puts "Рэпер #{options[:name]} мне не известен. Зато мне известны: " - puts names.pop(3) + puts BATTLERS_NAMES_LIST.pop(3) puts '...' end diff --git a/2420/2/outputtopbadwords.rb b/2420/2/outputtopbadwords.rb new file mode 100644 index 000000000..fae05537d --- /dev/null +++ b/2420/2/outputtopbadwords.rb @@ -0,0 +1,21 @@ +# rubocop:disable Style/MultilineBlockChain +# rubocop:disable Metrics/MethodLength +# :reek:TooManyStatements +class OutputTopBadWords + def self.out + BATTLERS_NAMES_LIST.map do |name| + battler = Battler.new(name) + battles_count = battler.battles_count + words_in_battle = battler.words_in_battle + words_in_raund = battler.words_in_raund + count = BadWordsCounter.new(battler.all_battles_text).run + { name: name, + bad_words_count: count, + battles_count: battles_count, + words_in_raund: words_in_raund, + words_in_battle: words_in_battle } + end.sort_by { |key| key[:bad_words_count] }.reverse + end +end +# rubocop:enable Style/MultilineBlockChain +# rubocop:enable Metrics/MethodLength diff --git a/2420/2/versus.rb b/2420/2/versus.rb index 770fb7773..556162209 100755 --- a/2420/2/versus.rb +++ b/2420/2/versus.rb @@ -20,10 +20,6 @@ def battles_count @battles_count ||= all_battles.count end - def all_battles_words_count - all_battles_text.split.count - end - def words_in_battle @words_in_battle ||= all_battles_words_count / battles_count end @@ -44,4 +40,10 @@ def all_battles Dir.chdir("#{FOLDER_PATH}/Texts/") @all_battles ||= Dir.glob([" #{name}*", "#{name}*"]) end + + private + + def all_battles_words_count + all_battles_text.split.count + end end From 00be6b0826936cabde5b4573e0bdeb3936a17084 Mon Sep 17 00:00:00 2001 From: Polina Date: Thu, 26 Jul 2018 13:56:50 +0300 Subject: [PATCH 11/12] add some fix in BattlerMostUsableWordsCounter --- 2420/2/BattlerMostUsableWordsCounter.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/2420/2/BattlerMostUsableWordsCounter.rb b/2420/2/BattlerMostUsableWordsCounter.rb index 4ac8b0001..b206961c4 100644 --- a/2420/2/BattlerMostUsableWordsCounter.rb +++ b/2420/2/BattlerMostUsableWordsCounter.rb @@ -1,3 +1,4 @@ +# rubocop:disable Style/MultilineBlockChain # class BattlerMostUsableWordsCounter class BattlerMostUsableWordsCounter FOLDER_PATH = Dir.pwd.freeze @@ -8,11 +9,10 @@ def initialize(text) end def run - result = text_without_preposition.split(' ') - .each_with_object(Hash.new(0)) do |word, counter| + text_without_preposition.split(' ') + .each_with_object(Hash.new(0)) do |word, counter| counter[word] += 1 - end - counter = result.to_a.sort_by { |_word, count| count } + end.to_a.sort_by { |_word, count| count } counter end @@ -24,3 +24,4 @@ def text_without_preposition prepositions_list.inject(all_texts) { |texts, preposition| texts.gsub(/#{preposition}[аояиеёю ]/, '') } end end +# rubocop:enable Style/MultilineBlockChain From 4201ad0ba79736993b1e364544f8dd26dc05cbe0 Mon Sep 17 00:00:00 2001 From: Polina Date: Thu, 26 Jul 2018 15:14:48 +0300 Subject: [PATCH 12/12] delete output class and create all_information_about_battler method in versus --- 2420/2/BattlerMostUsableWordsCounter.rb | 1 - 2420/2/options_file.rb | 8 ++++-- 2420/2/outputtopbadwords.rb | 21 --------------- 2420/2/versus.rb | 36 +++++++++++++++---------- 4 files changed, 28 insertions(+), 38 deletions(-) delete mode 100644 2420/2/outputtopbadwords.rb diff --git a/2420/2/BattlerMostUsableWordsCounter.rb b/2420/2/BattlerMostUsableWordsCounter.rb index b206961c4..fc59951be 100644 --- a/2420/2/BattlerMostUsableWordsCounter.rb +++ b/2420/2/BattlerMostUsableWordsCounter.rb @@ -13,7 +13,6 @@ def run .each_with_object(Hash.new(0)) do |word, counter| counter[word] += 1 end.to_a.sort_by { |_word, count| count } - counter end private diff --git a/2420/2/options_file.rb b/2420/2/options_file.rb index 877c51f67..97d178291 100644 --- a/2420/2/options_file.rb +++ b/2420/2/options_file.rb @@ -4,7 +4,8 @@ require './TopBadWordsCounter.rb' require './BattlerMostUsableWordsCounter.rb' require './row.rb' -require './outputtopbadwords.rb' + +# rubocop:disable Style/MultilineBlockChain options = { name: '', top_bad_words: 0, top_words: 30 } OptionParser.new do |opts| @@ -24,7 +25,9 @@ BATTLERS_NAMES_LIST = Battler.battler_names_list.freeze if options[:top_bad_words] > 0 - all_information_about_battlers = OutputTopBadWords.out + all_information_about_battlers = BATTLERS_NAMES_LIST.map do |name| + Battler.new(name).all_information_about_battler + end.sort_by { |key| key[:bad_words_count] }.reverse rows = all_information_about_battlers.first(options[:top_bad_words]).inject([]) do |row, name| row << Row.new(name[:name], name[:battles_count], @@ -53,3 +56,4 @@ puts BATTLERS_NAMES_LIST.pop(3) puts '...' end +# rubocop:enable Style/MultilineBlockChain diff --git a/2420/2/outputtopbadwords.rb b/2420/2/outputtopbadwords.rb deleted file mode 100644 index fae05537d..000000000 --- a/2420/2/outputtopbadwords.rb +++ /dev/null @@ -1,21 +0,0 @@ -# rubocop:disable Style/MultilineBlockChain -# rubocop:disable Metrics/MethodLength -# :reek:TooManyStatements -class OutputTopBadWords - def self.out - BATTLERS_NAMES_LIST.map do |name| - battler = Battler.new(name) - battles_count = battler.battles_count - words_in_battle = battler.words_in_battle - words_in_raund = battler.words_in_raund - count = BadWordsCounter.new(battler.all_battles_text).run - { name: name, - bad_words_count: count, - battles_count: battles_count, - words_in_raund: words_in_raund, - words_in_battle: words_in_battle } - end.sort_by { |key| key[:bad_words_count] }.reverse - end -end -# rubocop:enable Style/MultilineBlockChain -# rubocop:enable Metrics/MethodLength diff --git a/2420/2/versus.rb b/2420/2/versus.rb index 556162209..65edca84c 100755 --- a/2420/2/versus.rb +++ b/2420/2/versus.rb @@ -1,5 +1,4 @@ # :reek:FeatureEnvy - # class Battler class Battler FOLDER_PATH = Dir.pwd.freeze @@ -16,18 +15,6 @@ def self.battler_names_list name_battlers.uniq end - def battles_count - @battles_count ||= all_battles.count - end - - def words_in_battle - @words_in_battle ||= all_battles_words_count / battles_count - end - - def words_in_raund - @words_in_raund ||= all_battles_words_count / (battles_count * 3) - end - def all_battles_text text = '' all_battles.each do |file_name| @@ -36,12 +23,33 @@ def all_battles_text text.gsub!(/^\s+|\n|\r|\s+$|-|–|,|\.|!|\?|"|:|;|\)|\(/, '') # \* end + def all_information_about_battler + count = BadWordsCounter.new(all_battles_text).run + { name: name, + bad_words_count: count, + battles_count: battles_count, + words_in_raund: words_in_raund, + words_in_battle: words_in_battle } + end + + private + def all_battles Dir.chdir("#{FOLDER_PATH}/Texts/") @all_battles ||= Dir.glob([" #{name}*", "#{name}*"]) end - private + def battles_count + @battles_count ||= all_battles.count + end + + def words_in_battle + @words_in_battle ||= all_battles_words_count / battles_count + end + + def words_in_raund + @words_in_raund ||= all_battles_words_count / (battles_count * 3) + end def all_battles_words_count all_battles_text.split.count