destructuring
## solve
与えられたファイルを読むと、全部正しい JSON を渡せばいいだけであることがわかる。
index.js
const readline = require("node:readline/promises");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const /* prettier-ignore */ stages = [
// Stage 0
(json) => {
const { a: _0, b: _1 } = json;
return [_0, _1];
},
// Stage 1
(json) => {
const [, , _0, _1, _2, , , _3, _4] = json;
return [_0, _1, _2, _3, _4];
},
// Stage 2
(json) => {
const {a: [, , { b: _0, c: [{ d: _1 }] }] } = json;
return [_0, _1];
},
// Stage 3
(json) => {
const { a: { a: { a: { a: _0, b: _1 }, b: { a: _2, b: _3 }, c: [, _4, , _5, _6] }, b: [{ a: _7 }, [_8, _9, _10, , _11]] } } = json;
return [_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11];
},
// Stage 4
(json) => {
const { a: [{ a: { a: { a: [{ a: _0, b: { a: _1, b: [[{ a: _2, b: _3, c: _4 }, ], , _5, , { a: _6, b: _7 }], c: _8 } }, { a: [, , { a: _9, b: _10, c: _11 }], b: { a: _12, b: { a: _13, b: { a: _14, b: _15 } }, c: _16 } }, _17, { a: [, _18], b: { a: { a: { a: _19, b: _20, c: _21 } }, b: _22 } }] }, b: { a: { a: { a: { a: _23, b: _24, c: _25 }, b: { a: _26, b: _27, c: { a: { a: _28, b: _29 }, b: { a: _30, b: _31 }, c: _32 } } }, b: [{ a: { a: _33, b: [{ a: _34, b: _35 }, _36], c: { a: _37, b: [_38, _39, _40], c: { a: _41, b: _42, c: _43 } } }, b: [, _44, [{ a: _45, b: _46, c: _47 }, [_48, _49], { a: _50, b: _51, c: _52 }, _53, ]], c: [_54, _55] }, { a: { a: _56, b: { a: { a: _57 }, b: _58 } }, b: _59 }, { a: _60 }, { a: { a: _61, b: { a: _62, b: _63 }, c: { a: _64, b: _65 } }, b: _66 }], c: _67 }, b: { a: { a: { a: _68, b: _69, c: _70 }, b: _71, c: { a: _72 } }, b: { a: _73 }, c: { a: _74, b: _75, c: { a: _76, b: { a: _77, b: { a: _78, b: { a: _79 } }, c: { a: _80, b: _81, c: [_82, _83] } }, c: _84 } } }, c: { a: { a: { a: _85 }, b: _86 }, b: { a: _87 } } }, c: [{ a: { a: [, ], b: [_88, _89, , { a: _90, b: { a: { a: _91, b: _92 }, b: _93, c: _94 } }] }, b: { a: { a: [{ a: [_95, _96, _97, _98], b: _99, c: _100 }, _101] }, b: _102, c: { a: _103 } }, c: [_104, [_105, { a: _106, b: [{ a: _107 }, _108, _109, ], c: _110 }, , { a: { a: _111, b: _112, c: _113 }, b: _114 }, _115], { a: { a: { a: _116 }, b: { a: _117, b: _118 }, c: _119 } }] }, { a: _120 }, , ] } }, ], b: { a: [, { a: { a: { a: _121, b: _122 }, b: { a: { a: _123, b: { a: { a: _124 } }, c: { a: _125 } } } } }, { a: { a: { a: { a: _126, b: _127, c: _128 } }, b: _129, c: { a: { a: { a: { a: { a: _130, b: { a: _131, b: _132 } }, b: _133 }, b: { a: [{ a: _134 }, _135, _136, , ], b: _137 }, c: _138 }, b: { a: _139, b: { a: { a: _140, b: _141, c: _142 } }, c: _143 } }, b: { a: _144, b: [{ a: _145 }, _146, [_147, _148, _149, [_150, _151, _152, { a: _153, b: _154 }, ], _155], { a: { a: _156 }, b: _157 }] }, c: _158 } }, b: { a: _159 }, c: [, [{ a: { a: _160, b: { a: [{ a: _161, b: _162 }, _163, _164], b: _165 }, c: _166 }, b: { a: { a: { a: _167 }, b: _168 }, b: _169, c: { a: { a: _170, b: [_171, _172, _173, _174, _175] } } } }, { a: [, _176, , { a: _177, b: { a: _178 } }], b: { a: _179, b: { a: _180, b: _181, c: _182 } } }, , { a: { a: _183, b: _184, c: _185 }, b: [{ a: _186 }, , _187] }, ], _188, , { a: { a: [_189, _190, _191, ], b: { a: _192 } } }] }], b: [, [, { a: { a: { a: _193, b: { a: _194 }, c: _195 }, b: _196, c: _197 } }], { a: { a: _198 }, b: { a: [{ a: _199, b: { a: { a: { a: _200, b: _201 }, b: _202, c: _203 } } }, , _204] } }, { a: { a: _205, b: [, _206] }, b: [_207, [{ a: { a: { a: _208 } }, b: { a: _209, b: { a: _210, b: { a: _211, b: { a: _212, b: _213, c: _214 } }, c: _215 } }, c: { a: _216, b: { a: [_217, _218, { a: _219, b: _220 }], b: _221, c: { a: _222 } } } }, { a: [_223, _224, { a: _225 }, { a: _226, b: { a: { a: _227, b: _228, c: _229 }, b: { a: _230, b: _231, c: _232 } } }], b: _233 }, [, ]], [[_234, [{ a: { a: _235 }, b: _236, c: _237 }, _238, { a: _239 }, ]], _240, ], _241], c: [[_242, { a: { a: { a: _243, b: _244 }, b: _245 }, b: [[{ a: _246, b: _247, c: _248 }, _249], _250, ], c: { a: _251 } }, [_252, ]], { a: _253, b: { a: _254, b: _255, c: { a: _256, b: _257 } } }] }, [, ]], c: [[_258, { a: { a: { a: _259, b: [, _260] }, b: [_261, { a: { a: _262, b: [_263, , _264, { a: _265 }], c: _266 }, b: { a: [_267, _268, , { a: _269 }, _270], b: { a: _271 } }, c: [_272, _273] }, _274, { a: { a: { a: [_275, _276, , _277], b: { a: _278, b: _279, c: _280 } }, b: _281, c: _282 }, b: _283, c: { a: { a: _284, b: _285 } } }] }, b: { a: [{ a: _286, b: { a: [{ a: _287, b: _288 }, _289] } }, { a: _290 }], b: _291 }, c: { a: { a: [{ a: _292, b: [{ a: _293, b: _294 }, _295, _296, _297, _298] }, , _299, { a: _300, b: _301 }], b: { a: [_302, { a: [_303, , ], b: _304, c: _305 }], b: _306, c: { a: _307, b: _308, c: [{ a: _309, b: _310 }, , ] } } }, b: { a: _311, b: { a: _312, b: _313 }, c: { a: _314, b: { a: _315 }, c: { a: _316, b: _317 } } }, c: { a: _318 } } }, { a: { a: { a: _319, b: [[_320, { a: _321, b: { a: _322, b: _323 } }, { a: { a: _324, b: _325 } }, _326], { a: _327, b: _328, c: _329 }, ], c: { a: [_330, _331] } }, b: _332, c: [_333, _334, _335, { a: _336, b: { a: _337 } }, _338] } }], { a: [{ a: _339 }, [_340, _341, _342, { a: { a: { a: { a: { a: _343, b: _344, c: _345 }, b: [, _346, , _347] }, b: [_348, _349, _350] }, b: _351, c: _352 }, b: _353 }, { a: { a: { a: [_354, _355, _356], b: { a: _357, b: _358, c: { a: _359 } }, c: _360 } }, b: _361, c: [{ a: { a: _362 }, b: [_363, { a: _364 }, { a: _365 }] }, _366, _367, _368, [{ a: _369, b: _370 }, , _371]] }]] }, { a: { a: _372 }, b: _373 }] } } = json;
return [_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128, _129, _130, _131, _132, _133, _134, _135, _136, _137, _138, _139, _140, _141, _142, _143, _144, _145, _146, _147, _148, _149, _150, _151, _152, _153, _154, _155, _156, _157, _158, _159, _160, _161, _162, _163, _164, _165, _166, _167, _168, _169, _170, _171, _172, _173, _174, _175, _176, _177, _178, _179, _180, _181, _182, _183, _184, _185, _186, _187, _188, _189, _190, _191, _192, _193, _194, _195, _196, _197, _198, _199, _200, _201, _202, _203, _204, _205, _206, _207, _208, _209, _210, _211, _212, _213, _214, _215, _216, _217, _218, _219, _220, _221, _222, _223, _224, _225, _226, _227, _228, _229, _230, _231, _232, _233, _234, _235, _236, _237, _238, _239, _240, _241, _242, _243, _244, _245, _246, _247, _248, _249, _250, _251, _252, _253, _254, _255, _256, _257, _258, _259, _260, _261, _262, _263, _264, _265, _266, _267, _268, _269, _270, _271, _272, _273, _274, _275, _276, _277, _278, _279, _280, _281, _282, _283, _284, _285, _286, _287, _288, _289, _290, _291, _292, _293, _294, _295, _296, _297, _298, _299, _300, _301, _302, _303, _304, _305, _306, _307, _308, _309, _310, _311, _312, _313, _314, _315, _316, _317, _318, _319, _320, _321, _322, _323, _324, _325, _326, _327, _328, _329, _330, _331, _332, _333, _334, _335, _336, _337, _338, _339, _340, _341, _342, _343, _344, _345, _346, _347, _348, _349, _350, _351, _352, _353, _354, _355, _356, _357, _358, _359, _360, _361, _362, _363, _364, _365, _366, _367, _368, _369, _370, _371, _372, _373];
},
];
(async () => {
for (const [index, run] of Object.entries(stages)) {
console.log(`Stage: ${index}`);
console.log(run.toString().split("\n")[1].trim());
const json = await rl.question("json> ").then(JSON.parse);
if (run(json).every((x, i) => x === i)) {
console.log("Nice!");
console.log();
} else {
throw new Error("Failed...");
}
}
console.log(`Here's your flag: ${process.env.FLAG}`);
})()
.catch(console.error)
.finally(() => rl.close());
stage 0-4 でそれぞれ以下の通りとなる
json
{"a":0,"b":1}
json
[null,null,0,1,2,null,null,3,4]
json
{"a":[null,null,{"b":0,"c":[{"d":1}]}]}
json
{"a":{"a":{"a":{"a":0,"b":1},"b":{"a":2,"b":3},"c":[null,4,null,5,6]},"b":[{"a":7},[8,9,10,null,11]]}}
json
{"a":[{"a":{"a":{"a":[{"a":0,"b":{"a":1,"b":[[{"a":2,"b":3,"c":4}],null,5,null,{"a":6,"b":7}],"c":8}},{"a":[null,null,{"a":9,"b":10,"c":11}],"b":{"a":12,"b":{"a":13,"b":{"a":14,"b":15}},"c":16}},17,{"a":[null,18],"b":{"a":{"a":{"a":19,"b":20,"c":21}},"b":22}}]},"b":{"a":{"a":{"a":{"a":23,"b":24,"c":25},"b":{"a":26,"b":27,"c":{"a":{"a":28,"b":29},"b":{"a":30,"b":31},"c":32}}},"b":[{"a":{"a":33,"b":[{"a":34,"b":35},36],"c":{"a":37,"b":[38,39,40],"c":{"a":41,"b":42,"c":43}}},"b":[null,44,[{"a":45,"b":46,"c":47},[48,49],{"a":50,"b":51,"c":52},53]],"c":[54,55]},{"a":{"a":56,"b":{"a":{"a":57},"b":58}},"b":59},{"a":60},{"a":{"a":61,"b":{"a":62,"b":63},"c":{"a":64,"b":65}},"b":66}],"c":67},"b":{"a":{"a":{"a":68,"b":69,"c":70},"b":71,"c":{"a":72}},"b":{"a":73},"c":{"a":74,"b":75,"c":{"a":76,"b":{"a":77,"b":{"a":78,"b":{"a":79}},"c":{"a":80,"b":81,"c":[82,83]}},"c":84}}},"c":{"a":{"a":{"a":85},"b":86},"b":{"a":87}}},"c":[{"a":{"a":[null],"b":[88,89,null,{"a":90,"b":{"a":{"a":91,"b":92},"b":93,"c":94}}]},"b":{"a":{"a":[{"a":[95,96,97,98],"b":99,"c":100},101]},"b":102,"c":{"a":103}},"c":[104,[105,{"a":106,"b":[{"a":107},108,109],"c":110},null,{"a":{"a":111,"b":112,"c":113},"b":114},115],{"a":{"a":{"a":116},"b":{"a":117,"b":118},"c":119}}]},{"a":120},null]}}],"b":{"a":[null,{"a":{"a":{"a":121,"b":122},"b":{"a":{"a":123,"b":{"a":{"a":124}},"c":{"a":125}}}}},{"a":{"a":{"a":{"a":126,"b":127,"c":128}},"b":129,"c":{"a":{"a":{"a":{"a":{"a":130,"b":{"a":131,"b":132}},"b":133},"b":{"a":[{"a":134},135,136,null],"b":137},"c":138},"b":{"a":139,"b":{"a":{"a":140,"b":141,"c":142}},"c":143}},"b":{"a":144,"b":[{"a":145},146,[147,148,149,[150,151,152,{"a":153,"b":154}],155],{"a":{"a":156},"b":157}]},"c":158}},"b":{"a":159},"c":[null,[{"a":{"a":160,"b":{"a":[{"a":161,"b":162},163,164],"b":165},"c":166},"b":{"a":{"a":{"a":167},"b":168},"b":169,"c":{"a":{"a":170,"b":[171,172,173,174,175]}}}},{"a":[null,176,null,{"a":177,"b":{"a":178}}],"b":{"a":179,"b":{"a":180,"b":181,"c":182}}},null,{"a":{"a":183,"b":184,"c":185},"b":[{"a":186},null,187]}],188,null,{"a":{"a":[189,190,191],"b":{"a":192}}}]}],"b":[null,[null,{"a":{"a":{"a":193,"b":{"a":194},"c":195},"b":196,"c":197}}],{"a":{"a":198},"b":{"a":[{"a":199,"b":{"a":{"a":{"a":200,"b":201},"b":202,"c":203}}},null,204]}},{"a":{"a":205,"b":[null,206]},"b":[207,[{"a":{"a":{"a":208}},"b":{"a":209,"b":{"a":210,"b":{"a":211,"b":{"a":212,"b":213,"c":214}},"c":215}},"c":{"a":216,"b":{"a":[217,218,{"a":219,"b":220}],"b":221,"c":{"a":222}}}},{"a":[223,224,{"a":225},{"a":226,"b":{"a":{"a":227,"b":228,"c":229},"b":{"a":230,"b":231,"c":232}}}],"b":233},[null]],[[234,[{"a":{"a":235},"b":236,"c":237},238,{"a":239}]],240],241],"c":[[242,{"a":{"a":{"a":243,"b":244},"b":245},"b":[[{"a":246,"b":247,"c":248},249],250],"c":{"a":251}},[252]],{"a":253,"b":{"a":254,"b":255,"c":{"a":256,"b":257}}}]},[null]],"c":[[258,{"a":{"a":{"a":259,"b":[null,260]},"b":[261,{"a":{"a":262,"b":[263,null,264,{"a":265}],"c":266},"b":{"a":[267,268,null,{"a":269},270],"b":{"a":271}},"c":[272,273]},274,{"a":{"a":{"a":[275,276,null,277],"b":{"a":278,"b":279,"c":280}},"b":281,"c":282},"b":283,"c":{"a":{"a":284,"b":285}}}]},"b":{"a":[{"a":286,"b":{"a":[{"a":287,"b":288},289]}},{"a":290}],"b":291},"c":{"a":{"a":[{"a":292,"b":[{"a":293,"b":294},295,296,297,298]},null,299,{"a":300,"b":301}],"b":{"a":[302,{"a":[303,null],"b":304,"c":305}],"b":306,"c":{"a":307,"b":308,"c":[{"a":309,"b":310},null]}}},"b":{"a":311,"b":{"a":312,"b":313},"c":{"a":314,"b":{"a":315},"c":{"a":316,"b":317}}},"c":{"a":318}}},{"a":{"a":{"a":319,"b":[[320,{"a":321,"b":{"a":322,"b":323}},{"a":{"a":324,"b":325}},326],{"a":327,"b":328,"c":329}],"c":{"a":[330,331]}},"b":332,"c":[333,334,335,{"a":336,"b":{"a":337}},338]}}],{"a":[{"a":339},[340,341,342,{"a":{"a":{"a":{"a":{"a":343,"b":344,"c":345},"b":[null,346,null,347]},"b":[348,349,350]},"b":351,"c":352},"b":353},{"a":{"a":{"a":[354,355,356],"b":{"a":357,"b":358,"c":{"a":359}},"c":360}},"b":361,"c":[{"a":{"a":362},"b":[363,{"a":364},{"a":365}]},366,367,368,[{"a":369,"b":370},null,371]]}]]},{"a":{"a":372},"b":373}]}}
## flag
Alpaca{the_notation_is_pretty_intuitive_IMO}