나와 함께 골프 언어를 만들어라


30

많은 PPCG 사용자가 채팅과 샌드 박스, 특히 Martin Ender , AdmBorkBork , Emignauser202729 에서이 과제를 만드는 데 도움을 주었습니다.

우리 커뮤니티는 골프를 위해 특별히 "골프 ​​언어"라고하는 언어를 만들 필요가 있음을 발견했습니다. 이러한 언어는 한때 화려하고, 현재는 엉뚱한 GolfScript 에서 JellyHusk 와 같은 매끄럽고 간결한 언어로 발전했습니다 . 보시다시피, 이러한 언어는 일련의 작업을 위해 점점 더 짧아지고 있습니다. 따라서 골프 언어와 관련하여 여기의 분명한 전문가로서 우리는 경쟁 할 다른 모든 언어를 능가하는 언어를 함께 디자인해야합니다. 나팔 소개!

나팔 : 약어에서 BuGoL : Bu ilt Go lfing L anguage.

이 도전은 어떻게 작동할까요

소개에서 언급 한 내용을 얻지 못한 경우이 도전은 새로운 골프 언어의 통역사에게 무언가를 기여하여 각 답변으로 PPCG에 대한 경쟁 능력을 향상시키는 도전입니다.

언어 사양 / 통역의 기초로 구성된 첫 번째 답변을 게시하고 다른 모든 답변은 계속됩니다. 새로 제출 한 내용은 다음과 같습니다.

  • 언어 사양 변경
  • 최신 통역사, 변경 내용을 정확히 충족
  • 언어의 업데이트 된 점수 (자세한 내용은 조금)

세 가지 방법 중 하나로 사양을 변경할 수 있습니다.

  • 하나의 명령을 추가 할 수 있습니다
  • 두 개의 새로운 명령을 추가 할 수 있습니다
  • 기존 명령 하나의 동작을 편집 할 수 있습니다

새로운 해석과 관련하여, 당신은 해야한다 파이썬으로 작성된 최신 버전을 사용합니다. 골프를 칠 필요는 없습니다. 이전에 추가 된 모든 명령은 최신 인터프리터와 최신 명령 (추가 한 명령)으로 테스트 할 수 있어야합니다. 주석이나 문자열 리터럴과 같이 인터프리터를 업데이트 할 때 불쾌감을주는 언어를 사용해서는 안됩니다.

추가 된 명령은 원하는대로 할 수 있습니다 . 유일한 요구 사항은 다음과 같습니다.

  • 불쾌감을주지 않습니다
  • 다른 명령과 동일하지 않습니다
  • 샘플 과제 중 하나가 완료되는 것을 막지는 않습니다.

이외에도 원하는대로 구체적이거나 일반적 일 수 있습니다. 원하는 모든 문자가 될 수도 있습니다 . 추가 한 내용이 '새로운 명령'인지 확실하지 않은 경우 의견에 자유롭게 문의하십시오.

언어 점수

모든 새로운 제출물에 언어 점수를 포함시켜야한다는 것을 알게 될 것입니다. 점수는이 도전이 영원히 지속되는 것을 막는 것이며 다음과 같이 정의됩니다.

현재 점수는 언어가 20 개 미만의 작업을 완료하는 데 걸리는 바이트 수의 합계입니다.

각 작업마다 표준 허점 과 마찬가지로 표준 I / O 규칙이 적용됩니다 .

