একটি মাইক্রোসফ্ট এমএস-ডস 5.0 ফ্যাট ডিরেক্টরি এন্ট্রি ডিকোড করুন


27

মাইক্রোসফ্ট FAT ফাইল সিস্টেমে একটি ডিরেক্টরি টেবিল রয়েছে যা ডিস্কের "ফোল্ডারগুলি" কোন "ফাইলগুলি" -এ উপস্থাপন করতে পারে? সময়ের জন্য, এই এন্ট্রিগুলি অল্প পরিমাণে বিটগুলিতে প্রচুর পরিমাণে তথ্য ছড়িয়ে দিয়েছে। কৌতুহলকারীদের জন্য উইকিতে অনেকগুলি প্রযুক্তিগত বৈশিষ্ট্য রয়েছে , তবে এখানে চ্যালেঞ্জটি একটি এন্ট্রিটির "সাধারণ" ডিকোডিংয়ের দিকে মনোযোগ দেবে।

প্রতিটি এন্ট্রি একটি 32-বাইট বাইনারি শব্দ নিয়ে গঠিত, বিভিন্ন বিভাগে বিভক্ত। এই চ্যালেঞ্জের ধারাবাহিকতার জন্য, আমরা এমএস-ডস 5.0 সংস্করণটি ব্যবহার করব, বাইটগুলি বড় এন্ডিয়ান হিসাবে অর্ডার করা হয় এবং আমরা বাইটকে 0x00বাম-মোস্ট 0x1Fহিসাবে এবং ডান-সর্বাধিক হিসাবে বাইটকে ডাকি ।

