es
Feedback
ToCode

ToCode

Ir al canal en Telegram

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

Mostrar mรกs
1 420
Suscriptores
Sin datos24 horas
+37 dรญas
-430 dรญas
Archivo de publicaciones
ToCode
1 420
# ืื™ืš ืœื›ืชื•ื‘ ืœื‘ื“ ื“ื™ืืœื•ื’ ืžื•ื“ืืœื™ ื‘ืจื™ืืงื˜ ื‘ 2023 ื‘ื•ื‘ ื“ื™ืœืŸ ืฉืจ ืขืœ ื”ื–ืžื ื™ื ืฉืžืฉืชื ื™ื ื•ืื™ืชื ื’ื ื”ื™ื›ื•ืœื•ืช ื”ืžื•ื‘ื ื•ืช ื‘ื“ืคื“ืคื ื™ื. ื”ืจื‘ื” ื–ืžืŸ ืื—ื“ ื”ื“ื‘ืจื™ื ืฉื”ื™ื” ื—ืกืจ ืœืžืชื›ื ืชื™ื ื•ืœืžืชื›ื ืชื•ืช ื•ื”ื™ื” ืื—ืช ื”ืกื™ื‘ื•ืช ืœืฉื™ืœื•ื‘ ืกืคืจื™ื” ื—ื™ืฆื•ื ื™ืช ืœ UI ื‘ืืคืœื™ืงืฆื™ื™ืช ืจื™ืืงื˜, ื”ื™ื” ื“ื™ืืœื•ื’ ืžื•ื“ืืœื™. ื”ื™ื•ื ืขื ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ื‘ื“ืคื“ืคื ื™ื ื–ื• ื›ื‘ืจ ืœื ื‘ืขื™ื” ื•ื”ืืชื’ืจ ื”ื™ื—ื™ื“ ื”ื•ื ืœื”ืชืื™ื ืืช ืžืžืฉืง ื”ืคืงื•ื“ื•ืช ืฉืœ ื”ื“ืคื“ืคืŸ ืœืื•ืคื™ ื”ื“ืงืœืจื˜ื™ื‘ื™ ืฉืœ ืจื™ืืงื˜. ื‘ื•ืื• ื ืจืื” ืื™ืš ื–ื” ืขื•ื‘ื“. ## ืคื™ืชื•ื— ื“ื™ืืœื•ื’ ืžื•ื“ืืœื™ ื‘ืจื™ืืงื˜ ื‘ื’ื™ืฉื” ืื™ืžืคืจื˜ื™ื‘ื™ืช ื”ืืœืžื ื˜ dialog ืฉืœ HTML ื™ื›ื•ืœ ืœื”ื™ืคืชื— ื‘ืฆื•ืจื” ืžื•ื“ืืœื™ืช ื‘ืขื–ืจืช ื”ืคื•ื ืงืฆื™ื” showModal ืฉืœ JavaScript. ืœื›ืŸ ื”ื“ืจืš ื”ื›ื™ ืคืฉื•ื˜ื” ืœื”ืฆื™ื’ ื“ื™ืืœื•ื’ ืžื•ื“ืืœื™ ื‘ืจื™ืืงื˜ ื”ื™ื ืœื™ืฆื•ืจ ืืœืžื ื˜ ื›ื–ื”, ืœืฉืžื•ืจ ืื•ืชื• ื‘ ref ื•ืœืงืจื•ื ืœืคื•ื ืงืฆื™ื” ื›ืฉืจื•ืฆื™ื ืœื”ืฆื™ื’ ืื• ืœื”ืกืชื™ืจ ืื•ืชื•. ื”ื ื” ื”ืงื•ื“:
import { useRef } from "react";

export default function App() {
  const modal = useRef(null);
  const show = () => {
    modal.current.showModal();
  };

  const hide = () => {
    modal.current.close();
  };

  return (
    <div className="App">
      <p>
        Hello World
        <button onClick={show}>show dialog</button>
      </p>
      <dialog ref={modal}>
        <p>Dialog Content</p>
        <button onClick={hide}>Close</button>
      </dialog>{" "}
    </div>
  );
}

## ื”ืคื™ื›ืช ื”ืžื ื’ื ื•ืŸ ืœื“ืงืœืจื˜ื™ื‘ื™ ื”ื‘ืขื™ื” ืฉืžืชื›ื ืชื™ ืจื™ืืงื˜ ืœื ืื•ื”ื‘ื™ื ืœื”ื’ื“ื™ืจ ืžื” ืงื•ืจื” ื›ืฉืœื•ื—ืฆื™ื ืขืœ ื›ืคืชื•ืจ. ืื ื—ื ื• ืžืขื“ื™ืคื™ื ืœื”ืกืชื›ืœ ืขืœ ื”ื™ื™ืฉื•ื, ืœื“ื‘ืจ ืขืœ ื”ืกื˜ื™ื™ื˜ ืฉืœื• ื•ืœื—ืฉื•ื‘ ืื™ืš ื”ืžืžืฉืง ื ืจืื” ื›ืฉืžืฉืชื ื™ ื”ืกื˜ื™ื™ื˜ ืžื›ื™ืœื™ื ืขืจื›ื™ื ืžืกื•ื™ืžื™ื. ื”ืงื•ื“ ืœืžืขืœื” ืื•ืžื ื ืžืฆื™ื’ ื•ืžืกืชื™ืจ ืืช ื”ื“ื™ืืœื•ื’, ืื‘ืœ ืœื ื‘ืจื•ืจ ืื™ืš ืœืกื ื›ืจืŸ ืืช ื”ื“ื™ืืœื•ื’ ื”ืžื•ื“ืืœื™ ื”ื–ื” ืขื ื—ืœืงื™ื ืื—ืจื™ื ื‘ื™ื™ืฉื•ื. ื”ื“ืจืš ื”ืžืจื›ื–ื™ืช ืœื—ื‘ืจ ื‘ื™ืŸ ืงื•ื“ ืจื™ืืงื˜ื™ ืœืงื•ื“ ื“ืคื“ืคืŸ ืฉืื™ื ื• ืจื™ืืงื˜ื™ ื”ื™ื ื”ืคืงื•ื“ื” useEffect. ืืœื” ื”ืฆืขื“ื™ื ืฉื ื™ืงื— ื‘ืฉื‘ื™ืœ ืœื”ืคื•ืš ืืช ื”ืงื•ื“ ืœื“ืงืœืจื˜ื™ื‘ื™: 1. ื ื•ืฆื™ื ืืช ื”ื“ื™ืืœื•ื’ ืœืงื•ืžืคื•ื ื ื˜ื” ืžืฉืœื•, ืฉืชืฆื™ื’ ื‘ืชื•ืš ื”ื“ื™ืืœื•ื’ ืืช ื”ื™ืœื“ื™ื ืฉืœื”. 2. ื ืฉืชืžืฉ ื‘ Prop ืฉืœ ื”ืงื•ืžืคื•ื ื ื˜ื” ื›ื“ื™ ืœื”ื—ืœื™ื˜ ืื ืฆืจื™ืš ืœื”ืฆื™ื’ ืื• ืœื”ืกืชื™ืจ ืืช ื”ื“ื™ืืœื•ื’. 3. ื ืขื‘ื™ืจ ื‘ Prop ืคื•ื ืงืฆื™ื” ืฉืชื™ืงืจื ื›ืฉืžืฉืชืžืฉ ืกื•ื’ืจ ืืช ื”ื“ื™ืืœื•ื’. 4. ื ืคืขื™ืœ ืืช ื”ืงื•ืžืคื•ื ื ื˜ื” ืžื‘ื—ื•ืฅ ื•ื ืฉืžื•ืจ ืกื˜ื™ื™ื˜ ืฉื™ืงื‘ืข ืื ื”ื“ื™ืืœื•ื’ ื™ื•ืฆื’ ืื• ื™ื•ืกืชืจ. ืงื•ื“? ื‘ืจื•ืจ:
import { useRef, useState, useEffect } from "react";

function Modal({ children, visible, onClose }) {
  const modal = useRef(null);

  const show = () => {
    modal.current.showModal();
  };

  const hide = () => {
    modal.current.close();
  };

  useEffect(() => {
    if (visible) {
      show();
    } else {
      hide();
    }
  }, [visible]);

  return (
    <dialog ref={modal}>
      {children}
      <button onClick={onClose}>Close</button>
    </dialog>
  );
}

