uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 420
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
-530 kunlar
Postlar arxiv
ToCode
1 420
ืงื•ื ืกืคืฆื™ื•ืช ืฉื ื™ ืกื™ืคื•ืจื™ื ืœื ืงืฉื•ืจื™ื ืขืœ ืคืขืจื™ ืฆื™ืคื™ื•ืช ืฉืื›ืœื• ืœื™ ื™ื•ืชืจ ืžื“ื™ ื–ืžืŸ ื”ืฉื‘ื•ืข (ื‘ื˜ื— ืžืกืคื™ืง ื‘ืฉื‘ื™ืœ ืœื”ื•ืคื™ืข ืคื” ื‘ื‘ืœื•ื’). ื”ืจืืฉื•ืŸ ื”ื•ื ื”ืฉื™ืœื•ื‘ ื‘ื™ืŸ ื“ื•ืงืจ ืœื—ื•ืžืช ื”ืืฉ ufw. ื‘ืžืฉืคื˜ ืฉื ื™ ืืœื” ืœื ืขื•ื‘ื“ื™ื ื˜ื•ื‘ ื™ื—ื“. ื›ืฉืžืคืขื™ืœื™ื ufw ื›ื“ื™ ืœื—ืกื•ื ื—ื™ื‘ื•ืจื™ื ื ื›ื ืกื™ื ื”ื•ื ืœื ื—ื•ืกื ื—ื™ื‘ื•ืจื™ื ืฉืžืžื•ืคื™ื ืœืงื•ื ื˜ื™ื™ื ืจื™ื ื‘ื“ื•ืงืจ. ื‘ืžื™ืœื™ื ืื—ืจื•ืช ืื ื”ืคืขืœืชื ืงื•ื ื˜ื™ื™ื ืจ ืฉืžืงืฉื™ื‘ ืขืœ ืคื•ืจื˜ 8080:
docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
ื•ืื– ืชืคืขื™ืœื• ufw ื›ื“ื™ ืœื—ืกื•ื ื—ื™ื‘ื•ืจื™ื ืžื‘ื—ื•ืฅ ืœืคื•ืจื˜ 8080, ื”ื—ื™ื‘ื•ืจื™ื ืขื“ื™ื™ืŸ ื™ื™ื›ื ืกื• ื•ื™ื’ื™ืขื• ืœืงื•ื ื˜ื™ื™ื ืจ. ืื ื™ ืžื•ื“ื” ื›ืฉืจืื™ืชื™ ืืช ื”ื”ืชื ื”ื’ื•ืช ื”ื–ืืช ืœื ื”ืืžื ืชื™. ื”ื™ื™ืชื™ ื‘ื˜ื•ื— ืฉืื ื™ ืขื•ืฉื” ืžืฉื”ื• ืœื ื‘ืกื“ืจ ื‘ืžืงื•ื ืื—ืจ. ืื—ืจื™ ื›ืžื” ืฉืขื•ืช ื”ืœื›ืชื™ ืœื’ื•ื’ืœ ื•ืžืฆืืชื™ ืฉื”ืกื™ืคื•ืจ ืžืชื•ืขื“ ืœืžืฉืœ ื›ืืŸ: https://blog.jarrousse.org/2023/03/18/how-to-use-ufw-firewall-with-docker-containers/ ื•ื›ืืŸ: https://www.baeldung.com/linux/docker-container-published-port-ignoring-ufw-rules ื•ื›ืืŸ: https://www.howtogeek.com/devops/how-to-use-docker-with-a-ufw-firewall/ ื”ืกื™ืคื•ืจ ื”ืฉื ื™ ื”ื•ื ืขืœ JanusGraph ื•ื™ืฆื™ืจืช ืื™ื ื“ืงืก ื™ื™ื—ื•ื“ื™ ื‘ื’ืจืฃ. ื‘ืขืžื•ื“ ื”ืชื™ืขื•ื“ ื”ืจืืฉื™ ื”ื ืžืฉืชืคื™ื ืืช ื”ืคืงื•ื“ื” ืฉื™ื•ืฆืจืช ืื™ื ื“ืงืก ื™ื™ื—ื•ื“ื™:
index = mgmt.buildIndex('byConsistentName', Vertex.class).addKey(name).unique().buildCompositeIndex()
ืจืง ืžื”, ื–ื” ืœื ืขื•ื‘ื“. ื‘ืฉื‘ื™ืœ ืœื™ืฆื•ืจ ืื™ื ื“ืงืก ื™ื™ื—ื•ื“ื™ ืฉื’ื ืžื•ื•ื“ื ืฉื“ื‘ืจื™ื ื ื•ืฆืจื™ื ื‘ืฆื•ืจื” ื™ื™ื—ื•ื“ื™ืช ืฆืจื™ืš ืœื‘ืงืฉ ืžืžื ื• ืœื”ืฉืชืžืฉ ื’ื ื‘ืžื ื’ื ื•ืŸ ื”ื ืขื™ืœื” ืื• ื‘ืžื™ืœื™ื ืื—ืจื•ืช:
index = mgmt.buildIndex('byConsistentName', Vertex.class).addKey(name).unique().buildCompositeIndex()
mgmt.setConsistency(index, ConsistencyModifier.LOCK)
ื•ื’ื ื–ื” ืžืชื•ืขื“ ื™ืคื” ื›ืฉื™ื•ื“ืขื™ื ืื™ืคื” ืœื—ืคืฉ: https://docs.janusgraph.org/advanced-topics/eventual-consistency/ ื’ื ืื ืฉื ื™ ื”ืกื™ืคื•ืจื™ื ื”ื ืขืœ ืฉืชื™ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืฉื•ื ื•ืช ื™ืฉ ืงืฉืจ ื—ื–ืง ื‘ื™ื ื™ื”ื. ื‘ืฉื ื™ ื”ืžืงืจื™ื ื—ื•ืกืจ ืชืฉื•ืžืช ืœื‘ ื™ืฆืจื” ื‘ืขื™ื•ืช ืฉื‘ื”ืžืฉืš ื”ืจื‘ื” ื™ื•ืชืจ ืงืฉื” ืœืชืงืŸ. ื‘ื›ืชื™ื‘ืช ืงื•ื“ ืฉื™ืžื• ืœื‘ ืœื”ืฉืชืžืฉ ืชืžื™ื“ ื‘ืžื ื” ื’ื“ื•ืฉื” ืฉืœ ืกืคืงื ื•ืช ื‘ืจื™ืื” ื•ืชืžื™ื“ ืœื‘ื—ื•ืŸ ืืช ื”ื”ื ื—ื•ืช ืฉืœื›ื, ื’ื ื›ืฉื“ื‘ืจื™ื ื ืจืื™ื ืžื•ื‘ื ื™ื ืžืืœื™ื”ื.

