Team Ai
Apppublic

sanket3280/code-execution

sourceHugging Faceupdated 11mo agoView on Hugging Face
0likes
DataStructureSerializer.js216 linesDownload Raw Back to serializers
1/**2 * Data Structure Serializer3 * Converts complex data structures to language-specific string format4 */5 6class DataStructureSerializer {7  /**8   * Detect the type of data structure9   * @param {any} data - Input data10   * @returns {string} - Type: 'primitive', 'array', 'object', 'graph', 'tree', 'null'11   */12  detectType(data) {13    if (data === null || data === undefined) {14      return 'null';15    }16    17    if (typeof data !== 'object') {18      return 'primitive';19    }20    21    if (Array.isArray(data)) {22      // Check if it's a 2D array23      if (data.length > 0 && Array.isArray(data[0])) {24        return 'array2d';25      }26      return 'array';27    }28    29    // Check if it's a tree node (has val/value and left/right or children)30    if (this.isTreeNode(data)) {31      return 'tree';32    }33    34    // Check if it's a graph (object with numeric/string keys and array values)35    if (this.isGraph(data)) {36      return 'graph';37    }38    39    // Default to object/hash map40    return 'object';41  }42 43  /**44   * Check if data represents a tree node45   */46  isTreeNode(data) {47    if (!data || typeof data !== 'object') return false;48    49    // Binary tree node50    if (('val' in data || 'value' in data) && ('left' in data || 'right' in data)) {51      return true;52    }53    54    // N-ary tree node55    if (('val' in data || 'value' in data) && 'children' in data) {56      return true;57    }58    59    return false;60  }61 62  /**63   * Check if data represents a graph64   */65  isGraph(data) {66    if (!data || typeof data !== 'object' || Array.isArray(data)) return false;67    68    // Check if all values are arrays (adjacency list)69    const values = Object.values(data);70    if (values.length === 0) return false;71    72    return values.every(v => Array.isArray(v));73  }74 75  /**76   * Serialize data to language-specific format77   * @param {any} data - Input data78   * @param {string} language - Target language (JAVASCRIPT_NODE, PYTHON3, JAVA17, CPP14, C)79   * @returns {string} - Serialized string80   */81  serialize(data, language) {82    const type = this.detectType(data);83    const serializer = this.getSerializer(type, language);84    return serializer(data);85  }86 87  /**88   * Deserialize output string to JavaScript object89   * @param {string} output - Output string90   * @param {string} language - Source language91   * @returns {any} - Parsed data92   */93  deserialize(output, language) {94    if (!output || typeof output !== 'string') {95      return output;96    }97    98    const trimmed = output.trim();99    100    // Try JSON parse first (works for most cases)101    try {102      return JSON.parse(trimmed);103    } catch (e) {104      // If JSON parse fails, return as string105      return trimmed;106    }107  }108 109  /**110   * Get serializer function for type and language111   */112  getSerializer(type, language) {113    const serializers = {114      'JAVASCRIPT_NODE': this.getJavaScriptSerializers(),115      'PYTHON3': this.getPythonSerializers(),116      'JAVA17': this.getJavaSerializers(),117      'CPP14': this.getCppSerializers(),118      'C': this.getCSerializers()119    };120    121    const langSerializers = serializers[language] || serializers['JAVASCRIPT_NODE'];122    return langSerializers[type] || langSerializers['primitive'];123  }124 125  /**126   * Get JavaScript serializers127   */128  getJavaScriptSerializers() {129    return {130      primitive: (data) => JSON.stringify(data),131      array: (data) => JSON.stringify(data),132      array2d: (data) => JSON.stringify(data),133      object: (data) => JSON.stringify(data),134      graph: (data) => JSON.stringify(data),135      tree: (data) => JSON.stringify(data),136      null: () => 'null'137    };138  }139 140  /**141   * Get Python serializers142   */143  getPythonSerializers() {144    return {145      primitive: (data) => {146        if (typeof data === 'string') {147          return JSON.stringify(data); // Keeps quotes148        }149        if (typeof data === 'boolean') {150          return data ? 'True' : 'False';151        }152        return String(data);153      },154      array: (data) => JSON.stringify(data),155      array2d: (data) => JSON.stringify(data),156      object: (data) => JSON.stringify(data),157      graph: (data) => JSON.stringify(data),158      tree: (data) => JSON.stringify(data),159      null: () => 'None'160    };161  }162 163  /**164   * Get Java serializers165   */166  getJavaSerializers() {167    return {168      primitive: (data) => String(data),169      array: (data) => {170        if (!Array.isArray(data)) return '[]';171        return JSON.stringify(data);172      },173      array2d: (data) => {174        if (!Array.isArray(data)) return '[]';175        return JSON.stringify(data);176      },177      object: (data) => JSON.stringify(data),178      graph: (data) => JSON.stringify(data),179      tree: (data) => JSON.stringify(data),180      null: () => 'null'181    };182  }183 184  /**185   * Get C++ serializers186   */187  getCppSerializers() {188    return {189      primitive: (data) => String(data),190      array: (data) => JSON.stringify(data),191      array2d: (data) => JSON.stringify(data),192      object: (data) => JSON.stringify(data),193      graph: (data) => JSON.stringify(data),194      tree: (data) => JSON.stringify(data),195      null: () => 'null'196    };197  }198 199  /**200   * Get C serializers201   */202  getCSerializers() {203    return {204      primitive: (data) => String(data),205      array: (data) => JSON.stringify(data),206      array2d: (data) => JSON.stringify(data),207      object: (data) => JSON.stringify(data),208      graph: (data) => JSON.stringify(data),209      tree: (data) => JSON.stringify(data),210      null: () => 'null'211    };212  }213}214 215module.exports = DataStructureSerializer;216