export default function App() {
  const [showModal, setShowModal] = useState(false);

  return (
    <div className="App">
      <p>
        Hello World
        <button onClick={() => setShowModal(true)}>show dialog</button>
        <p>{JSON.stringify(showModal)}</p>
        <p>
          <label>
            <input
              type="checkbox"
              checked={showModal}
              onChange={(e) => setShowModal(e.target.value)}
            />
            Show Modal
          </label>
        </p>
        <Modal visible={showModal} onClose={() => setShowModal(false)}>
          <p>Hello world</p>
        </Modal>
      </p>
    </div>
  );
}

ื•ืœื™ื™ื‘ ื‘ืงื•ื“ืกื ื“ื‘ื•ืงืก ืœืžื™ื˜ื™ื‘ื™ ืœื›ืช: https://codesandbox.io/s/busy-bassi-rfpnyt?file=/src/App.js:0-1135

ToCode
1 420
# ืื™ืš ืœื›ืชื•ื‘ ืœื‘ื“ ื“ื™ืืœื•ื’ ืžื•ื“ืืœื™ ื‘ืจื™ืืงื˜ ื‘ 2023 ื‘ื•ื‘ ื“ื™ืœืŸ ืฉืจ ืขืœ ื”ื–ืžื ื™ื ืฉืžืฉืชื ื™ื ื•ืื™ืชื ื’ื ื”ื™ื›ื•ืœื•ืช ื”ืžื•ื‘ื ื•ืช ื‘ื“ืคื“ืคื ื™ื. ื”ืจื‘ื” ื–ืžืŸ ืื—ื“ ื”ื“ื‘ืจื™ื ืฉื”ื™ื” ื—ืกืจ ืœืžืชื›ื ืชื™ื ื•ืœืžืชื›ื ืชื•ืช ื•ื”ื™ื” ืื—ืช ื”ืกื™ื‘ื•ืช ืœืฉื™ืœื•ื‘ ืกืคืจื™ื” ื—ื™ืฆื•ื ื™ืช ืœ UI ื‘ืืคืœื™ืงืฆื™ื™ืช ืจื™ืืงื˜, ื”ื™ื” ื“ื™ืืœื•ื’ ืžื•ื“ืืœื™. ื”ื™ื•ื ืขื ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ื‘ื“ืคื“ืคื ื™ื ื–ื• ื›ื‘ืจ ืœื ื‘ืขื™ื” ื•ื”ืืชื’ืจ ื”ื™ื—ื™ื“ ื”ื•ื ืœื”ืชืื™ื ืืช ืžืžืฉืง ื”ืคืงื•ื“ื•ืช ืฉืœ ื”ื“ืคื“ืคืŸ ืœืื•ืคื™ ื”ื“ืงืœืจื˜ื™ื‘ื™ ืฉืœ ืจื™ืืงื˜. ื‘ื•ืื• ื ืจืื” ืื™ืš ื–ื” ืขื•ื‘ื“. ## ืคื™ืชื•ื— ื“ื™ืืœื•ื’ ืžื•ื“ืืœื™ ื‘ืจื™ืืงื˜ ื‘ื’ื™ืฉื” ืื™ืžืคืจื˜ื™ื‘ื™ืช ื”ืืœืžื ื˜ dialog ืฉืœ HTML ื™ื›ื•ืœ ืœื”ื™ืคืชื— ื‘ืฆื•ืจื” ืžื•ื“ืืœื™ืช ื‘ืขื–ืจืช ื”ืคื•ื ืงืฆื™ื” showModal ืฉืœ JavaScript. ืœื›ืŸ ื”ื“ืจืš ื”ื›ื™ ืคืฉื•ื˜ื” ืœื”ืฆื™ื’ ื“ื™ืืœื•ื’ ืžื•ื“ืืœื™ ื‘ืจื™ืืงื˜ ื”ื™ื ืœื™ืฆื•ืจ ืืœืžื ื˜ ื›ื–ื”, ืœืฉืžื•ืจ ืื•ืชื• ื‘ ref ื•ืœืงืจื•ื ืœืคื•ื ืงืฆื™ื” ื›ืฉืจื•ืฆื™ื ืœื”ืฆื™ื’ ืื• ืœื”ืกืชื™ืจ ืื•ืชื•. ื”ื ื” ื”ืงื•ื“:
import { useRef } from "react";

export default function App() {
  const modal = useRef(null);
  const show = () => {
    modal.current.showModal();
  };

  const hide = () => {
    modal.current.close();
  };

  return (
    <div className="App">
      <p>
        Hello World
        <button onClick={show}>show dialog</button>
      </p>
      <dialog ref={modal}>
        <p>Dialog Content</p>
        <button onClick={hide}>Close</button>
      </dialog>{" "}
    </div>
  );
}

## ื”ืคื™ื›ืช ื”ืžื ื’ื ื•ืŸ ืœื“ืงืœืจื˜ื™ื‘ื™ ื”ื‘ืขื™ื” ืฉืžืชื›ื ืชื™ ืจื™ืืงื˜ ืœื ืื•ื”ื‘ื™ื ืœื”ื’ื“ื™ืจ ืžื” ืงื•ืจื” ื›ืฉืœื•ื—ืฆื™ื ืขืœ ื›ืคืชื•ืจ. ืื ื—ื ื• ืžืขื“ื™ืคื™ื ืœื”ืกืชื›ืœ ืขืœ ื”ื™ื™ืฉื•ื, ืœื“ื‘ืจ ืขืœ ื”ืกื˜ื™ื™ื˜ ืฉืœื• ื•ืœื—ืฉื•ื‘ ืื™ืš ื”ืžืžืฉืง ื ืจืื” ื›ืฉืžืฉืชื ื™ ื”ืกื˜ื™ื™ื˜ ืžื›ื™ืœื™ื ืขืจื›ื™ื ืžืกื•ื™ืžื™ื. ื”ืงื•ื“ ืœืžืขืœื” ืื•ืžื ื ืžืฆื™ื’ ื•ืžืกืชื™ืจ ืืช ื”ื“ื™ืืœื•ื’, ืื‘ืœ ืœื ื‘ืจื•ืจ ืื™ืš ืœืกื ื›ืจืŸ ืืช ื”ื“ื™ืืœื•ื’ ื”ืžื•ื“ืืœื™ ื”ื–ื” ืขื ื—ืœืงื™ื ืื—ืจื™ื ื‘ื™ื™ืฉื•ื. ื”ื“ืจืš ื”ืžืจื›ื–ื™ืช ืœื—ื‘ืจ ื‘ื™ืŸ ืงื•ื“ ืจื™ืืงื˜ื™ ืœืงื•ื“ ื“ืคื“ืคืŸ ืฉืื™ื ื• ืจื™ืืงื˜ื™ ื”ื™ื ื”ืคืงื•ื“ื” useEffect. ืืœื” ื”ืฆืขื“ื™ื ืฉื ื™ืงื— ื‘ืฉื‘ื™ืœ ืœื”ืคื•ืš ืืช ื”ืงื•ื“ ืœื“ืงืœืจื˜ื™ื‘ื™: 1. ื ื•ืฆื™ื ืืช ื”ื“ื™ืืœื•ื’ ืœืงื•ืžืคื•ื ื ื˜ื” ืžืฉืœื•, ืฉืชืฆื™ื’ ื‘ืชื•ืš ื”ื“ื™ืืœื•ื’ ืืช ื”ื™ืœื“ื™ื ืฉืœื”. 2. ื ืฉืชืžืฉ ื‘ Prop ืฉืœ ื”ืงื•ืžืคื•ื ื ื˜ื” ื›ื“ื™ ืœื”ื—ืœื™ื˜ ืื ืฆืจื™ืš ืœื”ืฆื™ื’ ืื• ืœื”ืกืชื™ืจ ืืช ื”ื“ื™ืืœื•ื’. 3. ื ืขื‘ื™ืจ ื‘ Prop ืคื•ื ืงืฆื™ื” ืฉืชื™ืงืจื ื›ืฉืžืฉืชืžืฉ ืกื•ื’ืจ ืืช ื”ื“ื™ืืœื•ื’. 4. ื ืคืขื™ืœ ืืช ื”ืงื•ืžืคื•ื ื ื˜ื” ืžื‘ื—ื•ืฅ ื•ื ืฉืžื•ืจ ืกื˜ื™ื™ื˜ ืฉื™ืงื‘ืข ืื ื”ื“ื™ืืœื•ื’ ื™ื•ืฆื’ ืื• ื™ื•ืกืชืจ. ืงื•ื“? ื‘ืจื•ืจ:
import { useRef, useState, useEffect } from "react";

