Mon collègue et moi travaillons sur un logiciel hérité que nous détestons parfois. Chaque fois que vous l'exécutez, les affirmations de débogage volent partout, et ce n'est jamais une garantie que tout fonctionnera. La motivation pour cette partie de golf de code est venue de mon collègue disant ce qui suit à propos de notre logiciel .
"C'est comme chaque fois que vous exécutez ce programme, vous acceptez certaines conditions de service qui stipulent que chaque 17e bit sur votre disque dur sera transformé en 1"
Objectif: écrire un programme qui fera une copie exacte d'un fichier et transformer chaque 17e bit d'un fichier texte en 1
- Vous ne pouvez PAS transformer CHAQUE bit du fichier en 1. C'est-à-dire que votre programme doit montrer une certaine intelligence qu'il ne cible que tous les 17 bits
- Vous ne pouvez PAS écrire dans le fichier d'origine sous quelque forme que ce soit
- Le gagnant est la plus petite soumission de programme à la fin du mois
Amusez-vous avec celui-ci! Aller!
code-golf
, c'est-à-dire, le code le plus court en octets gagne. A acode-challenge
besoin d'un système de notation bien spécifié. 2. La transformation de chaque 18e bit d'un disque dur en 1 n'est possible qu'en écrivant directement sur le disque. Cela ne peut pas être accompli en créant et / ou en modifiant des fichiers. 3. Faire cela rendra le disque entier inutilisable, donc une solution conforme sera destructrice. Je ne sais pas dans quelle mesure la communauté recevra une demande d'écriture de logiciels malveillants ...:/
Réponses:
CJam, 22 octets
Essayez-le en ligne.
Touche tous les 17 bits, à partir du dernier.
J'ai utilisé STDIN et STDOUT car CJam n'a pas d'E / S de fichier. Si ce n'est pas autorisé, le programme peut être encapsulé dans un script Bash au prix de 24 octets supplémentaires:
Comment ça fonctionne
la source
Perl 59
substitution regex sur les chaînes de bits:
usage:
la source
b
etB
dans lespack
modèlesC, 125
Suppose des entiers big-endian et 16 bits .
Fonctionne en appliquant un OR au niveau du bit sur tous les deux octets.
Le fichier d'entrée est
y
, la sortie estz
.Non golfé
la source
00000000 00000001 00000000 00000000 10000000 00000000
donca
être nul à certains points. La machine doit utiliser du big endian (sinon vous en auriez à la00000000 10000000
place10000000 00000000
, ce qui donnerait la mauvaise valeur).c = __builtin_bswap16(c);
corrigé.Python 2, 112 octets
Cela définit tous les 17 bits big-endian, en commençant 17e depuis le début. Il n'utilise aucune bibliothèque. Il fonctionne en convertissant le fichier d'entrée en un
n
entier gigantesque et en effectuant une OR au niveau du bit avec2**n/(2**17 - 1) == 0b10000000000000000100000000000000001…
.la source
C - 139
Lit à partir d'un fichier nommé "i", sort dans un fichier nommé "o".
Avec des sauts de ligne:
Compte les bits d'entrée, puis utilise un masque de bits flottant pour définir chaque dix-septième bit.
la source
Java - 247
Utilise une
BitSet
et une boucle simple au lieu de gérer / masquer les octets manuellement. Bien sûr, étant Java, le passe-partout représente la moitié du programme, il n'est donc pas exactement court.Mais pas pour la fin! :RÉ
Version sans défilement:
la source
Python - 98 octets
Lisez de i, écrivez à o. Utilise la bibliothèque bitarray https://pypi.python.org/pypi/bitarray
non golfé
la source
a[::17]=1
?from bitarray import*
eta=bitarray()
.Cobra - 308
Chaque fois que je fais l'un de ces défis «manipuler les bits individuels de quelque chose», je souhaite que Cobra ou la bibliothèque standard .NET ait un
binary string => integer
convertisseur.la source
Javascript (+ HTML5), 282
Probablement pas le plus court, mais il est convivial: D
Il s'agit d'un navigateur croisé, mais il semble que Chrome soit le seul à le permettre lorsque le fichier html est un fichier local (= accès avec
file://...
). Pour les autres navigateurs, vous devez le mettre sur un serveur Web.Le fichier de sortie doit être enregistré dans le répertoire de téléchargement par défaut, peut-être avec une invite de fichier (selon votre configuration).
Version non golfée:
la source
Python 3 - 187 octets
Lit
i
et écrit danso
.Code:
Non golfé:
la source
Python 3 - 103 caractères
Modifiez
f
le chemin d'accès du fichier que vous souhaitez lire eto
le chemin d'accès du fichier que vous souhaitez écrire.la source