parent
e2c424142f
commit
207ad7753c
@ -0,0 +1,34 @@
|
|||||||
|
class ProgramBank < ApplicationRecord
|
||||||
|
|
||||||
|
def oj_language
|
||||||
|
result = case language
|
||||||
|
when '1'
|
||||||
|
then 'C'
|
||||||
|
when '2'
|
||||||
|
then 'C++'
|
||||||
|
when '3'
|
||||||
|
then 'Python'
|
||||||
|
when '4'
|
||||||
|
then 'Java'
|
||||||
|
end
|
||||||
|
result
|
||||||
|
end
|
||||||
|
|
||||||
|
def strip_description
|
||||||
|
strip_html description
|
||||||
|
end
|
||||||
|
|
||||||
|
def oj_sub_discipline_id
|
||||||
|
result = case language
|
||||||
|
when '1'
|
||||||
|
then 3
|
||||||
|
when '2'
|
||||||
|
then 4
|
||||||
|
when '3'
|
||||||
|
then 5
|
||||||
|
when '4'
|
||||||
|
then 2
|
||||||
|
end
|
||||||
|
result
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,2 @@
|
|||||||
|
class ProgramBankTest < ApplicationRecord
|
||||||
|
end
|
@ -0,0 +1,70 @@
|
|||||||
|
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, 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, 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: 1, 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
|
@ -0,0 +1,5 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe ProgramBank, type: :model do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe ProgramBankTest, type: :model do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
Loading…
Reference in new issue