|
- desc "同步trustie的编程作业"
-
- namespace :sync_program do
- DCODES = %W(2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z)
- task data: :environment do
- ProgramBank.where(homework_type: 2).each do |program|
- unless Hack.where(name: program.name).exists?
- strip_des = strip_html(program.description, 5000)
- description = strip_des.present? ? strip_des : program.name
- hack_params = {name: program.name[0..59], description: description, difficult: 1, open_or_not: 1, score: 200, status:0, time_limit: 3, sub_discipline_id: program.oj_sub_discipline_id}
- puts "language::::#{program.language}"
- puts "program_bank::::#{program.id}"
- hack = Hack.new(hack_params)
- hack.user_id = 1
- hack.identifier = generate_identifier Hack, 8
- ActiveRecord::Base.transaction do
- hack.save!
- # 创建测试集与代码
- position = 1
- ProgramBankTest.where(homework_bank_id: program.id).each do |test_set|
- if !test_set.input.blank? && !test_set.output.blank? && !hack.hack_sets.where(input: test_set.input).exists? && test_set.input.length <= 1000 && test_set.output.length <= 1000
- hack.hack_sets.create!(input: test_set.input, output: test_set.output, position: position)
- position += 1
- end
- end
- # 新建知识点
- hack_code_params = {code: program.standard_code.blank? ? nil : Base64.encode64(program.standard_code), language: program.oj_language}
- hack_codes = hack.hack_codes.new(hack_code_params)
- hack_codes.modify_time = Time.now
- hack_codes.save!
- new_item_params = {name: program.name, sub_discipline_id: program.oj_sub_discipline_id, container: hack, item_type: 'PROGRAM', public: 0, difficulty: 1, user_id: 1}
- ItemBank.create!(new_item_params)
- end
- puts hack.id
- end
- end
- end
-
- # 随机生成字符
- def generate_identifier(container, num)
- code = DCODES.sample(num).join
- if container == User
- while container.exists?(login: code) do
- code = DCODES.sample(num).join
- end
- else
- while container.exists?(identifier: code) do
- code = DCODES.sample(num).join
- end
- end
- code
- end
-
- def strip_html(text, len=0, endss="...")
- ss = ""
- if !text.nil? && text.length>0
- ss=text.gsub(/<\/?.*?>/, '').strip
- ss = ss.gsub(/ */, '')
- ss = ss.gsub(/\r\n/,'') #新增
- ss = ss.gsub(/\n/,'') #新增
- if len > 0 && ss.length > len
- ss = ss[0, len-4] + endss
- elsif len > 0 && ss.length <= len
- ss = ss
- #ss = truncate(ss, :length => len)
- end
- end
- ss
- end
- end
|