Microsoft MS-DOS 5.0 FAT निर्देशिका प्रविष्टि को डिकोड करें


27

Microsoft FAT फ़ाइल सिस्टम में डिस्क पर "फ़ोल्डर" कौन से हैं, यह दर्शाने के लिए एक निर्देशिका तालिका है। समय के लिए, इन प्रविष्टियों ने बहुत सी जानकारी बिट्स में डाली। जिज्ञासु के लिए विकी पर तकनीकी विशिष्टताओं का एक गुच्छा है , लेकिन यहां चुनौती एक प्रविष्टि के "सरल" डिकोडिंग पर ध्यान केंद्रित करने वाली है।

प्रत्येक प्रविष्टि में एक 32-बाइट बाइनरी शब्द है, जो कई खंडों में विभाजित है। इस चुनौती में निरंतरता के लिए, हम MS-DOS 5.0 संस्करण का उपयोग करेंगे, बाइट्स को बड़े एंडियन के रूप में ऑर्डर किया गया है , और हम बाइट 0x00को सबसे बाईं ओर और बाइट 0x1Fको दाईं ओर के रूप में कॉल कर रहे हैं ।

नीचे संबंधित अनुभागों का एक संक्षिप्त योजनाबद्ध है, और प्रत्येक अनुभाग के लिए आउटपुट ( बोल्ड में ) क्या होना चाहिए ।

  • पहले 11 बाइट्स ASCII प्रारूप में फ़ाइल नाम हैं (यह वह जगह है जहाँ प्रसिद्ध 8.3 फ़ाइल नाम से आता है - फ़ाइल नाम के लिए 8 बाइट्स, एक्सटेंशन के लिए 3 बाइट्स)। ये सीधे ASCII एन्कोडिंग हैं, और बीच की अवधि (।) के साथ ASCII के रूप में आउटपुट होना चाहिए ।
    • नोट: दोनों 8 और 3 भागों को पूर्ण-लंबाई प्रविष्टि बनाने के लिए रिक्त स्थान के साथ गद्देदार किया जाता है। आउटपुट को स्थानों को अनदेखा करना चाहिए (अर्थात, उन्हें आउटपुट न करें)।
    • फ़ाइल एक्सटेंशन रिक्त हो सकता है (यानी, सभी स्थान), जिस स्थिति में आउटपुट को डॉट का उत्पादन नहीं करना चाहिए ।
    • चूंकि ASCII केवल निचले 7 बिट्स का उपयोग करता है, बाइट्स में सभी एक अग्रणी होंगे 0
  • अगला बाइट (0x0b) निम्नलिखित का एक बिटमैप है:
    • 0x01 केवल पढ़ने के लिए - उत्पादन आरओ
    • 0x02 हिडन - आउटपुट एच
    • 0x04 सिस्टम - आउटपुट एस
    • 0x08 वॉल्यूम लेबल - उत्पादन वीएल । फ़ाइल का आकार (नीचे) 0 के रूप में आउटपुट होना चाहिए , इसकी वास्तविक प्रविष्टि की परवाह किए बिना।
    • 0x10 उपनिर्देशिका - आउटपुट एसडी । फ़ाइल का आकार (नीचे) 0 के रूप में आउटपुट होना चाहिए , इसकी वास्तविक प्रविष्टि की परवाह किए बिना।
    • 0x20 आर्काइव - आउटपुट
    • 0x40 डिवाइस - इस चुनौती के लिए नजरअंदाज कर दिया।
    • 0x80 आरक्षित - इस चुनौती के लिए नजरअंदाज कर दिया।
    • चूंकि यह एक बिटमास्क है, इसलिए कई झंडे संभव हैं - सभी लागू आउटपुटों को किसी भी क्रम में एक साथ समाहित किया जाना चाहिए। उदाहरण के लिए, (या कोई अन्य संयोजन) 0xffहो सकता है ROHSVLSDA
  • अगले दो बाइट्स (0x0c और 0x0d) MS-DOS 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) अंतिम एक्सेस तिथि हैं। MS-DOS 5.0 में उपयोग किए जाने के दौरान, हम इस चुनौती के लिए इस भाग को अनदेखा कर रहे हैं।
  • अगले दो बाइट्स (0x14 और 0x15) MS-DOS 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 स्ट्रिंग के रूप में विशेषता है
  • उचित विभाजक (कॉलोन, स्लैश, घटकों को अलग करने के लिए कुछ) के साथ निर्माण का समय और निर्माण तिथि
  • संशोधित समय और संशोधित तिथि, फिर से उपयुक्त विभाजक के साथ
  • फ़ाइल का आकार

आउटपुट स्पेस-सेपरेटेड या न्यूलाइन-सेपरेटेड सिंगल स्ट्रिंग, एरे में अलग एलिमेंट आदि हो सकते हैं। कृपया अपने उत्तर में निर्दिष्ट करें कि आपका आउटपुट कैसे स्वरूपित है।

नियम

  • मानक I / O प्रारूप स्वीकार्य हैं।
  • या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं।
  • मानक खामियों को मना किया जाता है।
  • यह , इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड जीतता है।
  • बिल्ट-इन जो वास्तव में इस फ़ंक्शन का प्रदर्शन करते हैं, निषिद्ध हैं।

उदाहरण

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एक वैध ध्वज सेट होगा?
मॉर्गन थ्रैप

@ मॉर्गनट्रैप ज़रूर, जो ठीक होना चाहिए।
AdmBorkBork

जिज्ञासा से बाहर, क्या आपको दिन में एमएस-डॉस 5.0 के साथ बातचीत करने का बहुत अनुभव मिला, या क्या आप वास्तव में एक दिन विकिपीडिया पर ऊब गए थे?
बिल्ली

3
@ दोनों में से कुछ। मुझे कंप्यूटर में बहुत दिलचस्पी है क्योंकि मैं लगभग 5 वर्ष का था और एक कमोडोर VIC-20 प्राप्त किया था। लगभग 10 साल पहले मेरे ग्रेड-स्तर के कंप्यूटर विज्ञान प्रोजेक्ट्स में से एक हमारे अपने फाइल सिस्टम का निर्माण करना था, इसलिए मैंने इसके लिए बहुत शोध किया। इसके लिए, मैंने विकी से एक गुच्छा खींचा और उसे कुछ इस तरह से नीचे गिराया जो एक चुनौती हो सकती है।
AdmBorkBork

जवाबों:


6

वेरिलोग, 513 670 617 बाइट्स

IVerilog का उपयोग करके चलाता है। कोई विशेष संकलन झंडे की जरूरत नहीं है।

यह नेस्टेड परिभाषाओं का एक राक्षस है, बिट-ट्विडलिंग, और एंडियननेस के कारण बिट ऑर्डर को फ्लिप करने की झुंझलाहट (अन्यथा या तो स्ट्रिंग प्रिंट नहीं करता है, या नंबर बिट ऑर्डर गलत है)। इनपुट को iपोर्ट के माध्यम से लिया जाता है , जो कि वेरिलोग मॉड्यूल में इनपुट लेने का सामान्य तरीका है। $displayमानक प्रिंट करने के लिए उपयोग किया जाता है। 6 बाइट्स को बचाया जा सकता है अगर टाइमस्टैम्प के लिए अग्रणी शून्य की आवश्यकता नहीं थी।

`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 बाइट्स Cᴏɴᴏʀ O'B 19 को धन्यवाद देते हुए याद दिलाते हैं कि मैं एक पत्र को कार्य सौंप सकता हूं।

बिटमास्क फिल्टर को साफ करने के लिए FryAmTheEggman के सुझाव के लिए 6 बाइट्स सहेजे गए।

W0lf के भयानक रूबी के जवाब के लिए 21 बाइट्स धन्यवाद मुझे कुछ और नीचे गोल्फ के लिए मजबूर करने का जवाब दिया। ;)

यह एक अचूक राक्षस है। बहुत यकीन है कि मैं इसे थोड़ा और नीचे काट सकता हूं, लेकिन यह बहुत घना हो रहा है।

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'को हटाया जा सकता है, मुझे लगता है
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ यप, बस यही किया।
मॉर्गन थ्रैप

वाह। मुझे उम्मीद है कि उत्तर की तुलना में थोड़ा कम।
AdmBorkBork

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

इसके अतिरिक्त इनपुट के बाद कचरा (एक newline वर्ण की तरह) दिखाई देता है।


आपको कुछ कम लटकने वाला फल मिला: pastebin.com/X69jH75f
BlackCap

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

जावास्क्रिप्ट (ईएस 6), 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.। लेकिन फ़ायरफ़ॉक्स में किसी कारण से यह पूरी तरह से काम करता है। मुझे आश्चर्य है कि क्यों ...
आर। कप

@ R.Kap शायद सफारी फ़ायरफ़ॉक्स की तुलना में कम ES6 संगत है। kangax.github.io/compat-table/es6
edc65

2

PHP ,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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.