코드 골프를 할 때 긴 숫자를 다룰 때 코드 길이를 줄이는 것이 어려울 수 있으므로 숫자를 더 짧고 쉽게 관리 할 수있는 팁이 있습니까?
예를 들어, 다음 Pyth 코드는 "Hello world"를 인쇄하지만 44 바이트에서는 만족스럽지 않습니다.
Vcjkj85942000775441864767076 2 7=k+kCiN2)k
그렇다면 긴 숫자를 85942000775441864767076
어떻게 단축 할까요?
코드 골프를 할 때 긴 숫자를 다룰 때 코드 길이를 줄이는 것이 어려울 수 있으므로 숫자를 더 짧고 쉽게 관리 할 수있는 팁이 있습니까?
예를 들어, 다음 Pyth 코드는 "Hello world"를 인쇄하지만 44 바이트에서는 만족스럽지 않습니다.
Vcjkj85942000775441864767076 2 7=k+kCiN2)k
그렇다면 긴 숫자를 85942000775441864767076
어떻게 단축 할까요?
답변:
이 질문에 대한 완벽한 타이밍. @isaacg는 오늘 새로운 기능을 추가하여 그러한 숫자를 엄청나게 줄일 수 있습니다.
기본 기술은 숫자를 기본 256으로 변환하고 문자로 변환하는 것입니다. 코드를 사용하여이 작업을 수행 할 수 있습니다 ++NsCMjQ256N
. 그런 다음 결과 문자열을와 함께 사용하면 C
정확히 반대 의 결과를 얻을 수 있습니다 (문자를 int로 변환하고 결과를 기본 -256 숫자로 해석). 그래서 당신은 13 문자를 얻습니다 :C"2ìÙ½}ü¶d"
. 일부 문자는 인쇄 할 수 없습니다.
그러나 바이트가 아니라 13 문자를 언급했습니다. 문자를 복사하고 https://mothereff.in/byte-counter로 계산하면 13 문자와 18 바이트가 표시됩니다. 이는 문자의 문자 인코딩 (기본적으로 UTF-8) 때문입니다. UTF-8은 2 ^ 7 개의 다른 1 바이트 문자 만 허용합니다. 모든 문자 c
와 ord(c) > 127
실제로 두 가지를 사용하여 저장됩니다 대신 하나의 바이트.
그리고 @isaacg의 새로운 기능이 등장 합니다. 그는 기본 코드 형식을 UTF-8에서 iso-8859-1로 변경했습니다. iso-8859는 1 바이트로 256자를 나타낼 수 있습니다. 이제 실제로 13 바이트에 도달 할 수 있습니다. 이것은 표준 컴파일러 에서만 가능 하며 온라인 컴파일러에서는 작동하지 않습니다.
먼저이 스크립트를 사용하여 숫자를 16 진수 값으로 변환하려고합니다 jdm.[2.Hd"0"jQ256
. 이것은 당신에게 제공합니다 12 32 ec d9 bd 07 7d fc b6 64
. 그런 다음 16 진수 편집기 (예 : Linux의 경우 hexedit)를 사용하여 해당 숫자를 코드 파일에 복사하십시오.
주의:
"
문자열이 코드의 마지막 부분 인 경우 반드시 끝 을 제거하십시오 .34
(byte 22
) 가없는 경우에만 작동합니다. 이것은 "
문자 이므로 문자열을 종료합니다. 이스케이프는 작동하지만 ( 5C 22
).0A
또는 0d 0a
끝 이 표시되어 제거 할 수 있습니다. 이것은 줄의 끝만을 나타냅니다.00
. 또한 \
, 바이트 5c
, 또는 후 바이트에 따라 다른``로 이스케이프해야 할 수도 있고 그렇지 않을 수도 있습니다.