Microsoft FAT dosya sistemi, hangi "dosyaların" diskte "klasörlerin" olduğunu gösteren bir dizin tablosuna sahiptir. Zamanla, bu girişler çok fazla bilgiyi az miktarda bit olarak doldurdu. Meraklılar için Wiki'de bir takım teknik özellikler var , ancak buradaki zorluk bir girişin "basit" kodunu çözmeye odaklanacak.
Her giriş, birkaç bölüme ayrılmış 32 baytlık bir ikili kelimeden oluşur. Bu mücadelede tutarlılık için, MS-DOS 5.0 sürümünü kullanacağız, baytlar büyük endian olarak sıralanmıştır ve bayt 0x00
en sol, bayt 0x1F
en sağ olarak adlandırılmaktadır.
Aşağıda ilgili bölümlerin kısa bir şeması ve her bölüm için çıktı ne olmalıdır ( koyu renkte ).
- İlk 11 bayt ASCII formatındaki dosya adıdır (ünlü 8.3 dosya adının - dosya adı için 8 bayt, uzantı için 3 bayt). Bunlar düz ASCII kodlamasıdır ve aralarında bir süre (.) Bulunan ASCII olarak çıkarılmalıdır .
- Not: Hem 8 hem de 3 parça tam uzunlukta bir giriş yapmak için boşluklarla doldurulur. Çıktı boşlukları görmezden gelmelidir (örn. Onları çıkarmayın).
- Dosya uzantısı boş olabilir (yani tüm boşluklar), bu durumda çıktı nokta göstermemelidir .
- ASCII sadece daha düşük 7 bit kullandığından, baytların hepsinde bir lider olacaktır
0
.
- Bir sonraki bayt (0x0b), aşağıdakilerin bir bit maskesidir:
- 0x01 Salt Okunur - RO çıkışı
- 0x02 Gizli - H çıkışı
- 0x04 Sistem - S çıkışı
- 0x08 Birim Etiketi - çıktı VL . Gerçek boyutuna bakılmaksızın dosya boyutu (aşağıda) 0 olarak verilmelidir .
- 0x10 Alt Dizin - çıktı SD . Gerçek boyutuna bakılmaksızın dosya boyutu (aşağıda) 0 olarak verilmelidir .
- 0x20 Arşiv - çıktı A
- 0x40 Aygıt - bu sorun için göz ardı edildi.
- 0x80 Ayrılmış - bu sorun için göz ardı edildi.
- Bu bir bit maskesi olduğundan, birden çok bayrak mümkündür - uygulanabilir tüm çıktılar herhangi bir sırayla bir araya getirilmelidir. Örneğin,
0xff
olabilirROHSVLSDA
(veya başka bir kombinasyon).
- Sonraki iki bayt (0x0c ve 0x0d) MS-DOS 5.0 altında kullanılmaz.
- Sonraki iki bayt (0x0e ve 0x0f) aşağıdaki gibi oluşturma süresidir:
- 15 ila 11 arasındaki bitler 24 saatlik biçimde saatlerdir - 00 - 23 arası çıktı
- 10 ile 5 arasındaki bitler dakikadır - 00 - 59 arası çıktı
- 4 ile 0 arasındaki bitler, saniye / 2 - çıkış 00 - 58'dir (saniyelerin yalnızca iki saniye çözünürlükte olduğunu unutmayın)
- Açıklama için:
hhhhhmmmmmmsssss
büyük endian yazıldığında.
- Sonraki iki bayt (0x10 ve 0x11) aşağıdaki gibi oluşturma tarihidir:
- Bit 15 ila 9 yıl vardır - çıkış 1980 için
0
için yukarı 2107 için127
- 8 ile 5 arasındaki bitler aylardır - 1 ile 12 arası çıktılar (başında sıfır olan veya olmayan)
- 4 ile 0 arasındaki bitler gündür - 0 ile 31 arası çıktılar (satır başına sıfır olan veya olmayan)
- Açıklama için:
yyyyyyymmmmddddd
büyük endian yazıldığında.
- Bit 15 ila 9 yıl vardır - çıkış 1980 için
- Sonraki iki bayt (0x12 ve 0x13) son erişim tarihidir. MS-DOS 5. 0'da kullanıldığında, bu sorun için bu kısmı görmezden geliyoruz.
- Sonraki iki bayt (0x14 ve 0x15), MS-DOS 5.0 tarafından kullanılmaz.
- Sonraki iki bayt (0x16 ve 0x17), yukarıdaki oluşturma zamanıyla aynı formatı izleyen en son değiştirilen zamandır.
- Sonraki iki bayt (0x18 ve 0x19), yukarıdaki oluşturma tarihiyle aynı formatta olan en son değiştirilen tarihtir.
- Sonraki iki bayt (0x1a ve 0x1b), dosyanın diskteki küme konumudur. Bu kısım için bu kısmı görmezden geliyoruz.
- Son dört bayt (0x1c, 0x1d, 0x1e ve 0x1f) dosya boyutudur - VL veya SD bayrakları ayarlanmadıkça (yukarıda) belirtilmeyen bir tamsayı olarak çıktı .
0
Görsel sunum
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
\______________________________FILENAME________________________________________________/\_ATTR_/\___NOTUSED____/\_CREATIONTIME_/\_CREATIONDATE_/\__LASTACCESS__/\___NOTUSED____/\_MODIFIEDTIME_/\_MODIFIEDDATE_/\___NOTUSED____/\___________FILESIZE___________/
Giriş
- Hangi formatta uygunsa, tek bir 32 baytlık kelime (yani 256 bit).
- Bu bir dize
1
ve0
birkaç imzasızint
s gibi bir Boolean değerleri dizisi vb. Olabilir. - Lütfen cevabınızı giriş için hangi formatta kullandığınızı belirtiniz.
- Sen olamaz yani sürece (yani bir dizi ilgili bayt boyutlarına kırık ön) çoklu giriş almak sadece dil girişini almak için bir yol. Girdiyi ayrıştırmak zorluğun bir parçasıdır.
- Bu bir dize
- Girişin geçerli olduğunu varsayabilirsiniz (örneğin, tarihin geçerli olduğunu doğrulamak için tarih kontrolü yapmanız gerekmez).
- Kullanılmayan baytlar , mevcut oldukları sürece hepsi
0
, hepsi1
vb. Olabilir . Aşağıdaki örneklerde, hepsini0
kullanılmayan baytlar için kullandım .
Çıktı
Ekrana yazdırılır veya aşağıdakileri döndürür:
- ASCII dizgisi olarak dosya adı
- Dosya bir ASCII dizesi olarak nitelendirilir
- Yaratma zamanı ve yaratma tarihi, uygun ayırıcılarla (iki nokta, eğik çizgiler, bileşenleri ayırt edecek bir şey)
- Değişik zaman ve uygun tarih, yine uygun ayraçlarla
- Dosya boyutu
Çıktı, boşlukla ayrılmış veya yeni satırla ayrılmış tek bir dize, bir dizideki ayrı öğeler, vb. Olabilir. Lütfen cevabınızda çıktınızın nasıl biçimlendirildiğini belirtin.
kurallar
- Standart I / O formatları kabul edilebilir.
- Tam bir program veya bir işlev kabul edilebilir.
- Standart boşluklar yasaktır.
- Bu kod-golf , yani tüm normal golf kuralları geçerli ve en kısa kod kazanıyor.
- Tam olarak bu işlevi yerine getiren dahili parçalar yasaktır.
Örnekler
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
geçerli bir bayrak seti olur mu?