05AB1E의 골프 팁 인 05AB1E의 코드 골프에

Adnan에서 만든 골프 언어 인 05AB1E의 대한 팁 이 있습니까? ?

팁은 최소한 05AB1E에 대해 구체적이어야합니다.

답변 당 하나의 팁을 게시하십시오.



답변

05AB1E의 GitHub 페이지 에서 Wiki에 포함 되지 않았기 때문에 (필자가 생각합니다), 나는 그것을 더 잘 이해할 수 있도록 여기에 추가 할 것입니다.

사전을 사용하는 방법?

05AB1E에는 알고있는 모든 단어가 포함 된 다음 words.ex 사전 파일 이 있습니다. 그러나이 사전의 단어에 어떻게 접근 할 수 있습니까? "testing"예를 들어 단어 를 보자.

"testing"사전 파일의 1453 행에서 찾을 수 있습니다. 처음 두 줄은 단어가 아니고 0 인덱스 단어가 필요하므로 3을 뺍니다
. 이제 인덱스 ( 1450)가 있지만 어떻게 사용합니까?

로 압축 된 문자열을 열고 시작합니다 . 그런 다음 info.txt 파일 의 두 번째 열을 살펴보십시오 . (그래서이 00; 01; 등)
의 경우 "testing",이 수단 î(14) 및 »(50).

압축 된 문자열 "testing"은 다음과 같습니다 “ . 온라인으로 사용해보십시오. 거의 모든 05AB1E 코드와 마찬가지로 문자열에 액세스하지 않으면 후행 은 선택 사항 이므로이 경우 에도 작동 하지 않습니다 .

참고할 사항 :

info.txt 파일에 색인이없는 모든 문자를 그대로 사용할 수 있습니다. 이는 s단수 단어 대신 복수를 출력하거나 ,.?!예를 들어 문장 부호를 사용하기 위해를 추가하는 데 유용 할 수 있습니다 .
ÿ문자열 내 스택에서 값을 삽입하려는 경우 (문자열 보간)을 사용할 수도 있습니다.
참고 : info.txt 파일에 색인이없는 모든 느슨한 문자는 아래 압축 유형에 대한 단어로 계산됩니다.

사용할 수있는 압축 문자열에는 여러 가지 유형이 있습니다.

  • ': 압축 단어 하나를 그대로 사용합니다 (후행 '필요 없음 )- 'î»: “테스트 중”
  • : 공백으로 구분 된 두 개의 압축 단어를 사용합니다 (후행 필요 없음 )- „î»î»: “테스트 테스트”
  • : 공백으로 구분 된 세 개의 압축 단어를 사용합니다 (후행 필요 없음 )- …î»î»î»: “테스트 테스트 테스트”
  • : 공백 구분 기호를 사용하여 압축 된 문자열을 가져옵니다.- “î»î»“: “테스트 테스트”
  • : 내재 된 공백없이 압축 된 문자열을 가져옵니다.- ’î»î»’: “testingtesting”
  • : 제목 구분 기호로 공백을 사용하여 압축 된 문자열을 가져옵니다.- ”î»î»”: “Testing Testing”
  • : 압축 구분 된 문자열을 공백으로 구분하여 대문자로 사용하십시오.- ‘î»î»‘: “TESTING TESTING”

공백으로 구분 된 단어 입력을 기반으로 압축 된 문자열을 가져 오는 유용한 프로그램은 다음과 같습니다.

'“? lAð«Ã#¸˜ vyU "€‚ƒ„…†‡ˆ‰Š‹ŒŽ•–—™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîï" Dâ vy"“ÿ“".V XlQi y?1#] '“,

온라인으로 사용해보십시오.