ToCode
1 420
ื›ืžื” ื–ื” ื‘ืืžืช ืขื•ืœื”? ื”ืžื—ื™ืจ ื”ืืžื™ืชื™ ืฉืœ ื‘ืขื™ื” ื›ื•ืœืœ ืœื ืจืง ืืช ื”ืขืจืš ืฉืื ื—ื ื• ืžืคืกื™ื“ื™ื ื‘ื–ื” ืฉืœื ืคื•ืชืจื™ื ืื•ืชื”, ืืœื ื’ื ืืช ื›ืœ ื”ื–ืžืŸ ื”ืื‘ื•ื“ ืฉืื ื—ื ื• ืฉื•ืจืคื™ื ืขืœ ื ื™ืกื™ื•ื ื•ืช ื ื•ืกืคื™ื ืœื”ืชืžื•ื“ื“. ืฉืจืช ื™ืฆื™ื‘ ืฉืžื—ื•ื‘ืจ ืœืžืขืจื›ืช ื ื™ื˜ื•ืจ ืฉื’ื™ืื•ืช ื™ืืคืฉืจ ืœื™ ืœืจืื•ืช ืžื™ื“ ื›ืฉื™ืฉ ื‘ืขื™ื” ื•ื’ื ืœื—ืคื•ืจ ื‘ืžื“ื“ื™ื ืฉืœ ื”ืฉืจืช ื›ื“ื™ ืœื”ื‘ื™ืŸ ืžื” ื ืฉื‘ืจ. ืื‘ืœ ืื ื”ืฉืจืช ืœื ื‘ื ื•ื™ ื›ืžื• ืฉืฆืจื™ืš ื’ื ื™ื”ื™ื• ื‘ื• ื™ื•ืชืจ ื‘ืขื™ื•ืช, ื•ื’ื ื›ืฉื›ื‘ืจ ื™ืฉ ื‘ืขื™ื” ืื™ืŸ ืœื™ ื“ืจืš ื˜ื•ื‘ื” ืœื—ืงื•ืจ ืื•ืชื” ื•ืœืชืงืŸ ืืช ื”ื“ื‘ืจ ื”ืืžื™ืชื™ ืฉืฉื‘ื•ืจ, ื•ืื– ืฆืจื™ืš ืœืฉืจื•ืฃ ืฉืขื•ืช ื‘ื ื™ืกื™ื•ื ื•ืช ืขื“ ืฉืžื’ื™ืขื™ื ืœืžืฉื”ื•. ืจื•ื‘ ื”ื–ืžืŸ ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืจืื•ืช ืืช ื”ื‘ืขื™ื•ืช ืฉืขื•ืฆืจื•ืช ืื•ืชื ื•, ืื‘ืœ ืื™ืŸ ืœื ื• ื–ืžืŸ ืื• ื™ื“ืข ืžืชืื™ื ื›ื“ื™ ืœืคืชื•ืจ ืื•ืชืŸ ืื• ืฉื™ืฉ ื‘ืขื™ื•ืช ืฉื ืจืื•ืช ื™ื•ืชืจ ื“ื—ื•ืคื•ืช. ื•ืœื›ืŸ ื”ืืชื’ืจ ืฉืœื ื• (ื›ืžืคืชื—ื™ื, ื›ื™ื–ืžื™ื, ื›ืžื ื”ืœื™ื) ื”ื•ื ืœื–ื”ื•ืช ืืช ื”ืขืœื•ืช ื”ืืžื™ืชื™ืช ืฉืœ ื‘ืขื™ื”. ื‘ืขื™ื” ืฉืขื•ืœื” ื™ื•ื ืขื‘ื•ื“ื” ืคืขื ื‘ื—ื•ื“ืฉ ื›ืœ ื—ื•ื“ืฉ ื”ื™ื ื“ื—ื•ืคื”, ื’ื ืื ื”ื™ื•ื ื”ื•ื ืœื ื”ื™ื•ื ืฉืœ ื”ืฉืจื™ืคื”.

ToCode
1 420
ื˜ื™ืค ืจื™ืืงื˜: ืขื“ื™ืฃ ืœื•ื•ืชืจ ืขืœ ื˜ืจื ืจื™ ื‘ืชื•ืš JSX ื™ื•ืชืจ ืžื“ื™ ืคืขืžื™ื ืื ื™ ืจื•ืื” ืงื•ื“ ืขื ื›ื•ื•ื ื•ืช ื˜ื•ื‘ื•ืช ืฉืœื ืขื•ืžื“ ื‘ืžื‘ื—ืŸ ื”ื–ืžืŸ. ื‘ืžืงืจื” ืฉืœ ืจื™ืืงื˜ ืชื‘ื ื™ืช ืžืื•ื“ ื‘ืขื™ื™ืชื™ืช ื”ื™ื ื”ื›ื ืกืช ืœื•ื’ื™ืงื” ืœืชื•ืš ื” JSX. ื–ื” ืžืชื—ื™ืœ ืคืฉื•ื˜ ืขื ืื™ื–ื” ืกื™ืžืŸ ืฉืืœื” ื ืงื•ื“ื•ืชื™ื™ื:
function App() {
  const [text, setText] = useState(0);
  return (
    <div>
      <button onClick={() => setText(t => (t + 1) % 2)}>Toggle</button>
      {text == 0 ? <Text1 /> : <Text2 />}
    </div>
  )
}
ืื‘ืœ ืžื”ืจ ืžืื•ื“ ื”ื•ืคืš ืœืžืคืœืฆืช. ืžื” ืขื•ืฉื™ื ื‘ืžืงื•ื? ืžื ื’ื ื•ืŸ ืงืœ ื”ื•ื ืœื”ื•ืฆื™ื ืืช ื”ืงื•ื“ ื”ืžื›ื•ืขืจ ืœืงื•ืžืคื•ื ื ื˜ื” ื ืคืจื“ืช ืฉื—ื™ื” ืจืง ื‘ืฉื‘ื™ืœ ื”ืœื•ื’ื™ืงื” ื”ื–ืืช. ื”ื—ืœื˜ื ื• ืฉืฆืจื™ืš ืœื”ืชืœื‘ื˜ ืื™ื–ื” ืงื•ืžืคื•ื ื ื˜ื” ืœื”ืฆื™ื’? ื‘ื•ืื• ื ืขื‘ื™ืจ ืืช ื–ื” ืœืงื•ืžืคื•ื ื ื˜ื” ื ืคืจื“ืช ื•ื ืงื‘ืœ:
function Text({id}) {
  if (id === 0) {
    return <Text1 />
  } else {
    return <Text2 />
  }
} 


function App() {
  const [text, setText] = useState(0);
  return (
    <div>
      <button onClick={() => setText(t => (t + 1) % 2)}>Toggle</button>
      <Text id={text} />
    </div>
  )
}
ื‘ืฉืœื‘ ื”ื‘ื ืื ื ืฆื˜ืจืš ืžื ื’ื ื•ืŸ ื™ื•ืชืจ ื’ื ืจื™ (ืœืžืฉืœ ื›ื™ ื ืฆื˜ืจืš ืฉื•ื‘ ืœื‘ื—ื•ืจ ื‘ื™ืŸ ื›ืžื” ืงื•ืžืคื•ื ื ื˜ื•ืช) ื ื•ื›ืœ ืœื”ืคื•ืš ืืช Text ืœืคื•ื ืงืฆื™ื” ื›ืœืœื™ืช ื•ื ืงื‘ืœ:
function Text1({color}) {
  return <p style={{color}}>Text 1</p>
}

function Text2({color}) {
  return <p style={{color}}>Text 2</p>
}

const Toggle = (...components) => (props) => {
  const cls = components[props.id]
  return React.createElement(cls, props);
} 

const Text = Toggle(Text1, Text2);

function App() {
  const [text, setText] = useState(0);
  return (
    <div>
      <button onClick={() => setText(t => (t + 1) % 2)}>Toggle</button>
      <Text id={text} color="red" />
    </div>
  )
}

ToCode
1 420
ื—ืœื•ืžื•ืช ืขืœ PGlite ื”ืคืขืœืชื™ ื”ื™ื•ื ืงื•ื“ ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืฉื”ืชื—ื‘ืจ ืœื‘ืกื™ืก ื ืชื•ื ื™ื PGlite, ื™ืฆืจ ื˜ื‘ืœื”, ื”ื›ื ื™ืก ื ืชื•ื ื™ื ื•ืฉืœืฃ ืื•ืชื ื—ื–ืจื”. ื”ื—ืœืง ื”ืžืœื”ื™ื‘ ื”ื•ื ืฉืœื ื”ื™ื” ืœื™ ื‘ืกื™ืก ื ืชื•ื ื™ื ืžื•ืชืงืŸ. ื–ื” ื”ืงื•ื“ ื•ืฆืจื™ืš ืจืง deno run ื‘ืฉื‘ื™ืœ ืœื”ืจื™ืฅ:
import { PGlite } from "npm:@electric-sql/pglite"

async function main() {
  const db = new PGlite()
  await db.query("create table test(x integer, y integer);");
  await db.query("insert into test values(1, 1);");
  await db.query("insert into test values(2, 2);");
  const result = await db.query("select * from test");

  console.log(result);
}

