# frozen_string_literal: true
require 'pry'
require 'awesome_print'
module TuentiChallenge9
INPUT_1 ||= 'sample_input'
INPUT_2 ||= 'test_input'
INPUT_3 ||= 'submit_input'
class << self
def exercise
File.foreach(INPUT_2).with_index do |line, line_number|
next if line_number == 0
case_number = line.to_i
@to_check = 1
@found = false
until @found
aux = @to_check.to_s
check_in = aux.dup
(0..aux.size).each_with_index do |c, index|
check_in[index] = '1' if check_in[index] == '0'
break if check_if_solution(check_in, case_number, line_number)
end
@to_check *= 10
end
end
end
def check_if_solution(number, case_number, line_number)
next_binary = number.to_i
if next_binary % case_number == 0
# It is multiple of case_number
puts "Case ##{line_number}: #{count_ones_zeroes(next_binary)}"
@found = true
end
end
def count_ones_zeroes(number)
ones = number.to_s.split('').count('1')
zeroes = number.to_s.split('').count('0')
"#{ones} #{zeroes}"
end
end
end
TuentiChallenge9.exercise
# frozen_string_literal: true
require 'pry'
require 'awesome_print'
require 'net-telnet'
module TuentiChallenge5
WORDS ||= 'words'
class << self
def words
@words ||= File.open(WORDS).read.split("\n")
end
def connection
@connection ||= Net::Telnet::new("Host" => "52.49.91.111",
"Port" => '9988',
"Telnetmode" => false,
"Prompt" => /[$%#>] \z/n,
"Output_log" => "output_log",
"Timeout" => 2)
end
def exercise
@already_checked = []
@next_letter = 'enter'
while true
raw_response = connection.cmd(@next_letter) { |c| print c }
puts raw_response
response = raw_response.split("\n")
status = clean_response(response[response.size - 3])
filtered_words(status.size, status)
most_common_letters
puts "Choose next letter: \n>"
# @next_letter = $stdin.gets.chomp
@next_letter = most_common_letters.first.first
@already_checked << @next_letter
end
rescue Exception => e
binding.pry
exercise
end
def clean_response(response)
response.tr(' ', '')
end
def filtered_words(length, status)
@filtered_words = words.select { |w| w.length == length }
return @filtered_words unless status
not_to_check = if @already_checked.empty?
'.'
else
"[^#{@already_checked.join}]"
end
puts status
regex = status.gsub('_', not_to_check)
@filtered_words.select! do |f|
/#{regex}/.match(f) != nil
end
end
# Array con las letras que mas se repiten
def most_common_letters
res = {}
@filtered_words.each do |w|
w.split('').each do |letter|
(res[letter] = res[letter].to_i + 1) unless @already_checked.include? letter
end
end
res.sort_by { |_letter, quantity| -quantity }
end
end
end
TuentiChallenge5.exercise
# frozen_string_literal: true
module TuentiChallenge4
INPUT_1 ||= 'sample_input'
INPUT_2 ||= 'test_input'
INPUT_3 ||= 'submit_input'
def self.exercise
File.foreach(INPUT_3).with_index do |line, line_number|
next if line_number == 0
regex = '(?=((^|[^\w])D-LD-L(-[^K]\w*|\n)))|(?=((^|[^\w])D-RD-R(-[^P]\w*|\n)))|(?=((^|[^\w])R-D-RD(-[^P]\w*|\n)))'
puts "Case ##{line_number}: #{line.scan(/#{regex}/).size}"
end
end
end
TuentiChallenge4.exercise
# frozen_string_literal: true
require 'yaml'
module TuentiChallenge3
INPUT_1 ||= 'sample_input'
INPUT_2 ||= 'test_input'
INPUT_3 ||= 'submit_input'
S_STATE = 'start'
E_STATE = 'end'
def self.initialize_scenario
@code ||= input_yaml['code']
@tapes ||= input_yaml['tapes']
@state = S_STATE
@result = []
@pointer = 0
@tape_n = 0
end
def self.input_yaml
@input_yaml ||= YAML.load(File.open(INPUT_3))
end
def self.exercise
initialize_scenario
@tapes.each do |_tape, input|
@state = S_STATE
@result = input.split('')
@pointer = 0
do_break = false
@tape_n = _tape
while true do
char = @result[@pointer] ? @result[@pointer] : " "
@code[@state][char].each do |action|
if send(action[0].to_sym, action[1])
do_break = true
break
end
end
break if do_break
end
end
rescue Exception => e
binding.pry
end
def self.move(direction)
if direction == 'right'
@pointer += 1
else
@pointer += @pointer > 0 ? -1 : 0
end
false
end
def self.state(destiny)
if destiny == E_STATE
puts "Tape ##{@tape_n}: #{@result.join('').tr(' ', '')}"
true
else
@state = destiny
false
end
end
def self.write(value)
@result[@pointer] = value
false
end
end
TuentiChallenge3.exercise
# frozen_string_literal: true
require 'yaml'
module TuentiChallenge3
INPUT_1 ||= 'sample_input'
INPUT_2 ||= 'test_input'
INPUT_3 ||= 'submit_input'
S_STATE = 'start'
E_STATE = 'end'
def self.initialize_scenario
@code ||= input_yaml['code']
@tapes ||= input_yaml['tapes']
@state = S_STATE
@result = []
@pointer = 0
@tape_n = 0
end
def self.input_yaml
@input_yaml ||= YAML.load(File.open(INPUT_3))
end
def self.exercise
initialize_scenario
@tapes.each do |_tape, input|
@state = S_STATE
@result = input.split('')
@pointer = 0
do_break = false
@tape_n = _tape
while true do
char = @result[@pointer] ? @result[@pointer] : " "
@code[@state][char].each do |action|
if send(action[0].to_sym, action[1])
do_break = true
break
end
end
break if do_break
end
end
rescue Exception => e
binding.pry
end
def self.move(direction)
if direction == 'right'
@pointer += 1
else
@pointer += @pointer > 0 ? -1 : 0
end
false
end
def self.state(destiny)
if destiny == E_STATE
puts "Tape ##{@tape_n}: #{@result.join('').tr(' ', '')}"
true
else
@state = destiny
false
end
end
def self.write(value)
@result[@pointer] = value
false
end
end
TuentiChallenge3.exercise
# frozen_string_literal: true
require 'pry'
require 'benchmark'
module TuentiChallenge2
INPUT_1 ||= 'sample_input'
INPUT_2 ||= 'test_input'
INPUT_3 ||= 'submit_input'
CORPUS_1 ||= 'corpus'
CORPUS_2 ||= 'base_corpus'
def self.read_corpus
file = File.open(CORPUS_1, 'rb')
content = file.read
content.split(' ')
end
def self.exercise
words = read_corpus
File.foreach(INPUT_3).with_index do |line, line_number|
next if line_number == 0
variables = line.split(' ')
starts = variables[0].to_i - 1
ends = variables[1].to_i - 1
result = count_words(words[starts..ends])
print_result(result, line_number)
end
end
def self.count_words(words)
result = {}
words.each do |w|
result[w] = result[w].to_i + 1
end
result.sort_by { |word, count| -count }.first 3
end
def self.print_result(results, line)
puts "Case ##{line}: #{results[0][0]} #{results[0][1]},#{results[1][0]} #{results[1][1]},#{results[2][0]} #{results[2][1]}"
end
end
# puts Benchmark.measure { TuentiChallenge2.exercise }
TuentiChallenge2.exercise
def tables_necessary(diners)
if diners <= 4 && diners > 0
return 1
elsif diners <= 0
return 0
end
((diners / 2.to_f) - 1).ceil
end
File.foreach('submitInput').with_index do |line, line_number|
next if line_number == 0
puts "Case ##{line_number}: #{tables_necessary(line.to_i)}"
end