Rumah >hujung hadapan web >tutorial js >OpenAI sangat baik dalam menyahminimumkan kod
Semasa menyemak imbas Internet untuk mendapatkan inspirasi, saya terjumpa komponen yang kelihatan menarik.
Saya fikir blok dengan seni ASCII berjalan kelihatan hebat, tetapi saya tidak dapat memahami cara ia dilaksanakan, jadi saya mula melihat kod sumber.
Saya menjumpai kod yang kelihatan seperti sedang menjalankan tugas, tetapi ia telah dikecilkan.
const { floor: ra, abs: KE, min: QE } = Math, O5 = ["reactive.network REACTIVE.NETWORK", "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~a8093152e673feb7aba1828c43532094i!lI;:,^`'. .:â–‘â–’â–“â–ˆ"], G7 = Date.now() % 3 ? O5[1] : O5[0], V5 = G7.length, JE = { fps: 60 }; function eT(e, t, n, r) { const i = t.time * 8e-5, s = QE(t.cols, t.rows), o = t.metrics.aspect * 0.2, l = { x: ((4 * (e.x - t.cols / 6.25)) / s) * o, y: (5 * (e.y - t.rows / 4)) / s }, u = ra(KE(YE(l) - i) * V5 + (ra(e.x / 1) % 2) * 2) % V5; return G7[u]; } const tT = () => { const e = j.useRef(null), [t, n] = j.useState({ height: null, width: null }); return ( j.useEffect(() => { function r() { n({ height: window.innerHeight, width: window.innerWidth }); } if (typeof window dafbbf1a78d14ec01566d43c1a22cf2b window.removeEventListener("resize", r); }, []), j.useEffect(() => { const r = e.current; if (!r) return; const i = 12, s = ra(t.width / i) * 1.6, o = ra(t.height / i), l = { aspect: s / o }, u = setInterval(() => { let c = ""; for (let d = 0; d ed13b14c66b5eaf21efce6eda4db6f70 clearInterval(u); }, [t]), a.jsx("div", { style: { position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }, children: a.jsx("div", { ref: e, style: { width: "100%", height: "100%", whiteSpace: "pre", overflow: "hidden" } }) }) ); }; function nT(e) { return Math.cos(e.x * e.x - e.y * e.y); } const { floor: ia, abs: rT, min: iT } = Math, D5 = ["reactive.network REACTIVE.NETWORK", "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~a8093152e673feb7aba1828c43532094i!lI;:,^`'. .:â–‘â–’â–“â–ˆ"], X7 = Date.now() % 3 ? D5[1] : D5[0], F5 = X7.length, sT = { fps: 60 }; function oT(e, t, n, r) { const i = t.time * 8e-5, s = iT(t.cols, t.rows), o = t.metrics.aspect * 0.2, l = { x: ((4 * (e.x - t.cols / 6.25)) / s) * o, y: (5 * (e.y - t.rows / 4)) / s }, u = ia(rT(nT(l) - i) * F5 + (ia(e.x / 1) % 2) * 2) % F5; return X7[u]; } const aT = () => { const e = j.useRef(null), [t, n] = j.useState({ height: null, width: null }); return ( j.useEffect(() => { function r() { n({ height: window.innerHeight, width: window.innerWidth }); } if (typeof window dafbbf1a78d14ec01566d43c1a22cf2b window.removeEventListener("resize", r); }, []), j.useEffect(() => { const r = e.current; if (!r) return; const i = 12, s = ia(t.width / i) * 1.6, o = ia(t.height / i), l = { aspect: s / o }, u = setInterval(() => { let c = ""; for (let d = 0; d 8a91d61369cec1ccbd5e9c36acd2fffb clearInterval(u); }, [t]), a.jsx("div", { style: { position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }, children: a.jsx("div", { ref: e, style: { width: "100%", height: "100%", whiteSpace: "pre", overflow: "hidden" } }) }) ); },
Biasanya, saya hanya akan membaca kod yang diminimumkan untuk memahami pelaksanaan (atau mencari fail .map untuk memulihkan kod asal). Walau bagaimanapun, saya menyedari bahawa saya tidak pernah cuba meminta ChatGPT melakukannya untuk saya... Jadi saya menyalin semua kod di atas dan meminta ChatGPT untuk "menerangkan kod". Ini jawapannya:
Kod yang disediakan agak rumit, tetapi saya akan memecahkannya kepada format yang lebih mudah difahami, menerangkan bahagian yang berbeza dan fungsinya.
Gambaran keseluruhan
Kod mentakrifkan beberapa fungsi dan komponen menggunakan JavaScript, khususnya dalam konteks aplikasi React. Ia berkaitan dengan menghasilkan beberapa kandungan teks dinamik, mungkin seni ASCII atau sejenis kesan visual menggunakan aksara daripada set yang telah ditetapkan. Selain itu, ia termasuk fungsi utiliti untuk pengendalian acara, pemasaan prestasi dan penukaran kandungan HTML.
Komponen dan Fungsi Utama
- Pemilihan Set Aksara:
``javascript
const { tingkat: ra, abs: KE, min: QE } = Matematik;
const O5 = ["reactive.network REACTIVE.NETWORK", "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~a8093152e673feb7aba1828c43532094i!lI;:,^'. . :â–'â–'â–“â–ˆ"];
const G7 = Date.now() % 3 ? O5[1] : O5[0];
const V5 = G7.panjang;- This part of the code imports some common Math functions (`floor`, `abs`, and `min`) and defines two sets of characters, stored in `O5`. - Based on the current time (`Date.now() % 3`), it selects one of these sets (`G7`) to use later. - The length of the selected character set is stored in `V5`. 2. **Dynamic Character Selection Function:** ```javascript function eT(e, t, n, r) { const i = t.time * 8e-5; const s = QE(t.cols, t.rows); const o = t.metrics.aspect * 0.2; const l = { x: ((4 * (e.x - t.cols / 6.25)) / s) * o, y: (5 * (e.y - t.rows / 4)) / s }; const u = ra(KE(YE(l) - i) * V5 + (ra(e.x / 1) % 2) * 2) % V5; return G7[u]; }
- Fungsi eT menjana aksara berdasarkan kedudukan input (e.x, e.y) dan masa semasa (t.time).
- Ia melaraskan kedudukan menggunakan beberapa pengiraan nisbah aspek dan memilih aksara daripada G7 berdasarkan gabungan kedudukan dan masa.
- Tujuan fungsi YE tidak jelas secara langsung daripada kod, tetapi ia nampaknya merupakan fungsi tersuai yang digunakan dalam pengiraan ini.
- Komponen Reaksi (tT) untuk Memaparkan Kandungan Dinamik:
```javascript
const tT = () => {
const e = j.useRef(null);
const [t, n] = j.useState({ tinggi: null, lebar: null });
j.useEffect(() => {
fungsi r() {
n({ height: window.innerHeight, width: window.innerWidth });
}
jika (jenis tetingkap e2f1f13a6ef37d9e80996b29da6998df window.removeEventListener("ubah saiz", r);
}
}, []);j.useEffect(() => { const r = e.current; if (!r) return; const i = 12; const s = ra(t.width / i) * 1.6; const o = ra(t.height / i); const l = { aspect: s / o }; const u = setInterval(() => { let c = ""; for (let d = 0; d < o; d++) { for (let f = 0; f < s; f++) c += eT({ x: f, y: d }, { cols: s, rows: o, metrics: l, time: Date.now() }); c += ``;
}
r.textContent = c;
}, 1e3 / JE.fps);
pulangan () => clearInterval(u);
}, [t]);return a.jsx("div", { style: { position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }, children: a.jsx("div", { ref: e, style: { width: "100%", height: "100%", whiteSpace: "pre", overflow: "hidden" } }) });};
- This is a React component that sets up an interval to periodically update the content of a `div` element (`e.current`) with dynamically generated characters. - It calculates the number of columns (`s`) and rows (`o`) based on the window size and then fills the `div` with characters generated by the `eT` function. - The effect runs at a specified frames per second (`JE.fps`).
Saya membuat susulan meminta untuk "melaksanakan kod yang setara dalam TypeScript dan menjadikannya boleh dibaca manusia" dan mendapat respons berikut:
import React, { useEffect, useRef, useState } from 'react'; const selectedCharacterSet = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~a8093152e673feb7aba1828c43532094i!lI;:,^`'. .:â–‘â–’â–“â–ˆ"; const characterSetLength = selectedCharacterSet.length; const calculateCharacter = ( x: number, y: number, cols: number, rows: number, aspect: number, time: number, ): string => { const timeFactor = time * 0.000_08; const size = Math.min(cols, rows); const aspectRatio = aspect * 0.2; const position = { x: ((4 * (x - cols / 6.25)) / size) * aspectRatio, y: (5 * (y - rows / 4)) / size, }; const index = Math.floor( Math.abs( Math.cos(position.x * position.x - position.y * position.y) - timeFactor, ) * characterSetLength + (Math.floor(x) % 2) * 2, ) % characterSetLength; return selectedCharacterSet[index]; }; type Size = { height: null | number; width: null | number; }; const AsciiArtGenerator: React.FC = () => { const textRef = useRef651b1947af8d8d0830a44c72d508a435(null); const [size, setSize] = useStatee04809189b57be3fcaf9655a9fa76f7b({ height: null, width: null }); useEffect(() => { const handleResize = () => { setSize({ height: window.innerHeight, width: window.innerWidth }); }; // Initial size setting handleResize(); window.addEventListener('resize', handleResize); return () => { window.removeEventListener('resize', handleResize); }; }, []); useEffect(() => { const element = textRef.current; if (!element || !size.width || !size.height) return undefined; const cols = Math.floor(size.width / 12) * 1.6; const rows = Math.floor(size.height / 12); const aspectRatio = cols / rows; const intervalId = setInterval(() => { let content = ''; for (let y = 0; y 02785904ae3ef7fc7c587735fdacd517 { clearInterval(intervalId); }; }, [size]); return ( 36fbc7d3756ac2650ad381711fea4fe1 ); }; export default () => { return 8a0f72462f85ea1b4ea15bb3e5adbada; };
Saya terkejut, maklum balasnya bukan sahaja cukup baik, tetapi ia juga sangat boleh dibaca.
Berikut ialah komponen di atas dalam tindakan.
Membandingkan output, nampaknya respons LLM terlepas pandang beberapa butiran pelaksanaan, tetapi ia masih merupakan pelaksanaan yang cukup baik untuk dipelajari. Pastinya kes penggunaan yang kemas yang saya tidak pertimbangkan sebelum ini!
Atas ialah kandungan terperinci OpenAI sangat baik dalam menyahminimumkan kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!