답변:
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úÐìŸ
,λ₂ϦP(Ì•65в₂+
그러나 각 값이 26 인 목록을 압축하여 2 바이트가 더 짧아지고 나중에`₂ + ` 로 추가합니다 . 나중에 1 바이트 값을 추가하는이 트릭을 사용하면 압축 된 목록에 바이트를 저장할 수 있습니다.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에 약간 숨겨져 있습니다. 사전 정의 된 모든 변수의 목록은 다음과 같습니다.
¾
push = 0 => 그것은 니모닉이 아닌 것과
¾
만 0을 밀어하려면 0으로 초기화되는 카운터 변수가 0 물론 자연이다 밀어하지만 밀어하려는 경우 5,0,7
, 5¾7
(2)는보다 짧은 바이트입니다 5 0 7
.
print(3 / 4)
파이썬 2에서는 나를 제공합니다 0
.
M
시을 누릅니다 -Inf
.
Λ
또는.Λ
)문서의 일부가 아니기 때문에 @Adnan 은 현재 작성에 너무 바쁘기 때문에 여기에 팁으로 추가하도록 권한을 요청했습니다.
캔버스 기능 ( Λ
또는 .Λ
)을 사용하여 화면에 ASCII 선을 그릴 수 있습니다. 세 가지 필수 매개 변수가 있습니다.
[0,7]
방향에 대한숫자가 있으며, 하나 이상의 복수를 사용할 수 있습니다. 특정 문자가 필요한 특수 옵션도 있습니다 (나중에 자세히 설명).방향 숫자 [0,7]
는 다음 방향으로 매핑됩니다.
7 0 1
↖ ↑ ↗
6 ← X → 2
↙ ↓ ↘
5 4 3
일부 예제 05AB1E는 Canvas가 사용 된 위치에 응답합니다.
마지막 것과 비슷한 것을 해보자. Canvas Λ
함수를 다음 세 가지 매개 변수와 함께 사용한다고 가정하자 .
[3,3,5,5,7,7,9,9]
!@#
[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
.Λ
가 출력 즉시, 그리고.Λ
우리는 여전히 재사용, 수정하고, 우리가 원하는 거라고 무엇이든을 할 수있는 스택에 푸시되는 문자열을 발생합니다. 몇 가지 예 :
다른 스택 기반 언어와 마찬가지로 05AB1E의 기능은 일반적으로 스택에서 입력을 팝 (소비)하고 출력을 스택으로 푸시합니다.
그러나 일부 함수 는 입력을 소비하지 않고 스택에서 입력을 가져옵니다 . 입력 목록에서 첫 번째 요소를 생성 하는 head
함수 가 예입니다 ¬
. 여기에 예제 프로그램이 있습니다 :¬+
. 입력 목록의 첫 번째 숫자가 해당 목록의 각 숫자에 추가됩니다.
어떤 함수가 팝업되고 어떤 함수를 얻는 지 알려면 함수 정보 파일 에서 해당 열을 참조하십시오 .
루프와 조건문은 프로그램 끝에서 자동으로 닫는 대괄호를 수신하므로 루프 / 조건부 외부에 필요한 경우 코드에 추가하면됩니다.
예를 들어, 첫 번째 n
소수 목록을 작성하는이 (무용지물) 프로그램 은 닫는 괄호가 필요하지 않습니다.
[¹¾Q#NpiNˆ¼
그러나 결과 목록에서 일부 작업을 수행하려면 (예 : 델타를 가져가는 경우) 먼저 루프를 닫아야합니다.
[¹¾Q#NpiNˆ¼]¯¥
길을 따라 배운 작은 골프 팁으로 이것을 확장 할 것입니다. (개인적으로 05AB1E 만 시작했습니다.)
D
( swap) 및 (triple-swap to ) 와 Ð
결합 된 (duplicate) 및 (triplicate) 는 일반적으로 루프 내부 에서 ( global_variable에 저장 ) 및 (push global_variable을 사용 ) 보다 짧습니다 . 이것은 이 답변에 1 바이트를 절약 할 뿐만 아니라이 답변에 2 바이트를 절약했습니다 .s
Š
a,b,c
c,a,b
©
®
½
(1 있다면, 증가 counter_variable 1 일까지)는 말에 필요하지 않다 µ
(동안 counter_variable ! = A, 이렇게 ...),이 (암묵적이기 때문에 나의이 대답 바이트를 저장 )..B
암시 적으로 줄 바꾸기로 나뉩니다. 이것은 빈 항목을 계속 유지하면서 (분할) 에 대한 대안을 찾을 때이 대답에 유용했습니다 ¡
(참고 : 요소가 분할 후 후행 공백을 포함하면 링크 된 답변의 솔루션이 작동하지 않습니다)-희망적으로 내장 된 의지 분할하지만 나중에 빈 줄을 유지하려면 추가하십시오.SÖ
(입력 정수의 숫자 중 균등하게 입력 정수를 나눌 수 있음)에는 0
0으로 나누기 오류 대신 숫자의 숫자 자체가 포함됩니다 . 예를 들어, 1053
초래한다[1,1053,0,1]
(도 5로 나누어 아니다 0에 대해 0으로 나누기 오류를 범 1053 (1)과 (3)로 나누어). 이것은 05AB1E 에서만 진실되고 다른 모든 것은 거짓 이기 때문에 목록의 힘을 취함으로써 내 대답에 매우 유용했습니다 1
. SÖP
진실한 결과 (1
) 입력 정수를 각 숫자로 균등하게 나눌 수 있음을 의미합니다.û
(주어진 문자열을 palindromize) 보고 난 후에 는 is_palindrome이 내장되어 있지 않다는 것에 놀랐습니다 . 그러나 나중에 나는 그것을 달성하기 위해 2 바이트 만 필요하다는 것을 깨달았습니다 ÂQ
. Â
이 분기는 짧습니다 DR
: 복제 및 역 복사;Q
스택의 최상위 두 값이 같은지 여부를 확인한다).Ds*
(중복 AND 스왑, 곱하여 논리 AND로 작동) vs }ʒ
(첫 번째 필터 닫기, 다시 필터 ) 행을 따라 무언가가 필요 하기 때문 입니다. 예를 들면 다음과 같습니다. 이 문제 우리는 적어도 하나를 포함하는, 긴 네 자리의 모든 번호를 나열해야 0
하고, 숫자의 합과 같음 9
. 범위를 사용하면 [1000,10000]
길이는 4 자리 숫자이지만 두 개의 필터가 더 남아 있습니다. 처음에는 ₄4°ŸʒD0åsSO9Q*
(14 바이트)를 사용했지만 두 필터를 사용하면 바이트를 저장할 수 있습니다 ₄4°Ÿʒ0å}ʒSO9Q
(13 바이트). (나중에 @Grimy가 ₄4°ŸεW°ö9Q
(10 바이트)까지 골프를 쳤습니다..)0
필러 로 정수 로 압축 하려면을 사용할 수 있습니다 0ζ
. 그러나 이것의 한 가지 문제는 필러 0
가 문자열이된다는 것입니다 "0"
. 따라서 나중에 혼합 문자열과 정수로 정렬하려고하면 원하는 결과를 얻지 못할 것입니다. 압축 된 내부 목록을 정렬하는 방법의 예는 다음과 같습니다 0ζ€{
.. 이것은 ï
zip 다음 에 int ( )에 명시 적 캐스트를 추가 한 다음 정렬 만하여 해결할 수 있습니다 0ζï€{
. 그러나 zip-filler와 함께 ¾
상수를 0
사용하면 zip 동안 문자열 대신 정수로 유지됩니다. 따라서 ¾ζ€{
여기에 바이트를 저장합니다. 이 팁은 @ Mr.Xcoder 에 의해 제공 되어이 답변에 바이트를 저장합니다 .€SO
. 그러나 더 짧은 것은 1ö
자동으로 벡터화되는을 사용 합니다. 이 팁은 @Grimy 가 여기에 바이트 를 저장 하기 위해 제공했습니다 ( 여기에 2 바이트 ).2‹
. 그러나 !
(계승)을 사용하면 0
and 1
에 대해 1 (거실) 만 발생하고 다른 모든 값은 더 높은 결과를 낳습니다 (따라서 05AB1E에서만 진실이기 때문에 1
거짓). 이 팁은 @Grimy 가 바이트 를 저장 하기 위해 제공했습니다 .05AB1E의 일부 연산자는 배열에서 자동으로 벡터화됩니다. 예를 들어 code 5L3+
는 다음 의사 코드로 디스 어셈블됩니다.
[1, 2, 3, 4, 5] + 3
될 것입니다 :
[4, 5, 6, 7, 8]
자동으로 벡터화되지 않으면 €
연산자 를 사용할 수도 있습니다 . 단일 문자 명령이 필요하며 각 요소에 대해 (모 노드) 연산자를 수행합니다. 각 요소를 분리하는 예는 다음 코드입니다 ( 여기에서 시도하십시오 ).
€S
일반 S
연산자는 배열의 각 요소를 분할하여 단일 배열로 병합합니다 ( 여기서 시도 ).
ñ
앞에 값 n
(색인)을 사용하여 목록을 병합하십시오 . tio.run/nexus/05ab1e#@2/iw2XiE2Tio81ldHjj//8A
아래 코드는 사용자 정의 기본 변환을 사용하여 ASCII 아트를 05AB1E로 변환하는 데 도움이됩니다.
|»©ÐÙSDŠ¢øΣθ}R€н¬®sÅ?iD2£RDŠKsì}J©žLR‡®gö₅B®s"•ÿ•“ÿ“ÅвJ"
이것은 다음에 의해 달성됩니다.
0-9A-Za-z
를 순서대로 맵핑하십시오. 각 고유 문자는 모두 대체 될 때까지 고유 한 맵핑 문자를 갖습니다.•<compressed_integer>•“<sorted_distinct_characters>“ÅвJ
.는 “
또한 압축 문자열 따옴표로 할 수 있습니다 "
; (가) Åв
이 문자열을 사용하는 사용자 정의 거점으로 문자열을 사용하여 생성 된 정수를베이스 - 변환; 그리고 J
암시 적으로 출력되는 단일 문자열로 이러한 모든 문자에 참여합니다.
ASCII 예술에 적합한 최대 62 개의 고유 문자를 포함하고 패턴을 수용합니다.
고유 한 문자의 양이 적을수록 압축 성능이 향상됩니다.
XNOR 디지털 타이밍 다이어그램 그리기 예제 출력 (214 바이트, 고유 문자 9 개) :
┌─┐ ┌─┐ ┌─────┐ ┌─┐ ┌─┐ ┌───┐
A ──┘ └─┘ └─┘ └─┘ └─┘ └─┘ └──
┌───┐ ┌───┐ ┌─┐ ┌─────┐ ┌─┐ ┌─┐
B ┘ └─┘ └─┘ └─┘ └───┘ └─┘ └
┌─────┐ ┌─┐ ┌─┐ ┌───┐
X ──┘ └───┘ └───┘ └───┘ └────
될 것입니다 :
•I£.µ*:]ó±øqaµb₄ΘYQmœ¹µû₄p´ζÂĆ_5ŠKÑ×ðòË|₄#¹¶úôÂ-Í|¯ε¼É₂ïδ&é–9»ÞFò1î×HÃBjý2ĆÉ≠FYÂÂèC j‘£Å₅Œ•“─ └┘┐┌
XBA“ÅвJ
(106/214) * 100 = 원본 ASCII 아트 문자열의 크기 49.53 %
05AB1E (레거시)의 해당 챌린지 에 대한 실제 제출 과 동일한 바이트 수 입니다.
참고 : 코드는 절대 골프가 아닙니다. ASCII 아트를 가장 효율적인 압축으로 변환하기 위해 신속하게 작성되므로 상당히 추하고 길다.
|» # Take multi-line input
© # Store it in the register to reuse later
ÐÙS # Only leave unique characters (as list)
DŠ¢ø # Map it with the count for each of those characters
Σθ}R # Sort it based on that count (highest to lowest)
€н # Remove the count again, so the sorted characters remain
¬®sÅ?i # If the input starts with the most occurring character:
D2£RDŠKsì} # Swap the first two characters in the list
J© # Join everything together, and store it in the register to reuse later
žLR‡ # Map each character to [0-9A-Za-z]
®gö # Get the amount of unique characters, and convert it to that Base
₅B # And then convert that to Base-255
®s # Push the string and swap so the compressed integer is at the top again
"•ÿ•“ÿ“ÅвJ" # Insert it in the correct output format
# `•<compressed_integer>•“<sorted_distinct_characters>“ÅвJ`
"•ÿ•" # (after which the result is output implicitly with trailing newline)
<str><compr_int><int>вèJ
대신에 사용 <compr_int><int>BžLR<str>‡
; 문자열 인용 “
대신 사용 하여 입력의 일부가 될 수 있습니다. "
"
모두가 동의하는 것은 아니지만 작동합니다.
다음 두 프로그램을 고려하십시오.
4 5+
"4""5"+
그들은 모두 9 로 귀착됩니다 . 모든 값이 먼저 (로 ast.literal_eval
) 평가되기 때문 입니다. 이 때문에 int에서는 모든 문자열 조작 연산자를, 문자열에서는 모든 int 조작 연산자를 수행 할 수 있습니다.
예를 들어 12345û
숫자를 옅게 표시하면 12345
결과가됩니다 123454321
. 그 후, 우리는이 숫자로 정규 수학을 할 수 있습니다.
12345û50000-
05AB1E에는 다음과 같은 일반 루프 및 반복자가 있습니다.
F
0 ~ n-1 을 반복합니다 .G
1 .. n-1 을 반복합니다 .ƒ
0 을 반복합니다 . n .v
각 요소 s [0], s [1], .., s [n] 을 반복 합니다.ʒ
정확히 루프는 아니지만 필터 기준 명령입니다. 의도하지 않은 각 요소를 반복하는 동작으로 인해이 명령을 남용합니다.이 루프를 사용하여 다음과 같은 숨겨진 루프를 파생시킬 수 있습니다 .
gF
, 당신은 사용할 수 있습니다v
있는 N
-index가있는를 사용할 수 있습니다.vy -> ʒ
교체은 약간 더 까다 롭습니다 :
y
이런 종류의 루프에서는 호출 할 수 없습니다.[
, µ
및 ε
루프 / 반복 일반의도 부분?
y
지금은 이들 중 일부를 사용하여 호출 할 수 있습니다.