Вихід завжди однакової довжини


26

З такими проблемами, як Output з тією ж довжиною, що і код, і Create output удвічі більше довжини коду , я подумав про окрему, але схожу проблему.

Завдання - отримати вихід. Це може бути рядок, список символів або будь-який формат виводу за замовчуванням у вашій програмі. Однак вихід повинен завжди бути однакової довжини, незалежно від введення. І що ще важливіше, вихід повинен бути різним для різних входів .

Вхідні дані

Єдине ціле число n , діапазони якого визначаються вибором мови. Якщо у вашій мові є цілі числа змінної довжини, діапазон 231n<231 .

Вихідні дані

Рядок або список символів або друк для STDOUT або STDERR. Ви можете використовувати лише один із цих методів. Вихід повинен бути однакової довжини незалежно від введення, але саме ви визначаєте, яка саме довжина. Вихід може не містити символів цифр 0-9або знака мінус- . Вихід повинен бути детермінованим .

Ви повинні бути в змозі довести, що для кожного результату існує лише один можливий вклад - або формальним доказом, аргументом, або грубим пошуком.

Це питання з кодовим гольфом, тому голіть сторонні байти. Всі мови вітаються, чим більше, тим краще!


4
Чи повинна програма теоретично працювати на будь-який внесок? Або достатньо використовувати метод, який працює лише у визначеному діапазоні (обмежений ±231 ), не обов'язково через мовні обмеження, але обмеження методу?
Містер Xcoder

4
@ Mr.Xcoder, як ви могли вибрати довжину, якщо вам довелося працювати для цілих чисел довільної довжини?
Стефан

2
@ Mr.Xcoder Ви повинні лише довести, що він працює для цього діапазону. Це правило допомагає таким мовам, як Python, де числа можуть бути тисячами цифр. Без цього правила було б набагато важче як для похідних Python, так і для Python (що включає багато мов для гольфу).
maxb

11
Якщо мова не має цілих чисел змінної довжини, але може підтримувати значення, що перевищують , чи можемо ми використовувати обмежений діапазон - 2 31n < 2 31 ? 231231n<231
Арнольд

2
@Arnauld максимальний діапазон - це 32 бітові цілі числа, незалежно від обмежень мови. Мова може зменшити лише цей діапазон.
maxb

Відповіді:


15