main();
ื”ืคืจื•ื™ืงื˜ ืขื“ื™ื™ืŸ ื‘ืฉืœื‘ื™ ืคื™ืชื•ื— ื•ื™ื“ืจื•ืฉ ืขื•ื“ ืขื‘ื•ื“ื” ืขื“ ืฉื ืงื‘ืœ ืชืžื™ื›ื” ื‘ ORM-ื™ื ืื‘ืœ ื›ื‘ืจ ืืคืฉืจ ืœื—ืœื•ื ืขืœ ื›ืžื” ืฉื™ืคื•ืจื™ื ืžืฉืžืขื•ืชื™ื™ื ื‘ืคื™ืชื•ื— ืฉื”ื•ื ื™ื•ื›ืœ ืœื”ื›ื ื™ืก ืœืืงื•ืกื™ืกื˜ื ืฉืœ JavaScript ื‘ืฆื“ ืฉืจืช- 1. ืžื”ื™ืจื•ืช - ื›ื™ ืื ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืจืฅ ื‘ืื•ืชื• ืชื”ืœื™ืš ื›ืžื• ื”ืฉืจืช ืื– ื™ื•ืชืจ ื–ื•ืœ ืœื”ื•ืฆื™ื ืงืจื™ืื•ืช ืœื‘ืกื™ืก ื”ื ืชื•ื ื™ื. 2. ืฉืื™ืœืชื•ืช ื™ื•ืชืจ ืคืฉื•ื˜ื•ืช - ื”ืžืฉืš ืฉืœ ื”ืกืขื™ืฃ ื”ืงื•ื“ื, ื›ื™ ืื ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืจืฅ ืืฆืœื™ ื‘ืื•ืชื• ืชื”ืœื™ืš ืื ื™ ื™ื›ื•ืœ ืœื”ื•ืฆื™ื ื’ื 20 ืฉืื™ืœืชื•ืช ื•ื™ื›ื•ืœ ืœื•ื•ืชืจ ืขืœ JOIN-ื™ื ืื• ื—ื™ื‘ื•ืจื™ื ืžื•ืจื›ื‘ื™ื ื‘ื™ืŸ ื˜ื‘ืœืื•ืช. 3. ื‘ื“ื™ืงื•ืช ืžื”ื™ืจื•ืช ื•ืžืงื‘ื™ืœื™ื•ืช - ื›ื™ ืขื›ืฉื™ื• ื›ืœ ื‘ื“ื™ืงื” ื™ื›ื•ืœื” ืœื™ืฆื•ืจ ืœืขืฆืžื” ืืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื‘ื–ื™ื›ืจื•ืŸ ืžืชื•ืš ื ืชื•ื ื™ Seed ืงื‘ื•ืขื™ื. 4. ืคื•ืจื˜ื™ื ื’ ื™ื•ืชืจ ืžื”ื™ืจ ืœืืคืœื™ืงืฆื™ื•ืช Offline First - ื›ื™ ืืคืฉืจ ืœืงื—ืช ืืช ืื•ืชืŸ ืฉืื™ืœืชื•ืช ืคื•ืกื˜ื’ืจืก ืฉื›ื‘ืจ ื™ืฉ ืœื ื• ื•ืคืฉื•ื˜ ืœื”ืจื™ืฅ ื”ื›ืœ ื‘ื“ืคื“ืคืŸ. ื›ืžื” ืžื”ื“ื‘ืจื™ื ื”ืืœื” ื™ืขื‘ื“ื• ื•ืžืชื™ ืขื“ื™ื™ืŸ ืžื•ืงื“ื ืœื ื—ืฉ. ื›ื ืจืื” ืฉืคื•ืจื˜ื™ื ื’ ืœ Offline First ื™ื”ื™ื” ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ, ืื—ืจื™ ื–ื” ื ืชื—ื™ืœ ืœื”ืฉืชืžืฉ ื‘ PGlite ื‘ืชืฉืชื™ืช ื”ื‘ื“ื™ืงื•ืช ืขื“ ืฉื™ื”ื™ื” ืžืกืคื™ืง ื™ืฆื™ื‘ ืœื”ืจื™ืฅ ืืช ื›ืœ ื”ืฉืื™ืœืชื•ืช ืฉืœ ื”ืžืขืจื›ืช ื”ืืžื™ืชื™ืช ื•ืœืื˜ ืœืื˜ ื™ื”ื™ื• ืืžื™ืฆื™ื ืฉื™ื‘ื—ืจื• ืื•ืชื• ื‘ืชื•ืจ ื‘ืกื™ืก ื ืชื•ื ื™ื ืžืœื. ืื• ืฉืœื. ื‘ื›ืœ ืžืงืจื” ื–ื” ืคืจื•ื™ืงื˜ ืฉืฉื•ื•ื” ืœืขืงื•ื‘ ืื—ืจื™ื•.

ToCode
1 420
ืžืžืฉืง ืื—ื“ ืฉืขื•ืฉื” ื”ื›ืœ ืฆืจื™ื›ื™ื ืœื›ืชื•ื‘ ืฉื—ืงืŸ ืžื—ืฉื‘ ืœืื™ืงืก ืขื™ื’ื•ืœ (ืื• ืื•ืœื™ ืœืฉื—ืžื˜)? ืœื™ืฆื•ืจ ืชื•ื›ื ื™ืช ืื™ืžื•ื ื™ื ืžื•ืชืืžืช ืื™ืฉื™ืช ืœื—ื“ืจ ื›ื•ืฉืจ, ืœืคื™ ืจืฉื™ืžืช ืื™ืœื•ืฆื™ื ื•ืจืฆื•ื ื•ืช ืฉืœ ืžืฉืชืžืฉ? ืœื–ื”ื•ืช ื‘ืื™ื–ื” ืฉืคื” ื”ืงื•ื‘ืฅ? ืื• ืœืชืจื’ื ืืช ื”ื˜ืงืกื˜ ืœืฉืคื” ืื—ืจืช? ืœื—ืคืฉ ืžืชื›ื•ื ื™ื ืฉืžืชืื™ืžื™ื ืœืจืฉื™ืžืช ืžืจื›ื™ื‘ื™ื ืฉื™ืฉ ืœืžืฉืชืžืฉ ื‘ืžืงืจืจ ื›ืจื’ืข? ืœืคืขื ื— ืงื•ื“ QR ื‘ืชืžื•ื ื”? ื›ืฉื ืฆื˜ืจืš ืœืคืชื•ืจ ื›ืœ ืื—ืช ืžื”ื‘ืขื™ื•ืช ื‘ืจืฉื™ืžื” ืœืžืขืœื” (ื•ื‘ืขื™ื•ืช ืจื‘ื•ืช ื ื•ืกืคื•ืช), ืจื•ื‘ื ื• ื ื—ืคืฉ ืื• ื ื ืกื” ืœื—ืฉื•ื‘ ืขืœ ืืœื’ื•ืจื™ืชื - ื ื“ืžื™ื™ืŸ ืืช ื”ืงืœื˜, ื”ืคืœื˜ ื•ืื•ืคืŸ ื”ื—ื™ืฉื•ื‘. ืื ื—ื ื• ืจื•ืฆื™ื ืœื“ืขืช ืžื” ื”ืงื•ื“ ืขื•ืฉื” ื•ืœื”ื™ื•ืช ืžืกื•ื’ืœื™ื ืœืชืงืŸ ืืช ื”ืคื™ืชืจื•ืŸ ื•ืœืฉืคืจ ืื•ืชื•. ืื‘ืœ ืืคืฉืจ ื›ื‘ืจ ืœื“ืžื™ื™ืŸ ืขืชื™ื“ ืžืกื•ื’ ืื—ืจ. ื‘ืื•ืชื• ืขืชื™ื“ ืืคืฉืจ ืœื“ืžื™ื™ืŸ ืื™ืš ื‘ืžืงื•ื ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“ ืœืคื™ืชืจื•ืŸ ื”ื‘ืขื™ื” ืื ื—ื ื• ื ื›ืชื•ื‘ ืงื•ื“ ืฉื™ื ื’ื™ืฉ ืืช ื”ื‘ืขื™ื” ืœืื™ื–ื” "ืื•ืจืงืœ" ื›ืžื• Chat GPT ื•ื™ืคืขื ื— ืืช ืชืฉื•ื‘ืชื•. ืชื™ืงื•ื ื™ ื‘ืื’ื™ื ื™ื”ื™ื• ื‘ืกืš ื”ื›ืœ Prompt Engineering ื•ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช ื™ื”ื™ื• ืจืฉื™ืžื” ืฉืœ ืคืจื•ืžืคื˜ื™ื ืžื•ื›ื ื™ื ืžืจืืฉ ื•ื”ืชื•ืฆืื•ืช ืฉืื ื—ื ื• ืžืฆืคื™ื ืœืงื‘ืœ ืžื”ืžื›ื•ื ื”. ื”ื”ื–ื“ืžื ื•ืช ื›ื‘ืจ ืฉื ืœืงืฆืจ ืชื”ืœื™ื›ื™ ืคื™ืชื•ื— ื‘ืฆื•ืจื” ืžืฉืžืขื•ืชื™ืช, ื•ืขื ื”ื–ืžืŸ ื”ื™ื ืชื™ื”ืคืš ื™ื•ืชืจ ื‘ืจื•ืจื”.