20 가지 과제 :

  1. "안녕하세요, 월드!" – 문자열을 출력Hello, World!
  2. 1, 2, Fizz, 4, Buzz – 각각의 정수를 1에서 100까지 (포함) 3 개의 배수로 대체하고 Fizz5의 배수는 5로 대체 Buzz하고FizzBuzz
  3. 소스 코드에 숫자없이 숫자 2014를 생성 – 외부 변수 나 임의의 시드에 액세스하지 않고 소스 코드 에있는 문자 를 사용하지 않고 숫자 2014 를 출력0123456789
  4. 난독 안녕하세요 - 출력 문자열 Hello, World!, 적어도 다음과 같은 세트의 두 문자의 사용하지 않고 : hlwd, eor0127(대소 문자 구분)
  5. 좋아하는 프로그래밍 언어로 생일 축하합니다 – 선택한 언어로 다음을 출력하십시오.

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. 우리는 골프를 코딩하는 낯선 사람이 아닙니다. 규칙을 알고 있습니다."Never Gonna Give You Up" 의 전체 가사 출력

  7. 부호 출력 – 숫자가 주어지면 -1 이면 음수이면 0 , 0 이면 0 , 양수이면 1
  8. Collatz Conjecture (OEIS A006577) – 정수에서 시작하여 짝수이면 2로 나누거나 3을 곱하고 홀수이면 1을 더한 다음 1에 도달 할 때까지 프로세스를 반복합니다. 출력은 반복 횟수 여야합니다. 1에 도달합니다.
  9. 도전 과제 배열 # 1 : 교대 배열 – 정수 배열이 주어지면 모든 짝수 색인 항목이 같은지, 홀수 색인 항목이 모두 같은지 확인하고 그에 따라 진실 또는 거짓 값을 출력합니다
  10. 나는 무의미한 배열입니까? – 정수 배열이 주어지면 연속 요소 간의 절대 차이가 모두 1보다 작거나 같은지 확인하고 그에 따라 참 또는 거짓 값을 출력합니다.
  11. 이 숫자가 소수입니까? – 양의 정수가 주어지면 전체 프로그램을 작성하여 소수인지 확인하고 그에 따라 진실 또는 허위 값을 출력하십시오
  12. 나는 회문이다. 당신은? – 문자열이 주어지면 회문인지, 프로그램 / 기능도 회문인지 확인하고 이에 따라 두 개의 고유하고 일관된 값을 출력합니다
  13. 표준 의 숫자 합산-STDIN에서 일련의 숫자를 취하여 합을 출력합니다.
  14. 계승을 찾기 - 정수 감안할 n사이의 모든 정수의 제품 출력 1n포함.
  15. 무한 출력을 생성하는 가장 짧은 코드 -입력이 없으면 무한 출력을 생성 하므로 이론적으로 출력을 중단하지 않습니다.
  16. 파이 한 조각을 구우십시오 -정확한 텍스트를 출력하십시오 :
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. N을 나누지 않는 가장 작은 숫자 찾기 -양의 정수 N이 주어지면 N을 나누지 않는 가장 작은 양의 정수를 출력하십시오.
  2. 이것이 짝수 또는 홀수입니까? -정수 N이 주어지면 패리티를 진리 / 거짓 값으로 출력합니다.
  3. 코드와 길이가 같은 출력 -출력이 코드와 길이가 같은 가장 짧은 코드를 작성하십시오. 여기서 출력은 코드와 동일하지 않습니다.
  4. 당신에게 큰 이익을 위해 골프를하십시오! - 귀하의 언어로 가장 짧은 퀴니 를 쓰십시오 .

유효하려면 새 제출에는 최소한 2 바이트 의 문제에 대해 각각 1 바이트 씩 골프 제출이 있어야합니다 . 다른 제출물의 길이를 늘릴 수 있지만 총 점수는 답변 당 2이상 감소해야합니다 . 또한 업데이트 된 프로그램에 대한 링크를 포함 시키십시오. 이전 버전의 인터프리터로 실행할 때 업데이트 된 솔루션 이 작동하지 않아야합니다 .

쿠키를 얻는 방법

나는 시도해야 할 5 가지 도전 과제 목록을 가지고 있으며, 점수에 영향을 미치지는 않지만 Bugle이 충분한 지 테스트하기위한 추가적인 도전 과제입니다. 귀하의 답변에 여러 가지 솔루션을 자유롭게 포함하십시오.

  1. 자기 인터프리터 만들기
  2. 페이로드 가능 퀴네 만들기
  3. 줄을 편다
  4. 하이퍼 프로그래밍 : N + N, N × N, N ^ N 모두 하나로
  5. "KNOT"또는 "NOT"?

모든 사람이 도전에 참여할 수있는 것은 아니므로 설명은 포함되지 않습니다.

이기는 방법

