"CodeEquivalence" (比較法)
"CodeEquivalence" (比較法)
2つのコードが変換後に等価であるかどうかを判定する.
詳細
- "CodeEquivalence"法は,式を正規表現に変換することによって意図的等価性を判断しようとする.
- 変換によって等価性が判定できる場合は,評価は行われず,比較は式の出力には基づかない.このため,非決定論的出力(ランダムな値,日付等)を生成するコードの比較が可能になる.
- "CodeEquivalence"法は,CodeEquivalenceUtilitiesパクレットに直接基づいている.
- "CodeEquivalence"は,数式についてはSimplify関数を使って等価性を判定する.より制御したければ,""ArithmeticResult","CalculusResult","PolynomialResult","AlgebraicValue"の特定の数学メソッドを使うとよい.
- 次の表は,一般的な解答集と提出された解答のいくつかについて,"CodeEquivalence"と他の比較方法との比較を示している.
例題
すべて開く すべて閉じる例 (1)
コーディングの質問に対するAssessmentFunctionを作成する:
codeequivalence = AssessmentFunction[HoldPattern[Table[f[i], {i, n}]], "CodeEquivalence"]codeequivalence[Hold[Table[f[i], {i, n}]]]codeequivalence[Hold[f /@ Table[i, {i, n}]]]スコープ (1)
"CodeEquivalence"法は,ランダムな出力を生成するコードの比較をサポートする:
asmf = AssessmentFunction[{HoldPattern[RandomInteger /@ Range[5]]}, "CodeEquivalence"]asmf[HoldPattern[Array[RandomInteger, 5]]]asmf[HoldPattern[RandomInteger[5, 5]]]アプリケーション (2)
コーディング問題用のQuestionObjectを作成する:
QuestionObject["Define a function to take the first and last letter from a string", AssessmentFunction[HoldPattern[firstlast[str_] := {StringTake[str, 1], StringTake[str, -1]}], "CodeEquivalence"]]コーディング問題のQuestionObjectを作成する:
QuestionObject["Write code that takes a string `str` and returns the input joined with its reversal.", AssessmentFunction[HoldPattern[str <> StringReverse[str]], "CodeEquivalence"]]QuestionObject["Given a list of integers from 1 to 100, write a function that replaces multiples of 3 with \"Fizz\", multiples of 5 with \"Buzz\", multiples of both 3 and 5 with \"FizzBuzz\" and leaves other numbers fixed.", AssessmentFunction[HoldPattern[Which[Mod[#, 15] == 0, "FizzBuzz", Mod[#, 3] == 0, "Fizz", Mod[#, 5] == 0, "Buzz", True, #]& /@ Range[1, 100]], "CodeEquivalence"]]特性と関係 (2)
シンボル名は厳密に一致しなくてもよい.未定義のシンボル名は,それ以外の一意的な未定義のシンボルとマッチする:
AssessmentFunction[HoldPattern[a + b / 2], "CodeEquivalence"][HoldPattern[x + y / 2]]"CodeEquivalence"法で数式が比較できる:
AssessmentFunction[HoldPattern[1 - Cos[x] ^ 2], "CodeEquivalence"][Sin[x] ^ 2]"CalculusResult"のような数学専用のメソッドでも等価性が求められる:
AssessmentFunction[Hold[1 - Cos[x] ^ 2], "CalculusResult"][Sin[x] ^ 2]コードの等価性は式をコードとして扱う,シンボル名は任意で個別のシンボルも等しいものとみなされる:
AssessmentFunction[HoldPattern[1 - Cos[x] ^ 2], "CodeEquivalence"][Sin[y] ^ 2]AssessmentFunction[Hold[1 - Cos[x] ^ 2], "CalculusResult"][Sin[y] ^ 2]考えられる問題 (1)
評価すると決定論的出力となる答はその出力と等しいとみなされる:
deterministic = AssessmentFunction[HoldPattern[Table[i, {i, 1, 5}]], "CodeEquivalence"]deterministic[{1, 2, 3, 4, 5}]これが望ましくない場合は,決定論的な出力を持たない解答集を使うとよい:
random = AssessmentFunction[AssessmentFunction[HoldPattern[Table[RandomInteger[], {i, 1, 5}]], "CodeEquivalence"]]random[{0, 0, 1, 0, 1}]関連するガイド
-
▪
- 質問と評価