Codegolf — Вычисление Временной Метки Rfc 2550

  • Автор темы Alex.offers.pro
  • Обновлено
  • 23, Oct 2024
  • #1

РФК 2550 - это сатирическое предложение (опубликовано 1 апреля 1999 г.) по созданию компактного ASCII-представления временных меток, которое может поддерживать любую дату (даже те, что были до начала Вселенной и те, что прошли после предсказанного конца Вселенной). Алгоритм вычисления временной метки, соответствующей RFC 2550, следующий (примечание: все диапазоны включают начало, но исключают конец — от 0 до 10 000 означают все

 
 #!/usr/bin/env python

import string

# thanks to Leaky Nun for help with this
def base26(n):

if n == 0:

return ''

digits = []

while n:

n -= 1

n, digit = divmod(n, 26)

digit += 1

if digit < 0:

n += 1

digit -= 26

digits.append(digit)

return ''.join(string.ascii_uppercase[x-1] for x in digits[::-1])

year, *vals = input().split('.')

res = ""
negative = False

if year[0] == '-':

negative = True

year = year[1:]

if len(year) < 5:

y = "{0:0>4}".format(year)
elif len(year) <= 30:

y = "{0}{1}".format(string.ascii_uppercase[len(year)-5], year)
else:

b26len = base26(len(year)-30)

y = "{0}{1}{2}".format('^'*len(b26len), b26len, year)

if negative:

y = y.translate(str.maketrans(string.ascii_uppercase+string.digits+'^', string.ascii_uppercase[::-1]+string.digits[::-1]+'!'))

if len(year) == 4:

y = '/' + y

if y[0] not in ['/', '!']:

y = '*' + y

res += y
for val in vals[:5]: #month, day, hour, minute, second

res += '{0:0>2}'.format(val)

for val in vals[5:]: #fractional seconds

res += '{0:0>3}'.format(val)

print(res)
 
where 1000.12.31.13.45.16.8 -> 10001231134516008 12.1.5.1 -> 0012010501 45941 -> A45941 8675309.11.16 -> C86753091116 47883552573911529811831375872990.1.1.2.3.5.8.13 -> ^B478835525739115298118313758729900101020305008013 4052107100422150625478207675901330514555829957419806023121389455865117429470888094459661251.2.3.5.7.11 -> ^^BI40521071004221506254782076759013305145558299574198060231213894558651174294708880944596612510203050711 -696443266.1.3.6.10.15.21.28 -> *V3035567330103061015021028 -5342 -> /4657 -4458159579886412234725624633605648497202 -> !Q5541840420113587765274375366394351502797 ):

  • Формат года
  • Годы от 0 до 10 000: четырехзначное десятичное число, дополненное нулями слева.
  • Годы от 10 000 до 100 000: пятизначное десятичное число с префиксом символа А.
  • Лет от 100 000 до 1030: десятичное число года с префиксом заглавной буквы ASCII, индекс которой в английском алфавите равен количеству цифр в десятичном году минус 5 (B для 6-значных лет, C для 7-значных лет и т. д.). .).
  • Лет 1030 до 1056: тот же формат, что и от 10 000 до 10.30, начиная буквы с A и дополнительно добавляя префикс курсора ( . ) to the string (so the year 1030 представлен [year, month, day, hour, minute, second, millisecond] , and the year 1031 представлен 999 ).
  • Лет 1056 до 10732: год начинается с двух кареток и двух заглавных букв ASCII. Заглавные буквы образуют число по основанию 26, представляющее количество цифр года минус 57.
  • Лет 10732 и далее: тот же формат для 1056 до 10732 используется, расширяя его, добавляя при необходимости дополнительную букву курсора и прописную букву.
  • Годы до нашей эры (до года 0): вычислите строку года абсолютного значения года. Затем замените все буквы их дополнением по основанию 26 (A <-> Z, B <-> Y и т. д.), замените все цифры их дополнением по основанию 10 (0 <-> 9, 1 <-> 8, и т. д.) и замените каретки восклицательными знаками ( 1/1000 ). If the year string is 4 digits or less (i.e. -1 to -10,000), prepend a forward slash ( * ). Если строка года не начинается с косой черты или восклицательного знака, добавьте звездочку ( / ).
  • Месяцы, дни, часы, минуты и секунды: поскольку эти значения состоят максимум из двух цифр, они просто добавляются справа от строки года в порядке убывания значимости, дополняя их слева нулями, если необходимо, для формирования двухзначных строк.
  • Дополнительная точность: если необходима дополнительная точность (в виде миллисекунд, микросекунд, наносекунд и т. д.), эти значения дополняются слева нулями до 3 цифр (поскольку каждое значение ! of the previous value, and thus is at most ^B10000000000000000000000000000000 ) и добавляется в конец метки времени в порядке убывания значимости.