최저 점수 ( 우리는 16 세라고 생각 하지만, 다운을 환영하는 골프 시도는 거의 환영 받지만)에 도달하면 솔루션이 더 나은 점수를 얻을 수 없으므로 체인이 종료 된 것입니다. 16에 도달하면 그 도전은 1 개월 동안 살아남아 더 이상 솔루션을 골프로 칠 수있는 기회를 제공합니다. 이 달이 지나면 도전은 끝납니다.

도전이 끝나면 통역사를 GitHub 저장소로 마이그레이션하고 안정적인 언어를 공개하는 일반적인 기계 작업을 수행합니다. 해당 언어를 사용하여 현재 PPCG에 대한 문제에 대한 솔루션을 게시하기 시작할 수도 있지만 첫 페이지에 답변을 제공하지 마십시오. 대신, 일정 기간 동안 그것들을 퍼뜨립니다.

서식

답변에서 정보를보다 쉽게 ​​찾을 수 있도록 다음과 같이 형식을 지정하십시오.

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

[N]답변 번호는 어디에 있습니까 (첫 번째는 1, 두 번째는 2 등)

규칙

  • 답변 게시 사이에 3 시간을 기다려야합니다.
  • 10 일 동안 (정확히 240 시간) 게시 된 답변이 없으면 연속으로 두 번 게시 할 수 없습니다.
  • 이전 명령을 제거 할 수 없습니다.
  • 통역사는 골프를 칠 필요가 없으며 바이트 수는 여기에서 완전히 관련이 없습니다.
  • 당신의 대답은 최신있는 동안 누군가가 프로그램에 골프를 제안하면, 당신은 해야한다 골프를 친다에서 편집 및 점수를 업데이트합니다.
    • 점수가 이후 답변보다 낮아지지 않는 한, 답변이 체인의 중간에있을 때이 작업을 수행 할 수도 있습니다.
  • 최소한이 과제가 끝날 때까지이 언어를 사용하여 기존 PPCG 과제에 답변하지 마십시오.
  • 인터프리터는 Python 3으로 작성되었으며 전체 체인에서 계속 진행해야합니다. 언어 변경은 금지되어 있습니다.
  • 다시 한 번, 새로운 제출은 적어도 2 개의 문제에 대해 각각 1 바이트 씩 골프 제출을해야합니다 .

시작하자!



1
다음과 같은 질문을 할 수도 있습니다 : downvote를 설명하는 사람이 있습니까? 귀하가 제공하고자하는 모든 의견을 소중히 여깁니다.
caird coinheringaahing

2
@Kaldo 우리는 확실하지 않다. quine은 최소 2 바이트 여야하지만 비어있는 프로그램이 출력 Hello, World!하면 19 바이트입니다. 빈 프로그램 변경의 동작은 입력에 따라, 그것은 할 수 있습니다하지만 감소 할
coinheringaahing 케어 드

1
@WeijunZhou는 "적어도 도전이 끝날 때까지,이 언어를 사용하여 대한 도전 기존 PPCG 답변을 삼가 해 주시기 바랍니다"
coinheringaahing 케어 드

1
(예 @LyricLy 구문 구조 for루프)시키고, 추가 할 것을 권장
케어 드 coinheringaahing

답변:


3

3. 점수 : 2938 2583 2532 (-51)

새로운 통역사가 있습니다 .

주로 quine을 골프화하고 출력을 쉽게하기 위해 스택 / deque를 복제하고 정수 대신 렌더링 된 텍스트 형식으로 전체 모델을 출력하는 기능을 추가했습니다.

솔루션

1. "안녕하세요!" -17 바이트 (-3)

#"Hello, World!"a

5. 좋아하는 프로그래밍 언어로 생일 축하 해요 -95 바이트 (-3)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"a

6. 우리는 골프를 코딩하는 데 익숙하지 않으며 규칙을 알고 있습니다. 나도 1884 바이트 (-3)입니다.

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"a

16. 파이 한 조각을 굽습니다 -149 바이트 (-3)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"a

20. 당신에게 큰 이익을 위해 골프를하세요! -23 바이트 (-39)