function Modal({ children, visible, onClose }) {
  const modal = useRef(null);

  const show = () => {
    modal.current.showModal();
  };

  const hide = () => {
    modal.current.close();
  };

  useEffect(() => {
    if (visible) {
      show();
    } else {
      hide();
    }
  }, [visible]);

  return (
    <dialog ref={modal}>
      {children}
      <button onClick={onClose}>Close</button>
    </dialog>
  );
}

export default function App() {
  const [showModal, setShowModal] = useState(false);

  return (
    <div className="App">
      <p>
        Hello World
        <button onClick={() => setShowModal(true)}>show dialog</button>
        <p>{JSON.stringify(showModal)}</p>
        <p>
          <label>
            <input
              type="checkbox"
              checked={showModal}
              onChange={(e) => setShowModal(e.target.value)}
            />
            Show Modal
          </label>
        </p>
        <Modal visible={showModal} onClose={() => setShowModal(false)}>
          <p>Hello world</p>
        </Modal>
      </p>
    </div>
  );
}

ื•ืœื™ื™ื‘ ื‘ืงื•ื“ืกื ื“ื‘ื•ืงืก ืœืžื™ื˜ื™ื‘ื™ ืœื›ืช: https://codesandbox.io/s/busy-bassi-rfpnyt?file=/src/App.js:0-1135

ToCode
1 420
//  val inputStream: LazyList[String] = demoInput.linesIterator.to(LazyList)
  val inputStream = LazyList.from(Source.fromFile("./input.txt").getLines())
  val unpackedInput: LazyList[Dir] = inputStream.flatMap(parseInput)
  val headMoves: LazyList[Knot] = unpackedInput.scanLeft[Knot](Knot(0, 0))((knot, dir) => knot.move(dir))
  val tailMovesPart1 = headMoves.scanLeft[Knot](Knot(0, 0))((tail, head) => tail.follow(head))
  println(tailMovesPart1.toSet.size)
## ื—ืœืง 2 ื‘ื—ืœืง ื”ืฉื ื™ ื‘ื™ืงืฉื• ืœื“ืžื™ื™ืŸ ื—ื‘ืœ ืขื ื™ื•ืชืจ ืงืฉืจื™ื - ืœืžืฉืœ 10 ืงืฉืจื™ื. ื”ืงืฉืจ ื”ืฉื ื™ ืขื•ืงื‘ ืื—ืจื™ ื”ืจืืฉื•ืŸ, ื”ืฉืœื™ืฉื™ ืื—ืจื™ ื”ืฉื ื™, ื”ืจื‘ื™ืขื™ ืื—ืจื™ ื”ืฉืœื™ืฉื™ ื•ื›ืš ื”ืœืื”. ื”ืฉืืœื” ื”ื™ืชื” ื‘ื›ืžื” ืžื™ืงื•ืžื™ื ื™ื™ื—ื•ื“ื™ื™ื ื”ื™ื” ื”ืงืฉืจ ื”ืื—ืจื•ืŸ. ื‘ื”ื™ื ืชืŸ ื”ืงื•ื“ ืฉื›ื‘ืจ ื›ืชื‘ื ื• ืžืขื‘ืจ ืœ 10 ืงืฉืจื™ื ื”ื•ื ื‘ืกืš ื”ื›ืœ ืชื•ืกืคืช ืฉืœ ืœื•ืœืื” ืฉืžื™ื™ืฆืจืช ืขื•ื“ ืจืฉื™ืžื•ืช:
  var tailMovesPart2: LazyList[Knot] = headMoves
  for (i <- Range(1, 10)) {
    tailMovesPart2 = tailMovesPart2.scanLeft[Knot](Knot(0, 0))((tail, head) => tail.follow(head))
  }

  println(tailMovesPart2.toSet.size)
ืกืš ื”ื›ืœ ื”ืคื™ืชืจื•ืŸ ื‘ืกืงืืœื” ืœื ื™ืฆื ืฉื•ื ื” ืžืฉืžืขื•ืชื™ืช ืžืคื™ืชืจื•ืŸ ื“ื•ืžื” ืฉื”ื™ื™ืชื™ ื›ื•ืชื‘ ื‘ืฉืคื” ืคื•ื ืงืฆื™ื•ื ืืœื™ืช ืื—ืจืช ื›ืžื• ืงืœื•ื–'ืจ ืื• ืืœื™ืงืกื™ืจ. ืืช ืขื™ืงืจ ื–ืžืŸ ื”ืขื‘ื•ื“ื” ืขืœ ื”ืชืจื’ื™ืœ ื‘ื™ืœื™ืชื™ ื‘ืœื—ืคืฉ ืืช ื”ืคื•ื ืงืฆื™ื•ืช ื”ืžืชืื™ืžื•ืช ื•ืœื”ื‘ื™ืŸ ืืช ื”ืชื—ื‘ื™ืจ. ื”ื’ืžื™ืฉื•ืช ืฉืœ ืกืงืืœื” ืžืืคืฉืจืช ืœืžืžืฉ ืืช ื”ืคื™ืชืจื•ืŸ ืชื•ืš ืฉื™ืœื•ื‘ ืฉืœ ื›ืชื™ื‘ ืžื•ื ื—ื” ืขืฆืžื™ื ืขื ื›ืชื™ื‘ ืคื•ื ืงืฆื™ื•ื ืืœื™.