Преимущество этого формата заключается в том, что лексическая сортировка эквивалентна числовой сортировке соответствующей временной метки: если время A предшествует времени B, то при применении лексической сортировки временная метка для A будет предшествовать временной метке для B.

##Вызов

Учитывая произвольно длинный список числовых значений (соответствующих значениям времени в порядке убывания значимости, например ^A1000000000000000000000000000000 ), output the corresponding RFC 2550 timestamp.

##Правила

  • Решения должны работать для любого заданного ввода. Единственными ограничениями должны быть время и доступная память.
  • Ввод может быть принят в любом разумном и удобном формате (например, список чисел, список строк, строка, разделенная одним нецифровым символом и т. д.).
  • Входные данные всегда будут содержать хотя бы одно значение (год). Дополнительные значения всегда располагаются в порядке убывания значимости (например, входные данные никогда не будут содержать значение дня без значения месяца или второе значение, за которым следует значение месяца).
  • Введенное время всегда будет действительным (например, для 30 февраля не будет никаких меток времени).
  • Встроенные функции, вычисляющие временные метки RFC 2550, запрещены.

##Примеры

В этих примерах входные данные используются в виде одной строки с отдельными значениями, разделенными точками ( ^ ).

0 <= n < 10000

##Эталонная реализация

n

#код-гольф #строка #дата

Alex.offers.pro


Рег
05 May, 2017

Тем
80

Постов
186

Баллов
616
  • 26, Oct 2024
  • #2

Бефунге, 418 384 байт

Трудно заранее предсказать, насколько большой может оказаться программа Befunge, и когда я начал над ней работать, я подумал, что у нее действительно есть шанс конкурировать. Оказывается, я ошибался.

 
 
 
 
 
 
 
 
 
 
 
 is 

Попробуйте онлайн!

 

Dzhem2001


Рег
11 Nov, 2019

Тем
83

Постов
213

Баллов
628
  • 26, Oct 2024
  • #4

Перл 5, 328 322 317 301 + 1 ( 48223 ) = 302 bytes

Ž¾S

Попробуйте онлайн!

без гольфа

ε # Map over each integer `y` of the (implicit) input-list þ # Only leave digits (same as absolute value `Ä`, but results in a string) NĀi # If the 0-based map-index is NOT 0 (so not the year): N6@ # Check if the map-index is >= 6 (1 if truthy; 0 if falsey), # thus milliseconds or smaller Ì # Increase that by 2 j # Add leading spaces to abs(y) to make the length (N>=6)+2 long # (note that builtin `j` requires the first argument to be a string, # hence the use of `þ` over `Ä` earlier) ð0: # And replace those leading spaces with 0s ë # Else (the map-index is 0, thus the year): g # Pop the absolute value, and push its length © # Store this length in variable `®` (without popping) Ž¾S # Push compressed integer 48223 ₃в # Convert it to base-95 as list: [5,32,58] @ # Check for each if they're >= the length (1 if truthy; 0 if falsey) DU # Store a copy of those checks in variable `X` O # Sum the checks to get the amount of truthy values ® # Push the length from `®` again 4α # Take its absolute difference with 4 0 × # Repeat 0 that many times as string ® # Push the length `®` again 60+ # Add 60 ç # Convert it to an ASCII character with this codepoint ® # Push the length `®` again 34+ # Add 34 ç # Convert it to an ASCII character with this codepoint '^ì '# Prepend "^" ® # Push the length `®` again 57- # Subtract 57 D # Duplicate it < # Decrease it by 1 (thus `®`-58) ®Ý # Push a list in the range [0,`®`] ₂ m # Take 26 to the power of each value in this list 675* # Multiply each by 675 @ # Check for each if the `®`-58 is >= the value O # Sum those checks Ì # Increase it by 2 '^× '# Have that many "^" s # Swap so `®`-57 is at the top of the stack again AuÅв # Convert it to base-"ABCDEFGHIJKLMNOPQRSTUVWXYZ", # basically convert it to base-26 and index it into the alphabet J # And join those characters together to a single string « # After which we'll append it to the "^"-string ) # Wrap all values on the stack into a list ć # Extract head; pop and push remainder-list and the first item separated, # where the first item is the sum of truthy values we calculated earlier è # Use that to 0-based index into the remainder-list yÄ # Push the absolute value of integer `y` again « # And append it to the string y0‹i # If integer `y` is negative: žK # Push string "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" '^ì '# Prepend a leading "^" žL # Push string "zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA9876543210" '!ì '# Prepend a leading "!" ‡ # Transliterate all characters in the string „/* # Push string "/*" õª # Convert it to a list of characters, and append "": ["/","*",""] X # Push the list of checks we saved in variable `X` 2£ # Only leave the first two checks O # Sum those è # Use it to 0-based index into the ["/","*",""] ì # And prepend it in front of the string ] # Close all if-statements and the map J # And join all mapped strings together # (after which the result is output implicitly) ||answer||