$"R34RdR36Ra"R34RdR36Ra

추가 된 언어 기능

  • a

    • 모두 : 전체 모델을 텍스트로 인쇄합니다 (예 : #"Hello, World!"a인쇄).Hello, World!
  • d

    • 스택 / 데크 : 스택을 맨 위로 밉니다.

8

2. 점수 : 2938 2583

수정 된 인터프리터는 여기 TIO에 있습니다.

문자열 리터럴은 주로 문제를 해결 하기 위해 언어에 가장 분명하게 추가됩니다 .

솔루션

1. "안녕하세요!" -20 바이트 (-28)

#"Hello, World!"[o>]

문자열에 도달 한 후 0에 도달 할 때까지 주어진 문자열을 출력하는 구조 를 사용하여 모든 챌린지를 완료 할 수 있습니다 #"<string>"[o>].

2. 1, 2, Fizz, 4, Buzz - 419 64 바이트 (-1332)

$1[1+1s:3s%{}"zziF"oooos;0s]:5s%{}"zzuB"oooos;0s]s{:O}]10o:100-]

이 멋진 골프에 대한 @ user202729에게 감사합니다.

3. 소스 코드에 숫자없이 2014 년 숫자를 생성하십시오 -9 바이트 (-4)

#"ĒĎ"[O>]

Bugle 코드 포인트에서 두 문자 20과 14를 사용합니다.

4. 난독 화 된 Hello World -19 바이트 (-153)

#"Ifmmp!Xpsme"[-o>]

규칙 # 1 (아니오 HLWDhlwd) 및 # 3 (아니오 27)을 충족 합니다.

5. 좋아하는 프로그래밍 언어로 생일 축하 해요 -98 바이트 (-230)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"[o>]

6. 우리는 골프를 코딩하는 데 익숙 하지 않으며 규칙을 알고 있습니다. 1887 바이트 (-5006)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"[o>]

16. 파이 한 조각을 굽습니다 -149 바이트 (-290)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"[o>]

20. 당신에게 큰 이익을 위해 골프를하세요! -62 바이트 (-12)

#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]

추가 된 언어 기능

  • "...": 문자열 리터럴.
    • 스택 / 디케 : 각 문자의 Bugle 코드 포인트를 스택 / 디케의 상단 / 정면으로 밉니다.
    • 테이프 / 그리드 : 현재 셀에서 시작하여 오른쪽의 테이프 / 그리드에 각 문자의 Bugle 코드 포인트를 씁니다. 커서를 움직이지 않습니다.
    • \n 다른 문자와 마찬가지로 처리됩니다.
    • 현재 이스케이프 문자가 없으므로이 "명령을 사용하여 메모리에 쓸 수 없습니다 (34). 여기에 나열된 모든 문제 "가 결과물에 없기 때문에 적어도 지금은 큰 문제 가 아닙니다 .

더 이상 골프를 치는 것은 언제나 환영합니다. 특히 "너를 포기하지 않을 것"과 퀴네를 위해. 특히, 위의 quine은 내가 만든 최초의 사소한 quine이므로 누군가가 더 짧은 것을 생각 해낼 수 있다고 생각합니다.


특정 도전에 대한 내장을 추가하는 대신 다른 사람들이 원하는 종류의 추가가 있습니다. +1
caird coinheringaahing

@ user202729 버그를 소개 한 사람은 아마 나일 것입니다. 이 문제와 FizzBuzz 솔루션을 수정 해 주셔서 감사합니다.
Bubbler

3

1. 점수 : 9638

기본 통역사는 여기에서 , 제출 내용은 여기 에서 찾을 수 있습니다 . 다소 길기 때문에 대부분의 게시물을 차지하는 대신 GitHub에 포함 시켰습니다.

솔루션

이러한 솔루션은 모두 유니 코드 프로그램이며 -u명령 행 플래그로 실행 되지만 점수는 Bugle의 코드 페이지로 인코딩 된 것으로 계산됩니다.

1. "안녕하세요!" -48 바이트

$72o101o108o108o111o44o32o87o111o114o108o100o33o