নীচে সম্পর্কিত বিভাগগুলির একটি সংক্ষিপ্ত পরিকল্পনাবদ্ধ এবং প্রতিটি বিভাগের জন্য আউটপুটটি কী হওয়া উচিত ( সাহসের সাথে )।

  • প্রথম 11 বাইট হ'ল ASCII ফর্ম্যাটে ফাইলের নাম (এইখান থেকেই বিখ্যাত 8.3 ফাইলের নামটি আসে - ফাইলের নামের জন্য 8 বাইট, এক্সটেনশনের জন্য 3 বাইট)। এগুলি সোজা ASCII এনকোডিং হয় এবং এর মধ্যে পিরিয়ড (।) এর সাথে ASCII হিসাবে আউটপুট হওয়া উচিত ।
    • দ্রষ্টব্য: 8 এবং 3 টি অংশ উভয়ই একটি পূর্ণ দৈর্ঘ্যের এন্ট্রি করতে ফাঁকা জায়গায় প্যাডযুক্ত। আউটপুট স্পেস উপেক্ষা করা উচিত (যেমন, তাদের আউটপুট না)।
    • ফাইল এক্সটেনশান খালি থাকতে পারে (অর্থাত্ সমস্ত স্থান), সেক্ষেত্রে আউটপুট বিন্দুটিকে আউটপুট না দেয়
    • যেহেতু এএসসিআইআই কেবলমাত্র নিম্ন 7 টি বিট ব্যবহার করে, বাইটগুলির মধ্যে একটিতে নেতৃত্ব থাকবে 0
  • পরবর্তী বাইট (0x0b) নিম্নলিখিতগুলির একটি বিটমাস্ক:
    • 0x01 কেবল পঠন - আউটপুট রিটার্নিং
    • 0x02 লুকানো - আউটপুট এইচ
    • 0x04 সিস্টেম - আউটপুট এস
    • 0x08 ভলিউম লেবেল - আউটপুট ভিএল । ফাইলের আকার (নীচের) 0 হিসাবে আউটপুট হওয়া উচিত , এর প্রকৃত প্রবেশদ্বার নির্বিশেষে।
    • 0x10 সাব-ডিরেক্টরি - আউটপুট এসডি । ফাইলের আকার (নীচের) 0 হিসাবে আউটপুট হওয়া উচিত , এর প্রকৃত প্রবেশদ্বার নির্বিশেষে।
    • 0x20 সংরক্ষণাগার - আউটপুট
    • 0x40 ডিভাইস - এই চ্যালেঞ্জের জন্য উপেক্ষা করা হয়েছে।
    • 0x80 সংরক্ষিত - এই চ্যালেঞ্জের জন্য উপেক্ষা করা হয়েছে।
    • যেহেতু এটি বিটমাস্ক, একাধিক পতাকা সম্ভব - সমস্ত প্রযোজ্য আউটপুটগুলি কোনও ক্রমে একত্রে সংযুক্ত করা উচিত। উদাহরণস্বরূপ, 0xffহতে পারে ROHSVLSDA(বা অন্য কোনও সংমিশ্রণ)।
  • পরবর্তী দুটি বাইট (0x0c এবং 0x0d) এমএস-ডস 5.0 এর অধীনে ব্যবহার করা হয় না।
  • পরের দুটি বাইট (0x0e এবং 0x0f) নিম্নলিখিতভাবে তৈরির সময়:
    • বিট 15 থেকে 11 ঘন্টা 24 ঘন্টা বিন্যাসে হয় - আউটপুট 00 থেকে 23
    • বিট 10 থেকে 5 মিনিট - আউটপুট 00 থেকে 59
    • 4 থেকে 0 বিট হ'ল সেকেন্ড / 2 - আউটপুট 00 থেকে 58 (মনে রাখবেন যে সেকেন্ডগুলি কেবলমাত্র দুই-সেকেন্ড রেজোলিউশনে রয়েছে)
    • স্পষ্টতার জন্য: hhhhhmmmmmmsssssযখন বিগ-এন্ডিয়ান লেখা হয়।
  • পরের দুটি বাইট (0x10 এবং 0x11) নিম্নলিখিতভাবে তৈরি তারিখ:
    • আউটপুট - বিটস 15 9 বছর হয় 1980 জন্য 0পর্যন্ত 2107 জন্য127
    • বিট 8 থেকে 5 মাস হয় - আউটপুট 1 থেকে 12 (শূন্যের সাথে বা তার সাথে ছাড়া)
    • 4 থেকে 0 টি বিট দিন - আউটপুট 0 থেকে 31 (শূন্যের সাথে বা তার ছাড়া)
    • স্পষ্টতার জন্য: yyyyyyymmmmdddddযখন বিগ-এন্ডিয়ান লেখা হয়।
  • পরবর্তী দুটি বাইট (0x12 এবং 0x13) শেষ অ্যাক্সেসের তারিখ। এমএস-ডস ৫.০ এ ব্যবহৃত হওয়ার সময় আমরা এই চ্যালেঞ্জের জন্য এই অংশটিকে উপেক্ষা করছি।
  • পরবর্তী দুটি বাইট (0x14 এবং 0x15) এমএস-ডস 5.0 দ্বারা ব্যবহৃত হয় না।
  • পরের দুটি বাইট (0x16 এবং 0x17) শেষ পরিবর্তিত সময়, উপরে তৈরির সময় হিসাবে একই বিন্যাস অনুসরণ করে।
  • পরের দুটি বাইট (0x18 এবং 0x19) শেষ পরিবর্তিত তারিখ, উপরে তৈরির তারিখ হিসাবে একই ফর্ম্যাটটি অনুসরণ করে।
  • পরের দুটি বাইট (0x1a এবং 0x1b) হ'ল ডিস্কে থাকা ফাইলটির ক্লাস্টার অবস্থান। আমরা এই চ্যালেঞ্জের জন্য এই অংশটিকে উপেক্ষা করছি।
  • চূড়ান্ত চারটি বাইট (0x1c, 0x1d, 0x1e, এবং 0x1f) ফাইলের আকার - আউটপুটকে স্বাক্ষরবিহীন পূর্ণসংখ্যা হিসাবে , যদি ভিএল বা এসডি পতাকাগুলি (উপরে) সেট না করা হয় তবে এই ক্ষেত্রে আউটপুট 0

চাক্ষুষ উপস্থাপনা

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
\______________________________FILENAME________________________________________________/\_ATTR_/\___NOTUSED____/\_CREATIONTIME_/\_CREATIONDATE_/\__LASTACCESS__/\___NOTUSED____/\_MODIFIEDTIME_/\_MODIFIEDDATE_/\___NOTUSED____/\___________FILESIZE___________/

ইনপুট

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

আউটপুট

হয় স্ক্রিনে মুদ্রিত বা ফিরে এসেছে, নিম্নলিখিত:

  • ASCII স্ট্রিং হিসাবে ফাইলের নাম
  • ফাইলটি ASCII স্ট্রিং হিসাবে বৈশিষ্ট্যযুক্ত
  • যথাযথ বিভাজক (কলোন, স্ল্যাশস, উপাদানগুলিকে আলাদা করার জন্য কিছু) সহ তৈরির সময় এবং সৃষ্টির তারিখ
  • পরিবর্তিত সময় এবং পরিবর্তিত তারিখ, আবার উপযুক্ত বিভাজক সহ
  • ফাইলের আকার

