আরএফসি 2550 টাইমস্ট্যাম্প গণনা করুন


26

আরএফসি 2550 হ'ল একটি ব্যঙ্গাত্মক প্রস্তাব (1 এপ্রিল, 1999 এ প্রকাশিত) একটি স্থান-দক্ষ এএসসিআইআইয়ের টাইমস্ট্যাম্পগুলির উপস্থাপনা যা কোনও তারিখকে সমর্থন করতে পারে (এমনকি মহাবিশ্বের সূচনার পূর্বে এবং মহাবিশ্বের পূর্বাভাসের শেষেরগুলি যারা)। একটি আরএফসি 2550- কমপ্লায়েন্ট টাইমস্ট্যাম্প গণনা করার জন্য অ্যালগরিদম নিম্নরূপ (দ্রষ্টব্য: সমস্ত রেঞ্জের শুরুটি অন্তর্ভুক্ত রয়েছে তবে শেষটি বাদ নেই - 0 থেকে 10,000 এর অর্থ সমস্ত nযেখানে রয়েছে 0 <= n < 10000):

  • বছরের ফর্ম্যাট
    • বছর 0 থেকে 10,000: 4-অঙ্কের দশমিক সংখ্যা, শূন্য সহ বাম-প্যাডযুক্ত।
    • বছর 10,000 থেকে 100,000: এ অক্ষরের সাথে উপসর্গযুক্ত একটি 5-অঙ্কের দশমিক সংখ্যা
    • বছর 100,000 থেকে 10 30 : বছরের দশমিক সংখ্যা, বড় হাতের ASCII চিঠির সাথে উপসর্গযুক্ত, যার ইংরেজি বর্ণমালায় সূচক দশমিক বছরে অঙ্ক সংখ্যার সমান, বিয়োগ 5 (6-সংখ্যার জন্য বি, 7 এর জন্য সি) -ডিজিট বছর, ইত্যাদি)।
    • বছর 10 30 থেকে 10 56 : 10,000 থেকে 10 30 এর একই ফর্ম্যাটটি , এ এর ​​সাথে অক্ষরগুলি শুরু করে এবং একটি কেরেটের ( ^স্ট্রিং) উপসর্গ করে (সুতরাং বছর 30 30 প্রতিনিধিত্ব করে ^A1000000000000000000000000000000, এবং বছর 10 31 প্রতিনিধিত্ব করে) দ্বারা ^B10000000000000000000000000000000)।
    • বছর 10 56 থেকে 10 732 : বছরটি দুটি কেরেট এবং দুটি এএসসিআইআই বড় হাতের অক্ষর দ্বারা উপস্থাপিত হয়। বড় হাতের অক্ষরগুলি একটি বেস -26 সংখ্যা গঠন করে, বছরটিতে সংখ্যার সংখ্যাটি উপস্থাপন করে, বিয়োগ 57।
    • বছর 10 732 এর পরে: 10 56 থেকে 10 732 এর জন্য একই ফর্ম্যাটটি ব্যবহৃত হয়, যখন প্রয়োজন হয় তখন অতিরিক্ত ক্যারেট এবং বড় হাতের অক্ষর যুক্ত করে এটি প্রসারিত করা হয়।
    • বিসিই বছর (0 বছর পূর্বে): বছরের পরম মানের বছরের স্ট্রিং গণনা করুন। তারপরে সমস্ত অক্ষরকে তাদের বেস -26 পরিপূরক (A <-> Z, B <-> Y, ইত্যাদি) দ্বারা প্রতিস্থাপন করুন, সমস্ত সংখ্যাগুলি তাদের বেস -10 পরিপূরক দ্বারা প্রতিস্থাপন করুন (0 <-> 9, 1 <-> 8, ইত্যাদি) এবং বিস্ময়কর চিহ্নগুলি ( !) দিয়ে কেরেটগুলি প্রতিস্থাপন করুন । যদি বছরের স্ট্রিং 4 ডিজিট বা তার চেয়ে কম হয় (যেমন -1 থেকে -10,000), একটি ফরোয়ার্ড স্ল্যাশ ( /) প্রিপেন্ড করুন । যদি বছরের স্ট্রিংটি ফরোয়ার্ড স্ল্যাশ বা বিস্ময়কর চিহ্ন দ্বারা উপসর্গ করা না হয়, একটি তারকাচিহ্ন ( *) পূর্বে চাপ দিন ।
  • মাস, দিন, ঘন্টা, মিনিট, এবং সেকেন্ড : যেহেতু এই মানগুলি সর্বাধিক মাত্র 2 অঙ্ক থাকে তাই এগুলি কেবল বছরের স্ট্রিংয়ের ডানদিকে যুক্ত হয়, তাত্পর্য হ্রাসের ক্রমে, বাম-প্যাডযুক্ত শূন্যগুলির সাথে গঠনের প্রয়োজনে 2-অঙ্কের স্ট্রিং
  • অতিরিক্ত নির্ভুলতা : যদি অতিরিক্ত যথার্থতা (মিলিসেকেন্ড, মাইক্রোসেকেন্ডস, ন্যানোসেকেন্ডস ইত্যাদির আকারে) প্রয়োজন হয় তবে সেই মানগুলি 3 টি অঙ্কে শূন্যের সাথে বাম-প্যাডযুক্ত থাকে (কারণ প্রতিটি মান 1/1000পূর্ববর্তী মানের হয়, এবং এইভাবে সর্বাধিক হয় 999) এবং টাইমস্ট্যাম্পের শেষে সংযোজন করে তাত্পর্যপূর্ণ হ্রাস করে।

এই টাইমস্ট্যাম্পের সাংখ্যিক বাছাইয়ের সমতুল্য লেক্সিকাল বাছাইয়ের সুবিধা রয়েছে - যদি সময় এ-এর আগে খ আসে, তখন লে এর লম্বিক বাছাইয়ের সময় A এর টাইমস্ট্যাম্প আসবে for

চ্যালেঞ্জ

সংখ্যাসূচক মানের একটি দীর্ঘ-তালিকা দেওয়া হয়েছে (তাত্পর্যপূর্ণ ক্রমান্বিত সময়ের মান অনুসারে, যেমন [year, month, day, hour, minute, second, millisecond]), সম্পর্কিত আরএফসি 2550 টাইমস্ট্যাম্প আউটপুট।

বিধি

  • সমাধান অবশ্যই প্রদত্ত যে কোনও ইনপুটটির জন্য কাজ করে। একমাত্র সীমাবদ্ধতা সময় এবং উপলভ্য মেমরি হওয়া উচিত।
  • ইনপুটটি কোনও যুক্তিসঙ্গত, সুবিধাজনক বিন্যাসে নেওয়া যেতে পারে (যেমন সংখ্যার তালিকা, স্ট্রিংগুলির একটি তালিকা, একটি একক অ-অঙ্কের অক্ষর দ্বারা বিযুক্ত একটি স্ট্রিং ইত্যাদি)।
  • ইনপুটটিতে সর্বদা কমপক্ষে একটি মান (বছর) থাকবে। অতিরিক্ত মান সর্বদা তাত্পর্যপূর্ণ ক্রমে থাকে (উদাহরণস্বরূপ ইনপুটটিতে কোনও মাসের মান ব্যতীত কোনও দিনের মান বা এক মাসের পরে দ্বিতীয় মান থাকে না)।
  • ইনপুট সর্বদা একটি কার্যকর সময় হবে (যেমন 30 শে ফেব্রুয়ারির জন্য কোনও টাইমস্ট্যাম্প থাকবে না)।
  • আরটিএফ 2550 টাইমস্ট্যাম্পগুলি গণনা করে এমন বিল্টিনগুলি নিষিদ্ধ।

উদাহরণ

এই উদাহরণগুলি পিরিয়ড ( .) দ্বারা পৃথক পৃথক মানগুলির সাথে একক স্ট্রিং হিসাবে ইনপুট ব্যবহার করে ।

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

রেফারেন্স বাস্তবায়ন

#!/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)

অবশ্যই -696443266.1.3.6.10.15.21.28হওয়া উচিত *V3035567339896938984978971?
নীল

11
@ নীল যতক্ষণ না আমরা নেতিবাচক মাসগুলি আবিষ্কার করি। Negember।
মেগো

1
@ টেলরস্কোট অতিরিক্ত নির্ভুলতা : যদি অতিরিক্ত নির্ভুলতা (মিলিসেকেন্ড, মাইক্রোসেকেন্ডস, ন্যানোসেকেন্ডস ইত্যাদি আকারে) প্রয়োজন হয়, সেই মানগুলি 3 টি অঙ্কে শূন্যের সাথে বাম-প্যাডযুক্ত।
মেগো

2
এটি আমার কাছে প্রশ্নটিতে দেওয়া অনুমানের মতো দেখতে আসলে আরএফসি 2550 এর সাথে মেলে না। যেমনটি আমি বুঝতে পেরেছি, একবার আপনি তিনটি কেরেট পেয়ে গেলে কেয়ার্টের চেয়ে চিঠির সংখ্যা আরও দ্রুত বৃদ্ধি করা উচিত, কারণ এটি ফিবোনাচি সিরিজ থেকে উদ্ভূত হয়েছে (4 ক্যারেটের অর্থ 5 অক্ষর, 5 ক্যারেটের অর্থ 8 অক্ষর ইত্যাদি) নিরাপদ কি? ধরুন আমাদের আরএফসির সেই দিকটি উপেক্ষা করা উচিত?
জেমস হোল্ডারনেস

1
@ জেমসহোল্ডারেন্স আপনি ঠিক বলেছেন, আমি এই ঘটনাটি ভুল করেছিলাম। তবে এটি সংশোধন করতে অনেক দেরি হয়েছে, কারণ ইতিমধ্যে ইতিমধ্যে উত্তরগুলি অবৈধ হবে।
মেগো

উত্তর:


5

জাভাস্ক্রিপ্ট (ES6), 325 বাইট

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()
;
<input oninput=o.value=f(this.value);><input id=o>

মর্মান্তিকভাবে দীর্ঘ।


আপনি কি সহজ পরীক্ষার জন্য স্ট্যাক স্নিপেট যুক্ত করতে আপত্তি করবেন?
মেগো

@ মেগো সম্পন্ন এছাড়াও কিছু টাইপস ঠিক করে ফেলেছিল যা ক্রেপ করেছিল (অনুলিপিটি অনুলিপি করার সময় কিছু কোড মুছে ফেললাম কারণ লাইন মোড়ানো আমাকে বিভ্রান্ত করেছে
নীল

3

বেফুঞ্জ, 418 384 বাইট

বেফুঞ্জ প্রোগ্রামটি কত বড় হয়ে যাওয়ার সম্ভাবনা রয়েছে তা আগেই বলা শক্ত এবং আমি যখন এটির কাজ শুরু করলাম তখন আমি ভেবেছিলাম এটিতে আসলে প্রতিযোগিতার কিছুটা সম্ভাবনা রয়েছে। আমি ভুল ছিল সক্রিয়।

~: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-:^

এটি অনলাইন চেষ্টা করুন!


3

পার্ল 5 , 328 322 317 301 + 1 ( -a) = 302 বাইট

$_=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$_.'%02d'x(@F>5?5:@F).'%03d'x(@F-5),@F

এটি অনলাইন চেষ্টা করুন!

Ungolfed

$_=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
'%02d'x(@F>5?5:@F).             # followed by the month, day, hour, and minutes, padded to 2 digits
'%03d'x(@F-5),@F                # followed by fractional seconds, padded to three digits

3

জাভা 8, 653 640 637 623 বাইট

s->{String r="",q="ABCDEFGHIJKLMNOP",z=q+"QRSTUVWXYZ",y="0123456789",x;int i=0,f=0,t,u;for(String p:s){if(p.charAt(0)<46){p=p.substring(1);f=1;}t=p.length();if(i++<1){r+=(t<5?"000".substring(t-1):t<32?(char)(t+60):t<58?"^"+(char)(t+34):"");if(t>57){for(r+="^^",u=675;u<t-57;u*=26)r+="^";x="";for(String c:Long.toString(t-57,26).toUpperCase().split(""))x+=z.charAt((y+q).indexOf(c));r+=x;}r+=p;if(f>0){x=t<5?"/":t<32?"*":r.replace("^","!").replaceAll("[^!]","");for(char c:r.toCharArray())x+=c>93?"":"ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210".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;}

String-আররে হিসাবে ইনপুট করুন এবং হিসাবে রিটার্ন-টাইপ করুন String

বেশ লম্বা হয়ে উঠেছে (আশানুরূপ হিসাবে), তবে অবশ্যই আরও কিছু গল্ফ করা যেতে পারে। আমি বেশ খুশি যে এটি বেশ কিছুক্ষণ ধরে ফেটে যাওয়ার পরে কাজ করে ..

এখানে চেষ্টা করুন।

ব্যাখ্যা:

  • for(String p:s){: অংশ উপর লুপ
    • if(p.charAt(0)<46){p=p.substring(1);f=1;}: এটি নেতিবাচক কিনা তা নির্ধারণ করুন এবং যদি তা হয় তবে বিয়োগ চিহ্নটি সরিয়ে ফেলুন এবং বাইটগুলি হ্রাস করার জন্য একটি পতাকা সেট করুন
    • t=p.length();: অঙ্কের পরিমাণ পান
    • if(i++<1){: এটি যদি প্রথম সংখ্যা (বছর):
      • t<5?"000".substring(t-1): যদি এটি 0-100,000 (একচেটিয়া) থাকে: প্রয়োজনে নেতৃস্থানীয় জিরো যুক্ত করুন
      • t<32?(char)(t+60): এটি যদি 100,000-10 30 (একচেটিয়া) থাকে: একটি শীর্ষস্থানীয় চিঠি যুক্ত করুন
      • t<58?"^"+(char)(t+34): যদি এটি 10 30 -10 732 (একচেটিয়া) থাকে: একটি আক্ষরিক "^"+ শীর্ষস্থানীয় চিঠি যুক্ত করুন
      • if(t>57)for(r+="^^",u=675;u<t-57;u*=26)r+="^";: যথাযথ পরিমাণে আক্ষরিক "^"+ যুক্ত করুন x="";for(String c:Long.toString(t-57,26).toUpperCase().split(""))x+=z.charAt((y+q).indexOf(c));r+=x;: নেতৃস্থানীয় অক্ষর (বর্ণ-র রূপান্তর থেকে বেস -26)
      • r+=p;: ফলাফল-স্ট্রিংয়ের সাথে বছরটি যুক্ত করুন
      • if(f>0){: বছরটি নেতিবাচক হলে:
        • x=t<5?"/":t<32?"*":r.replace("^","!").replaceAll("[^!]","");: xসঠিক /, *বা এক বা একাধিক দিয়ে একটি টেম্প স্ট্রিং তৈরি করুন!
        • for(char c c:r.toCharArray())x+=c>93?"":"ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210".charAt((z+y).indexOf(c));: রূপান্তর করুন (A↔Z, B↔Y, 0-9, 1-8, ইত্যাদি)
        • r=x;: এবং তারপরে ফলাফলটি এই টেম্প স্ট্রিংয়ে সেট করুন x
    • else: এটি যদি মাস, দিন, ঘন্টা, মিনিট, সেকেন্ড, মিলিসেকেন্ড, মাইক্রোসেকেন্ডস, ন্যানোসেকেন্ড বা ছোট হয়:
      • i>6?t<2?"00"+p:t<3?0+p:p: এটি যদি মিলি সেকেন্ড বা তার চেয়ে কম হয়: প্রয়োজনে নেতৃস্থানীয় জিরো যুক্ত করুন
      • :t<2?0+p:p;: অন্য (মাস, দিন, ঘন্টা, মিনিট, সেকেন্ড): প্রয়োজনে একক শীর্ষস্থানীয় শূন্য যুক্ত করুন
  • return r: রেজাল্ট ফিরিয়ে দিন

Input may be taken in any reasonable, convenient format (such as a list of numerics, a list of strings, a string delimited by a single non-digit character, etc.).- আপনি সংখ্যার তালিকা হিসাবে ইনপুট নিতে পারেন এবং ব্যয়বহুল বিভাজন এবং রূপান্তর এড়িয়ে যেতে পারেন।
মেগো

1
@ মেগো দুর্ভাগ্যক্রমে ডিফল্ট সংখ্যাসূচক (b৪ longবিট সবচেয়ে বেশি সহ) জাভাতে কিছু ইনপুটগুলির জন্য খুব ছোট, তাই Stringএটির চেয়েও খাটো java.math.BigIntegerStringযদিও আমি এটিকে অ্যারেতে পরিবর্তন করেছি , সুতরাং বিন্দু দ্বারা বিভক্ত করার দরকার নেই, যা কিছু বাইট সংরক্ষণ করেছিল, তাই ধন্যবাদ।
কেভিন ক্রুইজসেন

2

এক্সেল ভিবিএ, 500 486 485 470 বাইট

নামবিহীন ভিবিই তাত্ক্ষণিক উইন্ডো ফাংশন

অজ্ঞাতনামা ভিবিই তাত্ক্ষণিক উইন্ডো ফাংশন যা বছরের থেকে [A1]মাস, মাস থেকে কয়েক [B1]দিন [C1], কয়েক ঘন্টা, কয়েক [D1]মিনিট [E1], কয়েক সেকেন্ড [F1]এবং এর থেকে [G1:Z1]optionচ্ছিক অতিরিক্ত নির্ভুলতার অ্যারে থেকে আরবিসি 2550 টাইমস্ট্যাম্প গণনা করে এবং ভিবিই তাত্ক্ষণিক উইন্ডোতে আউটপুট নেয়। নীচে ঘোষিত সাহায্যকারী ফাংশনটি ব্যবহার করে।

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

সহায়ক কার্য

ঘোষিত সহায়ক ফাংশন যা একটি ইনপুট নম্বর নেয় এবং সেই সংখ্যাটি বেস -26-তে এমন 1->Aএবং এটি প্রদান করে26->Z

অবশ্যই একটি সর্বজনীন মডিউলে স্থাপন করা উচিত।

Function b(n)
While n
n=n-1
d=n Mod 26+1
n=Int(n/26)
d=d+26*(d<0):n=n-(d<0)
b=Chr(64+d)+b
Wend
End Function

ব্যবহার

একটি স্পষ্ট মডিউল ব্যবহার করা আবশ্যক, বা মডিউলটি যুদ্ধ হিসাবে কার্যকর হওয়ার আগে অবশ্যই সাফ করা উচিত j, oএবং pকোডটি কার্যকর করার শুরুর দিকে তাদের ডিফল্ট, অবিচ্ছিন্ন অবস্থায় থাকতে হবে। এর জন্য j, যা একটি Variant\Integerপরিবর্তনশীল, এই ডিফল্ট মানটি 0এবং এর জন্য oএবং pযেগুলি Variant\Stringভেরিয়েবল, এই ডিফল্ট মানটি খালি স্ট্রিং ( "")।

ইনপুট, স্ট্রিংগুলির একটি অ্যারে, 1:1অ্যাক্টিভশিট থেকে নেওয়া হয় এবং আউটপুটটি ভিবিই তাত্ক্ষণিক উইন্ডোতে নিয়ে যায়।

নমুনা I / O

[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

Subরুটিন সংস্করণ

ঘোষিত সাবরুটাইন যা বছর থেকে [A1]মাস, মাস থেকে কয়েক [B1]দিন [C1], কয়েক ঘন্টা, কয়েক [D1]মিনিট [E1], কয়েক সেকেন্ড [F1]এবং এর থেকে [G1:Z1]optionচ্ছিক অতিরিক্ত নির্ভুলতার অ্যারে থেকে আরবিসি 2550 টাইমস্ট্যাম্প এবং ভিবিই তাত্ক্ষণিক উইন্ডোতে আউটপুট গণনা করে।

Sub R(x)
a=x(0)
n=Left(a,1)="-"'<- that `"` is only there to make sure highlighting is correct
y=Mid(a,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)
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:o=IIf(l<5,"/",IIf(InStr(1,o,"="),"","*"))&Replace(o,"=","!")
For j=1To UBound(x)
o=o+IIf(x(j),Format(x(j),IIf(j>5,"000","00")),"")
Next
[A2]=o
End Sub
Function b(n)
While n
n=n-1
d=n Mod 26+1
n=Int(n/26)
d=d+26*(d<0):n=n-(d<0)
b=Chr(64+d)+b
Wend
End Function

ব্যবহার

পরিসরের ইনপুটটি [A1:ZZ1]ম্যানুয়ালিভাবে করা যেতে পারে, সেলগুলিতে টাইপ করে, বামদিক থেকে ডানদিকের মধ্যে, প্রয়োজন অনুযায়ী বা ভিবিই তাত্ক্ষণিক উইন্ডো থেকে বরাদ্দ করে।

দ্রষ্টব্য, এক্সেল স্বতঃ-রূপান্তরিত সংখ্যাগুলিকে বৈজ্ঞানিক স্বরলিপিতে রূপান্তর করার কারণে, যে কোনও সংখ্যার 12-সংখ্যার সমান বা তার চেয়ে বেশি মূল বেধের দৈর্ঘ্য 10 নম্বরের অবশ্যই সেলটিতে পাঠ্য সেল হিসাবে সেট করে বা স্পষ্টভাবে পাঠ্য হিসাবে প্রবেশ করানো উচিত বা আক্ষরিক অর্পণ করে 'কোষের মানটির শুরুতে

নমুনা I / O

r Split("4052107100422150625478207675901330514555829957419806023121389455865117429470888094459661251.2.3.5.7.11",".")
?[A2]  '' <- print output to VBE console
^^BI40521071004221506254782076759013305145558299574198060231213894558651174294708880944596612510203050711 ''  <- Output

r Array("47883552573911529811831375872990","1","1","2","3","5","8","13")
?[A2]
^B478835525739115298118313758729900101020305008013

r Array("-696443266","1","3","6","10","15","21","28")
?[A2]
*V3035567330103061015021028

r Array("45941")
?[A2]
A45941

অবহেলিত এবং ব্যাখ্যা

''  Returns RFC2550 timestamp corresponding to passed vars
Public Function RFC2550(ByVal pYear As String, ParamArray Extra() As Variant) As String

    ''  Declare Vars
    Dim Negative As Boolean, _
        leny As Long, _
        i As Long, _
        c As Byte, _
        s As Variant, _
        out As String

    ''  Check if year is negative and store the absolute value of the year
    Let Negative = Left(pYear, 1) = "-"
    Let pYear = Mid(pYear, 1 - Negative)

    ''  Take the length of the year
    Let leny = Len(pYear)
    If leny < 5 Then
        ''  If the length is less than 5, pad the year left to 4 characters 
        ''  using zeros
        Let out = Format("0000", pYear)
    Else
        ''  If the length of the year is greater than 30, then set out to be 
        ''  as string comprised of length-30 instances of `^`
        Let out = IIf(leny < 31, "", String(Len(Base26(leny - 30)), 94)) 
        ''  append the Base26 representation of the length of the year,
        ''  minus 30, if the length is greater than 30
        Let out = out & Base26(leny - IIf(leny < 31, 4, 30)) 
        ''  append the year to out
        Let out = out & pYear
    End If


    If Negative Then
        ''  iterate across out
        For i = 1 To Len(out)
            ''  store the char code for the current char
            Let c = Asc(Mid(out, i, 1))
            ''  swap letter/number with its inverse (0->9,A->Z)
            Mid$(out, i, 1) = Chr(IIf(c < 60, 105, 155) - c)
        Next i

        ''  replace `=` (the inverse of `^`) with `!`
        Let out = Replace(out, "=", "!")
        ''  Prepend either `/`, `*`, or nothing depending on length and 
        ''  start of out
        Let out = IIf(leny < 5, "/", IIf(InStr(1, out, "!"), "", "*")) & out
    End If

    Let i = 1
    For Each s In Extra
        ''  append all of the extra precision data - padding to 2 chars for 
        ''  the first 5 elements in the array (month, day, hour, minute and 
        ''  second) and to 3 chars for all following elements (milli, micro, 
        ''  nano, pico, femto, atto, zepto, yocto - seconds) with the char 0
        Let out = out & IIf(s, Format(s, IIf(i > 5, "000", "00")), "")
        Let i = i + 1
    Next

    ''  return out
    Let RFC2550 = out 

End Function


''  returns non-standard base26 version of input number 
''  1->A, 2->B,... 26->Z
Function Base26(ByVal n As Long) As String

    ''  declare vars
    Dim out As String, _
        digit As Integer

    ''  init out, digit
    Let out = ""
    Let digit = 0

    ''  iterate through n 
    While n
        ''  Decrement, hold the value of the digit
        Let n = n - 1
        Let digit = n Mod 26 + 1

        ''  divide by 26
        Let n = Int(n / 26)

        ''  correct for negative numbers
        If digit < 0 Then Let n = n + 1: Let digit = digit - 26

        ''  prepend char corresponding to the digit to out
        Let out = Chr(64 + digit) & out
    Wend

    ''  return out
    Let Base26 = out
End Function

2

জেলি , 165 126 বাইট

ḣ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

এটি অনলাইন চেষ্টা করুন!

লাইন 4 লাইন 2 এবং 3 এর সাহায্যে বছরের ফর্ম্যাটিং করে does

  • _µ‘l26Ċṗ@€ØAẎị@বেস 26 উপসর্গ সন্ধান করে। এটি ØA1 এবং সিলের মধ্যে প্রতিটি সংখ্যার জন্য বর্ণমালার ( ) বর্ণের কার্টেসিয়ান শক্তি গ্রহণ করে (লগ 26 (তল (লগ 10 (বছর)) - এন + 1)) (যেখানে এন হয় 30 বা 4 হয়) তারপরে এই তালিকার সূচী হয় মেঝে সহ (লগ 10 (বছর)) - এন ( ị@)।
  • ç30;€”^UZF ফর্ম্যাট বছর> = 10 30 ( ®L>30¤?)
  • ç4⁶;ফর্ম্যাট বছর <10 30 । ( সম্পাদনা করুন : এর ⁶;পরিবর্তে ব্যবহার করে একটি বাইট সংরক্ষণ করেছেন ;@⁶)
  • 1RḊ <10 5 ( ®L>4¤?) বছরের জন্য একটি খালি উপসর্গ দেয় । এটি অঙ্কগুলির তালিকা নেয় তারপরে প্রতিটি উপাদান নিজেই ফিল্টার করে। শুধু এটি উত্পাদন করতে ব্যবহার করে []কারণ এখানে কাজ করে না। এটি কেবল মূল্যায়ন করে []এবং []এখানে কাজ করবেন না এবং আমি অন্য 2 বাইট খুঁজে পাইনি যা খালি তালিকায় ফিরে আসে।
  • ;®AṾ€¤ উপসর্গটিতে বছর সংযোজন করে এটি সমতল করে tens
  • L=4”/xডু /স্টেটমেন্টে বছরের দৈর্ঘ্য 4 হলে একটি উপসর্গ করে ®S<0¤¡
  • 2£FiЀ¹ị€2£UF¤এর সম্পূরক সমূহ লাগে A .. Z, 0 .. 9এবং ^ /*!যদি বছর নেতিবাচক ( ®S<0¤¡)। দ্বিতীয় লিঙ্কটি বোঝায়, ØD,“^ *!”,ØAযা তালিকা [['0' .. '9'], ['^',' ','/','*','!'], ['A' .. 'Z']]^C125...এই লিঙ্কটির মতো বিন্যাসিত বছরের সাথে প্রতিটি বর্ণচিহ্নের সমতল সংস্করণে সূচকটি পাওয়া যায় এবং সেই সূচকগুলি যেখানে প্রতিটি সাবলিস্ট বিপরীত হয়, অর্থাত্ ['9' .. '0','!','*','/',' ','^','Z' .. 'A']ফলনশীল সমতল সংস্করণ থেকে একটি নতুন স্ট্রিং তৈরি করতে ব্যবহৃত হয় !X874.../নিজের কাছে মানচিত্র কারণ সমস্ত কিছু পরিপূরক গ্রহণের আগে এটি উপসর্গ করা হয়।
  • L=4a®S<0x@”/;/নেতিবাচক বছরের শুরুতে একটি যুক্ত করে [-9999 .. -0001]। আমার ধারণা এটি হ্রাস করা যেতে পারে। আমি আগের ডেট স্টেটমেন্ট ( ¡) এ এটি সহ শেষ করেছিলাম এবং 7 বাইট সংরক্ষণ করেছি কারণ তখন আমার দু'বার নেতিবাচক বছর পরীক্ষা করার দরকার পড়েনি।

¡৪ নং লাইনে প্রচুর ব্যবহার রয়েছে এবং আমি মনে করি ?পরিবর্তে ব্যবহার করে সেগুলি সংকুচিত করা যেতে পারে তবে সেগুলি কীভাবে কাজ করবে সে সম্পর্কে আমি নিশ্চিত নই। আমি ?কাজ পেয়েছিলাম এবং কয়েক বাইট সংরক্ষণ করেছি।

জেমস হোল্ডারেন্স উল্লেখ করেছিলেন যে আমার প্রথম জমাটি 30 টি সংখ্যা সহ সঠিকভাবে পরিচালনা করে না। এটি প্রমাণিত হয়েছে যে বাগটি যে কোনও বছরের জন্য ছিল যার জন্য Zবেস 26 উপসর্গের প্রয়োজন needed দেখা যাচ্ছে যে আমি ব্যবহার করতে পারিনি কারণ আপনি যখন 26 টি বেস 26 তে রূপান্তর করেন এটি আপনাকে (দুহ) [1,0]পরিবর্তে দেয় 26। পরিবর্তে আমি প্রতিস্থাপনের সাথে অর্ডারযুক্ত জোড়া ব্যবহার করেছি। আমি মনে করি না যে এটির জন্য একটি পরমাণু আছে তবে সেখানে থাকলে আমি কয়েকটি বাইট সংরক্ষণ করতে পারি। এটি স্থির করাতে আমার জন্য 40 ডলার ব্যয় করতে হবে। অবশ্যই আমার দীর্ঘতম জেলি প্রোগ্রাম। সম্পাদনা : কার্তেসিয়ান পণ্যটি করার একটি ছোট উপায় খুঁজে পেয়েছে। আমি বুঝতে পেরেছিলাম যে আমি নিশ্চিত নই যে শেষটি যেভাবেই দুটিরও বেশি অক্ষরের সাথে উপসর্গের জন্য কাজ করেছে তবে নতুন পদ্ধতিতে কাজ করে।

আমি এই পোস্টটি বহুবার সম্পাদনা করেছি বলে দুঃখিত, আমি এটিকে ছোট করার উপায়গুলি আবিষ্কার করতে থাকি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.