항상 같은 길이의 출력


26

코드동일한 길이의 출력코드 길이의 두 배인 출력 생성같은 도전 과제와 함께 별도의 그러나 유사한 과제를 생각했습니다.

작업은 출력을 생성하는 것입니다. 문자열, 문자 목록 또는 프로그램의 기본 출력 형식이 될 수 있습니다. 그러나 입력에 관계없이 출력의 길이는 항상 같아야합니다. 더 중요한 것은 출력이 다른 입력에 대해 달라야한다는 것입니다. 입니다.

입력

단일 정수 n 은 범위는 언어 선택에 따라 결정됩니다. 언어에 가변 길이 정수가있는 경우 범위는 231n<231 입니다.

산출

문자열 또는 문자 목록 또는 STDOUT 또는 STDERR로 인쇄 이 방법 중 하나만 사용할 수 있습니다. 출력은 입력에 관계없이 길이가 같아야하지만 길이를 정의하는 것은 사용자의 책임입니다. 출력에는 숫자 0-9나 빼기 기호가 포함되지 않을 수 있습니다- . 출력은 결정적이어야합니다 .

모든 출력 에 대해 공식적인 증거, 논증 또는 무차별 대입 검색에 의해 하나의 가능한 입력 만 있음을 증명할 수 있어야합니다 .

이것은 코드 골프 질문이므로 불필요한 바이트를 제거하십시오. 모든 언어를 환영합니다.


4
이론상의 프로그램이 모든 입력에 대해 작동해야합니까? 또는 언어 제한이 아니라 메서드 제한으로 인해 지정된 범위 ( 로 제한됨)에 대해서만 작동하는 방법을 사용하는 것으로 충분 합니까? ±231
Mr. Xcoder

4
@ Mr.Xcoder 임의의 길이 정수로 작업 해야하는 경우 어떻게 길이를 선택할 수 있습니까?
스티븐

2
@ Mr.Xcoder 해당 범위에서만 작동 함을 증명해야합니다. 이 규칙은 숫자가 수천 자리 일 수있는 Python과 같은 언어를 돕기위한 것입니다. 이 규칙이 없다면, 파이썬과 파이썬 파생어 (많은 골프 언어를 포함) 모두에게 훨씬 어려울 것입니다.
maxb

11
언어는 가변 길이 정수를하지 않고보다 더 큰 값을 지원 할 수있는 경우 , 우리는 제한된 범위 사용할 수 있습니다 - 2 31N < 2 (31) ?231231n<231
Arnauld

2
@Arnauld의 최대 범위는 언어의 제한에 관계없이 32 비트 부호있는 정수입니다. 언어는 해당 범위 만 줄일 수 있습니다.
maxb

답변:


15

자바 스크립트 (ES8), 33 바이트

안전한 JS 정수 범위의 입력을 예상합니다 . 253n<253 .

76 자 문자열을 반환합니다.

n=>btoa(n.toString(2)).padEnd(76)

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

방법?

1 단계

입력은 먼저 이진으로 변환됩니다. 음수에 선행 빼기 부호를 유지합니다.

예 :

  • 123"1111011"
  • -77"-1001101"

2 단계

결과 문자열은 base-64로 인코딩됩니다.

이는 1 ~ 3 자의 각 블록이 4 자의 새로운 블록으로 바뀐다는 것을 의미합니다. 결과 블록 중 금지 된 기호 (숫자 또는 빼기 기호)를 포함하지 않기 때문에이 변환은 안전합니다.

3 문자 블록

"-10" -> "LTEw" | "011" -> "MDEx"
"-11" -> "LTEx" | "100" -> "MTAw"
"000" -> "MDAw" | "101" -> "MTAx"
"001" -> "MDAx" | "110" -> "MTEw"
"010" -> "MDEw" | "111" -> "MTEx"

이진 문자열의 길이가 3의 배수가 아닌 경우 1 또는 2 자의 단일 최종 블록을 인코딩해야합니다.

1 문자 블록

"0"   -> "MA==" | "1"   -> "MQ=="

2 문자 블록

"-1"  -> "LTE=" | "10"  -> "MTA="
"00"  -> "MDA=" | "11"  -> "MTE="
"01"  -> "MDE=" | 

3 단계

최종 출력은 후행 공백으로 채워집니다.