ToCode
1 420
# ืคื™ืชืจื•ืŸ Advent Of Code 2022 Day 9 ื‘ืกืงืืœื” ื‘ืกืงืืœื” ื™ืฉ ืื•ืกืฃ ืžืจืฉื™ื ืฉืœ ืคื•ื ืงืฆื™ื•ืช ืœืขื‘ื•ื“ื” ืขื ืจืฉื™ืžื•ืช ื•ืœื™ืฆื™ืจืช ืจืฉื™ืžื•ืช ืžืชื•ืš ืจืฉื™ืžื•ืช ืื—ืจื•ืช. ื”ืœื›ืชื™ ืœืคืชื•ืจ ืืช ื™ื•ื 9 ืฉืœ AoC ื”ืื—ืจื•ืŸ ื›ื“ื™ ืœืฉื—ืง ืขื ื›ืžื” ืžื”ืŸ. ## ื”ืชืจื’ื™ืœ - ื—ืœืง 1 ื‘ืืชื’ืจ ืฉืœ ื™ื•ื 9 ื”ื™ื” ืขืœื™ื ื• ืœืขื‘ื•ืจ ื’ืฉืจ ื—ื‘ืœื™ื. ืื ื™ ื—ื™ื™ื‘ ืœื”ื•ื“ื•ืช ืฉืœื ื”ื‘ื ืชื™ ืขื“ ื”ืกื•ืฃ ืืช ืกื™ืคื•ืจ ื”ืจืงืข ืื‘ืœ ื‘ื’ื“ื•ืœ ื™ืฉ ื—ื‘ืœ ืฉื™ืฉ ืœื• ืฉื ื™ ืงืฉืจื™ื, ืงืฉืจ ื‘ื›ืœ ืงืฆื”. ืื ื—ื ื• ืžืงื‘ืœื™ื ืืช ื”ืžืกืœื•ืœ ืฉืขื•ื‘ืจ ืงืฉืจ ืื—ื“ (ื” head) ื•ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืžืžื ื• ืžื” ื”ืžืกืœื•ืœ ืฉื™ืขืฉื” ื”ืงืฉืจ ื”ืฉื ื™. ื‘ื’ื“ื•ืœ ื”ืงืฉืจ ื”ืฉื ื™ ืฆืจื™ืš "ืœืขืงื•ื‘" ืื—ืจื™ ื”ืงืฉืจ ื”ืจืืฉื•ืŸ, ื›ืš ืฉื›ืœ ืคืขื ืฉื”ืจืืฉื•ืŸ ื ืžืฆื ื‘ืžืจื—ืง 2 ืžืฉื‘ืฆื•ืช ืžื”ืฉื ื™ ื”ืงืฉืจ ื”ืฉื ื™ ื™ื–ื•ื– ืžืฉื‘ืฆืช ืื—ืช ืœื›ื™ื•ื•ืŸ ื”ืจืืฉื•ืŸ. ื™ืฉ ื‘ื“ืฃ ื”ืชืจื’ื™ืœ ื›ืžื” ืื™ื•ืจื™ื ืฉืžืžื—ื™ืฉื™ื ืืช ื”ืชื ื•ืขื” ื”ื–ืืช ื•ืื ืืชื ืœื ืžื›ื™ืจื™ื ืืช ื”ืชืจื’ื™ืœ ืื ื™ ืžืžืœื™ืฅ ืœื”ืฆื™ืฅ ืฉื. ื”ืงืœื˜ ื™ื”ื™ื” ื”ืžืกืœื•ืœ ืฉืขื•ื‘ืจ ื”ืงืฉืจ ื”ืจืืฉื•ืŸ, ื›ืืฉืจ ืฉื ื™ ื”ืงืฉืจื™ื ื ืขื™ื ืขืœ ืžื™ืฉื•ืจ ื“ื•-ืžื™ืžื“ื™ ื•ื™ื›ื•ืœื™ื ืœื–ื•ื– ืœืžืขืœื”, ืœืžื˜ื”, ื™ืžื™ื ื” ื•ืฉืžืืœื”. ืžืกืœื•ืœ ื ืจืื” ื›ืš:
R 4
U 4
L 3
D 1
R 4
D 1
L 5
R 2
ื•ื–ื” ืื•ืžืจ ืฉื”ืงืฉืจ ื”ืจืืฉื•ืŸ ื™ื–ื•ื– 4 ืฆืขื“ื™ื ื™ืžื™ื ื”, ืื—ืจื™ ื–ื” 4 ืฆืขื“ื™ื ืœืžืขืœื”, ืฉืœื•ืฉื” ืฆืขื“ื™ื ืฉืžืืœื” ื•ืื– ืขื•ื“ ืฆืขื“ ืœืžื˜ื”, ืืจื‘ืขื” ืฆืขื“ื™ื ื™ืžื™ื ื”, ืฆืขื“ ืœืžื˜ื”, ื—ืžื™ืฉื” ืฉืžืืœื” ื•ืฉื ื™ื™ื ื™ืžื™ื ื”. ื”ืงืฉืจ ื”ืฉื ื™ ืขื•ืงื‘ ืœืคื™ ื”ืœื•ื’ื™ืงื” ืฉืชื™ืืจืชื™ ืงื•ื“ื ื•ืžื•ืกื‘ืจืช ื”ืจื‘ื” ื™ื•ืชืจ ื˜ื•ื‘ ื‘ื“ืฃ ื”ืืชื’ืจ. ## ืžื™ืžื•ืฉ ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ื”ืงืฉืจื™ื ื‘ืกืงืืœื” ื”ืฆืขื“ ื”ืจืืฉื•ืŸ ื‘ืคื™ืชืจื•ืŸ ื”ื™ื” ืœื”ื‘ื™ืŸ ืืช ื”"ืงืฉืจื™ื" ื•ื”ืคืขื•ืœื•ืช ืฉืœื”ื - ื–ื™ื›ืจื• ืฉื”ืงืฉืจ ื”ืจืืฉื•ืŸ ื–ื– ืœืคื™ ื”ื”ื•ืจืื•ืช ื•ื”ืงืฉืจ ื”ืฉื ื™ "ืขื•ืงื‘" ืื—ืจื™ ื”ืจืืฉื•ืŸ, ืœื›ืŸ ืœืงืฉืจ ื™ืฉ ืžื™ืงื•ื (ืงื•ืื•ืจื“ื™ื ื˜ื•ืช x ื• y), ื•ืฉืชื™ ืคื•ื ืงืฆื™ื•ืช, ืชื–ื•ื–ื” ืœืคื™ ื”ื•ืจืื” ื•ืชื–ื•ื–ื” ืื—ืจื™ ืงืฉืจ ืื—ืจ. ื”ืžื™ืžื•ืฉ ื‘ืกืงืืœื” ืฉืœ ืฉืชื™ ื”ืคื•ื ืงืฆื™ื•ืช ื›ื•ืœืœ ืœื•ื’ื™ืงืช ื”ืชื–ื•ื–ื” ืื—ืจื™ ืงืฉืจ ืื—ืจ ื”ื•ื:
enum Dir:
  case U, D, L, R

case class Knot(x: Int, y: Int) {
  def move(direction: Dir): Knot =
    direction match
      case Dir.R => Knot(this.x + 1, this.y)
      case Dir.L => Knot(this.x - 1, this.y)
      case Dir.U => Knot(this.x, this.y - 1)
      case Dir.D => Knot(this.x, this.y + 1)

  def follow(head: Knot): Knot =
    // head touches tail
    if (((head.x - this.x).abs <= 1) && ((head.y - this.y).abs <= 1)) {
      return this
    }
    var nextPosition = this;

    if (nextPosition.x < head.x) {
      nextPosition = nextPosition.move(Dir.R)
    } else if (nextPosition.x > head.x) {
      nextPosition = nextPosition.move(Dir.L)
    }

    if (nextPosition.y < head.y) {
      nextPosition = nextPosition.move(Dir.D)
    } else if (nextPosition.y > head.y) {
      nextPosition = nextPosition.move(Dir.U)
    }
    nextPosition
}
ืื ื™ ื‘ื˜ื•ื— ืฉืืคืฉืจ ืœื›ืชื•ื‘ ืืช ื”ืคื•ื ืงืฆื™ื” follow ื™ื•ืชืจ ื™ืคื” ื•ืืชื ืžื•ื–ืžื ื™ื ืœืฉืœื•ื— ื‘ืชื’ื•ื‘ื•ืช ืžื™ืžื•ืฉื™ื ืฉืœื›ื, ืื‘ืœ ืืคื™ืœื• ื”ืžื™ืžื•ืฉ ื”ืžืกื•ืจื‘ืœ ืฉืœื™ ื”ื™ื” ืžืกืคื™ืง ื˜ื•ื‘ ืคื”. ## ืคื™ืชืจื•ืŸ ื—ืœืง 1 ืขื ืจืฉื™ืžื•ืช ื•ืื—ืจื™ ื›ืœ ื”ื”ืงื“ืžื” ืืคืฉืจ ืœื’ืฉืช ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“ ื”ืžืขื ื™ื™ืŸ - ื”ืจืฉื™ืžื•ืช ื•ื”ื˜ืจื ืกืคื•ืจืžืฆื™ื•ืช ืขืœื™ื”ืŸ. ืื ื™ ืžืชื—ื™ืœ ืขื ื”ืงืœื˜ ืฉื–ื• ืจืฉื™ืžืช ืฆืขื“ื™ื ื‘ืกื’ื ื•ืŸ ืฉืœ:
R 4
U 2
ื‘ื’ืœืœ ืฉื”ืงืฉืจื™ื ื–ื–ื™ื ืจืง ืฆืขื“ ืื—ื“ ื›ืœ ืคืขื, ืื ื™ ืžืขื“ื™ืฃ "ืœืคืชื•ื—" ืืช ื”ืงื™ื“ื•ื“ ื•ืœื™ื™ืฆืจ ืจืฉื™ืžื” ืฉืœ ืคืงื•ื“ื•ืช ืชื ื•ืขื”, ื›ืœื•ืžืจ ืœื”ืคื•ืš ืืช ื”ืงืœื˜ ืœืจืฉื™ืžื” ื›ืžื•:
R R R R U U
ื‘ืกืงืืœื” ื–ื” ื™ื”ื™ื” ืขื ื”ืงื•ื“ ื”ื‘ื:
def parseInput(input: String): LazyList[Dir] = {
  val Array(name, countStr) = input.split(" ")
  val count = countStr.toInt
  LazyList.fill(count)(Dir.valueOf(name))
}

val inputStream = LazyList.from(Source.fromFile("./input.txt").getLines())
val unpackedInput: LazyList[Dir] = inputStream.flatMap(parseInput)

