긴 숫자 단축


10

코드 골프를 할 때 긴 숫자를 다룰 때 코드 길이를 줄이는 것이 어려울 수 있으므로 숫자를 더 짧고 쉽게 관리 할 수있는 팁이 있습니까?

예를 들어, 다음 Pyth 코드는 "Hello world"를 인쇄하지만 44 바이트에서는 만족스럽지 않습니다.

Vcjkj85942000775441864767076 2 7=k+kCiN2)k

그렇다면 긴 숫자를 85942000775441864767076어떻게 단축 할까요?

답변:


10

이 질문에 대한 완벽한 타이밍. @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 바이트 문자 만 허용합니다. 모든 문자 cord(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)를 사용하여 해당 숫자를 코드 파일에 복사하십시오.

hexedit 데모

주의:

  • "문자열이 코드의 마지막 부분 인 경우 반드시 끝 을 제거하십시오 .
  • 이것은 숫자의 base-256 표현에 34(byte 22) 가없는 경우에만 작동합니다. 이것은 "문자 이므로 문자열을 종료합니다. 이스케이프는 작동하지만 ( 5C 22).
  • Btw, 16 진수 편집기로 파일을 열면 바이트 0A또는 0d 0a끝 이 표시되어 제거 할 수 있습니다. 이것은 줄의 끝만을 나타냅니다.

내 컴퓨터에 오프라인 통역사를 설치해야하지만, 훌륭합니다. 감사합니다! :)
Beta Decay

1
문자열은 value의 null 바이트도 포함 할 수 없습니다 00. 또한 \, 바이트 5c, 또는 후 바이트에 따라 다른``로 이스케이프해야 할 수도 있고 그렇지 않을 수도 있습니다.
isaacg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.