이 프로그램은 :

  1. 입력을 소문자로 취하고 알파벳 이외의 문자를 제거하고 (공백 제외) 단어를 공백으로 분리 lAð«Ã#하거나 ( ) 한 단어 만 입력 한 경우 목록에서 단어를 줄 바꿈 (¸˜ )
  2. 각 단어를 반복합니다 (vyU )
  3. 그런 다음 사전 ( "€...ï"Dâvy) 에서 압축 된 각 단어에 대해 내부 루프 가 있으며 05AB1E 프로그램 ("“ÿ“".V )
  4. 그리고 현재 단어와 같으면 인쇄하고 내부 루프를 끊습니다. XlQiy?1#

good bye world따라서 입력을 사용 하면 출력이 “‚¿Þ¡‚ï“됩니다. 온라인으로 사용해보십시오.

참고 :이 생성기가 작동하려면 사전에 단어가 있는지 확인해야하며 특수 문자 또는 복수 단어를 무시합니다. 사전에서 정확히 같은 단어 만 찾을 수 있습니다.

다음 …Ÿ™‚ï!은 문자열 “hello world!”에 사용하는 예 입니다. 그리고 ’‚¿Þ¡ ÿ ‚ï!’문자열 “안녕히 계세요!”. 공백과 느낌표는 info.txt 파일에 색인이 없기 때문에 그대로 사용되는 방법에 유의하십시오. 또한ÿ 불행히도 사전에 포함되지 않은 스택의 맨 위에 있던 “cruel”을 삽입하는 됩니다 (그러나 여전히 아래 섹션의 방법을 사용하여 압축되었습니다).

사전의 일부가 아닌 문자열을 압축하는 방법은 무엇입니까?

words.ex 사전 파일은 꽤 크지 만 (정확히는 10,000 단어), 그 일부가 아닌 단어 나 단순한 횡설수설 인 문자열이 필요할 수 있습니다. 압축하는 방법도 있습니까?
확실히 사용하여.•압축 된 기본 255 알파벳 기반 문자열 . 참고 :이 방법은 소문자 알파벳과 공백으로 만 사용할 수 있습니다.

다음은 단어 / 문자열을 압축 된 base-255 알파벳 기반 문자열로 변환하는 유용한 프로그램입니다.

vAyk})> 27β 255B ".•ÿ•"

온라인으로 사용해보십시오..

이 프로그램이하는 일은 :

  • vAyk})>: 공백 문자가 색인 0이되도록 입력 문자의 1 색인 알파벳 색인을 가져옵니다.
  • 27β:이 지수를 기본 27에서 단일 숫자로 변환
  • 255B: 05AB1E 자체 코드 페이지를 사용하여이 번호를 Base-255로 변환
  • ".•ÿ•": 이 압축 문자열 앞에 선행 .•및 후행 을 배치합니다

다음은 @Kaldo.•zíΘ•단어 “goose”를 압축하는 데 사용 하는 대답 예 입니다.

큰 정수를 압축하는 방법?

우리는 무언가에 매우 큰 숫자를 사용하고 싶지만 실제로는 pow-calculations로 검색 할 수는 없다고 가정 해 봅시다. 예를 들어 큰 정수에 액세스하고 싶다고 가정 해 봅시다.18238098189071058293 어떤 이유로 든 에 .

이 경우 선행 및 후행 을 모두 사용 하여 형식으로 숫자를 압축 할 수 [1-9][0-9]+있습니다.
위의 예제 번호는 •15Y₁Ò'Θpc•입니다. 온라인으로 사용해보십시오. 다시 압축 사전 문자열과 마찬가지로 후행 을 선택적으로 제거 할 수 있습니다. .

선택적으로 정수가 충분히 작아서 2 개의 압축 문자 만 사용해야 Ž하는 경우 대신 사용할 수 있습니다 .이 경우에는 닫는 바이트가 필요하지 않고 정수는 4가 아닌 3 바이트로 압축됩니다. 예를 들어, 정수 13562는 결과가 •rl•되지만 두 문자 만 사용하므로 Žrl대신 가능 합니다.

또한 범위의 숫자는 05AB1E의 코드 페이지에서 추가 문자를 [101, 355]사용하여 2 바이트로 압축 할 수 있습니다 Ƶ. 예를 들어 Ƶ–integer에 사용될 수 있습니다 250. 사용 가능한 모든 숫자에 대한 개요입니다. 이 문자는 Base-255에서 Base-10으로 변환 된 다음 101이 추가됩니다 (범위의 숫자 [0,100]가 이미 1 또는 2 바이트 이므로 ).

이러한 방법을하는 15Y₁Ò'Θpc하고 rl만들어? 매우 간단하게, 숫자는 05AB1E의 자체 코드 페이지를 사용하여 Base-255로 변환됩니다. 다음과 같은 프로그램을 사용할 수 있도록 다음 사용하는 압축 번호, 얻을 Ƶ., Ž..또는 •...•압축 된 정수의 크기에 따라 :

101 355Ÿså i 101-255B"Ƶÿ" ë 255B Dg2Qi "Žÿ" ë "•ÿ•"

온라인으로 사용해보십시오.

다음은 @Emigna•3Èñ•정수에 사용 하는 예 246060입니다.

정수 목록을 압축하는 방법?

때로는 단일 숫자 대신 전체 정수 목록을 압축하려고합니다. 예를 들어, [5,93,17,83,4,44,32,19,4,45,83,90,0,14,3,17,17,81]어떤 이유로 든 목록 을 원한다고 가정 해 봅시다 . 이 경우 대신 다음을 사용할 수 있습니다 •4βŸ{©£MG]q‡dZΘp•94в . 온라인으로 사용해보십시오.

이 압축 된 숫자와 변환하고자하는 Base를 모두 생성하는 유용한 프로그램은 다음과 같습니다.

Z>© β 255B ®s"•ÿ•ÿв"

온라인으로 사용해보십시오.

이 프로그램이하는 일은 :

  • Z>: 입력 목록의 최대 개수 + 1을 가져옵니다 ( ©: 및 레지스터에 저장).
  • β: 입력 목록을 기본 max+1에서 단일 숫자로 변환
  • 255B:이 단일 번호를 압축합니다 (위 섹션에서했던 것처럼)
  • ®s"•ÿ•ÿв": 결과를 선두 , 압축 숫자 , 최대 +1, 후행 형식으로 반환합니다.в