ืขื›ืฉื™ื• ืืคืฉืจ ืœื™ืฆื•ืจ ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ืžื™ืงื•ืžื™ื ืฉืœ ื”ืงืฉืจ ื”ืจืืฉื•ืŸ. ื”ืคื•ื ืงืฆื™ื” scanLeft ืฉืœ ืจืฉื™ืžื” ืขืฆืœื” ื‘ืกืงืืœื” ืžืงื‘ืœืช ืขืจืš ื”ืชื—ืœื” - ืฉื–ื” ื™ื”ื™ื” ื”ืงืฉืจ ื‘ื ืงื•ื“ื” (0, 0), ื•ืคื•ื ืงืฆื™ื” ืฉืฆืจื™ื›ื” ืœืงื‘ืœ ืืช ื”ืขืจืš ื”ื ื•ื›ื—ื™ ื•ืืœืžื ื˜ ืžื”ืจืฉื™ืžื” ื•ืœื”ื—ื–ื™ืจ ืืช ื”ืืœืžื ื˜ ื”ื‘ื ื‘ืจืฉื™ืžืช ื”ืชื•ืฆืื•ืช. ืœื›ืŸ ื—ื™ืฉื•ื‘ ื›ืœ ื”ืžื™ืงื•ืžื™ื ืฉืœ ืงืฉืจ ื” head ื™ื”ื™ื”:
val headMoves: LazyList[Knot] = unpackedInput.scanLeft[Knot](Knot(0, 0))((knot, dir) => knot.move(dir))
ื‘ืฉื‘ื™ืœ ืœืขืงื•ื‘ ืื—ืจื™ head ืื ื™ ืžืฉืชืžืฉ ืฉื•ื‘ ื‘ scan ืื‘ืœ ื”ืคืขื ืจืฉื™ืžืช ื”ืงืœื˜ ื”ื™ื headMoves ื•ื”ืคื•ื ืงืฆื™ื” ืชืงืจื ืœ follow:
val tailMovesPart1 = headMoves.scanLeft[Knot](Knot(0, 0))((tail, head) => tail.follow(head))
ืœื‘ืกื•ืฃ ื ื™ืงื— ืืช ื›ืœ ืจืฉื™ืžืช ื” tailMovesPart1 ืœืชื•ืš Set ื•ื ื“ืคื™ืก ืืช ื”ื’ื•ื“ืœ ืฉืœื”, ื›ื“ื™ ืœืงื‘ืœ ืืช ืžืกืคืจ ื”ืขืจื›ื™ื ื”ืฉื•ื ื™ื ื‘ืจืฉื™ืžื”. ืกืš ื”ื›ืœ ื”ืคื™ืชืจื•ืŸ ืฉืœ ื”ื—ืœืง ื”ืจืืฉื•ืŸ ื”ื•ื:
@main
def main(): Unit = {

ToCode
1 420
# ื”ืกืจื˜ื™ื ืฉืœ ื˜ื•ื ื”ื ืงืก ืื—ืช ื”ื“ื•ื’ืžืื•ืช ื‘ืงื•ืจืก SQL ื”ื—ื“ืฉ ืฉืœ ื”ืืจื•ื•ืจื“ ื”ื™ื ื”ืฉืื™ืœืชื” ื”ื‘ืื” ืฉืžื•ืฉื›ืช ืžื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืืช ื›ืœ ื”ืกืจื˜ื™ื ื‘ื”ื ืฉื™ื—ืง ื˜ื•ื ื”ื ืงืก:
SELECT "title" FROM "movies"
WHERE "id" IN (
    SELECT "movie_id" FROM "stars"
    WHERE "person_id" = (
        SELECT "id" FROM "people"
        WHERE "name" = 'Tom Hanks'
    )
);
ืืคืฉืจ ืœื”ื‘ื™ืŸ ืืช ื”ืฉืื™ืœืชื”, ืื‘ืœ ืœื ื‘ืจื•ืจ ืœืžื”, ื›ืฉืฉืื™ืœืชื” ืžืงื‘ื™ืœื” ื‘ื‘ืกื™ืก ื ืชื•ื ื™ื ื’ืจืคื™ ื”ื™ื:
MATCH (m:Movie)-[:STAR]-(p:Person{name: 'Tom Hanks'})
RETURN m.title;
ื™ื•ืชืจ ืžื”ืฉืื™ืœืชื•ืช, ื”ืกื™ืคื•ืจ ืคื” ื”ื•ื ืขืœ ืžื‘ื ื” ืžื•ื“ืœ ื”ืžื™ื“ืข. ื›ืฉื”ืžื™ื“ืข ื‘ื ื•ื™ ื˜ื•ื‘, ื›ืœื•ืžืจ ืžืชืื™ื ืœื™ื™ืฉื•ื ื•ืœืคื™ืฆ'ืจื™ื ืฉืื ื—ื ื• ืจื•ืฆื™ื ืœื‘ื ื•ืช, ื”ืฉืื™ืœืชื•ืช ืคืฉื•ื˜ื•ืช ื•ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืชืงื“ื ืžื”ืจ ื™ื•ืชืจ ื‘ืคื™ืชื•ื—. ืื™ืŸ ืกืคืง ืฉื—ืฉื•ื‘ ืœื”ื‘ื™ืŸ ืžื” ื–ื” ืื™ื ื“ืงืก ื•ืื™ืš ืื™ื ื“ืงืกื™ื ื™ื›ื•ืœื™ื ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื ื‘ืฉืื™ืœืชื•ืช SQL ืžืกื•ื‘ื›ื•ืช, ืื‘ืœ ื™ื•ืชืจ ื—ืฉื•ื‘ ืœื”ื‘ื™ืŸ ืืช ื”ืžื™ื“ืข ืฉืœ ื”ื™ืฉื•ื ื•ื”ืื ืžื‘ื ื” ื”ื˜ื‘ืœืื•ืช ืฉื‘ื—ืจื ื• (ืื• ื‘ื›ืœืœ ืกื•ื’ ื‘ืกื™ืก ื”ื ืชื•ื ื™ื) ืžืชืื™ื ืœืžื™ื“ืข ื•ืœื™ื™ืฉื•ื ืฉืœื ื•.

ToCode
1 420
TCategory(this.out("belongs_to").hasLabel("category"))
}

case class TCategory[S](value: GraphTraversal[S, Vertex]) extends CustomTraversal[S, Vertex] {
  def posts(): TPost[S]=
    TPost(this.in("belongs_to").hasLabel("post"))
}
ื•ื›ืš ืงื•ื“ื“ืชื™ ืืช ื”ื™ื—ืก ื‘ื™ืŸ ืคื•ืกื˜ ืœืงื˜ื’ื•ืจื™ื” ื‘ืืžืฆืขื•ืช ืžืชื•ื“ื” ืฉืœ ืคื•ืกื˜ - ื‘ืฉื‘ื™ืœ ืœืงื‘ืœ ืืช ื”ืงื˜ื’ื•ืจื™ื” ืฉืœ ื”ืคื•ืกื˜ ืžืžืฉื™ื›ื™ื ืœืื•ืจืš ื”ืงืฉืช belongs_to. ืื—ืจื™ ืžื™ืžื•ืฉ ื”ืชืฉืชื™ืช ืื ื™ ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืฉืื™ืœืชื•ืช ื›ืžื•:
g.Post("first").categories.toList
ื›ื“ื™ ืœืงื‘ืœ ืืช ื›ืœ ื”ืงื˜ื’ื•ืจื™ื•ืช ืฉืœ ื”ืคื•ืกื˜ first, ืื• ืืคื™ืœื•:
g.Post("first").categories.posts.toList
ื›ื“ื™ ืœืงื‘ืœ ืืช ื›ืœ ื”ืคื•ืกื˜ื™ื ืฉืฉื™ื™ื›ื™ื ืœืื•ืชืŸ ืงื˜ื’ื•ืจื™ื•ืช ื›ืžื• ื”ืคื•ืกื˜ first.