ToCode
1 420
ื—ื“ืฉ ื‘ืืชืจ - ืกื™ื“ืจืช useEffect ืื™ืŸ ืกืคืง ืฉ useEffect ื”ื•ื ื” Hook ื”ืžื‘ืœื‘ืœ ื‘ื™ื•ืชืจ ื‘ืจื™ืืงื˜. ืžืฆื“ ืื—ื“ ืืคืฉืจ ืœืขืฉื•ืช ืื™ืชื• ื”ืžื•ืŸ ื“ื‘ืจื™ื ื•ื’ื ื™ืฉ ื”ืžื•ืŸ ืžืงืจื™ื ื‘ื”ื ื‘ืืžืช ืฆืจื™ืš ืื•ืชื•, ืื‘ืœ ืžืฆื“ ืฉื ื™ ืงืœ ืžืื•ื“ ืœื”ืฉืชืžืฉ ื‘ื• ืœื ื ื›ื•ืŸ ื•ืœื›ืŸ ืจื•ื‘ ื”ืื ืฉื™ื ื ืชืงืœื™ื ื‘ื‘ืื’ื™ื ืžื•ื–ืจื™ื ื›ืฉืžืชื—ื™ืœื™ื ืœื›ืชื•ื‘ ืืคืงื˜ื™ื ื‘ืงื•ืžืคื•ื ื ื˜ื•ืช. ืขื•ื“ ื›ืฉื›ืชื‘ื• ืœืจืืฉื•ื ื” ืืช ื”ืžื ื’ื ื•ืŸ ื“ืŸ ืื‘ืจืžื•ื‘ ื“ืŸ ืขืœื™ื• ื‘ืืจื™ื›ื•ืช ื‘ื‘ืœื•ื’ ืฉืœื•: https://overreacted.io/a-complete-guide-to-useeffect/ ื•ื–ื” ืขื–ืจ, ืื‘ืœ ืจืง ื‘ืžื™ื“ื” ืžืกื•ื™ืžืช ื›ื™ ื‘ืกื•ืฃ ืขื“ ืฉืœื ืžื ืกื™ื ืืช ื”ื“ื‘ืจื™ื ืขืœ ืงื•ื“ ืืžื™ืชื™ ืงืฉื” ืœืจืื•ืช ืืช ื”ื‘ืขื™ื•ืช. ื‘ืฉื ื™ื ืฉืขื‘ืจื• ืžืื– ืฉ useEffect ื™ืฆื ื ืฆื‘ืจ ืœื ืžืขื˜ ื™ื“ืข ืขืœ ืื™ืš ืœื”ืฉืชืžืฉ ื‘ื• ื ื›ื•ืŸ, ืœืžื” ืœืฉื™ื ืœื‘ ื•ืžื”ื ื”ื‘ืื’ื™ื ื”ื›ื™ ื ืคื•ืฆื™ื ืฉื ื™ืชืงืœ ื‘ื”ื. ืœืžืจื•ืช ืฉืœื™ืžื“ืชื™ ืืช useEffect ื‘ืงื•ืจืก ืจื™ืืงื˜ ื”ืฉื™ืขื•ืจื™ื ืฉื ื”ื™ื• ืžืžื•ืงื“ื™ื ื‘ืžื” ืืคืฉืจ ืœื‘ื ื•ืช ืขื useEffect ื”ืจื‘ื” ื™ื•ืชืจ ืžืืฉืจ ื‘ืžื” ืืคืฉืจ ืœืฉื‘ื•ืจ ืื™ืชื•. ื”ืฉื‘ื•ืข ื‘ืขืงื‘ื•ืช ื›ืžื” ืฉืืœื•ืช ืžืชืœืžื™ื“ื™ื ื™ืฉื‘ืชื™ ืœืกื“ืจ ืืช ื”ืฉื™ืขื•ืจื™ื ื”ืืœื” ื‘ืงื•ืจืก ื•ืœื”ืงืœื™ื˜ ืžื—ื“ืฉ 3 ืกืจื˜ื™ื ืขืœ useEffect ื‘ื’ื™ืจืกืื•ืช ืืจื•ื›ื•ืช ื•ืžืคื•ืจื˜ื•ืช (ืฉืขื” ืฉืœ ื•ื™ื“ืื• ืขืœ useEffect ืืžืจืชื? ื™ืืœืœื” ืงื™ื‘ืœืชื). ื”ืคืขื ืœืงื—ืชื™ ื›ืœ ื“ื•ื’ืžื” ื•ื”ืจืื™ืชื™ ืืช ื›ืœ ื”ื˜ืขื•ื™ื•ืช ืฉืืคืฉืจ ืœืขืฉื•ืช ื•ืื™ืš ืœื–ื”ื•ืช ื›ืœ ื˜ืขื•ืช. ืื ื™ืฉ ืœื›ื ืฉืขื” ืคื ื•ื™ื” ื•ืžื ื•ื™ ืœืืชืจ, ื•ืืชื ื›ื•ืชื‘ื™ื ืจื™ืืงื˜ ื‘ื™ื•ื ื™ื•ื, ืื ื™ ืžืžืœื™ืฅ ืœื”ืขื™ืฃ ืžื‘ื˜ ื‘ืกื™ื“ืจื” ื”ืžื—ื•ื“ืฉืช ื‘ืงื™ืฉื•ืจ: https://www.tocode.co.il/bundles/react/toc ืฉื™ืขื•ืจื™ื 25-27. ื•ื›ืžื• ืชืžื™ื“ ืื ื™ืฉ ื ื•ืฉืื™ื ื ื•ืกืคื™ื ืฉื”ื™ื™ืชื ืจื•ืฆื™ื ืœืจืื•ืช ื‘ืงื•ืจืกื™ื ื›ืืŸ ืืœ ืชืชื‘ื™ื™ืฉื• ืœื›ืชื•ื‘, ืืคืฉืจ ื“ืจืš ืžืกืš ืฆืจื• ืงืฉืจ ื›ืืŸ ื‘ืืชืจ.

