자바스크립트로 골프를 코딩해보자!

12907 단어 javascriptprogramming
이 기사에서는 일부 JavaScript 코드를 살펴보겠습니다. 그러나 먼저 코드 골프가 무엇인지 알아야 합니다.

코드골프란?



코드 골프는 주어진 작업에 대해 가능한 가장 짧은 코드를 만들려고 합니다. 주로 게임이며 프로그래밍 기술을 향상시키는 데 매우 유용합니다. 골프를 코딩할 수 있는 사이트가 많이 있습니다. 다음은 가장 인기 있는 사이트 목록입니다.
  • https://code.golf
  • https://codingame.com

  • 시작하다!



    가장 쉬운 챌린지인 Fizz-Buzz(https://code.golf/fizz-buzz)를 코드 골프로 풀어보겠습니다. 우리의 임무는 1부터 100까지의 모든 숫자를 인쇄하는 것입니다. 그러나 숫자를 인쇄하는 대신 숫자가 3으로 나누어지면 "Fizz"라는 단어를 인쇄하고, 숫자가 5로 나누어지면 "Buzz"라는 단어를 인쇄하고 "FizzBuzz"는 숫자가 3과 5로 나누어지는 경우입니다.

    먼저 1에서 100까지의 모든 숫자를 인쇄하는 기본 프로그램을 만들겠습니다.

    for (let i = 1; i <= 100; i++) {
        console.log(i);
    }
    


    이제 1에서 100까지의 모든 숫자를 볼 수 있습니다. 하지만 Fizz, Buzz 또는 FizzBuzz를 인쇄하는 논리를 추가해야 합니다.

    for (let i = 1; i <= 100; i++) {
        if (i % 3 === 0 && i % 5 === 0) {
            console.log("FizzBuzz");
        } else if (i % 3 === 0) {
            console.log("Fizz");
        } else if (i % 5 === 0) {
            console.log("Buzz");
        } else {
            console.log(i);
        }
    }
    


    하지만 240바이트입니다! 이제 우리는 코드 골프를 합니다!

    for 루프 조건의 길이 줄이기



    현재 for 루프 문은 다음과 같습니다.

    let i = 1;
    i <= 100;
    i++;
    

    i++ 부분을 제거하고 i<=100i++<100로 바꿀 수 있습니다. 따라서 for 루프는 다음과 같습니다.

    let i = 0;
    i++ < 100;
    


    이제 코드를 225바이트로 줄였습니다.

    if-else를 한 줄로 변환


    ? 연산자를 사용하여 if-else 문을 한 줄로 만들 수 있습니다.

    for (let i = 0; i++ < 100; ) {
        console.log(
            i % 3 === 0 ? (i % 5 === 0 ? "FizzBuzz" : "Fizz") : i % 5 === 0 ? "Buzz" : i
        );
    }
    


    103바이트를 제거했습니다.

    let 키워드 제거



    범위를 사용하지 않기 때문에 let 키워드를 제거할 수 있습니다.

    console.log를 인쇄로 바꾸기


    console.logprint로 바꾸고 코드를 112바이트로 줄일 수 있습니다.

    Fizz 저장을 위한 변수 생성



    이렇게 변수를 생성합니다.

    f = i % 3 ? "" : "Fizz";
    


    아래 도표를 보십시오.



    이제 print 함수에서 이 논리를 사용합니다.

    print(i % 5 ? f || i : f + "Buzz");
    


    혼동하지 마세요 😉. 작동 방식은 다음과 같습니다.

    먼저 i % 5가 0이 아닌지 확인합니다. 즉, i % 5는 5로 나눌 수 없습니다. 따라서 f가 비어 있는지 다시 확인합니다. f가 비어 있으면 i를 인쇄하고 그렇지 않으면 f를 인쇄합니다.
    i % 5가 0을 반환하면 i % 5가 5로 나누어질 수 있음을 의미합니다. 따라서 f + "Buzz"만 인쇄합니다.

    그러면 코드가 다음과 같이 표시됩니다.

    for (i = 0; i++ < 100; ) {
        f = i % 3 ? "" : "Fizz";
        print(i % 5 ? f || i : f + "Buzz");
    }
    


    92바이트입니다.

    인쇄 기능을 루프 헤더로 이동


    print 함수를 루프 헤더로 이동할 수 있습니다.

    for (i = 0; i++<100;print(i % 5 ? f || i : f + "Buzz"))
    //..
    


    그리고 문이 하나만 있기 때문에 {} 중괄호를 제거할 수 있습니다.

    for (i = 0; i++ < 100; print(i % 5 ? f || i : f + "Buzz"))
        f = i % 3 ? "" : "Fizz";
    


    코드가 점점 짧아지고 있습니다. 이제 79바이트입니다.

    모든 공백 제거



    이게 제일 기본인데 마지막으로 해요.

    for(i=0;i++<100;print(i%5?f||i:f+"Buzz"))f=i%3?"":"Fizz";
    


    이제 JavaScript에서 가장 짧은 Fizz Buzz를 만들었습니다. 56바이트입니다. 🎉🎉

    결론



    이제 코드골프의 기본을 알았으니 코드골프 챌린지를 통해 지식을 향상하고 재미있게 플레이하세요!

    GitHub에서 저를 찾으세요.
    에서 나를 팔로우할 수도 있습니다.

    좋은 웹페이지 즐겨찾기