module CodeExample
  extend ActiveSupport::Concern

  #老师C语言的标准代码
  def c_stantard_code_teacher
    "// 老师您好！这是一个C语言的样例程序
// 程序功能：输入两个整数，输出两者之和
// 测试集合：老师可以给出多组测试集，例如：
//                 输入1和2，输出3
//                 输入3和4，输出7
//                 ... ...
//                 系统将根据您给出的测试集对学生代码进行自动评分

// 特别提醒：程序采用命令行传参方式，输入通过argv传入
//                 否则您的作业标准代码将不能通过测试

#include <stdio.h> //引用必须头文件
int main(int argc, char** argv) {
    int a = atoi(argv[1]);  //将第一个输入转成整型
    int b = atoi(argv[2]);  //将第二个输入转换为整型

    printf(\"%d\",a+b);      //输出a+b
    return 0;
}".html_safe
  end

  #老师C++语言的标准代码
  def c_stantard_code_teacher_
    "// 老师您好！这是一个C++语言的样例程序
// 程序功能：输入两个整数，输出两者之和
// 测试集合：老师可以给出多组测试集，例如：
//                 输入1和2，输出3
//                 输入3和4，输出7
//                 ... ...
//                 系统将根据您给出的测试集对学生代码进行自动评分

// 特别提醒：程序采用命令行传参方式，输入通过argv传入
//                 否则您的作业标准代码将不能通过测试

#include <iostream> //引用必须头文件
#include <cstdlib>
using namespace std;
int main(int argc, char** argv){
  int a = atoi(argv[1]); //将第一个输入转成整型
  int b = atoi(argv[2]); //将第二个输入转换为整型
  cout<<a+b;   //输出a+b
  return 0;
}".html_safe
  end

  #学生C语言的标准代码
  def c_stantard_code_student
    "// 同学好！这是一个C语言的样例程序
// 程序功能：输入两个整数，输出两者之和
// 测试集合：老师可以给出多组测试集，例如：
//                 输入1和2，输出3
//                 输入3和4，输出7
//                 ... ...
//                 系统将根据您给出的测试集对学生代码进行自动评分

// 特别提醒：程序采用命令行传参方式，输入通过argv传入
//                 否则您的作业标准代码将不能通过测试

#include <stdio.h> //引用必须头文件
int main(int argc, char** argv) {
    int a = atoi(argv[1]);  //将第一个输入转成整型
    int b = atoi(argv[2]);  //将第二个输入转换为整型

    printf(\"%d\",a+b);      //输出a+b
    return 0;
}".html_safe
  end

  #学生C++语言的标准代码
  def c_stantard_code_student_
    "// 同学好！这是一个C++语言的样例程序
// 程序功能：输入两个整数，输出两者之和
// 测试集合：老师可以给出多组测试集，例如：
//                 输入1和2，输出3
//                 输入3和4，输出7
//                 ... ...
//                 系统将根据您给出的测试集对学生代码进行自动评分

// 特别提醒：程序采用命令行传参方式，输入通过argv传入
//                 否则您的作业标准代码将不能通过测试

#include <iostream> //引用必须头文件
#include <cstdlib>
using namespace std;
int main(int argc, char** argv){
  int a = atoi(argv[1]); //将第一个输入转成整型
  int b = atoi(argv[2]); //将第二个输入转换为整型
  cout<<a+b;   //输出a+b
  return 0;
}".html_safe
  end

  def compile_command
    "compile(){
		# 编译命令
        compileCommand=\"COMPILECOMMAND\"
		# 取当前关卡的编译文件
        challengeProgramName=${challengeProgramNames[$1 - 1]}
		# 获取编译结果（此处编译无输出则说明编译通过，否则输出编译错误信息，请按实训实际情况调整）
        compileResult=$($compileCommand $challengeProgramName 2>&1 | base64)
        if [ -z \"$compileResult\" ]; then
                compileResult=$(echo -n \"compile successfully\" | base64)
        fi

		}
		compile $1"
  end

  def execute_command
    "execute(){
	#执行命令
        executeCommand=\"EXECUTECOMMAND\"
	#执行文件名
        sourceClassName=${sourceClassNames[$1 - 1]}
        challengeStage=$1

        output=''
        i=0
        while [[ i -lt ${#ins[*]} ]]; do
            #执行，并拼接执行结果
            result=$(echo \"${ins[$i]}\" | base64 -d | $executeCommand $sourceClassName 2>&1 | base64)
            #拼接输出结果
            output=$output\\\"$result\\\",
            let i++
        done
        output=\"[${output%?}]\"
}

execute $1
"
  end
end