ToCode
1 420
ื‘ื•ืื• ื ืชืงืŸ ืืช cycle ื‘ืคื™ื™ืชื•ืŸ ื”ืคื•ื ืงืฆื™ื” cycle ืžืชื•ืš ื”ืžื•ื“ื•ืœ itertools ื‘ืคื™ื™ืชื•ืŸ ืœื•ืงื—ืช ืื•ืกืฃ ืฉืœ ื“ื‘ืจื™ื ื•ืžื—ื–ื™ืจื” ืื™ื˜ืจื˜ื•ืจ ืื™ื ืกื•ืคื™ ืฉื›ืœ ืคืขื ืžื—ื–ื™ืจ ืืช ื”ื“ื‘ืจ ื”ื‘ื ืžืชื•ืš ื”ืจืฆืฃ ื‘ืžืขื’ืœ. ืœื“ื•ื’ืžื” ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ื” ืขื ื”ืžื—ืจื•ื–ืช abc ื‘ืื•ืคืŸ ื”ื‘ื:
print(list(itertools.islice(itertools.cycle("abc"), 10)))
ื•ืœืงื‘ืœ ืืช ื”ืชื•ืฆืื”:
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a']
ืื‘ืœ ืœืกื™ื™ืงืœ ื™ืฉ ื‘ืขื™ื™ืช ืžืžืฉืง - ื”ื™ื ื™ื›ื•ืœื” ืœืงื‘ืœ ืจืง ืคืจืžื˜ืจ ืื—ื“. ืœื›ืŸ ืื ื‘ืžืงื•ื ืจืฉื™ืžืช ื”ืื•ืชื™ื•ืช ื”ื™ื™ืชื™ ืจื•ืฆื” ืœื”ืขื‘ื™ืจ ืจืฉื™ืžื” ืฉืœ ืžืกืคืจื™ื ื”ื™ื™ืชื™ ืฆืจื™ืš ืœื›ืชื•ื‘:
print(list(itertools.islice(itertools.cycle([1, 2, 3]), 10)))
ื•ื–ื” ื›ื‘ืจ ืžืขื™ื™ืฃ ืœื›ืชื•ื‘ ื’ื ืกื•ื’ืจื™ื™ื ืขื’ื•ืœื™ื ื•ื’ื ืกื•ื’ืจื™ื™ื ืžืจื•ื‘ืขื™ื. ืžื” ืขื•ืฉื™ื? ืžืชืงื ื™ื. ืื ื™ ืœื ืฉื•ื‘ืจ ืืช ื”ืžืžืฉืง ืฉืœ cycle ืื‘ืœ ืื ื™ ื›ืŸ ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ืขื•ื˜ืคืช ืฉืชืขืฉื” ืœื™ ื—ื™ื™ื ื™ื•ืชืจ ืงืœื™ื. ื”ื ื” ื”ืงื•ื“:
def easy_cycle(*args):
    match args:
        case [col] if hasattr(col, '__iter__'):
            return itertools.cycle(col)

        case _:
            return itertools.cycle(args)
ื”ืคื•ื ืงืฆื™ื” ืœื•ืงื—ืช ืจืฉื™ืžื” ืฉืœ ื“ื‘ืจื™ื ื•ื‘ื•ื“ืงืช ืืช ื”ืคืจื˜ื™ื ืฉืœ ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉื”ื™ื ืงื™ื‘ืœื”. ืื ื–ื” ืžืฉื”ื• ืฉืืคืฉืจ ืœืขืฉื•ืช ืขืœื™ื• ืื™ื˜ืจืฆื™ื” ื ืขื‘ื™ืจ ืื•ืชื• ืœ cycle ื‘ืœื™ ืฉื™ื ื•ื™ื™ื. ื‘ื›ืœ ืžืฆื‘ ืื—ืจ ื ืขื‘ื™ืจ ืืช ืจืฉื™ืžืช ื”ื“ื‘ืจื™ื ืฉืงื™ื‘ืœื ื• ืœ cycle. ื”ืชื•ืฆืื” ืคืฉื•ื˜ื” ื•ืขื›ืฉื™ื• ื”ืžืžืฉืง ืžืกืชื“ืจ ื’ื ื›ืฉืื ื™ ืฉื•ื›ื— ืกื•ื’ืจื™ื™ื ืžืจื•ื‘ืขื™ื:
print(list(itertools.islice(easy_cycle("abc"), 10)))
print(list(itertools.islice(easy_cycle("a", "b", "c"), 10)))
print(list(itertools.islice(easy_cycle(["a", "b", "c"]), 10)))

ื .ื‘. ื”ื™ื” ื ื—ืžื“ ืื ืžื ื’ื ื•ืŸ ื” Type Hints ืฉืœ ืคื™ื™ืชื•ืŸ ื”ื™ื” ืžืืคืฉืจ ืœื™ ืœื”ื’ื“ื™ืจ ืฉืขืจืš ื”ื”ื—ื–ืจ ืฉืœ ื”ืคื•ื ืงืฆื™ื” ืฉื›ืชื‘ืชื™ ื–ื”ื” ืœืขืจืš ื”ื”ื—ื–ืจ ืฉืœ ื”ืคื•ื ืงืฆื™ื” itertools.cycle. ื‘ื™ื ืชื™ื™ื ืืคืฉืจ ืœื”ืขืชื™ืง ื—ืชื™ืžื•ืช ืื• ืœื•ื•ืชืจ ืขืœ ื” Type Hint ื‘ืžืงืจื” ื›ื–ื”.

ToCode
1 420
def toColumns(matrix: Map[(Long, Long), Char]): List[String] =
    val lastColumn = matrix
      .keys
      .collect { (row, column) => column }
      .max
      .toInt

    0.to(lastColumn)
      .map { col =>
        matrix
          .keys
          .filter { case (_, c) => col == c }
          .toList
          .sortBy(_._1)
          .map(matrix)
          .mkString
      }.toList
ื•ื–ื” ืžืกืคื™ืง ื‘ืฉื‘ื™ืœ ื”ื—ืœืง ื”ืจืืฉื•ืŸ. ื”ืคื™ืชืจื•ืŸ ืขื ื›ืœ ืคื•ื ืงืฆื™ื•ืช ื”ืขื–ืจ ืฉื›ื‘ืจ ื›ืชื‘ื ื• ื”ื•ื ื‘ืกืš ื”ื›ืœ:
  @main
  def day13part1(): Unit =
    Source
      .fromResource("day13.txt")
      .getLines()
      .toParagraphs
      .map(toMatrix)
      .toList
      .map { m => (toLines(m), toColumns(m)) }
      .collect { case (rows, column) =>
        findMirrorInList(rows) * 100 + findMirrorInList(column)
      }
      .sum
      .pipe(println)
ืœื•ืงื—ื™ื ื›ืœ ืžื˜ืจื™ืฆื”, ืžื•ืฆื™ืื™ื ืžืžื ื” ืืช ืจืฉื™ืžืช ื”ืฉื•ืจื•ืช ื•ืจืฉื™ืžืช ื”ืขืžื•ื“ื•ืช, ืžื—ืคืฉื™ื ืžืจืื•ืช ื•ืžื“ืคื™ืกื™ื ืืช ื”ืกื›ื•ื. ืคื™ืชืจื•ืŸ ื—ืœืง 2 ื”ื—ืœืง ื”ืฉื ื™ ืœื ื ืฉืžืข ืžืกื•ื‘ืš ืื‘ืœ ื‘ืกื•ืฃ ื›ืŸ ื“ืจืฉ ื›ืชื™ื‘ื” ืฉืœ ืœื ืžืขื˜ ืงื•ื“ ื—ื“ืฉ. ืงื•ื“ื ื›ืœ ื”ืคื•ื ืงืฆื™ื” swap ืฉื”ื•ืคื›ืช ืกื•ืœืžื™ืช ืœื ืงื•ื“ื” ื•ืœื”ื™ืคืš:
  def swap(ch: Char): Char =
    if (ch == '.') { '#' } else { '.' }