আউটপুটটি স্থান-বিচ্ছিন্ন বা নিউলাইন-বিচ্ছিন্ন একক স্ট্রিং, অ্যারেতে পৃথক উপাদান ইত্যাদি হতে পারে etc. দয়া করে আপনার উত্তরে কীভাবে আপনার আউটপুট বিন্যাসিত তা নির্দিষ্ট করে দিন।

বিধি

উদাহরণ

0111000001110010011011110110011101110010011000010110110101101101011010010110111001100111000001100000000000000000101000100100010001001000110101000000000000000000000000000000000010100010010001000100100011010100000000000000000000000000000000001101000000000000

programm.ing HS 20:18:08 2016/06/20 20:18:08 2016/06/20 53248

0010000000100000001000000010000001110000011100000110001101100111001000000010000000100000000101000000000000000000010111010110110000111101100111110000000000000000000000000000000010100010010001000100100011010100000000000000000011110000000100111111001011100001

ppcg SDS 11:43:24 2010/12/31 20:18:08 2016/06/20 0

পতাকাগুলির চারপাশে অতিরিক্ত সাদা জায়গা থাকলে এটি কি ঠিক আছে? উদাহরণস্বরূপ, SD Sএকটি বৈধ পতাকা সেট হবে?
মরগান থ্রাপ

@ মরগানথ্রাপ অবশ্যই, এটি ঠিক আছে।
অ্যাডমবর্কবার্ক

কৌতূহলের বাইরে, আপনি কি এমএস-ডস-এর সাথে 5.0 দিনের সাথে কথোপকথনের অনেক অভিজ্ঞতা পেয়েছিলেন, নাকি আপনি উইকিপিডিয়ায় একদিন সত্যিই বিরক্ত হয়ে পড়েছিলেন?
বিড়াল

3
@ কেট দু'জনকেই দেখুন আমি যখন প্রায় 5 বছর বয়সী ছিলাম এবং কমোডোর ভিআইসি -20 পেয়েছি তখন থেকে আমি কম্পিউটারগুলিতে খুব আগ্রহী। আমার গ্রেড-স্তরের কম্পিউটার বিজ্ঞান প্রকল্পের প্রায় 10 বছর আগে আমাদের নিজস্ব ফাইল সিস্টেম তৈরি করা ছিল, তাই আমি এর জন্য অনেক গবেষণা করেছি। এর জন্য, আমি উইকি থেকে একটি গুচ্ছ টেনে এনে এমন কিছুতে রেখেছি যা চ্যালেঞ্জ হতে পারে।
অ্যাডমবর্কবার্ক

উত্তর:


6

ভেরিলগ, 513 670 617 বাইট

IVerilog ব্যবহার করে চলে। কোনও বিশেষ সংকলন পতাকা প্রয়োজন।

