Skip to content

Instantly share code, notes, and snippets.

@makicamel
Created May 25, 2024 23:52
Show Gist options
  • Save makicamel/9df687242a855594aa4fa9963c0af2f2 to your computer and use it in GitHub Desktop.
Save makicamel/9df687242a855594aa4fa9963c0af2f2 to your computer and use it in GitHub Desktop.
# Solver for https://ruby-quiz-2024.storesinc.tech/
require 'tempfile'
def solve(number, quiz_src, expected_error)
threads = []
answers = {}
Tempfile.create("temperror_#{number}") do |error_file|
quiz_src.size.times do |i|
threads << Thread.start do
Tempfile.create("#{error_file.path}_#{i}.rb") do |modified_quiz_file|
modified_quiz_file.write "#{quiz_src[..-(i+1)]}#{quiz_src[(quiz_src.size-i+1)..]}"
modified_quiz_file.flush
success = system("ruby #{modified_quiz_file.path} 2>#{error_file.path}")
if !success && File.read(error_file).include?(expected_error)
p 'resolved!' + '-' * 100
puts(answers[i] = File.read(modified_quiz_file))
File.write("#{number}_answer.rb", answers.values.join("\n"))
p 'resolved!' + '-' * 100
end
end
(["\n"]+(' '..'~').to_a).each do |char|
Tempfile.create("#{error_file.path}_#{i}#{char}.rb") do |modified_quiz_file|
modified_quiz_file.write "#{quiz_src[..i]}#{char}#{quiz_src[i+1..]}"
modified_quiz_file.flush
success = system("ruby #{modified_quiz_file.path} 2>#{error_file.path}")
if !success && File.read(error_file).include?(expected_error)
p 'resolved!' + '-' * 100
puts(answers["#{i}#{char}"] = File.read(modified_quiz_file))
File.write("#{number}_answer.rb", answers.values.join("\n"))
p 'resolved!' + '-' * 100
end
end
end
end
end
end
threads.each(&:join)
end
if ARGV[0]
quiz_src = File.read("#{ARGV[0]}_quiz.rb")
expected_error = File.read("#{ARGV[0]}_error.rb")
solve(ARGV[0], quiz_src, expected_error)
else
%w[1 2 3 4 5 6 7 8 9 a b c].each do |number|
quiz_src = File.read("#{number}_quiz.rb")
expected_error = File.read("#{number}_error.rb")
solve(number, quiz_src, expected_error)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment