답변
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#] '“,
온라인으로 사용해보십시오.
이 프로그램은 :
- 입력을 소문자로 취하고 알파벳 이외의 문자를 제거하고 (공백 제외) 단어를 공백으로 분리
lAð«Ã#
하거나 ( ) 한 단어 만 입력 한 경우 목록에서 단어를 줄 바꿈 (¸˜
) - 각 단어를 반복합니다 (
vyU
) - 그런 다음 사전 (
"€...ï"Dâvy
) 에서 압축 된 각 단어에 대해 내부 루프 가 있으며 05AB1E 프로그램 ("“ÿ“".V
) - 그리고 현재 단어와 같으면 인쇄하고 내부 루프를 끊습니다.
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¦S
4 바이트를 사용하는 것이 가장 좋습니다 (정수 2460을 자릿수 목록으로 압축)
10101001100101001
( 이 답변에 사용됨 ) :
•a½₄Ƶ6®í•
9 바이트 (압축 된 큰 정수 생성기에서 생성됨)•1∊}•2вJ
8 바이트 (조인이 추가 된 압축 정수 목록 생성기에서 생성됨)- 그러나이 경우
•1∊}•b
6 바이트를 사용하는 것이 가장 좋습니다 (암호화되는 정수 목록, 대신에 to 이진수를 사용하여2в
암시 적으로 조인)
[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]
( 이 답변에 사용됨 ) :
•4Œ”dóŒfÝŸĀTUÕáOyÖOÀÁàu¼6¹₆Žr‡_›y³eß₂©ǝ²ƶ"SAÎAñ'¡û†Ø(•91в
57 바이트 (압축 된 정수 목록 생성기로 생성됨)•6j|eDEJÞó(ÍêΓλùÄÞKüzHÇ-ø
JδŠ₂ + Öηôî®À8 † 6 / ðÎ6ùøΓ ° ÓĆ; ˆ ©  • 2ô` 도 57 바이트입니다 (압축 된 정수, 크기 2의 부분으로 나눔 )•Bšā¿ÑáζΔÕæ₅"®GÙ₂®°ƶío"§óÏ4¸bćÔ!₃ùZFúÐìŸ
그러나 각 값이 26 인 목록을 압축하여 2 바이트가 더 짧아지고 나중에`₂ + ` 로 추가합니다 . 나중에 1 바이트 값을 추가하는이 트릭을 사용하면 압축 된 목록에 바이트를 저장할 수 있습니다.
,λ₂ϦP(Ì•65в₂+
답변
암시 적 입력
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에 약간 숨겨져 있습니다. 사전 정의 된 모든 변수의 목록은 다음과 같습니다.
답변
캔버스 사용 ( Λ
또는.Λ
)
문서의 일부가 아니기 때문에 @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]
결과는 다음과 같습니다.
!@#!@#!
# @
@ #!@ #
! @ # !
# ! ! @
@ @ #
!#@!# !
@
@!#@!#@!#
어떻게 작동합니까? 글쎄, 위의 입력에 대한 단계는 다음과 같습니다.
3
문자 (!@#
)를 위쪽으로 그리십시오 (방향0
)- 그리기
3-1
문자 (!@
오른쪽으로)을 (방향2
) - 그리기
5-1
문자 (#!@#
) 아래 (방향4
) - 그리기
5-1
문자 (!@#!
왼쪽 (방향으로)를6
) 7-1
문자 (@#!@#!
)를 위쪽으로 그리십시오 (방향0
)- 그리기
7-1
문자 (@#!@#!
오른쪽으로)을 (방향2
) - 그리기
9-1
문자 (@#!@#!@#
) 아래 (방향4
) - 그리기
9-1
문자 (!@#!@#!@
왼쪽 (방향으로)를6
)
는 -1
선이 겹쳐 있기 때문에이있다. 처음 두 단계는 다음과 같습니다.
#
@
!
과
!@
어느 것이 결합되어 있습니까?
#!@
@
!
몇 가지 사소한 참고 사항 :
- 옵션 외에도
[0,7]
몇 가지 특정 옵션이 있으며 기본적으로 특정 방향 순서로 변환됩니다.+
('+
인라인) 패턴으로 변환04402662
생성+
주어진 길이의 무기 – 크로스한다. 실제로 참조하십시오.×
('×
인라인) 패턴으로 변환15513773
생성X
주어진 길이의 무기 – 크로스한다. 실제로 참조하십시오.8
드로잉을 시작한 곳으로 돌아갑니다. 직접보기 와 포함하지 않는 차이를 볼8
.
- Canvas 내장은 암묵적으로 후행 공백을 추가하여 출력을 사각형으로 만듭니다.
- 그만큼
Λ
가 출력 즉시, 그리고.Λ
우리는 여전히 재사용, 수정하고, 우리가 원하는 거라고 무엇이든을 할 수있는 스택에 푸시되는 문자열을 발생합니다. 몇 가지 예 :- 문자열 목록으로 변환 하거나 문자 목록에 .
- 특정 캐릭터를 교체 할 수 있습니다
- 특정 문자를 삽입
- 등
답변
팝 또는
다른 스택 기반 언어와 마찬가지로 05AB1E의 기능은 일반적으로 스택에서 입력을 팝 (소비)하고 출력을 스택으로 푸시합니다.
그러나 일부 함수 는 입력을 소비하지 않고 스택에서 입력을 가져옵니다 . 입력 목록에서 첫 번째 요소를 생성 하는 head
함수 가 예입니다 ¬
. 여기에 예제 프로그램이 있습니다 :¬+
. 입력 목록의 첫 번째 숫자가 해당 목록의 각 숫자에 추가됩니다.
어떤 함수가 팝업되고 어떤 함수를 얻는 지 알려면 함수 정보 파일 에서 해당 열을 참조하십시오 .
답변
조건부 및 루프
루프와 조건문은 프로그램 끝에서 자동으로 닫는 대괄호를 수신하므로 루프 / 조건부 외부에 필요한 경우 코드에 추가하면됩니다.
예를 들어, 첫 번째 n
소수 목록을 작성하는이 (무용지물) 프로그램 은 닫는 괄호가 필요하지 않습니다.
[¹¾Q#NpiNˆ¼
그러나 결과 목록에서 일부 작업을 수행하려면 (예 : 델타를 가져가는 경우) 먼저 루프를 닫아야합니다.
[¹¾Q#NpiNˆ¼]¯¥