এটি নেস্টেড সংজ্ঞা, বিট-টুইডলিং এবং অ্যানডিয়েনসের কারণে বিট ক্রমটি ফ্লিপ করার বিরক্তি ( ইনপুটটি iবন্দর দিয়ে নেওয়া হয় , যা ভেরিলোগ মডিউলে ইনপুট নেওয়ার স্বাভাবিক উপায়। $displayস্ট্যান্ডার্ড আউট প্রিন্ট করতে ব্যবহৃত হয়। শীর্ষস্থানীয় জিরো টাইমস্ট্যাম্পের জন্য প্রয়োজন না হলে 6 বাইট সংরক্ষণ করা যায় could

`define r(o,b)wire[3:0]o;assign o={i[b],i[b+1],i[b+2],i[b+3]}; 
`define R(t,a,b,c,d,s)`r(a,s)`r(b,s+4)`r(c,s+8)`r(d,s+12)wire[15:0]t;assign t={a,b,c,d};
`define p(m,k)i[90+m]?"k":"",
`define F(a,b)"a a a b\t b%d"
module f(input[0:255]i);`R(d,q,w,e,r,112)`R(D,Q,W,E,R,128)`R(s,z,x,c,v,224)`R(S,Z,X,C,V,240)`R(p,t,y,u,o,176)`R (A,b,n,m,l,192)always@(i)$display(`F(%s%s%s,%02d:%02d:%02d%d/%d/%d),i[0:63],i[64:87]=="   "?" ":".",i[64:87],`p(5,RO)`p(4,H)`p(3,S)`p(2,VL)`p(1,SD)`p(0,A)d[15:11],d[10:5],d[4:0]*2,D[15:9]+1980,D[8:5],D[4:0],p[15:11],p[10:5],p[4:0]*2,A[15:9]+1980,A[8:5],A[4:0],|i[91:92]?0:{s,S});endmodule

ডেমো

টেস্টবেঞ্চ (স্কোর হয়নি):

`timescale 1ns / 1ps

module ftest;
reg [0:255] i;
f uut (
.i(i)
);
initial begin
    i=256'b0111000001110010011011110110011101110010011000010110110101101101011010010110111001100111000001100000000000000000101000100100010001001000110101000000000000000000000000000000000010100010010001000100100011010100000000000000000000000000000000001101000000000000;
    #100;
i=256'b0010000000100000001000000010000001110000011100000110001101100111001000000010000000100000000101000000000000000000010111010110110000111101100111110000000000000000000000000000000010100010010001000100100011010100000000000000000011110000000100111111001011100001;     
end

endmodule

উদাহরণ রান:

$ iverilog design.sv testbench.sv  && vvp a.out  
programm.ing   HS      20:18:08       2016/ 6/20      53248
    ppcg        S  SD  11:43:24       2010/12/31          0

5

পাইথন, 485, 479, 442, 438, 431, 429, 418, 402, 395, 391 , 370 বাইট

সংরক্ষিত 19 বাইট সি ও'বাকে ধন্যবাদ জানিয়েছে যে আমি কোনও চিঠিতে ফাংশন নির্ধারণ করতে পারি।

বিটমাস্ক ফিল্টার পরিষ্কার করার জন্য FryAmTheEggman এর পরামর্শের জন্য 6 বাইট সংরক্ষণ করা হয়েছে।

210 বাইট সংরক্ষিত ডাব্লু0এলএফের দুর্দান্ত রুবি জবাবের জন্য ধন্যবাদ আমাকে আরও কিছুটা গল্ফ দিতে বাধ্য করেছে। ;)

এটি পরম দানব। খুব নিশ্চিত যে আমি এটিকে আরও কিছুটা কেটে ফেলতে পারি তবে এটি গল্ফ হয়ে যাওয়ার খুব কাছে চলেছে।

a=input()
j=''.join
n=lambda v:int(v,2)
f=j('RO H S VL SD A'.split()[i]for i in range(6)if n(a[88:96])&2**i)
print(j(chr(n(a[x:x+8])).strip()+'.'*(x==56)for x in range(0,88,8)).strip('.'),f,j('%02d:%02d:%02d'%(n(a[b-11:b-6]),n(a[b-6:b]),n(a[b:b+6]))+' %d/%d/%d '%(n(a[b+6:b+12])+1980,n(a[b+12:b+16]),n(a[b+16:b+21]))for b in[123,187]),n(a[208:])*(1-('V'in f or'D'in f)))

হতে পারে intআপনি একটি চর বরাদ্দ করতে পারেন ? অথবা হতে পারে এমন একটি ফাংশন তৈরি করুন যা সম্পাদন করে str int
কনর ও'ব্রায়েন

@ CᴏɴᴏʀO'Bʀɪᴇɴ ভাল ধারণা!
মরগান থ্রাপ

এর মধ্যে স্থানটি or 'SD'সরানো যেতে পারে, আমার ধারণা
কনর ও'ব্রায়ান

@ সিও'ব ইউ, সবেমাত্র তা করেছে।
মরগান থ্রাপ

কি দারুন. আমার কাছে উত্তরগুলি হওয়ার চেয়ে প্রত্যাশার চেয়ে খানিকটা ছোট।
অ্যাডমবর্কবার্ক

4

হাস্কেল, 781 710 বাইট

কিছু সরলকরণের জন্য ব্ল্যাকক্যাপকে ধন্যবাদ

w n=('0'<$[1..2-length a])++a where a=show n
x s=tail.foldr(\a b->s:a++b)""
t=snd.span(==' ')
y a|all(==' ')a=""|0<1='.':t a
nm=(\(a,b)->t a++y b).splitAt 8
ms n(r,s)|n`mod`2^(r+1)`div`2^r>0=s|0<1=""
tm n=x ':'[w$n`div`2^11,w$n`mod`2^11`div`32,w$2*n`mod`64]
dt n=x '/'[w$1980+n`div`2^9,w$n`mod`2^9`div`32,w$n`mod`32]
pa s=x ' '[nm.map(toEnum.v.take 8).takeWhile(not.null)$iterate(drop 8)a,t,dt$v i,tm$v g,dt$v o,tm$v m,show u,"\n"]where{z n=splitAt(8*n);(a,b)=z 11 s;(c,d)=z 1 b;(e,f)=z 2 d;(g,h)=z 2 f;(i,j)=z 2 h;(k,l)=z 4 j;(m,n)=z 2 l;(o,p)=z 2 n;(q,r)=z 2 p;t=(zip [0..](words"RO H S VL SD A")>>=).ms$v c;u|any(`elem`t)"LD"=0|0<1=v r;v=foldl((+).(2*))0.map(read.pure).filter(`elem`"01")}
main=interact pa

এটি অতিরিক্তভাবে আবর্জনা (নতুন লাইনের চরিত্রের মতো) ইনপুট পরে প্রদর্শিত হতে দেয়।


আপনাকে কিছু কম ঝুলন্ত ফল পেয়েছে: পেস্টবিন.
com

3

জাভা, 1721 1587 1573 1560 1511 বাইট:

import java.util.*;class A{int Q(String a,int b){return Integer.parseInt(a,b);}String P(int a){return Integer.toString(a);}ArrayList<String>B=new ArrayList<String>();void J(String O){B.add(O);}String TD(String l,String p,int a,int c,int d){String X,Y,Z;X=Y=Z=new String();int i=0;for(char F:l.toCharArray()){if(i<a){X+=F;}if(a<=i&i<c){Y+=F;}if(c<=i){Z+=F;}i++;}String[]H=new String[3];H[0]=P(d+Q(X,2));H[1]=P(Q(Y,2));H[2]=(p==":")?P(Q(Z,2)*2):P(Q(Z,2));int T=0;for(String A:H){H[T]=(A.length()<2)?"0"+A:A;T++;}return H[0]+p+H[1]+p+H[2];}String D(String i){String K=new String();int L=0;for(char Y:i.toCharArray()){if(L%8<1){K+=" ";}K+=Y;L++;}String[]C=K.split(" ");String[]z={"RO","H","S","VL","SD","A"};int[]l={1,2,4,8,16,32};Map<Integer,String>U=new HashMap<Integer,String>();for (int e=0;e<l.length;e++){U.put(l[e],z[e]);}String[]N={":","/",":","/"};int[]M={15,17,23,25};int[]O={5,7,5,7};int[]P={0,1980,0,1980};for(int y=1;y<9;y++){if((char)Q(C[y],2)!=' '){J(Character.toString((char)Q(C[y],2)));}}for(int v=9;v<12;v++){if((char)Q(C[v],2)!=' '){if(!B.contains(".")){J(".");}J(Character.toString((char)Q(C[v],2)));}}J(" ");int T=(char)Q(C[12],2);while(T>0){int H=l[0];for(int V:l){if(V<=T){H=V;}}J(U.get(H));T-=H;}for(int w=0;w<4;w++){J(" ");J(TD(C[M[w]]+C[M[w]+1],N[w],O[w],11,P[w]));}J(" ");if(B.contains("SD")||B.contains("VL")){J("0");}else{J(P(Q(C[29]+C[30]+C[31]+C[32],2)));}return String.join("",B);}public static void main(String[]a){A H=new A();System.out.print(H.D(new Scanner(System.in).next()));}}

32 বাইট বাইনারি স্ট্রিংয়ের ফর্ম্যাটে ইনপুট নেয়। একটি স্থান পৃথক স্ট্রিংয়ের ফর্ম্যাটে আউটপুট। এটি খুব দীর্ঘ উত্তর হতে পারে তবে আমি এখনও হতাশ নই। আমি জাভাতে এটি বাস্তবায়ন করতে পেরে আমি খুশি। যদিও আমি এখনও এটি যতটা পারি গল্ফ করার চেষ্টা করব।

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


1
+1 কারণ নিম্ন স্তরের সমস্যার জন্য জাভা ব্যবহার করা সুখকরভাবে হাস্যকর (অনেকটা আমার হাস্কেলের মতো)
ফক্স

2

রুবি, 344 বাইট

m=gets
s=->b,l{b.slice!(0,l).to_i 2}
t=->b{'%02d:%02d:%02d %d/%d/%d'%[s[b,5],s[b,6],2*s[b,5],s[b,7]+1980,s[b,4],s[b,5],]}
i=(0..q=32).map{|i|m[i*8,8].to_i 2}
c=i.map(&:chr).join
n=c[0,8].strip
e=c[8,3].strip
e>?!&&n<<?.+e
f=''
6.times{|j|i[11][j]>0&&f<<%w(RO H S VL SD A)[j]}
$><<[n,f,t[m[112,q]],t[m[176,q]],(f[/VL|SD/]?0:m[-q,q].to_i(2))]*' '

সামান্য আরও পঠনযোগ্য সংস্করণ এখানে উপলব্ধ ।

অনলাইন পরীক্ষা: http://ideone.com/Fww1Rw


1
সুন্দর! দেখে মনে হচ্ছে আমার আরও 27 বাইট গল্ফ বন্ধ করতে হবে। ;)
মরগান থ্রাপ

2

জাভাস্ক্রিপ্ট (ES6), 369

(b,Z=n=>n>9?n:'0'+n,W=n=>s[n]<<8|s[n+1],U=n=>[Z((t=W(n))>>11)+`:${Z(t>>5&63)}:`+Z(t%32*2),((t=W(n+2))>>9)+1980+`/${t>>5&15}/`+t%32],X=l=>String.fromCharCode(...s.slice(p,p+=l)).trim(),s=b.match(/.{8}/g).map(x=>+('0b'+x)),p=0)=>[X(8)+((x=X(3))?'.'+x:x),[...b].map((b,i)=>'A,SD,VL,S,H,RO'.split`,`[z=(2*z|b)%4294967296,i*b-90]||'',z=0).join``,U(14),U(22),b[92]|b[91]?0:z]

কম গল্ফড

(b,
  Z=n=>n>9?n:'0'+n, // zero pad
  W=n=>s[n]<<8|s[n+1], // get word
  U=n=>[
   Z((t=W(n))>>11)+`:${Z((t>>5&63)}:`+Z(t%32*2),  // decode time
   ((t=W(n+2))>>9)+1980+`/${t>>5&15}/`+t%32 // decode date
  ],
  X=l=>String.fromCharCode(...s.slice(p,p+=l)).trim(), // extract space padded string
  s=b.match(/.{8}/g).map(x=>+('0b'+x)), // convert bits to bytes
  p=0
)=>
  [ X(8)+((x=X(3))?'.'+x:x),
    [...b].map((b,i)=>'A,SD,VL,S,H,RO'.split`,`[i*b-90]||'').join``,
    [...b].slice(-32).map((b,i)=>z=2*z|b,z=0), // this line merged with the preceding one in the golfed code
    U(14),U(22),
    b[92]|b[91]?0:z
  ]

পরীক্ষা

f=(b,Z=n=>n>9?n:'0'+n,W=n=>s[n]<<8|s[n+1],U=n=>[Z((t=W(n))>>11)+`:${Z(t>>5&63)}:`+Z(t%32*2),((t=W(n+2))>>9)+1980+`/${t>>5&15}/`+t%32],X=l=>String.fromCharCode(...s.slice(p,p+=l)).trim(),s=b.match(/.{8}/g).map(x=>+('0b'+x)),p=0)=>[X(8)+((x=X(3))?'.'+x:x),[...b].map((b,i)=>'A,SD,VL,S,H,RO'.split`,`[z=(2*z|b)%4294967296,i*b-90]||'',z=0).join``,U(14),U(22),b[92]|b[91]?0:z]

O.textContent+='\n'+f('0111000001110010011011110110011101110010011000010110110101101101011010010110111001100111000001100000000000000000101000100100010001001000110101000000000000000000000000000000000010100010010001000100100011010100000000000000000000000000000000001101000000000000')
O.textContent+='\n'+f('0010000000100000001000000010000001110000011100000110001101100111001000000010000000100000000101000000000000000000010111010110110000111101100111110000000000000000000000000000000010100010010001000100100011010100000000000000000011110000000100111111001011100001')
<pre id=O></pre>


ঠিক আছে, তাই আমি এটি সাফারিতে চালিয়েছি এবং পেয়েছি Script error.। তবে ফায়ারফক্সে কোনও কারণে এটি পুরোপুরি কার্যকর বলে মনে হচ্ছে। আমি ভাবছি কেন ...
আর কাপ,