ื•ืขื›ืฉื™ื• ืœืคื™ืชืจื•ืŸ - ืœื•ืงื—ื™ื ืืช ื›ืœ ื”ืžื˜ืจื™ืฆื•ืช ืฉืœื ื•, ืœื›ืœ ืžื˜ืจื™ืฆื” ืœื•ืงื—ื™ื ืืช ื›ืœ ื”ืžืคืชื—ื•ืช ื•ืœื›ืœ ืื™ื ื“ืงืก ื™ื•ืฆืจื™ื ืจืฉื™ืžื” ื—ื“ืฉื” ืฉืœ ืžื˜ืจื™ืฆื•ืช, ื›ืš ืฉืžื˜ืจื™ืฆื” ื‘ื’ื•ื“ืœ 9 ืชืื™ื ื”ืคื›ื” ืขื›ืฉื™ื• ืœ 9 ืžื˜ืจื™ืฆื•ืช ื‘ื’ื•ื“ืœ 9 ืชืื™ื. ื›ืœ ืื—ืช ืžื”ืžื˜ืจื™ืฆื•ืช ื”ื—ื“ืฉื•ืช ื”ื™ื ื‘ืขืฆื ื”ื™ืคื•ืš ื”ืชื• ื‘ืื™ื ื“ืงืก ืžืกื•ื™ื ื‘ืžื˜ืจื™ืฆื” ื”ืžืงื•ืจื™ืช. ืขื›ืฉื™ื• ืืคืฉืจ ืœืจื•ืฅ ืขืœ ื›ืœ ื”ืžื˜ืจื™ืฆื•ืช ื”ื—ื“ืฉื•ืช ื•ืœื—ืคืฉ ื‘ื”ืŸ ืžืจืื•ืช, ืจืง ืฆืจื™ืš ืœืฉื™ื ืœื‘ ืœื ืœื‘ื—ื•ืจ ืืช ื”ืžืจืื” ืฉืœ ื”ืžื˜ืจื™ืฆื” ื”ืžืงื•ืจื™ืช. ื”ืœื•ืœืื” ื”ื™ื ื‘ืขืฆื ืœื•ืœืื” ื‘ืชื•ืš ืœื•ืœืื”, ื›ืœื•ืžืจ ืจืฆื™ื ืขืœ ื›ืœ ื”ืžื˜ืจื™ืฆื•ืช, ื•ืขื‘ื•ืจ ื›ืœ ืžื˜ืจื™ืฆื” ื™ื•ืฆืจื™ื n ืžื˜ืจื™ืฆื•ืช ื—ื“ืฉื•ืช ื•ืจืฆื™ื ืขืœื™ื”ืŸ. ื–ื” ื ืฉืžืข ืžืกื•ืจื‘ืœ ืื‘ืœ ื”ืžื—ืฉื‘ ื”ืกืชื“ืจ ื™ืคื” ืขื ื”ืืชื’ืจ. ื‘ืงื™ืฆื•ืจ ื–ื” ื”ืงื•ื“ ืฉืœ ื”ื—ืœืง ื”ืฉื ื™:
  @main
  def day13part2(): Unit =
    Source
      .fromResource("day13.txt")
      .getLines()
      .toParagraphs
      .map(toMatrix)
      .toList
      .map { m => (m, toLines(m), toColumns(m)) }
      .collect { case (m, rows, columns) =>
        val horizontalMirror = findMirrorInList(rows)
        val verticalMirror = findMirrorInList(columns)

        m
          .keys
          .map { k => m.updatedWith(k) { case Some(ch) => Some(swap(ch)) } }
          .map { m => (findMirrorInList(toLines(m), Set(horizontalMirror)), findMirrorInList(toColumns(m), Set(verticalMirror))) }
          .find { i => i != (0, 0) }
          .map {
            case (0, altVertical) => altVertical
            case (altHorizontal, 0) => altHorizontal * 100
          }
      }
      .map(_.getOrElse(0))
      .sum
      .pipe(println)
ืื ื™ ื“ื™ ื‘ื˜ื•ื— ืฉืืคืฉืจ ืœืงื—ืช ืืช ื”ื—ืœืง ื”ืžืจื›ื–ื™ ืœืคื•ื ืงืฆื™ื™ืช ืขื–ืจ, ืื‘ืœ ืื—ืจื™ ืฉื”ืจืฆืชื™ ื•ื”ื’ืขืชื™ ืœืชืฉื•ื‘ื” ื”ื ื›ื•ื ื” ื”ืจื’ืฉืชื™ ืฉื›ืชื‘ืชื™ ืžืกืคื™ืง ืงื•ื“ ื‘ืฉื‘ื™ืœ ื”ืชืจื’ื™ืœ ื”ื–ื” ื•ืขื“ื™ืฃ ืœื”ื™ืคืจื“ ืžืžื ื• ื›ืืŸ. ืจืขื™ื•ื ื•ืช ืื™ืš ืœืฉืคืจ? ืคื™ืชืจื•ื ื•ืช ื‘ืฉืคื•ืช ืื—ืจื•ืช? ืžื•ื–ืžื ื™ื ืœืฉืชืฃ ื‘ืชื’ื•ื‘ื•ืช ืื• ื‘ื˜ืœื’ืจื.

ToCode
1 420
ืคื™ืชืจื•ืŸ Advent Of Code 2023 ื™ื•ื 13 ื‘ืกืงืืœื” ื›ืŸ ืื ื—ื ื• ืžืžืฉื™ื›ื™ื ื‘ืกื™ื“ืจื” ื”ื–ืืช ื•ืœื ืœื”ืืžื™ืŸ ืฉืขื‘ืจื ื• ื›ื‘ืจ ื—ืฆื™ ืžื”ืืชื’ืจ ื•ื”ื›ืœ ื‘ืฉืคืช ืกืงืืœื”. ื”ืžื˜ืจื” ืฉืœ ื”ืคื•ืกื˜ื™ื ื”ืืœื” ื”ื™ื ื›ืžื•ื‘ืŸ ืœื“ื‘ืจ ืงืฆืช ืขืœ ืกืงืืœื” ืื‘ืœ ื’ื ืœืชืช ืœื›ื ืžื•ื˜ื™ื‘ืฆื™ื” ื•ื›ื™ื•ื•ืŸ ืœืคืชื•ืจ ืืช ื–ื” ื‘ืฉืคื•ืช ืื—ืจื•ืช ืฉืืชื ืœื•ืžื“ื™ื. ืžื•ื›ื ื™ื? ื‘ื•ืื• ื ืฆืœื•ืœ ืœืคืจื˜ื™ื. ื”ืืชื’ืจ ื”ืงืœื˜ ืฉืœื ื• ื”ื™ื•ื ื”ื•ื ืจืฉื™ืžื” ืฉืœ ืžื˜ืจื™ืฆื•ืช ืขื ืฉื•ืจื” ืจื™ืงื” ื‘ื™ืŸ ื›ืœ ืžื˜ืจื™ืฆื” ืœื–ื• ืฉืื—ืจื™ื” ืœื“ื•ื’ืžื”:
 #.##..##.
 ..#.##.#.
 ##......#
 ##......#
 ..#.##.#.
 ..##..##.
 #.#.##.#.

 #...##..#
 #....#..#
 ..##..###
 #####.##.
 #####.##.
 ..##..###
 #....#..#
ื›ืœ ืžื˜ืจื™ืฆื” ืžื™ื™ืฆื’ืช ืชืžื•ื ื” ืขื ืžืจืื” ื‘ืืžืฆืข, ื”ืžืจืื” ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื‘ืงื• ืื•ืคืงื™ ืื• ืื ื›ื™ ื•ืื ื—ื ื• ืžื–ื”ื™ื ืื•ืชื” ื›ื™ ื”ื“ื‘ืจื™ื ืฉืžืฉื ื™ ื”ืฆื“ื“ื™ื ืฉืœ ื”ืžืจืื” ื–ื”ื™ื. ืœื“ื•ื’ืžื” ื‘ืฆื™ื•ืจ ื”ืจืืฉื•ืŸ ื”ืžืจืื” ื”ื™ื ื‘ื™ืŸ ื”ืขืžื•ื“ื” ื”ื—ืžื™ืฉื™ืช ืœืฉื™ืฉื™ืช:
 123456789
     ><   
 #.##..##.
 ..#.##.#.
 ##......#
 ##......#
 ..#.##.#.
 ..##..##.
 #.#.##.#.
     ><   
 123456789