여기에 •4Œ”dóŒfÝŸĀTUÕáOyÖOÀÁàu¼6¹₆Žr‡_›y³eß₂©ǝ²ƶ"SAÎAñ'¡û†Ø(•91в목록을 압축하는 데 사용하는 예제가 [85,30,29,39,28,37,33,88,31,40,34,89,35,41,32,90,36,38,42,43,44,60,45,61,46,62,47,63,48,64,49,65,81,50,66,51,67,52,68,53,69,86,54,70,87,55,71,56,72,82,57,73,79,80,58,74,59,75,76,77,78,83,84]있습니다.
추신 :이 대답에서 •6j|eDEJÞó(ÍêΓλùÄÞKüzHÇ-ø`JδŠ₂+Öηôî®À8†6/ðÎ6ùøΓ°ÓĆ;ˆ©Ā•2ô모든 바이트의 숫자가 정확히 두 자리이므로 동일한 바이트 (57) 대안입니다. 경우에 따라 (특히 작은 목록)이 방법이 더 짧은 대안 일 수 있습니다.

정수 압축 대 정수 목록 압축 :

이 두 가지로 어느 쪽이든 갈 수 있습니다. 때로는 압축 된 목록이 더 짧고 때로는 압축 된 정수가, 때로는 완전히 다른 대안이 더 짧은 경우도 있습니다. 따라서 위의 발전기에 완전히 의존하는 대신 항상 자신의 판단력과 골프 기술을 사용하여 골프를 더 발전시킬 수 있습니다. 다음은 몇 가지 예입니다.

[44, 59]( @Emigna 이 답변에 사용 ) :

  • •A–•60в 7 바이트 (압축 된 정수 목록 생성기에서 생성됨)
  • •H|•2ô또는 •H|•2ä하드 코딩 된 코드 44 59‚는 모두 6 바이트입니다.
  • ŽH|2ô또는 ŽH|2ä모두 5 바이트
  • 그러나이 경우 „,;Ç4 바이트를 사용하는 것이 가장 좋습니다 (문자 ‘,’및 ‘;’의 코드 포인트)

[2,4,6,0]( @Emigna 이 답변에 사용 ) :

  • •3ā•7в 6 바이트 (압축 된 정수 목록 생성기에서 생성됨)
  • Ž3ā7в 5 바이트
  • 그러나이 경우 Ž9¦S4 바이트를 사용하는 것이 가장 좋습니다 (정수 2460을 자릿수 목록으로 압축)

10101001100101001( 이 답변에 사용됨 ) :

  • •a½₄Ƶ6®í• 9 바이트 (압축 된 큰 정수 생성기에서 생성됨)
  • •1∊}•2вJ 8 바이트 (조인이 추가 된 압축 정수 목록 생성기에서 생성됨)
  • 그러나이 경우 •1∊}•b6 바이트를 사용하는 것이 가장 좋습니다 (암호화되는 정수 목록, 대신에 to 이진수를 사용하여 암시 적으로 조인)

[85,30,29,39,28,37,33,88,31,40,34,89,35,41,32,90,36,38,42,43,44,60,45,61,46,62,47,63,48,64,49,65,81,50,66,51,67,52,68,53,69,86,54,70,87,55,71,56,72,82,57,73,79,80,58,74,59,75,76,77,78,83,84]( 이 답변에 사용됨 ) :


답변

암시 적 입력

05AB1E가 출시되던 시절에 암시 적 입력은 상당히 새롭고 화려했습니다. 오늘날에는 다른 경쟁 언어 (예 : Jelly, MATL, Pyth 등)를 추적하기 위해 필요한 것 같습니다.

예를 들어 두 개의 숫자를 추가하려면 다음을 수행하십시오 II+.

I    # Input_1.
 I   # Input_2.
  +  # Add them up.

여기에서 테스트


그러나 암시 적 입력을 사용 하면 1 바이트로 단축 할 수 있습니다 +.

+    # Take two numbers implicitly and add them up.

여기에서 테스트


이것은 스택의 길이가 작업자의 arity보다 작은 경우에만 발생합니다. 마지막 예는 3+입니다. 의 인수에 대응 +오퍼레이터는 2 만 존재하면서 1 스택의 요소 :

3    # Push the number 3 on top of the stack.
 +   # Request implicit input and add to the 3.

여기에서 테스트


답변

부분 문자열

£b문자열 의 첫 문자 를 취하는 명령입니다a .
전의: "hello_world"5£ -> "hello"

그러나 b인덱스 목록 인 경우 대신 문자열을 해당 크기의 일부로 분할합니다.
전의: "hello_world"5L£ -> ['h', 'el', 'lo_', 'worl', 'd']


답변

사전 정의 된 변수

그들은 05AB1E에 약간 숨겨져 있습니다. 사전 정의 된 모든 변수의 목록은 다음과 같습니다.

  • ¾, 푸시 0이 명령 전에 counter_variable이 변경되지 않은 경우 합니다.
  • X1를 사용하여이 명령 전에 변수 X가 변경되지 않은 경우 푸시 합니다.U .
  • Y2를 사용하여이 명령 전에 변수 Y가 변경되지 않은 경우 푸시 합니다.V .
  • ®-1를 사용하여이 명령 전에 레지스터가 변경되지 않은 경우 푸시 합니다.© .
  • ¯[]이 명령 전에 global_array에 아무것도 추가되지 않으면 (빈 배열)을 푸시 합니다.
  • ¸[""]입력이 없으면 빈 스택을 푸시 합니다. (이것을 찾아 주셔서 감사합니다. @Emigna)

답변

캔버스 사용 ( Λ또는 )

문서의 일부가 아니기 때문에 @Adnan 은 현재 작성에 너무 바쁘기 때문에 여기에 팁으로 추가하도록 권한을 요청했습니다.

캔버스 기능 ( Λ또는 )을 사용하여 화면에 ASCII 선을 그릴 수 있습니다. 세 가지 필수 매개 변수가 있습니다.

  • a 길이 : 선의 크기입니다. 단일 정수이거나 정수 목록 일 수 있습니다.
  • b 문자열 : 표시 할 문자입니다. 단일 문자, 문자열, 문자 목록 또는 문자열 목록 일 수 있습니다 (마지막 세 경우에는 랩 어라운드를 포함하여 하나씩 사용합니다)
  • c 방향 : 문자 선이 그려지는 방향입니다. 일반적으로[0,7]방향에 대한숫자가 있으며, 하나 이상의 복수를 사용할 수 있습니다. 특정 문자가 필요한 특수 옵션도 있습니다 (나중에 자세히 설명).

방향 숫자 [0,7]는 다음 방향으로 매핑됩니다.

7   0   1
  ↖ ↑ ↗
6 ← X → 2
  ↙ ↓ ↘
5   4   3

일부 예제 05AB1E는 Canvas가 사용 된 위치에 응답합니다.

마지막 것과 비슷한 것을 해보자. Canvas Λ함수를 다음 세 가지 매개 변수와 함께 사용한다고 가정하자 .

  • a :[3,3,5,5,7,7,9,9]
  • b :!@#
  • c :[0,2,4,6]

결과는 다음과 같습니다.

  !@#!@#!
  #     @
  @ #!@ #
  ! @ # !
  # ! ! @
  @   @ #
  !#@!# !
        @
@!#@!#@!#

온라인으로 사용해보십시오.

어떻게 작동합니까? 글쎄, 위의 입력에 대한 단계는 다음과 같습니다.

  1. 3문자 ( !@#)를 위쪽으로 그리십시오 (방향0 )
  2. 그리기 3-1문자 ( !@오른쪽으로)을 (방향2 )
  3. 그리기 5-1문자 ( #!@#) 아래 (방향4 )
  4. 그리기 5-1문자 ( !@#!왼쪽 (방향으로)를6)
  5. 7-1문자 ( @#!@#!)를 위쪽으로 그리십시오 (방향0 )
  6. 그리기 7-1문자 ( @#!@#!오른쪽으로)을 (방향2 )
  7. 그리기 9-1문자 ( @#!@#!@#) 아래 (방향4 )
  8. 그리기 9-1문자 ( !@#!@#!@왼쪽 (방향으로)를 6)

-1선이 겹쳐 있기 때문에이있다. 처음 두 단계는 다음과 같습니다.

#
@
!

 !@

어느 것이 결합되어 있습니까?

#!@
@
!

몇 가지 사소한 참고 사항 :


답변

팝 또는

다른 스택 기반 언어와 마찬가지로 05AB1E의 기능은 일반적으로 스택에서 입력을 (소비)하고 출력을 스택으로 푸시합니다.

그러나 일부 함수 는 입력을 소비하지 않고 스택에서 입력을 가져옵니다 . 입력 목록에서 첫 번째 요소를 생성 하는 head함수 가 예입니다 ¬. 여기에 예제 프로그램이 있습니다 :¬+ . 입력 목록의 첫 번째 숫자가 해당 목록의 각 숫자에 추가됩니다.

어떤 함수가 팝업되고 어떤 함수를 얻는 지 알려면 함수 정보 파일 에서 해당 열을 참조하십시오 .


답변

조건부 및 루프

루프와 조건문은 프로그램 끝에서 자동으로 닫는 대괄호를 수신하므로 루프 / 조건부 외부에 필요한 경우 코드에 추가하면됩니다.

예를 들어, 첫 번째 n소수 목록을 작성하는이 (무용지물) 프로그램 은 닫는 괄호가 필요하지 않습니다.
[¹¾Q#NpiNˆ¼

그러나 결과 목록에서 일부 작업을 수행하려면 (예 : 델타를 가져가는 경우) 먼저 루프를 닫아야합니다.
[¹¾Q#NpiNˆ¼]¯¥