@ আর.ক্যাপ সম্ভবত ফায়ারফক্সের তুলনায় সাফারি কম ES6 সামঞ্জস্যপূর্ণ। kangax.github.io/compat-table/es6
edc65

2

পিএইচপি ,301 288 বাইট

for($b=unpack('A8f/A3e/Cl/n/Nc/N/Nm/n/Ns',$argn);$i<8;$f.=1<<$i++&$b[l]?[RO,H,S,VL,SD,A][$i-1]:'');echo trim($b[f].'.'.$b[e],' .')," $f ",($e=function($a){echo date('H:i:s Y/m/d ',mktime($a>>27&31,$a>>21&63,$a>>15&62,$a>>5&15,$a&31,1980+($a>>9&127)));})($b[c]),$e($b[m]),$b[l]&24?0:$b[s];

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

ইনপুট হ'ল 32 বাইট শব্দের স্ট্রিং এর মাধ্যমে STDIN, আউটপুট থেকে STDOUT

একক প্রোগ্রাম হিসাবে -13 বাইট


2

স্ট্যাক্স , 111 বাইট

¼ΘUßU'ïMo^ø¬├▓> I¬i⌠·╥.↕¥½ßqS,=frT`d_`&&↓⌠ÉûÆiü=┌-< │∟Φ☼⌐¢3²Bu╜lJ╛§≥╪║ε┐╓ù♫╨Z░╖!¥É:╬Çß═╤às8Q←φ,ºï◘≥Ä£}èΦ╡FÉçø¶É

এটি চালান এবং এটি ডিবাগ করুন


উফ, আমার ভুল আমি একটা ঠিক করবো
পুনরাবৃত্তি

1
এটি 3 বাইট ব্যয়ে এখন সঠিকভাবে কাজ করছে।
পুনরাবৃত্ত

1

পার্ল, 249 বাইট

ইনপুট হিসাবে 32 বাইট নেয়, আউটপুট নিউলাইনগুলি দ্বারা পৃথক করা হয়। unpackএই ধরণের বাইনারি কাঠামো পার্সিংয়ের জন্য উপযুক্ত।

($f,$e,$a,$C,$M,$s)=unpack"A8A3CxxNx4Nx2N",<>;$f=~s/ //g;$e=~s/ //g;printf"%s
@{[map+(RO,H,S,VL,SD,A)[$a&1<<$_?$_:9],0..5]}
"."%02d:%02d:%02d %d/%d/%d
"x2 .$s*!($a&24),$f.".$e"x!!$e,map{$_>>27,$_>>21&63,$_>>15&62,$_/512%128+1980,$_>>5&15,$_&31}$C,$M

কিছু হাইলাইট:

  • উপরোক্ত unpack
  • কচ্ছপ অপারেটর @{[]}একটি স্ট্রিংয়ে কোডটি ইন্টারপোল্ট করার অনুমতি দেয়। এটি আসলে একটি অ্যারে রেফারেন্স তৈরি করে যা তারপরে অবনমিত হয়।
  • "$str1"x!!$str2খালি খালি স্ট্রিং $str1হলেই ফিরে আসার একটি দুর্দান্ত উপায় $str2

নীচে একটি সংস্করণ রয়েছে যা রিয়েল ডিরেক্টরি এন্ট্রিগুলিতে কাজ করে, স্বল্প-এন্ডিয়ান ক্ষেত্রগুলি সহ, এবং কেবলমাত্র ফাইল নাম এবং এক্সটেনশনে ডান প্যাডিং উপেক্ষা করে (সুতরাং, উদাহরণস্বরূপ " ppcg"এর প্রাথমিক সাদা স্থানটি সরানো হয় না) (254 বাইট)

($f,$e,$a,$C,$M,$s)=unpack"A8A3CxxVx4Vx2V",<>;$f=~s/ +$//;$e=~s/ +$//;printf"%s
@{[map+(RO,H,S,VL,SD,A)[$a&1<<$_?$_:9],0..5]}
"."%02d:%02d:%02d %d/%d/%d
"x2 .$s*!($a&24),$f.".$e"x!!$e,map{$_>>11&31,$_>>5&63,2*$_&63,($_>>25)+1980,$_>>21&15,$_>>16&31}$C,$M
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.