ืืคืฉืจ ืœืจืื•ืช ืื™ืš ืžื” ืฉืžืฉืžืืœ ืœืขืžื•ื“ื” ื”ื•ื ืชืžื•ื ืช ืจืื™ ืฉืœ ืžื” ืฉืžื™ืžื™ืŸ ืœื”, ื—ื•ืฅ ืžื”ื ืงื•ื“ื•ืช ืฉื ืžืฆืื•ืช "ืจื—ื•ืง ืžื“ื™" ืœืžืฉืœ ื”ืขืžื•ื“ื” ื”ืจืืฉื•ื ื” ืฉื”ื™ื ืœื ื‘ืชืžื•ื ื”. ื‘ืชืžื•ื ื” ื”ืฉื ื™ื” ื”ืžืจืื” ื”ื™ื ืื•ืคืงื™ืช ื‘ื™ืŸ ื”ืฉื•ืจื” ื”ืจื‘ื™ืขื™ืช ืœื—ืžื™ืฉื™ืช:
1 #...##..# 1
2 #....#..# 2
3 ..##..### 3
4v#####.##.v4
5^#####.##.^5
6 ..##..### 6
7 #....#..# 7
ื”ืืชื’ืจ ื”ืจืืฉื•ืŸ ืฉืœื ื• ื”ื•ื ืœืžืฆื•ื ืื™ืคื” ื”ืžืจืื” ื•ืื– ืœืกื›ื•ื ืืช ื”ืžื™ืงื•ืžื™ื ืฉืœ ื›ืœ ื”ืžืจืื•ืช (ืื ื”ื™ื ืื•ืคืงื™ืช ืžื›ืคื™ืœื™ื ื‘ 100, ืื ื•ื›ื™ืช ื ืฉืืจืช ื›ืžื• ืฉื”ื™ื). ื‘ื—ืœืง ื”ืฉื ื™ ืฉืœ ื”ืชืจื’ื™ืœ ืื ื—ื ื• ืžื’ืœื™ื ืฉืืคืฉืจ ืœื”ื—ืœื™ืฃ ืคื™ืงืกืœ ืื—ื“ (ืžื ืงื•ื“ื” ืœืกื•ืœืžื™ืช ืื• ืžืกื•ืœืžื™ืช ืœื ืงื•ื“ื”) ื•ืœืงื‘ืœ ืžืจืื” ื‘ืžืงื•ื ืื—ืจ, ื•ืžื‘ืงืฉื™ื ืžืื™ืชื ื• ืœืžืฆื•ื ืืช ื›ืœ ื”ืžืงื•ืžื•ืช ื”ื—ื“ืฉื™ื ืฉืœ ื”ืžืจืื•ืช. ืคื™ืชืจื•ืŸ ืœื—ืœืง ื”ืจืืฉื•ืŸ ื”ืคื•ื ืงืฆื™ื” ื”ืžืจื›ื–ื™ืช ื‘ืชืจื’ื™ืœ ืžืงื‘ืœืช ืจืฉื™ืžื” ืฉืœ ืžื—ืจื•ื–ื•ืช ื•ืžื—ืคืฉืช ืืช ื ืงื•ื“ืช ื”ืžืจืื” ื‘ืจืฉื™ืžื”, ื›ืœื•ืžืจ ื ืงื•ื“ื” ืฉื”ืžื—ืจื•ื–ื•ืช ืžืฉืžืืœื” ื”ืŸ ืชืžื•ื ืช ืจืื™ ืฉืœ ืžื” ืฉืžื™ืžื™ื ื”. ื”ืœื•ื’ื™ืงื” ืœื ืžืกื•ื‘ื›ืช ืื‘ืœ ืฆืจื™ืš ืœืฉื™ื ืœื‘ ื•ืœื˜ืคืœ ื‘ื ืคืจื“ ื‘ืžืงืจื” ืฉื”ื ืงื•ื“ื” ืงืจื•ื‘ื” ื™ื•ืชืจ ืœืชื—ื™ืœืช ื”ืจืฉื™ืžื” ืื• ืœืกื•ืฃ ื”ืจืฉื™ืžื”:
  def findMirrorInList(items: List[String], except: Set[Int] = Set()): Int =
    1.until(items.length).map { i =>
      if (i <= items.length / 2) {
        items.slice(0, i) == items.slice(i, i * 2).reverse
      } else {
        val distanceFromEnd = items.length - i
        items.slice(i - distanceFromEnd, i) == items.slice(i, items.length).reverse
      }
    }.zipWithIndex
      .indexWhere { case (item, index) => item && !except.contains(index + 1) } + 1

ืขื›ืฉื™ื• ืืคืฉืจ ืœื”ืžืฉื™ืš ืœืคื™ืขื ื•ื— ื”ืงืœื˜. ื”ืคื•ื ืงืฆื™ื” ื”ืจืืฉื•ื ื” ื”ื™ื toParagraphs ืฉืชืขื–ื•ืจ ืœื™ ืœื—ืœืง ืืช ื–ืจื ื”ืฉื•ืจื•ืช ืœืžื˜ืจื™ืฆื•ืช. ื›ืชื‘ืชื™ ืขืœื™ื” ื‘ืืจื™ื›ื•ืช ื‘ืคื•ืกื˜ ื›ืืŸ. ื–ื” ื”ืงื•ื“:
class ChunkedIterator[T](iterator: Iterator[T])(p: (T => Boolean)) extends Iterator[List[T]] {
  override def hasNext: Boolean = iterator.hasNext

  override def next(): List[T] = {
    if (!hasNext) throw new NoSuchElementException("next on empty iterator")
    iterator.takeWhile(p).toList
  }
}

extension (i: Iterator[String]) {
  def toParagraphs: ChunkedIterator[String] = {
    ChunkedIterator[String](i) { f => f.nonEmpty }
  }
}
ื—ื•ืฅ ืžืžื ื” ืื—ืจื™ ืฉื™ื”ื™ื” ืœื™ ื‘ืœื•ืง ืฉืœ ืฉื•ืจื•ืช ืื•ื›ืœ ืœื”ืคื•ืš ืื•ืชื• ืœืžื˜ืจื™ืฆื” ืขื ื”ืคื•ื ืงืฆื™ื” ื”ื‘ืื”:
  def toMatrix(block: List[String]): Map[(Long, Long), Char] =
    block
      .zipWithIndex
      .collect {
          case (line: String, index: Int) => line.toList.zipWithIndex.map((ch, column) => (index, column, ch))
      }
      .flatten
      .flatMap {
        case (row, column, ch) => Map((row.toLong, column.toLong) -> ch)
      }
      .toMap
ื•ื›ืŸ ืžืื•ื“ ื ื•ื— ืœื™ื™ืฆื’ ืžื˜ืจื™ืฆื” ื‘ืชื•ืจ ืžื™ืœื•ืŸ ื›ืฉื›ืœ ืžืคืชื— ื”ื•ื ื–ื•ื’ ืื™ื ื“ืงืกื™ื (ืฉื•ืจื” ื•ืขืžื•ื“ื”) ื•ื”ืขืจืš ื”ื•ื ื”ืชื• ืฉื ืžืฆื ื‘ืžืงื•ื ื”ื–ื”. ืฉืชื™ ื”ืคื•ื ืงืฆื™ื•ืช ื”ื‘ืื•ืช ืœื•ืงื—ื•ืช ืืช ื”ืžื˜ืจื™ืฆื” ื•ืžื—ื–ื™ืจื•ืช ืจืฉื™ืžื” ืฉืœ ืฉื•ืจื•ืช ืื• ืจืฉื™ืžื” ืฉืœ ืขืžื•ื“ื•ืช ืžืžื ื”, ื›ื“ื™ ืฉื ื•ื›ืœ ืœื—ืคืฉ ื‘ื›ืœ ืจืฉื™ืžื” ืื™ืคื” ื”ืžืจืื”:
  def toLines(matrix: Map[(Long, Long), Char]): List[String] =
    val lastRow = matrix
      .keys
      .collect { (row, column) => row }
      .max
      .toInt

    0.to(lastRow)
      .map { row =>
        matrix
          .keys
          .filter { case (r, _) => row == r }
          .toList
          .sortBy(_._2)
          .map(matrix)
          .mkString
      }.toList