간단히 문자열에서 각 문자의 문자 코드를 누른 다음 출력하십시오.

2. 1, 2, Fizz, 4, 버즈 -1396 바이트

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Hello, World와 같은 기술! 예

3. 소스 코드에 숫자없이 숫자 2014를 생성하십시오 -13 바이트

#++O--O+O+++O

#테이프 사용 +단위 셀, O정수와 같은 출력 -감소율을

4. 난독 화 된 Hello World -172 바이트

#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o

brainfuck와 본질적인 유사성을 사용합니다. 규칙 # 1 및 # 3 충족

5. 좋아하는 프로그래밍 언어로 생일 축하 해요 -328 바이트

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

모든 문제는 현재 이런 종류의 구조를 가지고 있습니다.

6. 우리는 골프를 코딩하는 데 익숙 하지 않습니다. 규칙을 알고 있으며 나도 6893 바이트입니다.

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. 부호를 출력하십시오 -18 바이트

$?:Zs0=0s-s:1s-++O

합계를 취하기 전에 입력이 0보다 크고 0보다 작고 ( -1대신에 수율로 변경됨 1) 0과 같은지 확인합니다.

8. Collatz 추측 (OEIS A006577) -36 바이트

#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O

이렇게하면 스택에서 루핑이 수행되지만 테이프로 전환하여 각 반복 횟수를 증가시킵니다.

9. 도전 과제 # 1 : 교대 배열 -35 바이트

#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O

이것은 기존 도전에 대한 Mitch Schwartz 의 답변을 약간 수정 한 것입니다.

10. 중요하지 않은 배열입니까? -46 바이트

$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O

모든 크레딧은 이것을 만들기 위해 Emigna 에 갑니다

11. 이 숫자가 소수입니까? -31 바이트

$?:1s-:[:1s-:];L1s[×L2s-]:×%O

윌슨 정리를 사용하여 계산 (n-1)!² % n

12. 나는 회문이다. 당신은? -13 바이트

$?:R=:O:=R:?$

프로그램의 첫 번째 절반까지는 O스택을 다음과 같이 설정합니다.[x, x] 곳이 x어느이다 TrueFalse. O최고 값을 팝하고 출력합니다. 프로그램의 나머지 부분은 오류가 발생하지 않도록합니다. 운 좋게도 ?파일의 끝을 만나면 그냥 밀어 넣습니다.'' (빈 문자열).

13. 표준의 숫자를 -19 바이트로 합산

$?:[?:];L0s[+L1s-]O

이 두 부분으로 나눌 수 있습니다 : ?:[?:];L0s[+L1s-] . 첫 번째 부분은 스택에 대한 모든 입력을 수집합니다. 두 번째 부분은 상위 두 요소의 합을 푸시하고 길이는 1보다 큽니다.

14. 계승 찾기 -25 바이트

$?:[:1s-:];L1s-Z[×L1s-]O

이것은 합계 프로그램과 유사한 구조를 갖지만 ltiple 입력을 푸시하는 대신 [:1s-:]; 푸시하는 범위를 1 .. n스택으로 푸시합니다.[×L1s-] 하고 제품을 가져옵니다.

15. 무한 출력을 생성하는 가장 짧은 코드 -5 바이트

#+[O]

while 루프를 사용하여 1포인터 아래에 연속적으로 . 1영원히 출력 합니다.

16. 파이 한 조각 구워 -439 바이트

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. N을 나누지 않는 가장 작은 숫자를 찾으십시오

$?:1:[:rs%0=s1+srr:Rs]1s-O

이것은 시험 분할을 사용하여 모듈로의 결과가 같지 않을 때 종료됩니다. 0 .

18. 이것이 짝수 또는 홀수입니까? -5 바이트

$2?%O

2로 간단한 모듈로

19. 코드와 동일한 길이의 출력 -16 바이트

$16:[32+:o33s-:]