1
base64로 변환 할 때 이러한 특정 문자 조합에 숫자가 포함되어 있지 않다는 것을 이미 알고 있거나 실험적으로 알게 되었습니까?
Tomáš Zato –

@ TomášZato ASCII 테이블의 하단에있는 아주 작은 문자셋이라는 사실에 근거한 확실한 추측이었습니다.
Arnauld

10

파이썬 3 , 49 39 바이트

lambda i:[chr(ord(x)*2)for x in"%9x"%i]

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

음수 7 덕분에 -10 바이트

정수를 16 진수로 변환하고 총 9 자까지 공백을 추가합니다. 그런 다음 문자열에서 각 문자의 ASCII 코드를 두 배로 늘리고 (일부는 ASCII 외부에서 유니 코드로 확장하지만 Python에서 잘 처리 함) 문자 목록을 출력합니다.

를 포함한 모든 숫자 -가 다른 ASCII 문자에 매핑 되기 때문에 작동 합니다. 사이 정수 -21474836482147483648진수로 변환하고 앞에 추가 공간이 그들에게 동일하지 것이다, 그래서 동일하지 않습니다. 그런 다음 다른 코드 포인트에 매핑해도 충돌이 발생하지 않으므로 동일한 출력으로 이어지는 범위에는 여전히 두 개의 값이 없습니다.

파이썬 3 , 59 56 47 바이트

lambda i:[*map(lambda x:chr(ord(x)*2),"%9x"%i)]

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

Jitse 덕분에 -3 바이트

음수 7 덕분에 -9 바이트

동일한 알고리즘이지만 루프 map대신 사용 합니다 for.


2
당신은 3 바이트 면도 할 수 있습니다 map대체하여 접근 list( ... )[* ... ]
Jitse

3
다음과 같이 채워진 문자열을 만들 수 있습니다."%9x"%i
음수 7

@negativeseven 감사합니다, 그것은 정말 천재입니다
Stephen

1
다음을 사용하여 Python 2에서 ASCII 및 39 바이트를 유지할 수 있습니다.`4e9+n`
Jonathan Allan

8

05AB1E , 11 5 바이트

тjÇ·ç

@Stephen 의 접근을 포팅하는 -6 바이트 .

100 자까지의 목록 출력 100(input length) 의 양 @(공간 코드 포인트를 두 배로), 모든 -0123456789매핑 Z`bdfhjlnpr(아스키 코드 포인트를 두 배로).

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

설명:

 j     # Prepend spaces in front of the (implicit) input-integer to make it of length:
т      # 100
  Ç    # Convert each character to its unicode value
   ·   # Double each
    ç  # And convert it back to a character
       # (after which the resulting list is output implicitly)

원래 11 바이트 답변 :

Ķ×AIdè«žIj

온라인으로 사용해보십시오 ( 1000대신 대신에 2147483648).

설명:

출력 길이는 항상 2,147,483,648 자입니다. 2147483648|n|1 을 출력합니다 - | n | 공백 1 개 |n|n<0 경우 'a'또는 n0 경우 'b'가 추가되는 개행 량 .

Ä            # Get the absolute value of the (implicit) input-integer
 ¶×          # And have a string with that many newline characters
   A         # Push the lowercase alphabet
    Id       # Check if the input is non-negative (>=0) (1 if truthy; 0 if falsey)
      è      # Use that to index into the alphabet (so "a" for <0 and "b" for >=0)
       «     # Append that to the newline-string we created earlier
          j  # And prepend spaces to make the string of a length:
        žI   # 2147483648 (this has been replaced with `₄`/1000 in the TIO)
             # (after which the result is output implicitly)

7

brainfuck , 48 29 28 16 13 바이트

이 프로그램에는 cnN 인 셀이 필요 하지만 일관된 결과를 원하면 cn<256

어떤 숫자를 입력 하든지 상관없이 출력은 분명히 고유합니다 ( <n< ). 정수가 더 짧으면 프로그램은 정확히 와 일치하도록 출력을 채 바이트 . 따라서 길이는 항상 같습니다.

이 답변은 출력이 유한해야한다고 명시하지 않았기 때문에 도전 과제를 조금 허물어 놓았습니다.

+[,[->-<]>.+]

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


원본, 28 바이트 답변 :

->,[[->-<]>.[-]<<->,]<[<.>-]

이것은 의지 패드는 출력이 정확히 일치하는 281 바이트. 숫자 변환 메커니즘은 여기서 동일하게 작동합니다. 이 프로그램은 위의 프로그램과 동일한 것으로 가정합니다.


무한 출력이됩니다 수 없습니다
조 국왕

@ JoKing이 답변을 한 후에 언급되었습니다. 그러나 당신이 정말로 이것에 의해 상처를받는다면, 나는 단순히 도전을 거부하고 첫 번째 답변을 비경쟁이라고 선언 할 수 있습니다
Krzysztof Szewczyk


5

젤리 , 4 바이트

œ?ØẠ

정수를 허용하는 모나 딕 링크는 52 자 목록을 생성합니다.

입력 범위는 어느 정도 이상까지 일 수있다 2223<2223 보낸 52!>2224 .

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

방법?

œ?ØẠ - Link: integer, n
  ØẠ - alphabet (Jelly's longest built-in character list containing no digits
     -           or hyphen) = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
œ?   - permutation at index (n) if all 52! permutations were written out
     - in lexicographical order.
     - This indexing is modular so when n = -x we fetch the (52!-x)th entry.

그래서...

-2147483648 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONIGCDAMLJKFEHB
-2147483647 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONIGCDAMLJKFHBE
-2147483646 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONIGCDAMLJKFHEB
-2147483645 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONIGCDAMLJKHBEF
    ...
         -4 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDACB
         -3 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDBAC
         -2 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDBCA
         -1 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCAB
          0 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA
          1 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
          2 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxzy
          3 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwyxz
          4 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwyzx
    ...
 2147483644 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmrtxwznoqpsvyu
 2147483645 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmrtxwznoqpsyuv
 2147483646 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmrtxwznoqpsyvu
 2147483647 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmrtxwznoqpusvy

5

루비 , 27 바이트

->n{('%34b'%n).tr'01','ah'}

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

('%34b'%n)..1음수를 나타내는 데 사용하여 정수를 이진 표현으로 변환하고 (이것은 무한 길이가 1 인 접두사를 나타냄) 공백을 사용하여 왼쪽으로 채 웁니다. 그런 다음 0s를 'a'로 바꾸고 1s를 'h'로 바꾸어 Maniacal Base 2 Representation을 만듭니다. "haaahahahaaha"와 같은 문자열 앞에 공백이 있고 때로는.. . 여기의 모든 단계는 돌이킬 수 없으므로 이것은 1 : 1입니다.

편집 : 레코드가 @manatwork 가이 동일한 솔루션을 먼저 게시했음을 보여줍니다. 죄송합니다. 새로 고침해야 했어요


3
롤 당신의 결과물은 나의 것보다 훨씬 재미 있습니다.
manatwork


4

C (gcc) , 38 바이트

f(a,i){for(i=32;i--;putchar(a>>i&1));}

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

이것은 입력 정수의 각 비트를 0 또는 1 (인쇄 할 수없는 문자이지만 그에 대한 규칙은 없음) 인 바이트로 확장합니다. 따라서 출력은 항상 32 바이트이며 고유해야합니다.


NUL 바이트로 Brainfuck 응답 패딩과 유사한 영리한 접근 방식.
maxb

종료되지 않는 프로그램이 실제로 사양 내에 있는지 확실하지 않지만 28 바이트라면? f(a){putchar(a&1);f(a/2);}
G. Sliepen

Malbolge에 대한 예외를 만들었지 만 일반적으로 프로그램을 종료해야합니다. 길이가 "무한대"인 것은 약간의 속임수입니다.
17:01에 maxb


3

하스켈, 31 바이트

map(\d->[d..]!!10).show.(+2^60)

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

2^60결과 숫자가 전체 입력 범위에 대해 동일한 자릿수를 갖도록 입력에 추가합니다 . 문자열로 바꾸고 ASCII 문자 ( 0-> :...- 9> C) 에서 각 문자를 10 자리 오른쪽으로 이동하십시오 .


1
음수를 처리합니까?
14:39에 maxb

@ maxb : 아니요,하지만 이제는 고정되었습니다.
니미

3

C # (Visual C # Interactive Compiler) , 52 바이트

x=>(new char[32]).Select(y=>(char)(x%2+65+(x/=2)*0))

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

ac # 솔루션에 대한 다른 접근 방식은 c # 계수가 음수에 대해 음수라는 사실을 이용합니다. +65...문자 값을 사람이 읽을 수있는 것으로 오프셋하지 않도록 업데이트하여 비 디스플레이 문자 ( '\ 0'등)를 허용하면 바이트 수를 줄일 수 있다고 가정합니다 .


44? -인쇄 할 수없는 문자를 출력하고 있지만 (괜찮은 것처럼 보이지만) 현재 답변과 같이 65를 추가하여 인쇄 가능으로 변환 할 수 있습니다.
dana

1
42- 이번에는 인쇄 가능한 문자로 :)
dana

3

펄 5 -MDigest::MD5=md5_hex -p , 23 바이트

$_=md5_hex$_;y/0-9/k-t/

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

이전 :

펄 5 -p , 29 바이트

$_=sprintf'%064b',$_;y/01/ab/

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

그 64 비트 이진 표현으로 변환 수를 다음로 변환합니다 01ab각각.


5
그리고 유효한 모든 입력에 대해 충돌이 없음을 확인 했습니까?
Sparr

... 그리고 md5 해시가 우연히 숫자 문자를 생성하지 않습니까?
AlexR

숫자를 제외해야한다는 것을 잊었습니다. 나는 그것을 수용하기 위해 업데이트되었습니다.
Xcali


2

T-SQL, 73 70 61 바이트

SELECT TRANSLATE(STR(n,11),'-0123456789','ABCDEFGHIJK')FROM t

정수를 11 자로 채운 -후 숫자 (및 )를 문자로 직접 바꿉니다 STR. 16 진 또는 2 진으로 변환 할 필요가 없습니다.

TRANSLATE SQL 2017에 도입되었습니다.

tnINT231n<231

편집 : 수동 패딩을 공백으로 자동으로 채워지는 고정 너비 문자 형식 인 CHAR (11)로 변환하여 3 바이트를 절약했습니다.

편집 2 : 대신 함수를 사용하여 9 바이트 를 저장했습니다 . 숫자를 지정된 길이로 채워진 텍스트 문자열로 변환합니다.STR()CASTSTR


2

APL (Dyalog Unicode) , 28 바이트

{11' Z'[⍵≤0],⎕A[⍎¨'¯'~⍨⍕⍵]}

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

정수 인수를 취하는 간단한 Dfn. 사용합니다 ⎕IO←0.

TIO은 테스트 케이스에 대한 링크 -2^102^10. 이 0~⍨부분은 0인수 에서 중복 을 제거합니다 .

방법:

{11' Z'[⍵≤0],⎕A[⍎¨'¯'~⍨⍕⍵]}  Dfn
              A[         ]   Index the Uppercase Alphabet with
                        ⍕⍵    String representation of the argument
                   '¯'~⍨      Without the character ¯
                 ⍎¨           Executing each digit back into integers
             ,                Prepend
    ' Z'[   ]                 A character from the string ' Z' indexed by
         ⍵≤0                  Argument  0. Returns 1 if true, else 0.
                              This will prepend a whitespace to positive numbers, and a Z otherwise.
 11                          Take the first 11 characters, padding with whitespace.

2

apt , 6 바이트

나는 이것이 옳다고 생각 합니다. Stephen의 Python 솔루션에서 영감을 얻었으므로 +1그를 기쁘게하십시오 .

¤ùI cÑ

시도 해봐

¤ùI cÑ     :Implicit input of integer
¤          :Convert to binary string
 ù         :Left pad with spaces
  I        :  To length 64
    c      :Map codepoints
     Ñ     :  Multiply by 2

2

Malbolge , 2708 바이트

bP&A@?>=<;:9876543210/.-,+*)('&%$T"!~}|;]yxwvutslUSRQ.yx+i)J9edFb4`_^]\yxwRQ)(TSRQ]m!G0KJIyxFvDa%_@?"=<5:98765.-2+*/.-,+*)('&%$#"!~}|utyrqvutsrqjonmPkjihgfedc\DDYAA\>>Y;;V886L5322G//D,,G))>&&A##!7~5:{y7xvuu,10/.-,+*)('&%$#"yb}|{zyxwvutmVqSohmOOjihafeHcEa`YAA\[ZYRW:U7SLKP3NMLK-I,GFED&%%@?>=6;|9y70/4u210/o-n+k)"!gg$#"!x}`{zyxZvYtsrqSoRmlkjLhKfedcEaD_^]\>Z=XWVU7S6QPON0LKDI,GFEDCBA#?"=};438y6543s1r/o-&%*k('&%e#d!~}|^z]xwvuWsVqponPlOjihgIeHcba`B^A\[ZY;W:UTSR4PI2MLKJ,,AFE(&B;:?"~<}{zz165v3s+*/pn,mk)jh&ge#db~a_{^\xwvoXsrqpRnmfkjMKg`_GG\aDB^A?[><X;9U86R53ONM0KJC,+FEDC&A@?!!6||3876w4-tr*/.-&+*)('&%$e"!~}|utyxwvutWlkponmlOjchg`edGba`_XW\?ZYRQVOT7RQPINML/JIHAFEDC&A@?>!<;{98yw5.-ss*/pn,+lj(!~ff{"ca}`^z][wZXtWUqTRnQOkNLhgfIdcFaZ_^A\[Z<XW:U8SRQPOHML/JIHG*ED=%%:?>=~;:{876w43210/(-,+*)('h%$d"ca}|_z\rqYYnsVTpoRPledLLafIGcbE`BXW??TY<:V97S64P31M0.J-+G*(DCB%@?"=<;|98765.3210p.-n+$)i'h%${"!~}|{zyxwvuXVlkpSQmlOjLbafIGcbE`BXW??TY<:V97S64P31M0.J-+G*(D'%A@?"=<}:98y6543,1r/.o,+*)j'&%eez!~a|^tsx[YutWUqjinQOkjMhJ`_dGEaDB^A?[><X;9U86R53O20LKJ-HG*ED'BA@?>7~;:{y7x5.3210q.-n+*)jh&%$#"c~}`{z]rwvutWrkpohmPkjihafI^cba`_^A\[>YXW:UTS5QP3NM0KJ-HGF?D'BA:?>=~;:z8765v32s0/.-nl$#(ig%fd"ca}|_]yrqvYWsVTpSQmPNjMKgJHdGEa`_B]\?ZY<WVUTMR5PO20LK.IHA))>CB%#?87}}49zx6wu3tr0qo-nl*ki'hf$ec!~}`{^yxwvotsrUponQlkMihKIe^]EEZ_B@\?=Y<:V97S64P31M0.J-+GFE(C&A@?8=<;:{876w43s10qo-&%kk"'hf$ec!b`|_]y\ZvYWsVTpSQmlkNiLgf_dcba`C^]\?ZY;WV97SLK33HM0.J-+G*(D'%A$">!};|z8yw543t1r/(-,+*)(i&%fd"!~}|_t]xwvutslqTonmPkjLhKIeHFbEC_^A?[TSX;9UT7R4JIN1/K.,H+)E(&B%#?"~<}{987x/4ussr)p-,m*)ihh}$#d!awv{^\x[YuXVrUSonQlNdchKIeHFbaD_AWV[><X;988MRQ4O1GFK.,++@ED'B$:9>!};:9zy0wuut1*/p-,mk#"hh}$#"cb}v{^\\[vunWrqTonmOkjMLgf_HcbE`_A]@>ZY<:VONS64P31M0.J-+G*(D'%A$">!}||3876wv321*/p-,mk#"'hf$ec!b`|{^y[qpuXVUUjonQOkdchKIeHFbEC_B@\?=Y<:VUT76QPONG0KJ-HGFED'%A:9!!6;:9zy654321*q.-n+*j(ig%fd"ca}`^]]rwvYtVlkpSQmPNMMbgfIdF\[`_^A@[ZYXWVUNS6443NMLKJIHG@)DC&A@?!=<}|98765432+r/.-,+k#('&%e{dy~}|uzsx[vuXsrqpoRPledLLafedGF[`C^]\?ZY;W:8T7544INM0.JCBG*(''<A@#!=65:{yxx/43tr0)(-nlkk"'&ge#zy~a_^^sxwZXtmlqTRQQfkjMKg`_dcbEZ_B]\?=SRW:8T75Q42N1/KJ-+G@?D'%A$">!};|z87x5u-,1rp.-n+k#"'hfeez!~}`_t]xwvYtsUTTinmPNjcbgJHdGEa`_BW\?ZY<WVUTS64PIH00EJIH+*?(&&;@#!!~5:{87xv.-2sq/.om+$#(ig%$e"bxw|_]y\ZvuXsUkjoRPOOdihKfH^]bEC_^A\>TS;;PUTS65JO2MLK.,BA))>CBA$9>!}}|3z765v32r0/p-m%$)jh&ge#"c~`vuz][ZZotsVqSihmPNMMbgfIdF\[`CA@@UZY<W9ONS6433HML/J,BAF)'&&;@?"=}549zx6wutt+0/.on%l)('h%$d"ca}`^z][wvYtVlkpSQmPNjiLJf_^cFDCCX]\?=YRQV9766KPO20LEDI,*))>CB%#?87<}{9zx6wu3tr0/.o&m*)('&%fA/cQ>_^;]87%54"32pRA-yejih:s_GGFDDC^{i[T<XQ9b8r_5]O20Li-zB*SdQPO%##]nml43V1TvS@cs0/_'JJH#jhg%BTd!xw_{t99J6$tV21SBR@?kjcbtJ%^F"DD21]@[xfw;)9Nqq5Jmm~LKWVyx@E't&%:]][~YkF8hgv.tssOMp:&ml6Fi&D1T"y?,O<^s\7vX#Wr2}|Rzl+j<bK`r$F"4ZCk|\?-=RQ

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