JavaScript (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"

Один кінцевий блок з 1 або 2 символів повинен бути закодований, якщо довжина двійкового рядка не кратна 3:

Блоки з 1 символом

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

2-символьні блоки

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

Крок 3

Кінцевий висновок оброблений пробілами.


1
Ви вже знали, що ці конкретні комбінації символів не містять чисел при перетворенні на base64, або ви це з'ясували експериментально?
Томаш Зато - Відновити Моніку

@ TomášZato Це була впевнена здогадка, заснована на тому, що це дуже маленький набір діаграм у нижній частині таблиці ASCII.
Арнольд

10

Python 3 , 49 39 байт

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

Спробуйте в Інтернеті!

-10 байт завдяки мінус-сім

Перетворює ціле число в шістнадцятковий і попереджує пробіли до 9 символів. Потім подвоює ASCII-код кожного символу в рядку (деякі виходять за межі ASCII в Unicode, але Python обробляє його чудово), виводячи список символів.

Це працює, тому що кожна цифра, в тому числі -, відображається на інший символ ASCII. Ніяких цілих чисел між рівними -2147483648і не 2147483648є рівними, тому перетворення їх у шістнадцятковий і попередній проміжки не зробить їх рівними. Тоді, відображення їх у різні кодові точки не призводить до зіткнень, тому в діапазоні досі немає двох значень, які призводять до рівних результатів.

Python 3 , 59 56 47 байт

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

Спробуйте в Інтернеті!

-3 байти завдяки Джитсе

-9 байт завдяки мінус-сім

Той самий алгоритм, але використовуючи mapзамість forциклу.


2
Ви можете поголити 3 байти в mapпідході, замінивши list( ... )на[* ... ]
Jitse

3
Ви можете створити прокладений рядок з"%9x"%i
мінус сім

@negativeseven дякую, це справді геніально
Стівен

1
Не міг залишитися в межах ASCII і на 39 байтах у Python 2, використовуючи`4e9+n`
Джонатан Аллан

8

05AB1E , 11 5 байт

тjÇ·ç

-6 байт, що передають підхід @Stephen , тому обов'язково підтримайте його!

Виходи списку до 100 символів, з 100(input length) кількість @(подвоювати простір елемент коду), і все -0123456789відображеної в Z`bdfhjlnpr(два рази ASCII кодових).

Спробуйте в Інтернеті.

Пояснення:

 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|кількість нових рядків, доданих або 'a', якщо n<0 або 'b', якщо n0 .

Ä            # 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 байт. Механізм перетворення чисел тут працює однаково. Ця програма передбачає те саме, що і вище.


Нескінченний вихід заборонений
Jo King

@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для позначення від'ємного числа (мається на увазі нескінченно довгий префікс 1s), а ліві прокладки - 34 символи за допомогою пробілів. Тоді ми замінюємо 0s на 'a', а 1s на 'h', щоб створити Maniacal Base 2 Представлення: рядки типу "хаахахахааха", що передують пробіли, а іноді ... Оскільки кожен крок тут є незворотним, це 1: 1.

Редагувати: Нехай запис показує, що @manatwork спочатку опублікував це ідентичне рішення. На жаль Я мав би освіжитися.


3
Лол. Ваш вихід набагато смішніший, ніж мій.
манатура


4

C (gcc) , 38 байт

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

Спробуйте в Інтернеті!

Це розширює кожен біт цілого числа на вхід у байт, який дорівнює 0 або 1 (які є обома недрукованими символами, але проти цього немає правила). Таким чином, вихід завжди становить 32 байти і гарантовано буде унікальним.


Розумний підхід, подібний до заповнення відповіді Brainfuck з байтами NUL.
maxb

Я не впевнений, що програма, яка не припиняється, насправді знаходиться в специфікаціях ... але якщо вона є, 28 байт? f(a){putchar(a&1);f(a/2);}
Г. Сліпен

Я зробив виняток для Malbolge, але загалом програма повинна припинитись. Маючи "нескінченність" як довжину, це трохи обман.
maxb


3

Haskell, 31 байт

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

Спробуйте в Інтернеті!

Додає 2^60до вводу так, що отримане число має однакову кількість цифр для всього вхідного діапазону. Перетворіть рядок і змістіть кожен символ на 10 місць праворуч у порядку ASCII ( 0-> :...9 -> C).


1
Чи обробляє це від’ємні числа?
maxb

@maxb: ні, але тепер це виправлено.
німі

3

C # (Visual C # Interactive Compiler) , 52 байти

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

Спробуйте в Інтернеті!

Різний підхід до рішення AC # використовує той факт, що c # модуль від'ємний для від'ємних чисел. Я припускаю, що ви можете поголити байт або два, якщо дозволите символи, які не відображаються ("\ 0" тощо), оновивши значення, +65...щоб не змістити значення символу до чогось читабельного.


44? - Я виводить символи, що не надруковані (що здається нормальним), але ви можете перетворитись на файл для друку, додавши 65, як ваш поточний відповідь.
дата

1
42 - На цей раз з друкованих символів :)
Dana

3

Perl 5 -MDigest::MD5=md5_hex -p , 23 байти

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

Спробуйте в Інтернеті!

Раніше:

Perl 5 -p , 29 байт

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

Спробуйте в Інтернеті!

Перетворює число до його 64 біт двійкового представлення, то транслітерує 0і 1до aі b, відповідно.


5
І ви підтвердили, що немає зіткнень для всіх дійсних входів?
Спарр

... і що жоден хед md5 випадково не видає цифру?
AlexR

Забув про вимогу виключити цифри. Я оновив, щоб пристосувати це.
Xcali


2

T-SQL, 73 70 61 байт

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

Я просто замінюю цифри (і -) літерами, після STRпрокладки ціле число до 11 символів. Не потрібно перетворювати на шістнадцятковий чи двійковий файл.

TRANSLATE була представлена ​​в SQL 2017.

tnINT231n<231 .

EDIT . Збережено 3 байти, замінивши вручну обкладку з перетворенням на CHAR (11), що є символом формату фіксованої ширини, який автоматично прокладає пробіли.

EDIT 2 : Збережено 9 байт за допомогою STR()функції замість CAST. STRперетворює число в текстовий рядок, доданий до заданої довжини.


2

APL (Dyalog Unicode) , 28 байт

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

Спробуйте в Інтернеті!

Простий Dfn, приймаючи цілий аргумент. Використання ⎕IO←0.

TIO посилання на тестовий випадок від -2^10до 2^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

Japt , 6 байт

Я думаю, що це правильно. Натхненний рішенням Стівена 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

Мальбодж , 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

Perl 6 , 12 байт

*~|('@'x 11)

Спробуйте в Інтернеті!

Анонімне Що б не лямбда, що приймає число та рядок АБО це з 11 @с. Це відображає цифри до pqrstuvwxyта тире m, а потім прошиває рядок до 11 символів за допомогою @s



2

Мова Вольфрама (Mathematica) , 44 33 байт

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

Спробуйте з меншим доменом

-2 завдяки Грегу Мартіну

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

[24,24)


Приємно :) Я думаю , що ви можете зберегти два байта, змінюючи 2^31і 2^32до 13!і 14!відповідно. При втраті деякої «стислості» у виході ....
Грег Мартін


1

PHP , 64 54 байти

-10 байт, використовуючи strtrфункцію замість ручної заміни символів.

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

Спробуйте в Інтернеті!

Найбільше значення int, можливе в PHP на даний момент, - 9223372036854775807це 19 цифр, якщо врахувати знак мінус у від'ємних числах, це буде 20. Код вище замінює знак мінус ( -) Aсимволом і кожну цифру від 0до 9символом від DдоM а потім прокладіть рядок праворуч із символом пробілу, щоб завжди було 20 символів. Наприклад, вихід для введення -9876543210є "AMLKJIHGFED " .

Вихідний сигнал є унікальним для кожного цілого числа вхідних і ви можете отримати назад на вхід, видаляючи всі прогалини, замінюючи Aз -і замінити Dна Mз 0до 9.


PHP , 44 байти

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

Спробуйте в Інтернеті!

Це та сама ідея, що і і відповідь Арнальда . Перетворює вхід у двійковий, а потім перетворює його на базовий-64. Також додайте його до 88 символів (найбільша довжина становить-922337203685477580788 символів) з символом пробілу, щоб завжди отримувати однакову довжину у висновку.


1

Сітківка 0.8.2 , 21 байт

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

Спробуйте в Інтернеті! Завжди виводить 11 символів з діапазону n..z . Пояснення:

T`p`l

Перекладіть символи для друку ASCII на малі літери. Це карта -до nі 0.. 9до q..z . (Дійсно пощастило, що цифри - це 16-й по 25-й друковані символи ASCII!)

$
10$*o

Додайте 10 oс. Оскільки вхід матиме від 1 до 11 символів, тепер їх між 11 і 21 символом.

!`.{11}

Витягніть перші 11 символів. Оскільки є менше 22 символів, це збігатиметься лише один раз.



1

R , 37 байт

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

Спробуйте в Інтернеті!

26!=41026 перестановок алфавіту. Вихід завжди має довжину 51 (26 літер + 25 пробілів).

23241094102610-17232

1-досвід(-264/26!)0,99999998

що для мене досить близько до 1.


Хоча так, статистично малоймовірним є зіткнення, це не означає, що це неможливо, оскільки задається питанням
Джо Кінг,

2
Мені подобається розрахунок ймовірності. Я думаю, ти міг би пробігнути всі 4 мільярди входів, якби ти справді хотів перевірити на зіткнення, але якщо ти не відчуваєш цього, я можу дозволити йому ковзати. Як і зараз, ви представили переконливий аргумент, і якщо хтось знайде контрприклад, вам доведеться змінити ваше подання.
maxb

1

мозковий ебать , 20 19 байт

-1 байт завдяки Кшиштофу Шевчику

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

Спробуйте в Інтернеті!

Виводить число з кожною цифрою і тире, зіставленим на 255 за вирахуванням їх порядкового значення, зафіксованим до 255 символів з байтами NUL.


1
Ви можете зберегти один байт:-[>,[->-<]>.[-]<<-]
Krzysztof Szewczyk

1

R , 40 37 байт

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

Спробуйте в Інтернеті!

Альтернатива відповіді Робіна Райдера ; це, безумовно, детерміновано.

Це перетворює вхід у rawвектор з 32 байтів, кожен байт - це шістнадцяткове число 00або 01представляє біти цілого числа. Потім ми примушуємо до a logical, порівнюючи з 0, так 00це відображається на FALSEі 01до TRUE. Тоді нам потрібно видалити по одній букві з кожної, FALSEщоб гарантувати вихід однакової довжини, довільно вибраний S. Результат друкується (з пробілом) довжиною 169.


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+1 до 1E100-1.

Ефект від інтерпретації десяткових кодів як шістнадцяткових:

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. Потім карти 0aі 1b. Ми також мапируем 2і -на, оскільки ці символи друкуються в [[-]][base]#[num]нотації. Щоб побачити, як $xвиглядає перед заміною, та обмеження Zsh при аналізі цілих чисел, перевірте вихід налагодження у посиланні TIO.


1

Java (JDK) , 42 байти

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

Спробуйте в Інтернеті!

По-перше, це створює шістнадцяткове представлення вводу, залишене ліворуч пробілами, що забезпечує однакове обмеження довжини (8 символів), видаляє знак мінус і зберігає кожен проміжний вихід унікальним.

Це дає рядок з 17 різними можливими символами: 0123456789abcdef і пробіл.

Потім кожен символ передається в потоковий і відображається, додаючи 64 до його кодової точки, якщо це цифра чи пробіл. Ефективно це призводить до наступного відображення: 0123456789abcdef<space>до pqrstuvwxyabcdef`якого входить 17 різних символів, тож жодне два числа не призведе до одного результату.


1

Баш , 30 байт

echo $1|md5sum|tr '0-9-' 'A-K'

Спробуйте в Інтернеті!

Щоб довести, що вихід унікальний, я просто погукнув на зіткнення MD5, і не знайшов результатів у цілих числах між -231 і 231. Щоб уникнути заборонених символів у вихідних даних, просто перекладіть вказані символи у великі літери. Вихідні дані завжди однакової довжини за визначенням і гарантовано не містять заборонених символів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.