처음 16 개의 인쇄 가능한 ASCII 문자를 반대로 출력합니다. 0/.-,+*)('&%$#"!

20. 당신에게 큰 이익을 위해 골프를하세요!

$1[93, 76, 111, 91, 49, 59, 104, 48, 79, 49, 111, 54, 51, 0]
36o1O0h;1[oL]

신용 간다 user202729 에 대한 이 제작


언어 사양

부름

bugle.py현재 일련의 플래그를 사용하고 파일 이름 / 코드를 실행합니다. 아직까지 4 개의 명령 줄 플래그가 있습니다.

  • -f/ --file는 파일에서 코드를 읽도록 지정합니다.
  • -c/ --cmd/ --cmdline코드가 명령 줄을 통해 제공되도록 지정합니다.

    -c-f같은 호출에 사용할 수 없습니다

  • -u/ --unicode는 인터프리터에게 유니 코드 인코딩으로 코드를 읽도록 지시합니다. 기본값은 아래 Bugle의 인코딩을 사용하는 것입니다.

  • -l/ --length실행 후 파일 길이를 바이트 단위로 STDERR에 출력합니다.

위의 제출물을 테스트하기 위해 다음 호출이 사용되었습니다.

$ python bugle.py -f -u [file]

코드 페이지

Bugle은 코드 페이지에서 512자를 사용합니다. 0xFF문자는 다음 16 진수 값이 코드 페이지의 후반부에 인덱싱됨을 나타내는 데 사용되므로 command에 사용되지 않습니다 . 사용 된 문자는 다음과 같습니다.

ÀÁÂÄÆÃÅĀĄ\t\nĆČÇĎÐ
ÈÉÊËĒĖĚĘÌÍÎÏĪĮĹĽ
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~¶
ŁŃŇÑŊÒÓÔÖŒÕØŌŔŘŚ
ŠŤŦÙÚÛÜŮŪŴÝŶŸŹŽŻ
àáâäæãåāąćčçďðèé
êëēėěęìíîïīįĺľłń
ňñŋòóôöœøōõŕřßśš
ťŧùúûüůūŵýŷÿźžż◊
ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜ
ΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ
αάβγδεέζηήθιίΐκλ
μνξοόπσςτυύΰφχψω
ώǴḰḾṔẂǵḱḿṕẃḂḞĠḢṀ
ȮṖṠṪẊḃḟġḣṁȯṗṡṫẋ§
ĂĞĬŎŬĴăğĭŏŭĵªº‹›
ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒ
ɠɦƙɱɲƥʠɼʂƭʋȥ©®ıȷ
ЉЊЕРТЗУИОПШАСДФГ
ХЈКЛЧЋЅЏЦВБНМЂЖљ
њертзуиопшасдфгх
јклчћѕџцвбнмђжÞþ
†∂∆≈≠√∈∉∌∋∩∪¬∧∨⊕
¤₽¥£¢€₩‰¿¡⁇⁈‼⁉‽⸘
…°•”“„’‘≤«·»≥ᴇ∞¦
×⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾
÷₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎

또는 표 형식으로 참조하십시오 . 참고 \t\n각각 탭과 줄 바꿈을 나타냅니다. 또한 16 번째 줄은 인쇄 할 수없는 문자 :로 끝나며 일부 브라우저에는 표시되지 않을 수도 있습니다.

기억

인터프리터에는 현재 5 개의 메모리 모델이 내장되어 있습니다. 각 메모리 모델에는 인터프리터가 해당 모델의 사용을 시작하도록 지시하는 문자가 필요합니다.

  • 스택 ( $) : 푸시, 팝 등의 값을 지원하는 표준 스택
  • 무한 테이프 ( #) : 테이프, la brainfuck, 처음에는0 . s 합니다.
  • 무한 그리드 ( G) : 양방향으로 무한하며 0s 만 포함하는 2 차원 그리드
  • Deque ( D) : 모듈에서 구현 한 dequecollections 입니다.
  • 레지스터 ( S) 저장하는데 사용될 수있는 하나의 값을 하나 의 값.

그리드에는 셀에 쓰거나 셀에 쓸 수있는 단일 값이 포인터에 저장되어 있습니다.

또한 다른 호출 명령을 사용하여 테이프 및 격자 크기와 줄 바꾸기 동작을 수정할 수 있습니다. 이러한 다른 명령은 현재 메모리 모델에서 사용자 정의 매개 변수로 지정된 수의 값을 가져옵니다.

  • 테이프 ( À) : 크기 ( int)와 줄 바꿈 ( bool)의 두 가지 값을 갖습니다.
  • 테이프 ( Á) : 하나의 값을 취합니다 (int )를 사용합니다. 테이프 끝의 랩
  • 테이프 ( Â) : 하나의 값 크기 ( int)를 사용합니다. 끝에 포장하지 않습니다
  • 그리드 ( Ǵ) : x 크기 ( int), y 크기 ( int), x 랩 ( bool) 및 y 랩 ( bool)의 4 가지 값을 취합니다.

사용중인 메모리 유형은 ₀₁₂₃₄₅₆₇₈₉0을 사용하여 0으로 색인 된 n사용 된 메모리 유형 ( 첫 번째, 두 번째 등)에 있지만 현재 값을 다른 메모리 유형간에 교환 할 수는 없습니다.

분기

지금까지 Bugle에는 두 개의 분기 명령이 있는데, 둘 다 ]문자로 종료됩니다 .

  • 동안 ([ ) : brainfuck- 스타일 while 루프입니다. 사용중인 경우 스택 / 디케이에서 값을 팝하거나 테이프 / 그리드에서 포인터 아래의 셀에 액세스합니다.

    예 : #?[-O]입력에서 카운트 다운0

  • If / else ( {}). 단일 실행 while 루프 popped 값이 false이면 if 절은 생략되고 else 절로 이동합니다 }. 메모리 액세스와 관련하여 while 루프와 동일한 방식으로 작동합니다.

    예 : {0}1]논리 NOT 게이트

