Le système de fichiers Microsoft FAT possède une table de répertoires pour représenter les "fichiers" dans quels "dossiers" sur le disque. Pour le moment, ces entrées regroupaient de nombreuses informations en une petite quantité de bits. Il y a un tas de spécifications techniques sur Wiki pour les curieux, mais le défi ici va se concentrer sur un décodage "simple" d'une entrée.
Chaque entrée se compose d'un mot binaire de 32 octets, divisé en plusieurs sections. Pour assurer la cohérence de ce défi, nous utiliserons la version MS-DOS 5.0, les octets sont classés en gros caractères et nous appelons l'octet 0x00
le plus à gauche et l'octet 0x1F
le plus à droite.
Vous trouverez ci-dessous un bref schéma des sections pertinentes et quel devrait être le résultat de chaque section (en gras ).
- Les 11 premiers octets sont le nom du fichier au format ASCII (c'est de là que vient le fameux nom de fichier 8.3 - 8 octets pour le nom de fichier, 3 octets pour l'extension). Ce sont des encodages ASCII simples et doivent être sortis en ASCII avec un point (.) Entre .
- Remarque: les parties 8 et 3 sont rembourrées avec des espaces pour faire une entrée pleine longueur. La sortie doit ignorer les espaces (c'est-à-dire ne pas les sortir).
- L'extension de fichier peut être vide (c'est-à-dire tous les espaces), auquel cas la sortie ne doit pas sortir le point .
- Comme ASCII n'utilise que les 7 bits inférieurs, les octets auront tous un interligne
0
.
- L'octet suivant (0x0b) est un masque de bits de ce qui suit:
- 0x01 Lecture seule - sortie RO
- 0x02 Caché - sortie H
- 0x04 Système - sortie S
- 0x08 Étiquette de volume - sortie VL . La taille du fichier (ci-dessous) doit être sortie en tant que 0 , quelle que soit son entrée réelle.
- Sous-répertoire 0x10 - sortie SD . La taille du fichier (ci-dessous) doit être sortie en tant que 0 , quelle que soit son entrée réelle.
- Archive 0x20 - sortie A
- Périphérique 0x40 - ignoré pour ce défi.
- 0x80 Réservé - ignoré pour ce défi.
- Puisqu'il s'agit d'un masque de bits, plusieurs indicateurs sont possibles - toutes les sorties applicables doivent être concaténées ensemble dans n'importe quel ordre. Par exemple,
0xff
pourrait êtreROHSVLSDA
(ou toute autre combinaison).
- Les deux octets suivants (0x0c et 0x0d) ne sont pas utilisés sous MS-DOS 5.0.
- Les deux octets suivants (0x0e et 0x0f) sont le temps de création comme suit:
- Les bits 15 à 11 sont les heures au format 24 heures - sortie 00 à 23
- Les bits 10 à 5 sont les minutes - sortie 00 à 59
- Les bits 4 à 0 sont les secondes / 2 - sortie 00 à 58 (notez que les secondes ne sont qu'en résolution de deux secondes)
- Pour plus de précision:
hhhhhmmmmmmsssss
lorsqu'il est écrit en big-endian.
- Les deux octets suivants (0x10 et 0x11) sont la date de création comme suit:
- Les bits 15 à 9 sont l'année - sortie 1980 pour
0
jusqu'à 2107 pour127
- Les bits 8 à 5 sont les mois - sortie 1 à 12 (avec ou sans zéro devant)
- Les bits 4 à 0 sont le jour - sortie 0 à 31 (avec ou sans zéro devant)
- Pour plus de précision:
yyyyyyymmmmddddd
lorsqu'il est écrit en big-endian.
- Les bits 15 à 9 sont l'année - sortie 1980 pour
- Les deux octets suivants (0x12 et 0x13) sont la dernière date d'accès. Bien qu'utilisé dans MS-DOS 5.0, nous ignorons cette partie pour ce défi.
- Les deux octets suivants (0x14 et 0x15) ne sont pas utilisés par MS-DOS 5.0.
- Les deux octets suivants (0x16 et 0x17) sont la dernière heure modifiée, suivant le même format que l'heure de création ci-dessus.
- Les deux octets suivants (0x18 et 0x19) sont la dernière date modifiée, suivant le même format que la date de création ci-dessus.
- Les deux octets suivants (0x1a et 0x1b) sont l'emplacement de cluster du fichier sur le disque. Nous ignorons cette partie pour ce défi.
- Les quatre derniers octets (0x1c, 0x1d, 0x1e et 0x1f) sont la taille du fichier - sortie sous forme d' entier non signé , sauf si les indicateurs VL ou SD sont définis (ci-dessus), auquel cas la sortie
0
.
Représentation visuelle
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
\______________________________FILENAME________________________________________________/\_ATTR_/\___NOTUSED____/\_CREATIONTIME_/\_CREATIONDATE_/\__LASTACCESS__/\___NOTUSED____/\_MODIFIEDTIME_/\_MODIFIEDDATE_/\___NOTUSED____/\___________FILESIZE___________/
Contribution
- Un seul mot de 32 octets (c'est-à-dire 256 bits), dans le format qui convient.
- Il peut s'agir d'une chaîne de
1
et0
, comme plusieursint
s non signés , d'un tableau de valeurs booléennes, etc. - Veuillez spécifier dans votre réponse le format que vous utilisez pour la saisie.
- Vous ne pouvez pas accepter plusieurs entrées (c'est-à-dire un tableau prédécoupé dans les tailles d'octets appropriées) à moins que ce soit le seul moyen pour votre langue de saisir des données. L'analyse de l'entrée fait partie du défi.
- Il peut s'agir d'une chaîne de
- Vous pouvez supposer que l'entrée est valide (par exemple, vous n'avez pas besoin de vérifier la date pour vérifier que la date est valide).
- Les octets non utilisés peuvent être tous
0
, tous1
, etc., tant qu'ils sont présents. Dans les exemples ci-dessous, j'ai utilisé tout0
pour les octets inutilisés.
Sortie
Soit imprimé à l'écran ou retourné, ce qui suit:
- Le nom de fichier sous forme de chaîne ASCII
- Les attributs de fichier sous forme de chaîne ASCII
- L'heure et la date de création, avec des séparateurs appropriés (deux-points, des barres obliques, quelque chose pour distinguer les composants)
- L'heure et la date modifiées, toujours avec des séparateurs appropriés
- La taille du fichier
La sortie peut être une chaîne unique séparée par des espaces ou une nouvelle ligne, des éléments séparés dans un tableau, etc. Veuillez spécifier dans votre réponse comment votre sortie est formatée.
Règles
- Les formats d'E / S standard sont acceptables.
- Un programme complet ou une fonction sont acceptables.
- Les failles standard sont interdites.
- Il s'agit de code-golf , donc toutes les règles de golf habituelles s'appliquent et le code le plus court l'emporte.
- Les éléments intégrés qui remplissent exactement cette fonction sont interdits.
Exemples
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
un ensemble de drapeaux valide?