// ==UserScript==
// @name LeetCodeCopyTestcase2
// @namespace https://leetcode.cn/
// @version 0.1
// @description 自动将 LeetCode 测试用例转化为 SQL 和 Pandas 语句
// @author wangxm
// @match https://leetcode.cn/problems/*
// @match https://leetcode-cn.com/submissions/detail/*
// @grant none
// @license MIT
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
// 获取表的对象集合信息
let createTableSQL = "";
let insertSQL = "";
let dropTableSQL = "";
let pandasCode = "";
const tableInfos = JSON.parse(pageData.submissionData.input).headers;
const tableRows = JSON.parse(pageData.submissionData.input).rows;
// 生成表创建和删除语句
for (const name in tableInfos) {
const columns = tableInfos[name].map(col => `${col} VARCHAR(200)`);
createTableSQL += `CREATE TABLE IF NOT EXISTS ${name} (${columns.join(", ")});\n`;
dropTableSQL += `DROP TABLE IF EXISTS ${name};\n`;
// 生成 Pandas 代码
const pandasColumns = tableInfos[name].map(col => `"${col}"`);
const pandasData = tableRows[name].map(row => `[${row.map(value => value === null ? "None" : `"${value}"`).join(", ")}]`);
pandasCode += `import pandas as pd\n${name}_df = pd.DataFrame(columns=[${pandasColumns.join(", ")}], data=[${pandasData.join(", ")}])\n\n`;
}
// 处理数据并生成插入语句
for (const tableName in tableRows) {
tableRows[tableName].forEach(row => {
const values = row.map(value => value === null ? "NULL" : `"${value}"`);
insertSQL += `INSERT INTO ${tableName} VALUES (${values.join(", ")});\n`;
});
}
// 添加到页面上
$("#details-summary").append(`
`);
$("#sql").val(dropTableSQL + createTableSQL + insertSQL);
$("#pandas").val(pandasCode);
// 添加滑动及其处理
$("#toggle").click(function() {
const isHidden = $("#sql").css("display") === "none";
$("#sql").css("display", isHidden ? "block" : "none");
$("#pandas").css("display", isHidden ? "none" : "block");
$(this).val(isHidden ? "隐藏" : "查看");
});
$("#copy-sql").click(function() {
const sqlTextarea = document.getElementById("sql");
sqlTextarea.select();
document.execCommand("Copy");
alert("SQL 已复制好,可贴粘。");
});
$("#copy-pandas").click(function() {
const pandasTextarea = document.getElementById("pandas");
pandasTextarea.select();
document.execCommand("Copy");
alert("Pandas 代码已复制好,可贴粘。");
});
})();