내장 함수

자릿수는 정수로 해석되며 현재 메모리 모델에 그대로 푸시 / 쓰기됩니다.

분명히, 나는 체인이 진행됨에 따라 다른 사람들이 더 많은 것을 추가 할 수 있도록 몇 가지 기본 내장 기능을 Bugle에 장착했습니다. 기본 명령은 다음과 같습니다.

  • +

    • 스택 / 데크 : 상위 두 값 추가
    • 테이프 / 그리드 : 현재 셀 증가
  • -

    • 스택 / 디크 : 상위 두 값 빼기
    • 테이프 / 그리드 : 현재 셀 감소
  • %

    • 스택 / 데크 : 모듈로 상위 2 개 값
  • :

    • Stack / Deque : 최고 값 복제
  • ;

    • 스택 / 데크 : 최고 가치 팝
    • 테이프 / 그리드 : 현재 셀 제로
  • <

    • 테이프 / 그리드 : 한 셀 왼쪽으로 이동
  • =

    • 스택 : 상위 두 값이 동일합니까?
    • 그리드 : 한 셀 아래로 이동
  • >

    • 테이프 / 그리드 : 한 셀 오른쪽으로 이동
  • ?

    • 스택 / 데크 : 입력 라인 평가
    • 테이프 / 그리드 : 문자 입력
  • L

    • 스택 / 데크 : 스택 / 데크의 길이를 밉니다
  • O

    • 모두 : 현재 값을 출력
  • R

    • 스택 : 가능하면 상단 요소를 뒤집고 그렇지 않으면 스택을 뒤집습니다
  • Z

    • 스택 : 상단 요소가 양수입니까?
  • ^

    • 그리드 : 한 셀 위로 이동
  • h

    • 전체 : 전체 메모리 모델 인쇄
  • o

    • 모두 : 현재 값을 문자로 인쇄
  • r

    • 스택 : 상위 3 개 값 회전
    • 양단 큐 : 회전 양단 큐 n시간, n최고 값입니다
  • s

    • 스택 / 디크 : 상위 두 값을 교환
    • 스택 : 최고 가치를 떨어 뜨리십시오
  • ×

    • 스택 : 상위 두 값을 곱하십시오
    • 그리드 : 현재 셀에 포인터 값을 씁니다
  • ÷

    • 스택 : 상위 두 값을 나눕니다
    • 그리드 : 현재 셀을 포인터 값에 씁니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.