Java 11, 653 640 637 623 618 595 589 байт

εþNĀiN6@Ìjð0:ëg©Ž¾S₃в@DUO0®4α×®60+ç®34+ç'^ì®57-D<₂®Ým675*@OÌ'^×sAuÅвJ«)ćèyÄ«y0‹ižK'^ìžL'!쇄/*õªX2£Oèì]J

Введите как [A1:F1]=Split("4052107100422150625478207675901330514555829957419806023121389455865117429470888094459661251.2.3.5.7.11",".") n=Left([A1],1)="-":y=Mid([A1],1-n):l=Len(y):o=IIf(l<5,Right("000"&y,4),IIf(l<31,"",String(Len(b(l-30)),94))&B(l-IIf(l<31,4,30))&y):For Each c In[B1:ZZ1]:j=j+1:p=p+IIf(c,Format(c,IIf(j>5,"000","00")),""):Next:If n Then For i=1To Len(o):c=Asc(Mid(o,i,1)):Mid$(o,i,1)=Chr(IIf(c<60,105,155)-c):Next:?IIf(l<5,"/",IIf(InStr(1,o,"="),"","*"))Replace(o,"=","!")p:Else?o;p ^^BI40521071004221506254782076759013305145558299574198060231213894558651174294708880944596612510203050711021028 Cells.Clear:j=0:o="":p="" '' clear the worksheet and vars [A1:H1]=Array("-696443266","1","3","6","10","15","21","28") n=Left([A1],1)="-":y=Mid([A1],1-n):l=Len(y):o=IIf(l<5,Right("000"&y,4),IIf(l<31,"",String(Len(b(l-30)),94))&B(l-IIf(l<31,4,30))&y):For Each c In[B1:ZZ1]:j=j+1:p=p+IIf(c,Format(c,IIf(j>5,"000","00")),""):Next:If n Then For i=1To Len(o):c=Asc(Mid(o,i,1)):Mid$(o,i,1)=Chr(IIf(c<60,105,155)-c):Next:?IIf(l<5,"/",IIf(InStr(1,o,"="),"","*"))Replace(o,"=","!")p:Else?o;p *V3035567330103061015021028 Cells.Clear:j=0:o="":p="" '' clear the worksheet and vars [A1]="45941" n=Left([A1],1)="-":y=Mid([A1],1-n):l=Len(y):o=IIf(l<5,Right("000"&y,4),IIf(l<31,"",String(Len(b(l-30)),94))&B(l-IIf(l<31,4,30))&y):For Each c In[B1:ZZ1]:j=j+1:p=p+IIf(c,Format(c,IIf(j>5,"000","00")),""):Next:If n Then For i=1To Len(o):c=Asc(Mid(o,i,1)):Mid$(o,i,1)=Chr(IIf(c<60,105,155)-c):Next:?IIf(l<5,"/",IIf(InStr(1,o,"="),"","*"))Replace(o,"=","!")p:Else?o;p A45941 Cells.Clear:j=0:o="":p="" '' clear the worksheet and vars [A1:F1]=Split("4052107100422150625478207675901330514555829957419806023121389455865117429470888094459661251.2.3.5.7.11",".") n=Left([A1],1)="-":y=Mid([A1],1-n):l=Len(y):o=IIf(l<5,Right("000"&y,4),IIf(l<31,"",String(Len(b(l-30)),94))&B(l-IIf(l<31,4,30))&y):For Each c In[B1:ZZ1]:j=j+1:p=p+IIf(c,Format(c,IIf(j>5,"000","00")),""):Next:If n Then For i=1To Len(o):c=Asc(Mid(o,i,1)):Mid$(o,i,1)=Chr(IIf(c<60,105,155)-c):Next:?IIf(l<5,"/",IIf(InStr(1,o,"="),"","*"))Replace(o,"=","!")p:Else?o;p ^^BI40521071004221506254782076759013305145558299574198060231213894558651174294708880944596612510203050711 -array and return-type as 1:1 .

Оказалось, что это довольно долго (как и ожидалось), но определенно можно еще немного поиграть в гольф. Я просто рад, что это работает после долгой возни с ним..
-5 байт благодаря @ceilingcat.

Попробуйте здесь.

Объяснение:

  • "" : Loop over the parts
    • Variant\String : Determine if it's negative, and if it is, remove the minus sign and set a flag to reduce bytes
    • p : Get the amount of digits
    • o : If it's the first number (the year):
      • 0 : If it's in the range \$[0, 100000)\$: add leading zeroes if necessary
      • Variant\Integer : If it's in the range \$[100000, 10^{30})\$: Add a leading letter
      • j : If it's in the range \$[10^{30}, 10^{732})\$: Add a literal p (и установить o to 1) + leading letter
      • j : Add the appropriate amount of literal Function b(n) While n n=n-1 d=n Mod 26+1 d=d+26*(d<0) n=n\26-(d<0) b=Chr(64+d)+b Wend End Function (и установить 26->Z to that amount), plus 1->A : начальные буквы (преобразование по основанию 26 в алфавит)
      • n=Left([A1],1)="-":y=Mid([A1],1-n):l=Len(y):o=IIf(l<5,Right("000"&y,4),IIf(l<31,"",String(Len(b(l-30)),94))&B(l-IIf(l<31,4,30))&y):For Each c In[B1:Z1]:j=j+1:p=p+IIf(c,Format(c,IIf(j>5,"000","00")),""):Next:If n Then For i=1To Len(o):c=Asc(Mid(o,i,1)):Mid$(o,i,1)=Chr(IIf(c<60,105,155)-c):Next:?IIf(l<5,"/",IIf(InStr(1,o,"="),"","*"))Replace(o,"=","!")p:Else?o;p : Add the year itself to the result-String
      • [G1:Z1] : If the year was negative:
        • [F1] : Create a temp String [E1] с правильным [D1] , [C1] или [B1] amount of [A1]
        • 26 : Do the conversion (A↔Z, B↔Y, 0↔9, 1↔8, etc.)
        • [1,0] : And then set the result to this temp String
    • Z : If it's the month, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, or smaller:
      • ? : If it's milliseconds or smaller: Add leading zeroes if necessary
      • ? : Else (month, days, hours, minutes, seconds): Add single leading zero if necessary
  • ¡ : Return the result
 

Pascal_edi


Рег
10 Sep, 2007

Тем
67

Постов
212

Баллов
567
  • 26, Oct 2024
  • #5

Желе, 165 126 байт

¡

Попробуйте онлайн!

Строка 4 выполняет форматирование года с помощью строк 2 и 3. Первая и последняя строка касаются заполнения нулями элементов входных данных до их правильной длины, а затем объединения их с отформатированным годом.

  • [-9999 .. -0001] finds the base 26 prefix. It takes the cartesian power of the alphabet ( / ) для каждого числа от 1 до ячейки(log26(пол(бревно10(год))-n+1)) (где n равно 30 или 4) затем получает индексы в этот список с помощью Floor(log10(год))-n ( L=4a®S<0x@”/; ).
  • / formats years >= 1030 ( !X874... )
  • ['9' .. '0','!','*','/',' ','^','Z' .. 'A'] formats years < 1030. (Редактировать: Сохранено байт с помощью instead of )
  • ^C125... [['0' .. '9'], ['^',' ','/','*','!'], ['A' .. 'Z']] дает пустой префикс для лет < 105 ( ØD,“^ *!”,ØA ). It takes the list of digits then filters out every element in itself. Just using this to yield потому что ®S<0¤¡ doesn't work here. This just evaluates to ^ /*! . 0 .. 9 и A .. Z здесь не работает, и я не смог найти еще 2 байта, которые возвращают пустой список.
  • 2£FiЀ¹ị€2£UF¤ appends the year to the prefix then flattens it.
  • ®S<0¤¡ prefixes a / если длина года равна 4 в операторе do L=4”/x .
  • ;®AṾ€¤ takes the complements of [] , and [] если год отрицательный ( ). [] относится ко второй ссылке, ®L>4¤? which is the list . С отформатированным годом, например 1RḊ this link finds the index of each character in the flattened version of ;@⁶ затем использует эти индексы для создания новой строки из сплющенной версии ⁶; where each sublist is reversed, i.e. ç4⁶; , уступая ®L>30¤? . ç30;€”^UZF сопоставляется с самим собой, потому что он имеет префикс до того, как все будет принято дополнением.
  • ị@ adds a ØA к началу отрицательных лет в _µ‘l26Ċṗ@€ØAẎị@ . My guess is this can be shortened. I ended up including this in the previous do statement ( ḣ5ṫ€3 ØD,“^ /*!”,ØA _µ‘l26Ċṗ@€ØAẎị@ Lµç30;€”^UZFµç4⁶;µ®L>30¤эµḟ®L>4¤?;®AṾ€¤µL=4”/x2£FiЀị€2£UF¤µ®S<0¤¡ 4R¬+DU$UµḢ©Ç;Ñ;ṫ6ṫ€2$$F ) и сэкономил 7 байт, потому что тогда мне не нужно было дважды проверять отрицательные годы.

Есть много применений return r in line 4 and I think they could be compressed by using :t<2?0+p:p; вместо этого, но я не уверен, как заставить их работать. Я получил i>6?t<2?"00"+p:t<3?0+p:p to work and saved a few bytes.

Джеймс Холдернесс отметил, что в моей первой заявке не были указаны годы с правильными 30 цифрами. Оказалось, что ошибка была за любой год, который требовал else in the base 26 prefix. It turns out I couldn't use x потому что, когда вы конвертируете 26 в основание 26, это дает вам r=x; instead of for(int c:r.getBytes())x+=c>93?e:new StringBuffer(y+z).reverse().charAt((z+y).indexOf(c)); (да). Вместо этого я использовал заказанные пары с заменой. Я не думаю, что для этого существует атом, но если он есть, я могу сэкономить несколько байтов. Исправление этого стоило мне ~40 байт. Определенно моя самая длинная программа Jelly. Редактировать: Нашёл более короткий способ вычисления декартова произведения. Я понял, что не уверен, что последний способ работает для префиксов, содержащих более двух букв, но новый способ работает.

Извините, что много раз редактировал этот пост, я просто продолжаю находить способы его сократить.

 

Nrtk


Рег
19 Oct, 2019

Тем
96

Постов
188

Баллов
698
  • 26, Oct 2024
  • #6

Эксель ВБА, 500 486 485 461 байт

Анонимная немедленная оконная функция VBE

Анонимная оконная функция VBE, которая принимает входные данные в виде года от ! , month from v , дней с * , hours from / , минут от x , seconds from x=t<5?"/":t<32?"*":"!".repeat(v); и дополнительный массив повышенной точности от if(f>0){ , calculates the RFC2550 timestamp and outputs to the VBE immediate window. Makes use of the declared helper function below.

r+=p;

Вспомогательная функция

Объявлена ​​вспомогательная функция, которая принимает входное число и возвращает это число в базе 26, так что x=e;for(var c:Long.toString(t-57,26).toUpperCase().split(e))x+=z.charAt((y+q).indexOf(c));r+=x; and v

Должен быть помещен в общедоступный модуль.

"^"

Использование

Должен использоваться в очищенном модуле, или модуль должен быть очищен перед выполнением как переменные. if(t>57)for(v=2,u=675;u<t-57;u*=26)v++;r+="^".repeat(v) , v and "^" are assumed to be in their default, uninitialized state at the beginning of execution of the code. For t<58?"^"+(char)(t+33+(v=1)) , который представляет собой t<32?(char)(t+60) variable, this default value is t<5?"0".repeat(4-t) и для if(i++<1){ and t=p.length(); , которые p=p.charAt(0)<46?p.substring(f=1):p; variables, this default value is the empty string ( for(var p:s){ ).

Входные данные, массив строк, берутся из String on the ActiveSheet and output is to the VBE immediate window.

Пример ввода-вывода

String ||answer||

05AB1E, 104 байты

s->{String e="",r=e,q="ABCDEFGHIJKLMNOP",z=q+"QRSTUVWXYZ",y="0123456789",x;int i=0,f=0,t,u,v;for(var p:s){p=p.charAt(v=0)<46?p.substring(f=1):p;t=p.length();if(i++<1){r+=(t<5?"0".repeat(4-t):t<32?(char)(t+60):t<58?"^"+(char)(t+33+(v=1)):e);if(t>57){for(v=2,u=675;u<t-57;u*=26)v++;r+="^".repeat(v);x=e;for(var c:Long.toString(t-57,26).toUpperCase().split(e))x+=z.charAt((y+q).indexOf(c));r+=x;}r+=p;if(f>0){x=t<5?"/":t<32?"*":"!".repeat(v);for(int c:r.getBytes())x+=c>93?e:new StringBuffer(y+z).reverse().charAt((z+y).indexOf(c));r=x;}}else r+=i>6?t<2?"00"+p:t<3?0+p:p:t<2?0+p:p;}return r;}

Введите в виде списка целых чисел.

На основе мой ответ на Java.

Попробуйте онлайн или проверить все тестовые случаи.

Объяснение:

$_=shift@F; # Store the year in the default variable for easier regex if(($l=y/-//c)<5){ # if the length of the year is less than 5 s/^/0 x(4-$l)/e # pad with leading zeros to 4 digits }elsif($l<57){ # if the length is less than 57 s/^/'^'x($l>30).chr 65+($l-5)%26/e # put a carat at the front if there are more than 30 characters # and map the length minus 5 to A-Z }else{ $l-=57; # offset the length by 57 do{ s/\^*\K/'^'.chr 65+$l%26/e # put a carat at the front and map the length to base 26 (A-Z) }while$l=int$l/26; # until the length is down to 0 s/^\^\K\D-?\d/^A$&/ # insert an extra '^A' to pad the result to at least 2 characters if there was only 1 } if(s/-//){ # if the year is negative s%^....$%/$&%; # put a '/' in front of a 4 digit year eval join'',reverse'!/',0..9,A..Z,"y/A-Z0-9^/"; # map A-Z,0-9, and ^ to Z-A,9-0, and ! respectively s%^[^!/]%*$&% # add a * at the front if there are no other indicators } printf$_. # output the year 'd'x(@F>5?5:@F). # followed by the month, day, hour, and minutes, padded to 2 digits 'd'x(@F-5),@F # followed by fractional seconds, padded to three digits

См. мой совет по 05AB1E (разделы Как сжать большие целые числа? и Как сжать целочисленные списки?) чтобы понять, почему $_=shift@F;if(($l=y/-//c)<5){s/^/0 x(4-$l)/e}elsif($l<57){s/^/'^'x($l>30).chr 65+($l-5)%26/e}else{$l-=57;do{s/\^*\K/'^'.chr 65+$l%26/e}while$l=int$l/26;s/^\^\K\D-?\d/^A$&/}if(s/-//){s%^....$%/$&%;eval join'',reverse'!/',0..9,A..Z,"y/A-Z0-9^/";s%^[^!/]%*$&%}printf$_.'d'x(@F>5?5:@F).'d'x(@F-5),@F is -a ; <input oninput=o.value=f(this.value);><input id=o> is f= s=>s.split`.`.map((n,i)=>i?`00${n}`.slice(i>5?-3:-2):n<'0'?g(n.slice(1),'!','*','/').replace(/\w/g,c=>c>'9'?(45-parseInt(c,36)).toString(36):9-c):g(n),g=(n,c='^',d='',e='',l=n.length)=>l<5?e+`000${n}`.slice(-4):l<31?d+(l+5).toString(36)+n:h(l-30,c)+n,h=(n,c)=>n?c+h(--n/26|0,c)+(n%26+10).toString(36):'').join``.toUpperCase() ; ; и ~:59*-!:00p:2*1\-10p:9*68*+20p>0>#~$_v 68*-:0\`30p\>>:"P"%\"P"/9+p30g#v_1+:~> 0\`v`\0:\p04<<:+1g04-$<_\49+2*v>0>+#1:#\4#g\#0`#2_130p040p5-::01-`\49+2*-: v:$_\50p\$:130g:1+30p:!^!:-1\*<>g*"A"++\49+2*/50g1-: _$1+7g00g40g!**:!>_40g:!v!:\g8<^00*55*g01%*2+94:p05 |#9/"P"\%"P":<:_,#!>#:<$_1-00g^v3$\_\#`\0:>#g+ >10g*20g+,1+:^v\&\0+2`4:_@#`<0+< /*v*86%+55:p00<_$$>:#,_$1+~0^ ^!>+\55+/00g1-:^ .

 

Зинаида Стрелковская


Рег
28 Oct, 2020

Тем
81

Постов
221

Баллов
646
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно