ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
1 419
http://localhost:3000/
http://localhost:3000/about
http://localhost:3000/contact
ืชืืืื ืืฉืื ืื ืฉืื ืื ืืกื ืืืฃ ืืืืืฃ ืืช ืงืืืคืื ื ืืช Routes ืืงืืืคืื ื ืื ืฉืืชืืืื ืืืชืืืช, ืืืื ืื ื ืืงืื ืชืืื ืืช ืฉืืจืช ืืืืชืจืช ืืืชืืชืื ืคืขืืืื ืืช ืืงืืืคืื ื ืื ืืจืืฉืืช ืฉื ืืืฃ.
## ืืขืืจ ืืื ืืคืื
ืืฉืื ืื ื ืขืืืจืื ืืื ืืคืื ืืืืฆืขืืช ืฉืื ืื ืฉืืจืช ืืืชืืืช ืืืคืืคื ืื ืืืืฆืขืืช ืืืื ื a, ืืืคืืคื ืคืื ื ืืืืฉ ืืฉืจืช ืืืืขื ืืช ืืขืืื ืฉืืชืืื ืืืชืืืช ืืืืฉื. ืืืื ืฉืืฉืจืช ืืื ืฉืจืช ืคืืชืื ืฉื
create-react-app, ืืฉืจืช ืืื ืืืืข ืืืืืฉ ืชืืื ืืช ืืืชื ืงืืืฅ HTML, ืืืื ืื ืื ื ืืงืืืื ืืช ืืืชื ืืคืืืงืฆืื ืืขืืื ืฉืืชืืื ืืืชืืืช ืืืืฉื. ืืื ืื ืื ืื ืื ืืืืื ื - ืืจื ืืฉ ืื ืืืจ ืืืคืืคื ืืช ืื ืืงืืืคืื ื ืืืช ืืื ืืืืืข ืฉืฆืจืื ืืฉืืื ืืืฆืื ืืช ืืขืืื ืืื, ืืฉืืื ืื ืื ืืืืช ืฉืื ืืฉืจืช ืจืง ืืื ืืงืื ืืช ืืืชื ืงืืฆื js, css ื html ืฉืืืจ ืืฉ ืื?
ืงืืืคืื ื ืื ืืืืืืช ืฉื react-router ืืฉื Link ืืฆืืขื ืืืืืง ืืช ืืืืคืืืืืืฆืื ืืื. ืืื ืืงืืืช ืืืคืืื to ืฉืืืืจ ืืืืื ืืชืืืช ืฆืจืื ืืขืืืจ, ืืืฉื ื ืจืง ืืช ืืืชืืืช ืืืคืืคื ืืืช ืืงืืืคืื ื ืื ืฉืืืฆืืช, ืืื ืืขืืืจ ืืจื ืืฉืจืช.
ื ืขืืื ืืช ืืขืืื ืฉืื ื ืขื ืฉืชื ืฉืืจืืช ื ืืืื ืืื ืืืืืืฉ ืืช ืืืชื ืืืืช ืฉื Link:
function App() {
return (
<BrowserRouter>
<h1>Welcome To React Router</h1>
<nav>
<h2>Navigation with <Link/> Component</h2>
<Link to="/">Home Page</Link>
<Link to="/about">About Page</Link>
<Link to="/contact">Contact Page</Link>
</nav>
<nav>
<h2>Navigation with <a/> Tag</h2>
<a href="/">Home Page</a>
<a href="/about">About Page</a>
<a href="/contact">Contact Page</a>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
);
}
ืฉืืื ืื ืืื ืืฉืื ื ืขืืืจ ืืื ืืืคืื ืขื ื Link ืืืขืืจ ืืื ืืืง, ืืื ืืฉืื ื ืขืืืจ ืืืืฆืขืืช ืืืืฆื ืขื ื a ืื ื ืจืืื ืืืคืืคื ืืขืื ื ืืืืฉ ืฉื ืืขืืื.
## ืืื ืจืืืงื ืจืืืืจ ืคืืชืจืช ืืืง ืืืืขืืืช ืฉืื ื
ืจืืืงื ืจืืืืจ ืื ืคืืชืจ ืืช ืื ืืืชืืจืื ืฉืืืืจื ื ืขืืืื ืืชืืืืช ืืฉืืขืืจ, ืืื ืืื ืื ืขืืืจ ืขื ืืืงื:
1. ืจืืืงื ืจืืืืจ ืืืคื ืืฉืืืื ื ืืื ื ืืฉื ืืืืกืืืจืื ืืืคืฉืจืืช ืืืืจื ืืืืจื ืืืืคืืคื ืืืืจ ืืื ืืฃ ืคื ืืื ืืงืื URL ืืฉืื.
2. ืืืืฆืขืืช ืื ืื ืื Lazy ืฉื ืจืืืงื, ืื ืื ื ืืืืืื ืืืขืื ืจืง ืืช ืืงืืืคืื ื ืืืช ืฉืื ืื ื ืฆืจืืืื ืืฉืืื ืืืฆืื ืืช ืื ืชืื ืื ืืืื ืืื ืืืืืื ืืฉืืื ืืช ืื ืืืคืืืงืฆืื ืืจืืฉ. ืื ืืชื ืจืืฆืื ืืฉืืืข ืขืื ืขื ืื ืื ืื Lazy ืฉื ืจืืืงื ืชืืืื ืืฆืคืืช ืืฉืืขืืจ ืืืจืืื ืขื ืื ืืฉื.
3. ืจืืืงื ืจืืืืจ ืชืืื ื Server Side Rendering. ืคืืฆ'ืจ ืื ืืื ืืขืืจ ืืืืงืฃ ืฉื ืงืืจืก ืื ืืืืจ ืืืื ืืขืจื ืฉืื ืื ืงืื ืืฆื ืืฉืจืช. ืืืืื ืื ืฉ SSR ืืืืจ ืื ืฉืื ืื ื ืืืืฆืจืื ืืช ืื ื HTML ืืฉืจืช ืืคื ื ืฉืฉืืืืื ืืืชื ืืืงืื (ืืขืฆื ืืจืืฆืื ืจืืืงื ืืฆื ืืฉืจืช ืืื ืืืคืืคื). ืฉืืืื SSR ืืืคืฉืจ ืืืืฆืจ HTML ืคืฉืื ืืืงืืืืช ืฉืฆืจืืืื ืืืชื ืืืืืืช ืงืืจืื ืืกื ืืื ืืขื ืืืคืืฉ.
## ืืื ืืก: ืืื ืืืืจ ืืคืืืงืฆืืืช React Router ืืฉืจืช Node.JS ืืืืชื
ืืขืืืื ืขื ืฉืจืช ืืืืชื ืืืจื ืืื ื ืฆืืจื ืืืืืืจ ืืื ื ืชืื ืืืื ืืฃ HTML ืืืืืฉ ืืืืชื ื ืชืื. ืื ืืฉืจืช ืฉืืื ืืชืื ื Node.JS ืืืื ืืชื ืืฉืชืืฉืื ืืืืืืืืจ ืืื ืืืืืฉ ืงืืฆืื ืกืืืืื ืืชืืงืืืช public ืืคื ืฉื ืืงืืืฅ ืฉืืชืืื ืื ืชืื ืืืื ื ืืกื ืืืืืฉ.
ืืืขืื ืฉืืฉืืืืจืื ืืช ืื ื react-router ืื ืื ืขืืื ืื ืื ืืื - ืจืืืงื ืจืืืืจ ืืืจืฉ ืฉืืื ืืกื ืืื ื ืชืื ืืืคืืืงืฆืื ื ืงืื ืชืืื ืืช ืืืชื ืงืืืฅ html ืืืช ืืืชื ืงืืฆื js ื css, ืืืื ืืืจ ืืฆื ืืงืื ืืืื ืืืจืืืช ืืช ืืงืืืคืื ื ืื ืืืชืืืื.
ืืฉืจืช Node.JS ืื ืื ื ืืืืืื ืืงืื ืืช ืืืชื ืืืืช ืืืืช ืืืืฆืขืืช ืืืืจืช ื ืชืื ืืื:
app.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, 'path/to/your/index.html'), function(err) {
if (err) {
res.status(500).send(err)
}
})
})1 419
# ืืืื ื React Router ืืืจืกื 6
ืืขืืื ืืืฉื ืฉื ืคืืชืื ืืื, ืืื ืืฃ ืืืชืจ ืืืชื ืืชืืืช (URL) ืืฉืื, ืืืฃ HTML ืฉืืฉืจืช ืฉืืื ืืฉืืืืฉ ื ืื ืก ืืืืชื ืืชืืืช. ืืจืืืงื, ืืืืืืื ืื ืืฆืจืชื ืืช ืืืคืืืงืฆืื ืขื create-react-app, ืื ืงืฆืช ืืืชืจ ืงืฉื ืืืืฉืื. ืื ืืืื ื ืจืืฆืื ืืืืช ืืืจื ืื, ืื ืืื ืืืืจ ืฉืฆืจืื ืืคืืืงืฆืืืช ืจืืืงื ืืืฉื ืขืืืจ ืื ืืฃ ืืืื ืฉ create-react-app ืืืืฆืจ ืจืง ืงืืืฅ HTML ืืื. ืืื ืืคืืื ืื ื ืฆืืื ืืืืฆืจ ืืื ืงืืฆื HTML, ืื ืืืื ืฉื ืื ืืขืกืง ืืื ืื ืฉืืื ืืช ืืืืืฅ.
ืืืงืื ืื ืืืจื ืืืงืืืืช ืืขืืืจ ืืื ืืคืื ื ืงืจืืช Single Page Application. ืืจืขืืื ืฉืืฉ ืื ื ืจืง ืงืืืฅ HTML ืืื ืขื ืกื ืืื ืฉื ืงืืืคืื ื ืืืช ืจืืืงื, ืืงืื ืจืืืงื ืืืืข ืืืฆืื ืืช ืืงืืืคืื ื ืื ืฉืืชืืืื ื URL ืื ืืืื. ืกืคืจืืืช react-router, ืขืืื ื ืืื ืืคืจืง ืื, ืืกืคืงืช ืืจื ืงืื ืืื ืืืช ืืืฉืืืื ืืืื ืืจืืืงื.
## ืืืชืืจืื ืืืืฉืืื ืขืืื ืืืื
ืืคื ื ืฉื ืจืื ืืื ืืืชืืื ืืืฉืื Single Page, ืืืื ืืชื ืืืจ ืฉืืืืื ืืช ืขืฆืืื ืืฉืืื ืื ืฆืจืื ืกืคืจืื ืืืืืืช? ืืื ืื ืื ืื ืงืฉื? ืื ืื ื ืจืฉืืืช ืืชืืจืื ืฉืืื React Router ืืืืชื ืฆืจืืืื ืืคืชืืจ ืืื:
1. ืืขืื ืช ืืืฃ ืืจืืฉืื ืืืืฉืื ืขืฉืืื ืืืืืช ืืืืืช, ืื ืื ืชืืื ืืืชืจ (ืื ืืงืืืคืื ื ืืืช) ืืืืข ืืืื ืืืช.
2. ืืคืืคื ืื ืืืืขืื ืืืคื ืืืืืืืืช ืื ืืืื ืืืืจื ืืฉืืืจืช ืืืกืืืจืื ืืื ืืคืื, ืืื ืืืืฉืืื ืขืืื ืืืื ืขืืื ื ืืื ืืช ืื ืื ืื ืื ืืืื ืืื (ืื ืืืฉืชืืฉ ืืกืคืจืืืช ืงืืืืืช) ืืื ืืชืช ืืืฉืชืืฉืื ืืช ืืืชื ืืืืื.
ืื ืืกืฃ ืืืืฉืืื ืขืืื ืืืื ืืฉ ืขืื ืืกืคืจ ืืชืืจืื ืฉืกืคืจืืืช react-router ืื ืคืืชืจืช ืืฉืืืืื ืืืืื ืืืืืช ืืืืขืื ืืืืื:
1. ืืชืืื ืืื ืืขื ืืืคืืฉ ืขืฉืืื ืืืืืช ืืืจืืืช, ืืืืื ืฉืจืง ืืืจื ืืคืขืืช ืงืื JavaScript ืืคืฉืจ ืืืขืช ืื ืืืฆืื. ืื ืื ืื ืืขื ืืืืคืืฉ ืืืืขืื JavaScript ืืืื ืืืืงื ืืืื ืงืฉื ืื ืืื ืืืชืจ.
2. ืืชืืื ืืงืืจืื ืืกื ืื ืืชืงื ื ื ืืืฉืืช ืืืจืื ืืืืื ืืืืืช ืืืจืืืช, ืืืืื ืฉืืืืืื ืืืจืืฅ ืงืื JavaScript ืืื ืื ืืื ืืืชืจ ืืืชืงื ืื ืืื ืื ืชืืื ืืืืขืื ืืืจืืฅ JavaScript ืืื ืฉืฆืจืื.
3. ืืืืืืช ืืืืจืื ื JavaScript ืืืคืืืช ืืืขืื ืืืืชืืช: ืืืืฉืื ืจืืื ืื ืืขืืจ ืขืืื ืืืคืก ืืช ืืืืืจืื ืืืื ืื ืื ืืืง ืืืงืื ืฉืืื ืื ืืืืืง ืขื ืืกืืฃ ืืืืืื ืื ืชืขืฉื ื ืืง. ืืืืฉืื ืขืืื ืืืื ืืืืืงื ืืืืืจืื ืืืื ืืืืื ืืืืืื ืืืืจื ืื ืืื ืืืืฉืื, ืฉืืืืืื ืืืืืช ืืืื ืืจืืืื.
ืืืื ื ืชืงืื ื react-router ืื ืจืื ืืื ืืื ืขืืืจืช ืื ื ืืืชืื ืืืฉืืื Single Page ืืงืืืช.
## ืืื ืขืืื React Router
ื React Router ืื ืื ื ืืืืืจืื ืืืืช ื ืืชืื, ืฉืื ืืืื ืฉืืืืจืช ื react-router ืขืืืจ ืื ื ืชืื ืืืื ืงืืืคืื ื ืื ืฆืจืื ืืืฆืื. ืืช ืืืืื ืื ืื ื ืืืชืืื ืืชืืจ ืงืืืคืื ื ืืืช ืจืืืงื, ื react-router "ืืืืืฃ" ืืช ืื ืืืืง ืืงืืืคืื ื ืืืช ืืื ืืงืืืคืื ื ืื ืืืืืชืืช ืฉืฆืจืื ืืืจืืืช ืขืืืจ ืื ืชืื ืื ืืืื. ืืคืฉืจ ืืืืืื ืืช ืืืชื ืืืืช ืฉืื ืืชืืจ switch/case ืืชืืืื, ืฉืืกืชืื ืขื ืฉืืจืช ืืืชืืืช ืืขื ืืืืช ืื ืืชืื, ืืืคื ืื ืฉืืชืื ืฉื ืืืืื ืืืื ืงืืืคืื ื ืื ืืืจืืืช.
ืื ื ืจืืืช ืืืืช ื ืืชืื ืคืฉืืื:
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
ื ื ืกื ืืงืจืื ืืช ืื ืืื-
1. ืื ืืืชืืืช ืืืคืืคื ืืื / ืื ืชืืืืฃ ืืช ืื ืืืืืง ืฉืืชืื Routes ืืงืืืคืื ื ืื Home.
2. ืื ืืืชืืืช ืืืคืืคื ืืื /about ืื ืชืืืืฃ ืืช ืื ืืืืืง ืฉืืชืื Routes ืืงืืืคืื ื ืื About.
3. ืื ืืืชืืืช ืืืคืืคื ืืื /contact ืื ืชืืืืฃ ืืช ืื ืืืืืง ืฉืืชืื Routes ืืงืืืคืื ื ืื Contact.
ืืช ืงืืืคืื ื ืืช BrowserRouter ืื ื ืฆืจืื ืืฉืื ืคืขื ืืืช ืืืืฉืื ืืกืืื ืืื ืืงืืืคืื ื ืืืช ืฉืื, ืืื ืืช Routes ืื ื ืืืื ืืฉืื ืืืื ืืงืืืืช, ืืื ืืงืื ืื ืื ื ืฉื Routes ืืืืืฃ ืืงืืืคืื ื ืื ืฉืืชืืืื ืื ืชืื.
ืื ื ืงืืืฅ App.js ืฉืืืืืฉ ืืช ืืืฉืืง:
import './App.css';
import {
BrowserRouter,
Routes,
Route,
} from "react-router-dom";
function App() {
return (
<>
<h1>Welcome To React Router</h1>
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
</>
);
}
function Home() {
return (<p>Home Page</p>);
}
function About() {
return (<p>About Page</p>);
}
function Contact() {
return (<p>Contact Page</p>);
}
export default App;
ื ืกื ืืืคืขืื ืืช ืืืืฉืื ืืืืืื ืก ืืืชืืืืช:1 419
# ืืืื ื ืืืืืื ืจ - ืืืืืฉืื ืืจืืืงื 18
ืืืื ืืืืฉื ืืงืจืื ืืขืฉืจ ืืืืงืจ ืืขืืืจ ืคื ืืืืื ืจ ืฉื ืฉืขื ืขื ืจืืืงื 18 ืืืืืืืฉืื ืฉืืื ืืืื. ืจืืืงื 18 ืืฆื ืืกืืฃ ืืจืฅ ืืืืืจืกื ืืขืืื ืืช ืฉื ืจืืืงื ืืื ืืืจ 18.2. ืืืืชืจืื ืืืืืืช ืงืฆืช ืืคื ื ืฉืขืืฉืื ืืืืื ืจ ืขื ืืืจืกื ืืืฉื ืืื ืฉืขืืฉืื ืืืกืืช ืืจืืจ ืื ืขืืื, ืื ืื ืขืืื ืืื ืืืืืื ืื ืืขืชืื, ืืื ืื ืฉื ืจืื ืื ืืืืืื ืจ. ืืชืืื ืืช:
1. ื ืจืื ืืื
useDeferredValue, ืืืื ืืขืื ืืื ืื ืืคืชืืจ ืืืืื ืืขืืืช ืืื ืืืฆืจ.
2. ืืื ื ื ืืืข ืืืืจ ืขื Concurrent Rendering, ืฉืื ืืคืืฆ'ืจ ืฉืืืคืฉืจ ืืช useDeferredValue ืื ืขืืืจ ืขื ืืืืืื ืฉื useTransition ืืื ืืจืืืช ืขืื ืืืชืจืื ืฉื ืืจืื ืืืจ ืืืงืืืื.
3. ื ืืืจ ืขื ืืงืืฉื ืืขืืืื ืขื ืจืื ืืืจ ืืงืืืื, ืื ืจืื ืืช ืืืืืื ืฉื Render Tearing.
4. ื ืืืจ ืขื ืืืชื ืืืืช ืืืืฉื ืฉื Strict Mode ืฉืขืืืื ืืืืื ืืืฆื ืคืืชืื, ืืขื ืืฉืื ืื ืืืชื ืืืืช ืฉื useEffect ืฉืื ืืขืงืืืช ื Concurrent Rendering.
ืืืืืื ืจ ืืขืืืจ ืืืื ืืืื ืืืืฉื ืืขืฉืจ ืืืืงืจ. ืืงืืฉืืจ ืืคืจืืื ืืืจืฉืื ืืื:
https://www.tocode.co.il/workshops/117
ืฉืืื ืืืื ืืื ืฉืชืืืื ืืฉืืื ืฉืืืืช ืืืืฉืชืชืฃ ืืฉืืื, ืืื ืื ืื ืชืืืื ืืืืืข ืื ืื ืกืืฃ ืืขืืื ืืืงืืื ืืกืืืจืช ืชืขืื ืืืชืจ ืืืืืืืื ืืื ืืืื ืืืจื ืืืคืืฉ.
ื ืชืจืื ืืืืืฉื,
ืื ืื1 419
# ืจืืืงื 18 ืกืืฃ ืกืืฃ ืืฆืืข ืคืืชืจืื ืืืขืืืช ื label-ืื
ืขื ืฉืืืืข ืจืืืงื ืื ืืืื ืืจืขืืื ืฉื ืงืืืคืื ื ืืืช, ืืชืื ืชืื ืืืชืื ืชืืช ืืชืื ืงืืฆื HTML ืืืืืื ืืืชืืื ืืื label-ืื ื input-ืื ืืืชืืืืื ืืื ืืื ืืืืฆืขืืช id:
<label for="name">User Name</label>
<input type="text" id="name" />
ืืื ืื ืจืืืงื ืืืืื ืืืชื ื ืฉืื ืืืื ืืืฉืชืืฉ ื id ืขื ืืืื ืืื ืื ืืืื ืืืฉืื ืืืื ืืืฉืชืืฉ ืืงืืืคืื ื ืื ืฉืื ืืขืื ืืื ืืงืืืืช ืืื ืืืื ืืืกืื id ืืคืื. ืืคื ืืชืื ืชืื ืืืชืื ืชืืช ืืชืืืื ืืืคืฉ ืคืืชืจืื ืืช ืืฆืืจืชืืื, ืืื ื:
<label>
User Name
<input type="text" />
</label>
ืืขื ืืืจืื ืืืชืจ ืืชืืืืืื ืืื ืืืฆืืช ืืืืื:
function MyForm() {
const id = Math.random().toString(16);
return (
<>
<label htmlFor={id}>User Name</label>
<input type="text" id={id} />
</>
);
}
ืืืขืื ืืคืืชืจืื ืืจืืฉืื ืืื ืฉืืื ืืืจืื markup ืืกืืื. ืื ืขืื ืื ืขืืื ืืื ืืื ืืื, ืืื ืืคืขืืื ืืืืช ื label ืื input ืื ืฆืืืืื ืืื ืืฉื ื. ืืืขืื ืืคืืชืจืื ืืฉื ื ืืื ืฉืื ืจืื ืื ื ืงืื ืืช ืืืชื id ื Server Side Rendering, ืื ืฉืืืฆืืจ ืื ืชืืืืืช ืืฉืจืืืงื ืืจืืฅ ืืช ืื ื render-ืื ืืืคืืคื ืืืงืื HTML ืขื ืืืืื ืฉืื ืื.
ืจืืืงื 18 ืกืืฃ ืกืืฃ ืืฆืืขืื ืคืืชืจืื ืงื ืื ืื ืืืขืื ืขื ืืืง ืืฉื useId. ืคืื ืงืฆืื ืื ืชืืืืจ ืืืื ืืืืืื ืืชืืืื ืืื ืฉืชืงืืื ืืช ืืืชื ืืืื ืืจืื ืืืจ ืืฆื ืฉืจืช ืืืฆื ืืืงืื. ืืื ืืืจื ืื ืืื ื ืืจืืืงื 18 ืืืชืื ืืช ืืืชื ืงืื ืืื:
import { useId } from 'react';
function MyForm() {
const id = useId();
return (
<>
<label htmlFor={id}>User Name</label>
<input type="text" id={id} />
</>
);
}
ื id ืฉืืงืืืื ืื ืืฆืืจืชื ืืืืืื ืืืืืืื ืฉื ืืกืืชื ืงืืืืชื ืืืจืืืช ืืื :r1:, :r3 ื :r5:. ืื ื ืื ืืืืข ืืื ืืืืงื r ืืืื ืืื ืืืื ืขื ืืืืืืื. ืื ืืฉ ืืื ืจืขืืื ืื ืืืืข ืคื ืืื ืืฉืื ืืฉืืืข ืืชืืืืืช.1 419
# ืืืื ืื ืืืื
ืืืื ืื ืืืื ืื ืื ืฉืืฉ ืื ืืจืืฉ ืืคื ื ืฉืืชืืืช ืืืืื ืืฉืื. ืืื ืืืืจ ืฉืงืืืข ืืื ืืคืงืืืื ืืืื ืืืืืื.
ืขื ืืืืื ืืื ืืืื ืื ืืื, ืืกืคืืงืืช ืขืฉืจ ืืงืืช ืืฉืืื ืืืขืช ืืขืืื ืขื ืืื. ืขื ืืืืื ืืื ืืืื ืืื ื ืืื, ืื ืืืืฉ ืื ืืขืืืจ.
ืืฉืื ื ืืืื ื ืืฉื ืืืฉ, ืื ืืงืืจืกืื ืฉืื ื ืืืื, ืื ื ืืืืข ืืืคืฉ ืืืืืืช ืืช ืจืืข ื"ืืื!", ืืจืืข ืืื ืฉืื ืืืจืื ืคืชืืื ืืกืชืืจืื ืืืจื ืฉืืจืื ืืื ืืื ืงืฉื ืืืืื ืืืชื, ืืจืืข ืืื ืฉืื ืืืืื ืืื ืืืื ืืฉืชื ื ืืื ืืืชืืื ืื ืชืื ืื ืืืืฉืื. ืื ืจืืข ืืืคืชื ืืืจื ืืืืื ืื ื ืืฉื ืฉืื ืืืื.
ืืฉืืื ืืืืืชืืช (ืืื ืืืืื), ืืื ืื "ืื ืขืืฉื ืคืงืืื X ืื Y", ืืื "ืื ืืืืื ืืื ืืืื ืฉืื ื ืฆืจืื ืืื ืืืืื ืืช ืืืื ืืื".
1 419
# ืืืื ืืืืชื: ืืงืฉืจ ืืื globals ืื ืืงืื ื DOM ื vitest
ืืฉ ืืืื ืืื ืื ืื ืื ืฉืืืื ืื ืืฉืืช ืขืืื ืคืชืืื ืืืืื ืืืืืืจ ืื ืฉืืื ืืืืงื ืื ืืฉืื. ืื ืงืจื ืื ืืืื ืขื ืื ืื ืื ืืืจืงืช ืืืืืืืืืื ืฉื vitest. ืืื ืื ืื ืืืืื ืืืืจ ืฉืื ืชืืืืงื ืืชื ืืฉื globals ืืงืืืฅ ืืงืื ืคืืืืจืฆืื ืืฆืืจื ืืืืช:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
test: {
globals: true,
environment: "jsdom",
},
})
ืื ืืื ืงืืฆื ืืืืืงืืช ืฉืืื ืชืืืื ืืืกืชืื ืขื ืื ืฉืืฉ describe, it ื expect ืืืืื ืขืื ืืื ืืฉืชื ืื ืืืืืืืืื. ืืจืืจืช ืืืืื ืืื false ืืื ืฆืจืื ืืืืื ืืื ืืื ืขื ืฉืืจื ืืืืช ืืชืืืืช ืงืืืฅ ืืืืงืืช:
import { describe, it, expect } from 'vitest';
ืขื ืืคื ืืื ืกืืื ืืืชืจืืฉ, ืืื ืืกืชืืจ ืฉืืืืจืงืช ื globals ืืฉ ืขืื ืืคืงื ืืืื ืืจืื ืืืชืจ ืืืจืืฉ: ืืขืช ืืืืงืช ืงืืืคืื ื ืืืช ืจืืืงื ืขื react-testing-library, ืืกืคืจืื ืชื ืงื ืืช ื DOM ืืื ืืืืงื ืืืืืงื ืื ื globals ืืืืจืงืื, ืืื ืื ืชื ืงื ืืืขืืืื.
ืืืืืื ืืืจืืช ืืงืืืฅ ืืืืงืืช ืืื:
import { describe, it, expect } from 'vitest';
import { screen, render } from '@testing-library/react';
import App from './App';
describe('App Changes Colors', () => {
it('shows a button', () => {
render(<App />);
const btn = screen.getByRole('button', { name: '0' });
expect(btn).toBeTruthy();
});
it('shows a button', () => {
render(<App />);
const btn = screen.getByRole('button', { name: '0' });
expect(btn).toBeTruthy();
});
});
ืื ืืฉ ืืืจืงืช ืืืืืืืืื ืืื ืขืืื, ืืื ืืืขืืื ืืืืืงื ืืฉื ืื ื ืืฉืืช ืื getByRole ืชืงืืข ืขื ืฉื ื ืืคืชืืจืื ืขื ืืืกื, ืืื ืืืืืืงื ืฉืืื ืืฆืจ ืืืฉื ื ืืืืืืงื ืืจืืฉืื ื ืฉืื ื ืืืง.
ืืคืื ืงืฆืื ืืจืืืื ืืืช ื testing-library ืฉืืืคืืช ืืกืืคืืจ ืืืืืงื ื ืงืจืืช cleanup ืืื ืื ืฉืืืกืืจ ืื ืืชืืขืื ืฉืื:
Please note that this is done automatically if the testing framework you're using supports the afterEach global and it is injected to your testing environment (like mocha, Jest, and Jasmine). If not, you will need to do manual cleanups after each test.
ืืื ืื ืืชื ืขืืืืื ื vitest ืืื ืืืจืงืช ืืืืืืืืื ืชืฆืืจืื ืืืืืจ ืืืคืขืื ืืช cleanup ืืขืฆืืื. ืืื ืืืชืจ ืงื ืคืฉืื ืืืืืืง ืืช ืืืจืงืช ืืืืืืืืืื ืืื ืืืฉืื ืขื ืื (ืขื ืืขืงืืฆื ืืืื).1 419
# ืืืค ืจืืืงื: ืืื ืื ืืืฉืชืืฉ ื useDeferred
ืืฆื Concurrent Mode ืืืืฉ ืฉื ืจืืืงื ืคืืชื ืืืคืฆืื ืืืจืื ืฉืืคืืจื ืืืฆืืขืื, ืืื ืืื ืื ืคืืฆ'ืจ ืืืฉ ืื ืงื ืืืชืืืื ืืืืฉืชืืฉ ืื ืื ื ืืื.
ื ืชืืื ื ืืงืื ืืื:
function BrokenHugeList() {
const [search, setSearch] = useState('');
const deferredSearch = useDeferredValue(search, { timeoutMs: 5000 });
function handleChange(e) {
setSearch(e.target.value);
}
console.log(`1 seach = ${deferredSearch}`);
const searchResults = items.filter(i => i.includes(deferredSearch));
console.log('2');
return (
<div>
<input type="text" value={search} onChange={handleChange} />
<ul>
{searchResults.map(i => <li key={i}>{i}</li>)}
</ul>
</div>
);
}
ืืงืื ืืฉืชืืฉ ื useDeferredValue ืืืืจื ืืฉืคืจ ืืืฆืืขืื. ืืืืฉืื ืืื ืฉืืฉืชืืฉืื ืืงืืืื ืืงืกื ืืชืืื, ืืื ืืืื render ื ืืกืฃ ืฉืืขืงืืืชืื ืืืขืจืืช ืชื ืกื ืืฆืืืจ ืขื ืืืกื ืืช ืืคืจืืืื ืฉืืชืืืืื ืืืืคืืฉ, ืืื ืืืืฆืข ืืฆืืืจ ืืฉืชืืฉ ืืงืืื ืขืจื ืืืจ ืืชืืื ืืจืืืงื ืืืื ืืืคืกืืง ืืช ืื ืืขืืืื ืฉืื, ืืืจืืง ืืคื ืืช ืื ืฉืืื ืจืฆื ืืฆืืืจ ืขื ืืืกื ืืืืชืืื ืืืืฉ ืขื ืืืงืกื ืืืขืืืื.
ืืื ืืืืช ืื ืฉืงืืจื ืจืง ืฉืฆืจืื ืืืืืจ ืฉืชื ื ืงืืืืช ืฉืืกืืฃ ืืืืืืช ืืคืขืื ืืจืขืชื ื:
1. ืืื ืืืขืช ืื ืืฆืืืจ ืืืชืืื, ืจืืืงื ืื ืืคืขืื render ื ืืกืฃ ืขื ืืขืจื ืืืฉื ืฉื ืืงืกื ืืืืคืืฉ. ืื ืืืืจ ืฉืืฉื ืกืชืื ืืืกื ืืื ืืคืืชืื ืื ืื ื ื ืจืื ืืช ืืืืคืกื ืฉื 1 ื-2 ืืืคืืขื ืคืขืืืื ืืืจื ืื ืฉืื ืื ืืงืกื, ืคืขื ืืืช ืขื ืืืงืกื ืืืฉื ืืคืขื ืฉื ืื ืขื ืืืืฉ.
2. ืจืืืงื ืืื ืืงืจื ืื ืงืืกื ืืื ืืฆืืื "ืืขืฆืืจ ืืืืฆืข" ืืช ืืืืืช ื filter ืฉืื ื ืืชืืชื. ืืืื ืื ืืฉืืจืฉืืื ืืกืคืืง ืืืืื ืื ืฉืจืื ืืขืืืื ืืื ืืืฉืืืืช, ืื ืื ื ืขืืืื ื ืจืื lag-ืื.
ืฉืืืื ืฉืชื ืืืขืืืช ืืืืจ ืฉืื ืืฉ ืื ื ืืืืืงื ืืกืืืืช, ืื ืจืง ืฉ useDeferredValue ืื ืืขืืืจ ืืื ืืคืืื ืืืืง. ืืืื ืฉืืืชื ืืืืืงื ืืกืืืืช ืชืืคืขื ืคืขืืืื: ืคืขื ืืืช ืขื ืืกืืืื ืืืฉื ืืคืขื ืฉื ืื ืขื ืืืืฉ.
ืคืืชืจืื ืืื ืืืคืขืื ืืืคืืื ืืื ืืืฉืชืืฉ ื Memo, ืืืืืื ืืงืื ืืื ืื ืกืืื ืืืขืืืช ืจื ืืจ ืืคืื ืื ืืชื ืชืืฆืื ืงืฆืช ืืืชืจ ืืืืจื:
const HugeList = React.memo(function HugeList(props) {
const { search } = props;
console.log(`3, search = ${search}`);
const searchResults = items.filter(i => i.includes(search));
console.log('4');
return (
<div>
<ul>
{searchResults.map(i => <li key={i}>{i}</li>)}
</ul>
</div>
);
});
function App() {
const [search, setSearch] = useState('');
const deferredSearch = useDeferredValue(search, { timeoutMs: 5000 });
function handleChange(e) {
setSearch(e.target.value);
}
return (
<>
<input type="text" value={search} onChange={handleChange} />
<HugeList search={deferredSearch} />
<hr />
</>
);
}
ื .ื. ืื ืืืจื ืืฉืื ืื, ืืขืืืื ืขื 50 ืืืฃ ืคืจืืืื ืืืืจืช ืฉืืืืจืืช ืืชืืืื ืฉื ืืงืืืคืื ื ืื ืื ืชืืื ืืืืืจื, ืืื ืขื ืืื ืืืคืื ืื ืืคืืื 20 ืืืฃ ืคืจืืืื ืฉืืืืฉ ื useDeferredValue ืื ืืืื ืืชืช ืฉืืคืืจ ืืืจืืฉ ืืืื ื ืืชืืืื.1 419
ืืืืจ ืืืื ืืขื ืืื ืขื ื ืชืื ืื ืจืืืื ืืื ืฉืืืืืง ืืชืืืจ ืืคืืกื ืืืืืงืจ
https://alexkrupp.typepad.com/sensemaking/2022/06/angular-without-ssr-is-faster-than-nextjs-with-ssr-i-have-the-data.html
1 419
# ืืชืืื ื ืืืืืื
ืืจืืจ ืฉืืืชืจ ืงื ืืืืจ ืขื ืืคืจืืื - ืืืืื coverage ืืืืืข, ืืื ืืื ืืืืืงืืช ืฆืจืืืืช ืืจืืฅ, ืื ืืชืืืง ืืช ืฉืจืช ื CI ืฉืืจืืฅ ืืืชื ืื ืืืืื ืืื ืฆืจืื ืืืชืื ืืช ืืืืืงืืช.
ืืื ืืขืจื ืืืืืชื ืืื ืืชืืื ื ืืืืืื - ืืื ืืืื ืื ืื ื ืืืืงืื? ืืืื ืขืจื ืืงืืืื ืืื ืกืื ืืืืงืืช? ืืื ืื ืขืืื ืื ื?
ืื ืื ืขืืืจ ืื ืกืืข ื 100 ืงื"ืฉ ืืืืืื ืืื ื ืืื. ืื ืื ืงืฉื ืืืจืืื, ืืฉืืื ืืืฉืืื ืืื ืขื ืืชืืื ื ืืืืืื. ืืฉืื ืืืื ืืจืืจ ืืฉืืจ ืืืื ืืขืฆืื.
1 419
# ืืืืืจ ืฉื ืืฆืืจืชืืืช
ืืฉืงืขื ื ืืืจ ืื ืื ืืจืื...
ืื ืืืงืืืืช ืฉืื ื ืืืืื ืืคืืฆ'ืจ ืืื...
ืื ืืืฉ ืืืขื ืขืืื...
---
ืื ืืืฉืคืืื ืืืื ื ืฉืืขืื ืืื ืืืืจืื ืื ืื ืืืงืจื. ืจืื ืืื ืฉืื, ืืฆืืืชืื ืืืืจืืื ืื ืื ืืืืืื ืืืืืฉื, ืืืฉืืฉืื ืื ืืืื ืืืืืื ืืจืฆืื ืื ืืื ืืืืขืืช ืืื ืืืชืขืงืฉ ืืืืืฉืื. ืืื ื ืืื ืืืืืื ืืฆื ืืืื ื. ืืจื ืืืชื ืคืืฆ'ืจ ืฉืื ืื ื ืื ืกืื ืืื ืืช ืืืจ ืงืืื ืืืคืฉืื ืืืืืืฉืื ืืขืจืืช ืืขืืื, ืื ืื ืคืชืืื ืจืง ืื ื ืื ืืฆืืื ืืื ืืช ืืืชื? ืื ืคืชืืื ืจืง ืืฆืืืช ืฉืื ืื ืืฆืืื ืืื ืืช ืืืชื? ืืื ืื ืืืืจ ืขืืื ื?
ืืื ืื ืฉืืื ืฉื ืืืืจืื. ืืืฉืืขืืช ืฉื ืืืฉืืื ืืื ืื ืฉืื ื ืืกืชืื ืขื ืืขืืืช ืืืืืจ ืื ืืืชืงืื ืขื ืืคืืฆ'ืจ. ืืืฉืืขืืช ืฉื ืืืฉืืื ืืื ืฉืื ื ืขืืื ืืขืืื ืืื ืจืืื ืชืืฆืื. ืืืฉืืขืืช ืืื ืืืจ ืฉืืืจ ืฉื ืืืืื, ืื ืื ืฆืขื ืงืืืื ืืืงื ืืืชื ืฉื ื ืฆืขืืื ืืืืจื. ืืืฉืืื ืืื ื ืื ืืืืื ืืืจื ืืฆื ืฉื ื ืฉื ืขืืืื ืฉืืขืฆื ืืื ืื ืืืฉื ืื ืืชื ืขืืฉื. ืื ืืืืื ืืืจื ืืฆื ืฉื ื ืฉื ืขืืืื ืฉืืขืฆื ืืืชืื ืชืื ืฉืื ืืื ืืืฉื ืื ืื ืขืืฉืื. ืฉืืจืืข ืืื, ืื ืื ืืฉื ื ืื ื ืงืืืจ ืืช ืื ืื ืฉืขืฉืื ื ืืืฆื ืฉื ื ืืืืจืื ื ืื ืชืืื ืืืืฉ ืื ื ืืฉืื ืืืืคื ืฉืื ืื ื ื ืืฆืืื - ืืืืช ืืขืืืื ืขื ืืกืืื ืชืืื ืืื.
ืืชืคืืกืช ืืขืืื ืฉื ืจืืื ื ืืืช ืืกืงื ื ืืืชืจ ืืื ืงืฉื ืืขืืืื.
---
ืืืขืื ืืืืช ืืืืืื ืืืืืช ืจืง ืฉื ื ืคืืชืจืื ืืช: ืื ืื ื ืืืืืื ืืืืืื ืฉืืฆืื ื ืื ืืืื ืืืฉืืื ืืช ืืื ืืื. ืฉืืฉืืชืื ืชืื ืืชืืืืื ืืขืืื ืขื ืคืืฆ'ืจ ืืกืืื ืื ืืืืืื ืืืืืข ืืชืืฆืื ืขืืืืช; ืื ืฉืื ืื ื ืืืืืื ืืืืืื ืืืืฅ ืืช ืืืืฉืืื ืืช ืืืืง ืืชืืืื ืืคืืชืื, ืืืื ืืช ืื ืื ืื ืื ืฉืืืื ืืืชื ืืืืคืื ืืืชื ืื ืกืืืื.
ืืคืืชืจืื ืืจืืฉืื, ืืจื ืืืื ืื ืืืืืฉื ืืื ืืขืืื ืื ืฉืื ืืขืฉืืช ืคืืืช: ืืืืืก ืืชืื ืชืื ืฉืืขืืืคืื ืืงืืช ืคืืืช ืกืืืื ืื, ืืขืืื ืจืง ืขื ืคืืฆ'ืจืื ืฉืืคืฉืจ ืืกืืื ืืืจ, ืืืฆืืจ ืชืืืื ืคืืชืื ืฉืื ืื ืคืืฆ'ืจ ืขืืืจ 20 ืฉืืืื ืฉื ืืืงืืจืช ืืืืคืืื ืืคื ื ืฉืืืืข ืืฆืืืช ืืืื ื, ืืืื ืืฉืื ืืืจ ืืืืข ืืื ืืขืืก ืืืืื ืืคืืชืื. ืื ืืืื ืืืืืฉื. ืืจืืื ืื ืฉืจืืฆืื ืืืืช ืืืชืจ ืจืืืง ืืืจื ืืืืช ืืืืืื ืืืืฆืจ ืืืื ืืืืืช ืืื "ืืื ืืืืื ืชืืงื ืช ืืืื" ืื "ืืื ืคืืฆ'ืจืื ืืืืฉืช ืืฉืืืข" ืืืคืืื ืืืขื ืืฉ ืขื ืชืงืืคืืช ืืจืืืืช ืืื ืคืืฆ'ืจืื.
ืืคืืชืจืื ืืฉื ื , ืืฉืืื ืืืชืืืื ืืื ืืืชืจ ืขื ืืฉืืื ืืช ืื ืื ื ืืืืืื ืืืคืื ืืืชื ืืืฉืื ืืืชืจ ืืื ืืืื: ืื ืื ื ืืืืืื ืืืฆืืข ืชืงืฉืืจืช ืืืื ืืืชืจ ืืื ืฆืืืชื ืืคืืชืื ืืฆืืืช ืืคืจืืืืงื; ืื ืื ื ืืืืืื ืืืฆืืื ืืื ืคืืฆ'ืจ, ืืื ืขื ืืืืคืืื, ืื ืืืืืช ืืื ืฉืืืจืื ืื ื ืืฉืื ืืขืืื ืขืืื; ืื ืื ื ืืืืืื ืืชืช ืืืชืื ืชืื ืืขืืื ืขื ืืื ืคืืฆ'ืจืื ืืืงืืื ืืืจืืืช ืืืื ืืืืื ืืืฉื ืืืชื ืืืชืจ ืืขื ืืืื ืคืืฆ'ืจืื ืืฃ ืืื ืื ืจืืฆื ืืขืืื, ืืืืื ืืืชื ืืงืืืจ. ืืงืฆืจื ืืืฆืืจ ืชืจืืืช ืื ืืชืื ืชืื ืืจืืืฉื ื ืื ืืืืื "ืืจืืข ืืื ืื ืืืฉื ืืื ืืืชืงืื ืขื ืืคืืฆ'ืจ ืืื. ืืืื ื ืฉืื ืืืชื ืืฆื ืืืืื ืืขืชืื ื ืืืืจ ืืืื".
ืชืจืืืช ืืจืืื ืืช ื ืืืืช ืืฉืืื ืืช ื ืืชื ืช ืืื ืืืื ืฉืงื ื ืคืฉื. ืชืจืืืช ืืจืืื ืืช ืฉืืืืงืช ืืฉืืื ืืช ื ืืชื ืช ืืืชืื ืชืื ืืืคืฉ ืืฆืืจืชื ืืืืคืฉืจืช ืคืืชืื ืืขืจืืืช ืืืืืช ืืืชืจ, ืืืื ืฉืืืื ืื ื ืืืชืจ ืงื ืืงืืช ืกืืืื ืื ืฉืืืืืืื ืขื ืืืืฆืจ. ืืื ืื ืืืจืืื ืืืฅ ืืืืคืฉืจืช ืืืชืื ืชืื ืืืชืจืื ืืขืืืื ืืื ืืืคืฉ ืงืืฆืืจื ืืจื ืจืง ืืฉืืื ืืกืื "ืื" ืขื ืขืื ืคืืฆ'ืจ. ืืืชืื ืช, ืืืช ืืชืจืืืช ืืืจืืื ืืช ืฉืื ื ืืขืืืฃ ืืขืืื ืื.
1 419
# ืจืืคืงืืืจืื ื ืืชืื ืืช ืืื ืื ืขืฆืืื (ืื: ืืกืืื ืฉืชืื ืืช ืืื ืื ืขืฆืืื ืื ืขืืื)
ืืืื 7 ืฉื Advent Of Code ืืืืจืื ืงืืืื ืืช ืคื ืื ื ืืืืจื ืฉื ืกืจืื ืื ืฉื ืืกื ืืืื ืขืืื ื ืืืืืืชื ืชืืงืคื ื. ืืฉืืื ืืขืฉืืช ืืช ืื ืื ืืื ืฆืจืืืื ืืืฆืื ืืงืื ืืื ืืขืืื ืื.
## ืืืง ืจืืฉืื
ืืงืื ืฉื ืืชืจืืื ืืื ืจืฉืืืช ืืืืงืืืื ืฉื ืืกืจืื ืื ืขื ืฆืืจ ืืืคืงื ืืืื, ืืืฉื:
16,1,2,0,4,2,7,1,2,14
ืืื ืื ื ืฆืจืืืื ืืืฆืื ืืื ืืงืื ืืื ืืขืืื ืื. ืืืงืื ืืื ืืื ืืฉืืืื ืืืื ืื ืฉืืื ืงื ืืืืื ืืืืืข ืืืื, ืืืืืจ ืฉืกืืื ืืฆืขืืื ืฉืื ืืกืจืื ืื ืฆืจืืืื ืืขืฉืืช ืืื ืืืืืข ืืืขื ืืืื ืืื ืงืื.
ืืื ืืืืืฆืื ืืืช ืืคืชืืจ ืืช ืืชืจืืื ืืื ืืื ืฉืจืืฆื ืืืืช ืืืืฉื ืืื ืืืช ืขืฆืืื ืืื ืืืชืื ืืืืงื ืืฉืืื ืื ืืกืจืื ืื ืืืื. ืืจืืื ืืชืืชื ืืฉืื ืืื:
class CrabsSwarm
def initialize(filename)
@crabs = File.read(filename).split(',').map(&:to_i)
end
def fuel_needed_to_reach(target)
@crabs.map {|e| (e - target).abs }.sum
end
def solve
target = (@crabs.min..@crabs.max).min_by {|target| fuel_needed_to_reach(target) }
fuel_needed_to_reach(target)
end
end
ืืฉ ืืื ืขืื ืืืื ืืืืงืืช ืืคืฉืจืืืช ืืืืืงืืช ืืืืื ืืืื ืื ืืืืืื ืืืืงืืช. ืื ืื ืืฉืื ืืฉืืื ืืกืืคืืจ ืฉืื ื. ืชืจืื ืื ืงืืจื ืืืืง ืืฉื ื.
## ืืืง ืฉื ื - ืืฉื ืื ืืช ืืืืฉืื
ืืืจืืช ืฉืืฆืืชื ืืงืื ืืืฉ ืืื ืืฉืืื ืืกืจืื ืื (ืขื ืงืื ืืืืืื ืื ืืืชื ืืฉืืฆืช 2), ืื ืื ืืกืืืื ืืืืช ืืฉื. ืืืกืืจ ืืชืจืืื ืืื ืฉืืฆืืืืช ืฉื ืื ืกืจืื ืื ืฆืืจืืช ืืืง ืืฆืืจื ืืื ืืจืืช ืืื ืืกืืืจื ืืฉืืื ืืช. ืืืืืจ ืืฉืืื ืืขืืืจ ืืจืืง ืฉื 3 ื ืงืืืืช ืืกืจืื ืฆืจืื ืืืฉืชืืฉ ื 1+2+3 ืืืืืจ 6 ืืืืืืช ืืืง.
ืขื ืื ืชืื ืื ืืืืฉืื ื ืฉืืื ื ืืืฆืื ื ืงืืื ืืืฉื ืืืื ืืืืื ืืกืจืื ืื ืืืชืงืืฅ. ืืืขืื, ืฉืืืจืืช ืฉืืืืง ืืจืืฉืื ืืฉืืชื ืฉืืืืงืชื ื ืืื ืืช ืืชืจืืื ืืืืืงื ืืคืื ืงืฆืืืช, ืืฉืื ื ืืืืข ืืืจืืื ืืช ืืืชื ืืืืงื ืืืืง ืืฉื ื ืื ื ื ืืืฅ ืืืชืื:
class CrabsSwarmPart2 < CrabsSwarm
def fuel_needed_to_reach(target)
@crabs.map {|e| (0..(e - target).abs).sum }.sum
end
end
ืืื. ื map ืืืืืง ืืจืืฉืื ืืืคืืข ืฉืื ืื ืืืืง ืืฉื ื. ืื ืื ื ืจืื ืืฉืื ืืืืื ืื ืืืจืื ืคืจืืืงืืื ืขืืฆืจืื ืืื. ืืื ืืขืืื ืืืืืชื ืืืช ืืืืื ืืืืืช ืืขืื.
## ืื ืื ื ืืืื ืืืืจืืฉื ืืืืฉื
ืืืขืื ืคื ืืื ืฉืืืงืื ืืืคืฉ ืื ืื ื ืืืื ืืืืจืืฉื ืืืืฉื, ืื ื ืืืฉืื ืืืชืขืงืฉ ืืืชืืื ืืช ืืืจืืฉื ืืืืฉื ืืกืืืื ืฉืืืจ ืืชืืชื. ืืืืจื ืืื ืืื ืฉืืืชืจ ืืจืืฉืืช ืืืคืืขื ืืื ืืชืืืื ืืกืืืื ืฉืืฉืืชื ืขืืื ืืจืืฉ, ืืืืืฉ ืื ืืจืืฉื ื ืืกืคืช ืืืคื ืืืืชืจ ืืืืชืจ ืงืฉื.
ืืืืืจื ืืืื ืืื ืืฉืืื - ืื ืื ื ืืืื ืืืืจืืฉื ืืืืฉื? ืืืงืจื ืฉื ืืกืจืื ืื ืื ื ืืืื ืฉืืฉ ืกืืืื ืืื ืฉืื ืืจืฆื ืืืืฉืื ืืืืืืฃ ืืื ืชืืืืจื ืืขืชืื, ืืฉืืื ืชืืืืจื ืกืจืื ืืื ืฉืื ืื ืืื ืืื ืืฆืจืืืช ืืืืง ืฉืืื. ืืืช ืื ืงืืื ืฉืฉืืื ืื ืืืชืืืฅ ืืืฉืืชื ืืืง ืืืงืื ืืื ืืชืช ืืืชืจ ืืฉืงื ืืืจืืฉื ืืืืฉื. ืื ื ืื ืืกืืื ืืฉื ื ืฉืื:
class CrabsSwarm
def initialize(filename)
@crabs = File.read(filename).split(',').map(&:to_i)
end
def energy(from, to)
(from - to).abs
end
def fuel_needed_to_reach(target)
@crabs.map {|e| energy(e, target) }.sum
end
def solve
target = (@crabs.min..@crabs.max).min_by {|target| fuel_needed_to_reach(target) }
fuel_needed_to_reach(target)
end
end
ื ืืื, ืงืื ืืืชืจ ืืจืื, ืืื ืื ืืืชืจ ืงื ืืืจืืื ืื ืงืืื ืื ืืื ื. ืคืืชืจืื ืืืืง ืืฉื ื ืืืื ืืกื ืืื ืฉืื ืื ืฉื ืืคืื ืงืฆืื energy:
class CrabsSwarmPart2 < CrabsSwarm
def energy(from, to)
(0..(from - to).abs).sum
end
end
ืืื ืืืืืง ืื ืฉืืืืง ืืฉื ื ืืืืจ ืขืืื.
ืืืืฉืื ืืืชื ืืืื ืืขืืื ืืืืืชื ืืฉ ืืฉืืืืช: ืื ืืืืจ ืฉืื ืื ื ืืืื ืื ืืขืืื ืื ืืืจืื ืืกืืกืืื ืืืขืจืืช ืืฉืืื ืืืืฉ ืคืืฆ'ืจืื ืืืฉืื, ืืฉืืื ืงืื ืืฉืื ืืืื ืืฉื ืืช ืืืชื. ืืืฉื ืืืืช ืืฉืืืจื ืืช ืื ืงืื ืืืขืจืืช "ืื" ืืขืืืจืช ืืืืฆืจ ืืขืจืืืช ืฉืืืชืืืืช ืืืจืืฉืืช ืืืืืชืืืช ืืืขืืื ืืืช ืฉื ืืืืื.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