ToCode
1 420
# ื”ืฆืขื” ืœ DSL ืœืฉืื™ืœืชื•ืช ืขืœ ื’ืจืฃ ื‘ืกืงืืœื” ื•ื’ืจืžืœื™ืŸ ืœืคื ื™ ื›ืžื” ืฉื‘ื•ืขื•ืช ืคืจืกืžืชื™ ื›ืืŸ ืžื“ืจื™ืš ืœืขื‘ื•ื“ื” ืขื ื‘ืกื™ืกื™ ื ืชื•ื ื™ื ื’ืจืคื™ื™ื ื‘ืืžืฆืขื•ืช ื’ืจืžืœื™ืŸ ื•ืกืงืืœื”. ืžืื– ื”ืžืฉื›ืชื™ ืœืฉื—ืง ืขื ื”ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื•ื”ืชื—ืœืชื™ ืœื‘ื ื•ืช ืฉื™ื˜ืช ืขื‘ื•ื“ื” ืœื ื™ืกื•ื— ืฉืื™ืœืชื•ืช ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ. ืื ื™ ืžืคืจืกื ื›ืืŸ ื‘ืชื•ืจ ื˜ื™ื•ื˜ื”, ืื ื™ืฉ ืคื” ืื ืฉื™ื ืฉืžื›ื™ืจื™ื ืกืงืืœื” ืื• ื’ืจืžืœื™ืŸ ื™ื•ืชืจ ื˜ื•ื‘ ืžืžื ื™ ื•ืจื•ืฆื™ื ืœืฉืชืฃ ืœืžื” ื–ื” ืจืขื™ื•ืŸ ื˜ื•ื‘ (ืื• ื’ืจื•ืข) ืืฉืžื— ืœืฉืžื•ืข ื‘ืชื’ื•ื‘ื•ืช. ## ื”ื‘ืขื™ื” ืขื ื’ืจืžืœื™ืŸ ื‘ืื•ืชื• ืžื“ืจื™ืš ืžืœืคื ื™ ื›ืžื” ืฉื‘ื•ืขื•ืช ื”ืจืื™ืชื™ ืงื˜ืขื™ ืงื•ื“ ืฉื ืจืื• ื›ืš:
g.addV("post")
  .property("slug", slug)
  .property("title", title)
  .property("publishedAt", LocalDateTime.parse(publishedAt, formatter))
  .next()
ื”ืžืฉืชื ื” g ืžื™ื™ืฆื’ ื—ื™ื‘ื•ืจ ืœื’ืจืฃ ื•ืคื•ื ืงืฆื™ื•ืช ื›ืžื• addV ืžื‘ืฆืขื•ืช ืคืขื•ืœื•ืช ืขืœ ื”ื’ืจืฃ (ืคื•ื ืงืฆื™ื™ืช addV ืžื•ืกื™ืคื” ืฆื•ืžืช). ื‘ืฉื‘ื™ืœ ืœื’ืฉืช ืœืื•ืชื• ืคื•ืกื˜ ืฉื™ืฆืจืชื™ ืื ื™ ื›ื•ืชื‘ ืฉืื™ืœืชื” ืฉื–ื” ืžืฉื”ื• ืžืกื•ื’ "ื—ื™ืคื•ืฉ ื‘ื’ืจืฃ":
g.V().has("post", "slug", "first")
ื”ืงื•ื“ ื”ื–ื” ืขื“ื™ื™ืŸ ืœื ืžื—ื–ื™ืจ ืฆื•ืžืช ืืœื ืจืง ืžื™ื™ืฆื’ "ื—ื™ืคื•ืฉ ื‘ื’ืจืฃ". ื”ืžืชื•ื“ื” next ืฉืœื• ืชื—ื–ื™ืจ ืืช ื”ืฆื•ืžืช ื”ืจืืฉื•ืŸ ืฉืžืชืื™ื ืœื—ื™ืคื•ืฉ, ื•ื”ืžืชื•ื“ื” toList ืชื—ื–ื™ืจ ืืช ื›ืœ ื”ืฆืžืชื™ื ืฉืžืชืื™ืžื™ื ืœื—ื™ืคื•ืฉ. ื”ื‘ืขื™ื” ืขื ื›ืœ ื”ื—ื™ืคื•ืฉื™ื ื”ืืœื” ื”ื™ื ืฉื›ืชื™ื‘ืช ืฉืื™ืœืชื•ืช ื“ื•ืจืฉืช ื”ื™ื›ืจื•ืช ืขื ืžื‘ื ื” ื”ื’ืจืฃ. ืื ื‘ื ื•ืกืฃ ืœืคื•ืกื˜ื™ื ื™ืฉ ืœื™ ื’ื ืงื˜ื’ื•ืจื™ื•ืช ื•ื›ืœ ืคื•ืกื˜ ืžื—ื•ื‘ืจ ืœืงื˜ื’ื•ืจื™ื” ืขื ืงืฉืช belongs_to ืื– ืฉืื™ืœืชื” ื›ื–ื• ืชื—ื–ื™ืจ ืืช ื›ืœ ื”ืงื˜ื’ื•ืจื™ื•ืช ืฉืœ ืคื•ืกื˜ ืžืกื•ื™ื:
g
.V()
.has("post", "slug", "first")
.out("belongs_to")
ื•ืฉืื™ืœืชื” ื›ื–ื• ืชื—ื–ื™ืจ ืืช ื›ืœ ื”ืคื•ืกื˜ื™ื ืฉืฉื™ื™ื›ื™ื ืœืื•ืชื” ืงื˜ื’ื•ืจื™ื” ื›ืžื• first:
g
.V()
.has("post", "slug", "first")
.out("belongs_to")
.in("belongs_to")
ื•ื›ืืŸ ืื ื—ื ื• ื›ื‘ืจ ืžืชื—ื™ืœื™ื ืœืจืื•ืช ืืช ื”ื‘ืขื™ื” - ื›ื›ืœ ืฉื”ื™ื™ืฉื•ื ื’ื“ืœ ืื ื™ ืฆืจื™ืš ืœื›ืชื•ื‘ ืืช ื”ื™ื—ืกื™ื ื‘ื™ืŸ ื”ืฆืžืชื™ื ื•ื”ืžืืคื™ื™ื ื™ื ืฉืœื”ื ื‘ืฉืื™ืœืชื•ืช ืฉื•ื ื•ืช ื”ืžืคื•ื–ืจื•ืช ื‘ื™ื™ืฉื•ื. ื’ื ืื ืื ื™ ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืืช ื”ืฉืžื•ืช ื‘ืชื•ืจ ืงื‘ื•ืขื™ื, ืฉื™ื ื•ื™ ืฉืœ ื”ื™ื—ืกื™ื, ืœื“ื•ื’ืžื” ืฉืœ ื›ื™ื•ื•ืŸ ื”ืงืฉืช ืื• ื”ื›ื ืกืช ืฆื•ืžืช ื ื•ืกืฃ ื‘ื™ืŸ ืคื•ืกื˜ ืœืงื˜ื’ื•ืจื™ื”, ื™ื’ืจื•ื ืœืฉื™ื ื•ื™ ืจื•ื—ื‘ื™ ื‘ื™ื™ืฉื•ื ื•ืขื•ื“ ื›ื–ื” ืฉืžืขืจื›ืช ื”ื˜ื™ืคื•ืกื™ื ืฉืœ ืกืงืืœื” ืœื ืชืฆืœื™ื— ืœื–ื”ื•ืช. ## ืคื™ืชื•ื— ืฉืื™ืœืชื•ืช ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืืžืฆืขื•ืช ืขื˜ื™ืคืช ืžืกืœื•ืœื™ื ื‘ื’ืจืฃ ืื‘ืœ ืื ื ืขืฆื•ืจ ืœื”ืชื‘ื•ื ืŸ ืฉื•ื‘ ื‘ืฉืื™ืœืชื•ืช ื ืฉื™ื ืœื‘ ืœืชื‘ื ื™ืช ืžืขื ื™ื™ื ืช - ื›ืœ ืžืชื•ื“ื” ืžื—ื–ื™ืจื” ืื•ื‘ื™ืงื˜ ืžืกื•ื’ "ื—ื™ืคื•ืฉ ื‘ื’ืจืฃ", ื•ื›ืœ ื—ื™ืคื•ืฉ ื‘ื’ืจืฃ ื”ื•ื ืžืฉื”ื• ืฉืืคืฉืจ ืœื”ืžืฉื™ืš ืื•ืชื• ืขื ื—ื™ืคื•ืฉื™ื ื ื•ืกืคื™ื. ื‘ืขืฆื ื›ืœ ื”ืžืชื•ื“ื•ืช ืฉืœ ื’ืจืžืœื™ืŸ ื”ืŸ ื—ื™ืคื•ืฉื™ื ื‘ื’ืจืฃ ื”ืฉืžื•ืจื™ื ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ. ื‘ืฉื‘ื™ืœ ืœื”ืชืื™ื ืืช ื’ืจืžืœื™ืŸ ืœื™ื™ืฉื•ื ืฉืœื™, ื›ืœ ืžื” ืฉืื ื™ ืฆืจื™ืš ื–ื” ืœื”ื•ืกื™ืฃ ืงืœืืกื™ื ืฉืžืชืื™ืžื™ื ืœืกื•ื’ื™ ื”ืฆืžืชื™ื ืฉืœื™ ื‘ื™ื™ืฉื•ื, ื•ืœื—ื‘ืจ ืืช ื”ืงืœืืกื™ื ื”ืืœื” ื‘ืชื•ืจ ืžืชื•ื“ื•ืช ื—ื“ืฉื•ืช ืฉืœ ืžื—ืœืงืช ื”ื—ื™ืคื•ืฉ ื‘ื’ืจืฃ. ื‘ื•ืื• ื ืจืื” ืืช ื–ื” ื‘ืงื•ื“. ื”ืžืืคื™ื™ืŸ ื”ืจืืฉื•ืŸ ืฉืื ื™ ืจื•ืฆื” ืœื”ื’ื“ื™ืจ ื ืงืจื CustomTraversal ื•ื”ื•ื ืžื™ื™ืฆื’ ื—ื™ืคื•ืฉ ื‘ื’ืจืฃ ืฉืžื—ื–ื™ืจ ืžืฉื”ื• ืžื˜ื™ืคื•ืก ืฉืœ ื”ื™ื™ืฉื•ื. ื›ืœื•ืžืจ ื›ืŸ ื–ื” ืฆื•ืžืช, ืื‘ืœ ืฆื•ืžืช ืฉืžื™ื™ืฆื’ ืžืฉื”ื•, ืœืžืฉืœ ืฆื•ืžืช ืฉืžื™ื™ืฆื’ ืคื•ืกื˜ ืื• ืฆื•ืžืช ืฉืžื™ื™ืฆื’ ืงื˜ื’ื•ืจื™ื”:
trait CustomTraversal[S, E] {
  val value: GraphTraversal[S, E]
}
ื‘ื”ื™ื ืชืŸ ืื•ื‘ื™ืงื˜ ืžืกื•ื’ ื–ื”, ืื ื™ ืจื•ืฆื” ืœื”ืžื™ืจ ืื•ืชื• ื‘ืฆื•ืจื” ืื•ื˜ื•ืžื˜ื™ืช ืœืฉื“ื” ื” value ืฉืœื•, ื›ื“ื™ ืฉืืคืฉืจ ื™ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ื• ื›ืื™ืœื• ื”ื™ื” ืœื ื• ื‘ื™ื“ GraphTraversal ื•ืœื›ืŸ ืื ื™ ืžื’ื“ื™ืจ ื”ืžืจื” ืื•ื˜ื•ืžื˜ื™ืช:
implicit def toValue[S, E](t: CustomTraversal[S, E]): GraphTraversal[S, E] = t.value
ืื—ืจื™ ืฉื‘ื ื™ื ื• ืื•ืชื• ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ื• ื›ื“ื™ ื˜ื™ืคื•ืกื™ื ืœื—ื™ืคื•ืฉื™ื, ืœืžืฉืœ ื•ืจื˜ืงืก ืฉืžื™ื™ืฆื’ ืคื•ืกื˜ ื™ื”ื™ื”:
case class TPost[S](value: GraphTraversal[S, Vertex]) extends CustomTraversal[S, Vertex]
ืื• ื•ืจื˜ืงืก ืฉืžื™ื™ืฆื’ ืงื˜ื’ื•ืจื™ื”:
case class TCategory[S](value: GraphTraversal[S, Vertex]) extends CustomTraversal[S, Vertex]
ื•ืื– ืืคืฉืจ ืœื”ืจื—ื™ื‘ ืืช ื”ื’ืจืฃ ื›ื“ื™ ืฉื™ื•ื›ืœ ืœื”ื—ื–ื™ืจ ืคื•ืกื˜ ืื• ืงื˜ื’ื•ืจื™ื”:
extension (g: GraphTraversalSource)
  def Post(slug: String): TPost[Vertex] =
    TPost(value = g.V().has("post", "slug", slug))

  def Category(name: String): TCategory[Vertex]=
    TCategory(value = g.V().has("category", "name", name))
