文章摘要
代码 抽象版本如下 while (styunlen.life.duration 0) { styunlen.love.eternal("ZUFE"); } 我为其添加了可运行的版本 /** * @author Styunlen * @dedicated to ZUFE for her 50th anniversary * @edit time 2024.04.11 15:15:20 **/ // …
代码 抽象版本如下 while (styunlen.life.duration 0) { styunlen.love.eternal("ZUFE"); } 我为其添加了可运行的版本 /** * @author Styunlen * @dedicated to ZUFE for her 50th anniversary * @edit time 2024.04.11 15:15:20 **/ // 抽象版本 // while (styunlen.life.duration > 0) { // styunlen.love.eternal("ZUFE"); // } // 可运行版本 let y = 30,x = -60,scale = .1, .09, .08, .07, .06, .05, .06, .07, .08, .09, .1],index = 0,range = (size) => ...Array(size)]; let getScale = () => scale index % scale.length],fn = (x) => ((getScale()**2*(4*y*y+x*x)-1)**3-8*x*x*y**3*getScale()**5 = 0); const clear = () => process.stdout.write(process.platform === "win32" ? "\x1bc" : "\x1b 2j\x1b 3j\x1b h",); let styunlen = {life: {duration: "浙江财经大学校庆50周年"}},loveindex = 0,scheduler = (await import("timers/promises")).scheduler; styunlen.love = {eternal: async (sweetheart) => {console.log(((y = 30),index++,range(60).map(() => (y--,(x = -60),range(120).map(() => (fn(x++) ? sweetheart.at(loveindex++ % sweetheart.length) : " ")).join("")),).join("\n\x1b 91m")),);await scheduler.wait(50);clear();},}; while (styunlen.life.duration.length > 0) { await styunlen.love.eternal("ZUFE "); } 运行说明,由于使用了 JS 的 ES Module 写法, 所以要手动将 js 文件后缀命名成 .mjs 来强制 nodejs 以 ES Module 形式加载 js ,否则会报错。 另一种让 nodejs 将 .js 文件视为 ES Module 的方法是使用 package.json 的 type 属性,手动将 json 文件里的 type 属性设置为 "module" 就行。 核心代码就是使用 js 的 Array.prototype.map 和 Array.prototype.join 来最小化代码生成爱心字符串,以及数学公式 ( x²+y²-1)³-x²y³ = 0 来判断是否在爱心区域内。 上述代码中的 getScale 也如字面意思是为了调整x,y的缩放系数,以适应控制台的长宽比(粗暴地使用了x缩放两倍,y缩放一倍,因为系数是小数,所以看起来y乘了2,其实是缩小了一倍 )。 (getScale()**2*(4*y*y+x*x)-1)**3-8*x*x*y**3*getScale()**5 = 0 以上代码也只是以下代码的因式分解压缩形式,看不懂的可以自己写草稿运算一遍。 ((x * getScale()) ** 2 + (y * getScale() * 2) ** 2 - 1) ** 3 -(x * getScale()) ** 2 * (y * getScale() * 2) ** 3 运行效果 windows: linux:代码
抽象版本如下

我为其添加了可运行的版本

运行说明,由于使用了JS的ES Module写法, 所以要手动将js文件后缀命名成.mjs来强制nodejs以ES Module形式加载js,否则会报错。
另一种让nodejs将.js文件视为ES Module的方法是使用package.json的type属性,手动将json文件里的type属性设置为"module"就行。
核心代码就是使用js的Array.prototype.map和Array.prototype.join来最小化代码生成爱心字符串,以及数学公式( x²+y²-1)³-x²y³ <= 0来判断是否在爱心区域内。
上述代码中的getScale也如字面意思是为了调整x,y的缩放系数,以适应控制台的长宽比(粗暴地使用了x缩放两倍,y缩放一倍,因为系数是小数,所以看起来y乘了2,其实是缩小了一倍 )。
以上代码也只是以下代码的因式分解压缩形式,看不懂的可以自己写草稿运算一遍。
运行效果
windows:

linux:

本文采用 CC BY-NC-SA 4.0 协议进行授权,如无注明均为原创,转载请注明出处。
标题:浙江财经大学校庆50周年之“三行代码作情诗”作者:九仞之行链接:http://dev.styunlen.cn/archives/post-1670.html