ToCode
1 420
ืคื•ื˜ื ืฆื™ืืœ (ื˜ื™ืค ืœื—ื™ืคื•ืฉ ืขื‘ื•ื“ื”) ืœืคืขืžื™ื ืื ื™ ืื—ืคืฉ ืขื‘ื•ื“ื” ืฉื‘ื“ื™ื•ืง ืžืชืื™ืžื” ืœื›ื™ืฉื•ืจื™ื ืฉืœื™. ื‘ืžืฆื‘ ื›ื–ื” ืื ื™ ืฆืจื™ืš ืœืฉื›ื ืข ืืช ื”ืžืขืกื™ืง ืฉืื ื™ ืžื›ื™ืจ ืืช ื”ื—ื•ืžืจ ื•ืžืกื•ื’ืœ ืœื‘ืฆืข ืืช ื”ืžื˜ืœื•ืช ื‘ืฆื•ืจื” ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ. ืœืขืชื™ื ื™ื•ืชืจ ืงืจื•ื‘ื•ืช ืื ื™ ืื—ืคืฉ ืขื‘ื•ื“ื” ืฉืชืงื“ื ืื•ืชื™, ืขื‘ื•ื“ื” ืฉืื ื™ ืขื“ื™ื™ืŸ ืœื ื™ื•ื“ืข ืื™ืš ืœื‘ืฆืข ืื‘ืœ ืื ื™ ื—ื•ืฉื‘ ืฉืื•ื›ืœ ืœื’ื“ื•ืœ ืœืฉื. ื‘ืžืฆื‘ ื›ื–ื” ื”ืืชื’ืจ ื”ื•ื ืœืฉื›ื ืข ืืช ื”ืžืขืกื™ืง ืฉื™ืฉ ืœื™ ืืช ื”ืคื•ื˜ื ืฆื™ืืœ ืœื”ืฆืœื™ื— ืœืขืฉื•ืช ืืช ื”ืžืขื‘ืจ (ืžืžืชื›ืช ืœืžื ื”ืœ, ืž QA ืœืžืชื›ื ืช, ืžืžืชื›ื ืช ืœืคืจื•ื“ืงื˜, ืื• ื›ืœ ืžืขื‘ืจ ืื—ืจ ืฉืืชื ื—ื•ืœืžื™ื ืขืœื™ื•). ื›ืŸ ื–ื” ื”ื›ื™ ืงืœ ืœืฉื›ื ืข ื‘ืชื•ืš ื”ืืจื’ื•ืŸ ืื‘ืœ ืืคืฉืจ ื’ื ืœืฉื›ื ืข ืื ืฉื™ื ื–ืจื™ื. ื›ืžื” ื“ื‘ืจื™ื ืฉื”ื™ื™ืชื™ ืžื ืกื” ื‘ืžืฆื‘ ื›ื–ื”- 1. ืœื”ื‘ืœื™ื˜ ื‘ืงื•ืจื•ืช ื—ื™ื™ื ืืช ื”ื“ื‘ืจื™ื ื”ื˜ื•ื‘ื™ื ืฉืขืฉื™ืชื ื‘ืกื˜ื˜ื•ืก ื”ื ื•ื›ื—ื™ ืื• ืืช ื”ืคืจื•ื™ืงื˜ื™ื ืฉื‘ื™ืฆืขืชื ื‘ื”ืฆืœื—ื”. 2. ืœื”ืชื—ื™ืœ ืืช ื”ืชื”ืœื™ืš, ืื‘ืœ ืœื”ื™ื–ื”ืจ ืขื ื”ืฆื’ืช ืชื•ืฆืจื™ื (ืžื™ ืฉื”ื™ื” 5 ืฉื ื™ื ืžืชื›ื ืช ื•ืจืง ื”ืชื—ื™ืœ ืœืคื ื™ ื—ื•ื“ืฉื™ื™ื ืงื•ืจืก UI/UX ืื•ืœื™ ืœื ื™ืฆืจ ืขื“ื™ื™ืŸ ืืช ื”ืขื™ืฆื•ื‘ื™ื ื”ื›ื™ ืžื˜ื•ืจืคื™ื). 3. ืœื”ื‘ืœื™ื˜ ืฉื™ื ื•ื™ื™ื ืžืงืฆื•ืขื™ื™ื ืงื•ื“ืžื™ื ืฉืขืฉื™ืชื, ืจืฆื•ื™ ื‘ืžื›ืชื‘ ืžืงื“ื™ื ื”ืžืฆื•ืจืฃ ืœืงื•ืจื•ืช ื”ื—ื™ื™ื. 4. ืœื”ื™ื•ืช ืžื•ื›ื ื™ื ืœืชืงื•ืคืช ื”ื›ืฉืจื” ืื• ื™ืจื™ื“ื” ื‘ืฉื›ืจ. ืœื ืœื‘ื•ื ื‘ื“ืจื™ืฉื•ืช. 5. ืœื”ืชื—ื™ืœ ื‘ืงื˜ืŸ - ืชื•ืš ื›ื“ื™ ื”ื—ื™ืคื•ืฉ ืฉื•ื•ื” ืœืžืฆื•ื ืžืงื•ืžื•ืช ื‘ืชืคืงื™ื“ ื”ื ื•ื›ื—ื™ ืื• ืืคื™ืœื• ื‘ื”ืชื ื“ื‘ื•ืช ื‘ื”ื ืืชื ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ืืช ื”ื“ื‘ืจ ืฉืืชื ืจื•ืฆื™ื ืœืขืฉื•ืช. ืื•ืชื• ืžืชื›ื ืช ื™ื•ื›ืœ ืœื‘ื ื•ืช ืขื™ืฆื•ื‘ื™ UI/UX ืœืืคืœื™ืงืฆื™ื•ืช ื“ืžื™ื•ื ื™ื•ืช ืื• ื‘ื”ืชื ื“ื‘ื•ืช. ืœื ื‘ื˜ื•ื— ืฉื”ื™ื™ืชื™ ืžืฆืจืฃ ืื•ืชื ืœืงื•ืจื•ืช ื—ื™ื™ื ืื‘ืœ ื›ืŸ ืฉื™ื”ื™ื” ืžืฉื”ื• ืœื“ื‘ืจ ืขืœื™ื• ื‘ืจืื™ื•ืŸ. ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ื‘ืฉื›ื ื•ืข ื”ื•ื ืœื”ืจืื•ืช ืฉืืชื ืžื‘ื™ื ื™ื ืืช ื”ืืชื’ืจ ื•ืฉื›ื•ืœื ืžื“ื‘ืจื™ื ื‘ืื•ืชื” ืฉืคื”. ื‘ืชื•ืจ ืžืขืกื™ืง ื”ื™ื™ืชื™ ืžืคื—ื“ ืœืชืช ืฆ'ืื ืก ืœืžื™ ืฉื”ืชื—ื™ืœ ืœืคื ื™ ื—ื•ื“ืฉื™ื™ื ืงื•ืจืก ืขื™ืฆื•ื‘ ืื‘ืœ ื›ื‘ืจ ืžืชื ื”ื’ ื›ืžื• ืžืขืฆื‘-ืขืœ. ืื‘ืœ ืื ื”ื‘ืŸ ืื“ื ืžื‘ื™ืŸ ืฉื”ื•ื ืขื“ื™ื™ืŸ ืจื—ื•ืง ืžื”ื™ืขื“ ืื‘ืœ ืžืคื•ืงืก ื‘ื“ืจืš ืœืฉื, ื•ืžืจืื” ืฉื”ื•ื ืขืฉื” ืฉื™ื ื•ื™ื™ื ื“ื•ืžื™ื ื‘ืขื‘ืจ ื•ืžื•ื›ืŸ ืœืืชื’ืจ, ื•ืื ื™ ืžืื•ื“ ืฆืจื™ืš ืžืขืฆื‘ ื•ื›ื‘ืจ ืžื™ื•ืืฉ ืžืœืžืฆื•ื ืื—ื“ ืขื ื ื™ืกื™ื•ืŸ, ื™ืฉ ืกื™ื›ื•ื™ ืฉืืงื— ืืช ื”ืกื™ื›ื•ืŸ ื•ืืชืŸ ืืช ื”ื”ื–ื“ืžื ื•ืช.