ื•ื–ื” ื›ื‘ืจ ืขื•ื‘ื“, ื›ืœื•ืžืจ ืื ื™ ื™ื›ื•ืœ ืœื›ืชื•ื‘:
g.Post("first").next()
ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ื•ืจื˜ืงืก ืฉืžืชืื™ื ืœืคื•ืกื˜ ืฉื ืงืจื first. ืื‘ืœ ื–ื” ืœื ื”ืกื•ืฃ. ื ื–ื›ื•ืจ ืฉื”ืืชื’ืจ ื”ื™ื” ืœืงื•ื“ื“ ื‘ืฆื•ืจื” ื‘ื˜ื•ื—ื” ื•ืžืชืื™ืžื” ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ ืืช ื”ื™ื—ืก ื‘ื™ืŸ ืคื•ืกื˜ื™ื ืœืงื˜ื’ื•ืจื™ื•ืช, ืœื›ืŸ ืื ื™ ืžืจื—ื™ื‘ ืืช ื”ืงืœืืกื™ื ื”ืžื•ืชืืžื™ื ืฉื›ืชื‘ืชื™ ืงื•ื“ื:
case class TPost[S](value: GraphTraversal[S, Vertex]) extends CustomTraversal[S, Vertex] {
  def categories(): TCategory[S]=

ToCode
1 420
# ื•ืื™ืš ื‘ื›ืœ ื–ืืช ืืคืฉืจ ืœืงืฆืจ ื–ืžื ื™ื? ื“ื™ื•ืŸ ืžืขื ื™ื™ืŸ ื‘ืจื“ื™ื˜ ื”ืชื—ื™ืœ ื‘ืคื•ืกื˜ ื”ื–ื” ืขื ื”ื›ื•ืชืจืช "ืœื ืกื•ืช ืœื“ื‘ืจ ืขื ืžืชื›ื ืชื™ื ื›ื“ื™ ืœืงืฆืจ ื–ืžื ื™ ืคื™ืชื•ื— ื–ื” ื›ืžื• ืœื“ื‘ืจ ืขื ื”ื—ื–ืื™ ื›ื“ื™ ืœืฉืคืจ ืืช ืžื–ื’ ื”ืื•ื•ื™ืจ". ืื ื™ ืžื‘ื™ืŸ ืืช ื”ืื ื’ืœื•ื’ื™ื” ื•ื™ืฉ ื‘ื” ื”ืจื‘ื” ืืžืช. ืื‘ืœ ื–ื” ืœื ืกื•ืฃ ื”ืกื™ืคื•ืจ. ื›ืžื• ื”ื—ื–ืื™, ื’ื ืื ื—ื ื• (ืœืคืขืžื™ื) ื™ื•ื“ืขื™ื ืœื”ืขืจื™ืš ื›ืžื” ื–ืžืŸ ื™ื™ืงื— ืœื›ืชื•ื‘ ืงื•ื“ ืœืžื™ืžื•ืฉ ืžื ื’ื ื•ืŸ ืžืกื•ื™ื. ื•ื›ืžื• ื”ื—ื–ืื™ ื’ื ืœื ื• ืื™ืŸ ื”ืจื‘ื” ืžื” ืœืขืฉื•ืช ื‘ื ื•ื’ืข ืœื–ืžืŸ ืฉื–ื” ื™ื™ืงื—. ื”ื™ื™ืชื™ ืฉืžื— ืœื—ืฉื•ื‘ ืื• ืœื›ืชื•ื‘ ืงื•ื“ ืžื”ืจ ื™ื•ืชืจ, ืื‘ืœ ืžื ื™ืกื™ื•ืŸ ืขื‘ืจ ื–ื” ื”ื–ืžืŸ ืฉืœื•ืงื— ืœื™ ืœื—ืฉื•ื‘ ื•ืœืคืชื•ืจ ื‘ืขื™ื•ืช ืžื”ืกื•ื’ ื”ื–ื”. ืžื ื”ืœื™ื ืฉื™ื ืกื• ืœืฉื›ื ืข ืื•ืชื™ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื™ื•ืชืจ ืžื”ืจ ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื”ื›ื™ ืžืฉื›ื ืขื™ื ื‘ืขื•ืœื, ืื‘ืœ ืœืจื•ื‘ ื”ืžืชื›ื ืชื™ื ืฉืื ื™ ืžื›ื™ืจ ืœื ื—ืกืจ ืฉื›ื ื•ืข ื•ืœื ื—ืกืจื” ืžื•ื˜ื™ื‘ืฆื™ื”. ื‘ืฉื‘ื™ืœ ืœืงืฆืจ ื–ืžื ื™ ืคื™ืชื•ื— ื›ื“ืื™ ืœื”ืชืžื•ื“ื“ ืขื ื”ืืชื’ืจื™ื ื”ืืžื™ืชื™ื™ื ืฉืœ ื”ืžืคืชื—ื™ื. ืœืจื•ื‘ ืืœื” ื™ื”ื™ื•: 1. ืขื‘ื•ื“ื” ืขืœ ื‘ืขื™ื•ืช ื—ื“ืฉื•ืช ื‘ืœื™ ืžืกืคื™ืง ื™ื“ืข ืขืœ ื”ื‘ืขื™ื” ืื• ืขืœ ื”ื›ืœื™ื. ืืœื” ืžืชื›ื ืชื™ ื” PHP ืฉืขื›ืฉื™ื• ืฆืจื™ื›ื™ื ืœื›ืชื•ื‘ ืืคืœื™ืงืฆื™ื™ืช Front End ื‘ืจื™ืืงื˜. ื›ืฉื”ื›ืœ ื—ื“ืฉ ื”ื”ืชืงื“ืžื•ืช ืื™ื˜ื™ืช ื™ื•ืชืจ ื•ื”ืจื‘ื” ืคืขืžื™ื ื‘ื›ื™ื•ื•ืŸ ื”ืœื ื ื›ื•ืŸ. 2. ืขื‘ื•ื“ื” ืขืœ ืžื•ืฆืจ ืฉื”ืื™ืคื™ื•ืŸ ืฉืœื ืœื ืžืกืคื™ืง ื˜ื•ื‘, ื›ืš ืฉื›ืœ ื’ื™ืจืกื” ืฉื•ื‘ืจืช ื”ื ื—ื•ืช ื™ืกื•ื“ ืžื”ื•ืชื™ื•ืช ืžื’ื™ืจืกืื•ืช ืงื•ื“ืžื•ืช. 3. ืขื‘ื•ื“ื” ืขืœ ืคื™ืฆ'ืจื™ื ื’ื“ื•ืœื™ื ืžื“ื™ ืขื‘ื•ืจ ื”ืžื•ืฆืจ ื‘ืžืฆื‘ื• ื”ื ื•ื›ื—ื™ (ื•ื›ืŸ ื‘ืจื•ืจ ืœื™ ืฉืžื ื”ืœื™ ื”ืžื•ืฆืจ ืฉืžืืคื™ื™ื ื™ื ืืช ื”ืคื™ืฆ'ืจื™ื ืœื ืžืจื’ื™ืฉื™ื ืฉืืœื” ืคื™ืฆ'ืจื™ื ื’ื“ื•ืœื™ื ืžื“ื™). 4. ื”ื‘ื“ืœื™ ืจืžื•ืช ืžืฉืžืขื•ืชื™ื™ื ื‘ื™ืŸ ื”ืžืชื›ื ืชื™ื ื‘ืฆื•ื•ืช, ืฉื™ื•ืฆืจื™ื ืขื•ืžืก ืขืœ ื—ืœืง ืžื”ืฆื•ื•ืช ื•ืชื•ืคืขื” ืฉืœ "ืฆื•ื•ืืจ ื‘ืงื‘ื•ืง". ื‘ืžืงื•ื ืœื‘ื–ื‘ื– ื–ืžืŸ ืขืœ ื•ื•ื™ื›ื•ื—ื™ื ืžื ื”ืœื™ื ื˜ื•ื‘ื™ื ืฆืจื™ื›ื™ื ืœื”ื‘ื™ืŸ ืืช ื”ืฆื•ื•ืช ื•ืืช ื”ื—ืกืžื™ื ื”ืืžื™ืชื™ื™ื ืฉืžืื˜ื™ื ืืช ื”ืขื‘ื•ื“ื” ื•ืœื”ืฉืงื™ืข ืืช ื”ื–ืžืŸ ื‘ื”ืกืจืช ืื• ืฆืžืฆื•ื ืื•ืชื ื—ืกืžื™ื.

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

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

ToCode
1 420
# ืœื Java, ืžื—ืจื•ื–ืช ื•ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืืจื™ ื–ื” ืฉื ื™ ื“ื‘ืจื™ื ืฉื•ื ื™ื ืœ Java ื™ืฉ API ืœืขื‘ื•ื“ื” ืขื ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืืจื™ื™ื ื“ืจืš ื”ื—ื‘ื™ืœื” java.util.Pattern. ืขื ื”ื—ื‘ื™ืœื” ื”ื–ืืช ืืคืฉืจ ืœื›ืชื•ื‘ ื“ื‘ืจื™ื ื›ืžื•:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
ืื• ืืคื™ืœื• ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื•ืช ื”ืกื˜ื˜ื™ื•ืช ื•ืœื›ืชื•ื‘:
boolean b = Pattern.matches("a*b", "aaaaab");
ื•ื‘ื™ื•ื ืจื’ื™ืœ ื”ื™ื™ื ื• ืขื•ืฆืจื™ื ืคื” ืืช ื”ืฉื™ื—ื” ืขืœ ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืืจื™ื™ื ื•ื—ื•ื–ืจื™ื ืœื“ื‘ืจ ืขืœ ืงื•ื“. ืื‘ืœ ืขื Java ืฉื•ื ื™ื•ื ืื™ื ื• ื™ื•ื ืจื’ื™ืœ. ืžื—ื•ืฅ ืœื—ื‘ื™ืœืช ื”ื‘ื™ื˜ื•ื™ื™ื ื”ืจื’ื•ืœืืจื™ื™ื ื™ืฉ ื—ื‘ื™ืœื” ืฉืœ ืžื—ืจื•ื–ื•ืช ื•ื‘ื” ื”ืคื•ื ืงืฆื™ื” split:
public String[] split(String regex)
ื•ื›ืŸ ืฉื ื”ืคืจืžื˜ืจ ื ื‘ื—ืจ ื‘ื›ื•ื•ื ื” - ื’'ืื•ื•ื” ืžืชื™ื—ืก ืœืžื—ืจื•ื–ืช ื”ื”ืคืจื“ื” ืœ split ื›ืžื• ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืืจื™. ืงื•ื“? ื‘ื˜ื—. ื”ื ื” ืฉืชื™ ื“ื•ื’ืžืื•ืช:
import java.util.Arrays;

class Main {
  public static void main(String[] args) {
    // prints: [hello, world]
    System.out.println(Arrays.toString("hello-world".split("-")));

    // prints: []
    System.out.println(Arrays.toString("hello.world".split(".")));
  }
}
ื”ืฉื•ืจื” ื”ืจืืฉื•ื ื” ืžื“ืคื™ืกื” ืžืขืจืš ืขื ืฉื ื™ ืื™ื‘ืจื™ื, ื”ืจืืฉื•ืŸ ื”ื•ื ื”ืžื™ืœื” hello ื•ื”ืฉื ื™ ื”ืžื™ืœื” world. ื”ืฉื•ืจื” ื”ืฉื ื™ื” ืžื—ื–ื™ืจื” ืžืขืจืš ืจื™ืง, ื›ื™ ื ืงื•ื“ื” ื”ื™ื ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืืจื™ ืฉืžืชืื™ื ืœื›ืœ ืชื•, ื•ืœื›ืŸ ื›ืœ ืชื• ื”ื•ื ืชื• ื”ืคืจื“ื” ื•ืœื›ืŸ ืœื ื ืฉืืจื• ื“ื‘ืจื™ื ืืžื™ืชื™ื™ื (ืžื•ืคืจื“ื™ื) ืœืฉื™ื ื‘ืžืขืจืš.

ToCode - Estadรญsticas y analรญtica del canal de Telegram @tocodeil