1
그것이 Malbolge 인 것에 따라, 나는 그 슬라이드를하게 할지도 모른다. .. 환상적인 일!
maxb



2

Wolfram Language (Mathematica) , 44 33 바이트

Echo@Table[Or[i>#+13!,],{i,14!}]&

더 작은 도메인으로 사용해보십시오

그렉 마틴 덕분에 -2

>> 13!+n NullTrue14![13!,14!13!)[231,231)

[24,24)


니스 : 나는 당신이 변경하여 2 바이트를 절약 할 수 있다고 생각 2^31하고 2^3213!14!각각. 출력의 일부 "간결"의 손실 ....에서
그렉 마틴


1

PHP , 64 54 바이트

strtr수동 문자 교체 대신 기능 을 사용하여 -10 바이트

<?=str_pad(strtr($argn,'-0123456789',ADEFGHIJKLM),20);

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

지금 현재 PHP 가능한 최대 INT 값은 9223372036854775807음수의 마이너스 기호를 고려하면, 19 자리 숫자 인 것이를 대체 마이너스 부호 (상기 코드 (20)가 될 것이다 -포함) A에서 문자와 각 자릿수 09에서 문자와 DM그런 다음 오른쪽의 문자열을 공백 문자로 채워서 항상 20 자 길이로 만듭니다. 예를 들어, 입력 출력은 -9876543210입니다 "AMLKJIHGFED ".

출력은 각각의 정수 입력을위한 고유 그리고 당신은 모든 공백을 제거 대체하여 입력을 다시 얻을 수 A-및 교체 DM09.


PHP , 44 바이트

<?=str_pad(base64_encode(decbin($argn)),88);

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

이것은 Arnauld의 답변 과 같은 아이디어 입니다. 입력을 이진으로 변환 한 다음 base-64로 변환합니다. 또한 -9223372036854775807출력에서 항상 같은 길이를 얻으려면 오른쪽에 공백 문자를 사용 하여 88 자 (가장 큰 길이는 88 자)로 채 웁니다.


1

레티 나 0.8.2 , 21 바이트

T`p`l
$
10$*o
!`.{11}

온라인으로 사용해보십시오! 항상 범위가 11 개 문자를 출력한다 n.. z. 설명:

T`p`l

인쇄 가능한 ASCII 문자를 소문자로 번역하십시오. 이지도 -n그리고 0... 9q... z. (숫자는 16 ~ 25 번째 인쇄 가능한 ASCII 문자 인 것이 정말 행운입니다!)

$
10$*o

10 o초 추가 입력은 1-11 자 사이이므로 이제 11-21 자 사이입니다.

!`.{11}

처음 11자를 추출하십시오. 22 자 미만이므로이 문자는 한 번만 일치합니다.


1

, 9 바이트

◧⍘﹪NXχχαχ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 항상 10 개의 공백과 대문자를 출력합니다. 설명:

   N        Input as a number
  ﹪         Modulo
     χ      10
    X       To power
      χ     10
 ⍘     α    Convert to base 26 using uppercase letters
◧       χ   Left pad to length 10

1

R , 37 바이트

set.seed(scan())
cat(sample(LETTERS))

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

26!=41026

2324109410261017232

1exp(264/26!)0.99999998

나에게 1에 충분히 가깝습니다.


그래도 충돌이있을 가능성은 통계적으로 거의 없습니다. 그렇다고해서 질문이 요청한대로 불가능하다는 것은 아닙니다.
Jo King

2
나는 확률 계산을 좋아한다. 충돌을 실제로 확인하고 싶다면 40 억 개의 입력을 모두 실행할 수 있다고 생각하지만 그렇게하고 싶지 않다면 미끄러질 수 있습니다. 지금처럼, 당신은 설득력있는 주장을 제시했으며, 누군가 반례를 발견하면 제출을 수정해야합니다.
maxb


1

R , 40 37 바이트

cat(gsub("S","",intToBits(scan())>0))

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

Robin Ryder의 답변에 대한 대안 ; 이것은 확실히 결정적입니다.

입력을 raw32 바이트 의 벡터 로 변환합니다 . 각 바이트는 16 진수 00이거나 01정수 비트를 나타냅니다. 그런 다음와 logical비교 하여 a로 강제 변환 0하므로 와 로 00매핑 됩니다 . 그런 다음 임의 길이로 출력되도록 보장하기 위해 각각에서 단일 문자를 제거해야 합니다 . 결과는 169 길이 (공백 포함)로 인쇄됩니다.FALSE01TRUEFALSES


1

Zsh , 43 바이트

for c (${(s::)${(l:30::0:)1}})echo \\x$[#c]

               ${(l:30:0:)1}                 # left-pad with zeroes to 30 characters
        ${(s::)             }                # split characterwise
 for c (                     )               # for each character
                                      $[#c]  # get character code (in decimal)
                              echo \\x$[#c]  # interpret as hex code, print (with newline)

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

이 솔루션은 long long문자로만 작업하여 Zsh 정수 의 한계를 극복합니다. 난 단지 가독성 30 개 문자로 패딩,하지만 교체 30로하기 99까지의 모든 수에 대한 작업에이 방법을 수 있습니다 -1E99+11E100-1.

10 진수를 16 진수로 해석하면 다음과 같은 효과가 있습니다.

0 => 48 => H    1 => 49 => I    2 => 50 => P    3 => 51 => Q
4 => 52 => R    5 => 53 => S    6 => 54 => T    7 => 55 => U
8 => 56 => V    9 => 57 => W    - => 45 => E

Zsh , 46 바이트

integer -i2 -Z66 x=$1
<<<${${x//[02-]/a}//1/b}

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

x를 이진 숫자로 선언하고 너비 66으로 0으로 채워집니다. 그런 다음 0a1→를 매핑 b합니다. 또한 문자가 표기법 으로 인쇄되기 때문에 a 2-a 도 매핑 [[-]][base]#[num]합니다. 무엇을 확인하려면 $x교체 이전처럼 보인다, 정수 형식을 구문 분석에 zsh을의 한계는 TIO 링크에서 디버그 출력을 확인합니다.


1

자바 (JDK) , 42 바이트

n->"".format("%8x",n).chars().map(i->i|64)

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

먼저, 입력의 16 진 표현을 작성하고 동일한 길이 제한 (8 자 길이)을 제공하고 빼기 부호를 제거하며 각 중간 출력을 고유하게 유지하는 공백으로 왼쪽으로 채 웁니다.

이것은 17 개의 가능한 문자 0123456789abcdef와 공백을 가진 문자열을 제공합니다 .

그런 다음 각 문자는 숫자 또는 공백이면 코드 포인트에 64를 추가하여 스트리밍되고 매핑됩니다. 효과적으로, 다음지도에서이 결과는 : 0123456789abcdef<space>pqrstuvwxyabcdef`두 개의 번호가 동일한 출력 결과를하지 않게되는 17 개 가지 문자가 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.