Écrivez du code qui prend une chaîne en entrée et génère une valeur true ou falsey selon que la chaîne suit ou non ces règles:
Si vous empilez chaque caractère les uns sur les autres, convertissez en binaire et additionnez chaque colonne, alors toutes les sommes doivent être identiques. Vous pouvez supposer que la chaîne d'entrée ne contient que des caractères ASCII imprimables (points de code 32 à 126).
Par exemple:
L'entrée O5vy_+~
doit renvoyer une valeur véridique, car sa représentation binaire est:
1001111 | O
0110101 | 5
1110110 | v
1111001 | y
1011111 | _
0101011 | +
1111110 | ~
-------
5555555 <- Sum of bits in each column. Should give a truthy value.
L'entrée PPCG
doit renvoyer une valeur de falsey, car sa représentation binaire est:
1010000 | P
1010000 | P
1000011 | C
1000111 | G
-------
4020122 <- Should give a falsey value
La torsion est la suivante: votre code doit retourner une valeur véridique s'il est utilisé comme entrée pour votre fonction / programme. C'est-à-dire que le code doit respecter les mêmes règles que ci-dessus (votre code peut contenir des caractères qui ne sont pas ASCII 32-126).
Votre programme / fonction n'a besoin que de gérer l'ASCII imprimable en entrée. Si votre code contient autre chose, un codage 8 bits, 16 bits, Unicode, un jeu de caractères personnalisé (ou quelque chose d'autre), alors sa représentation binaire doit respecter les mêmes règles, mais votre code n'a pas besoin de le gérer comme entrée.
Il s'agit de code-golf , donc les règles standard s'appliquent.
la source
Réponses:
JavaScript (ES6),
123122120110 octetsCi-dessous se trouve un hexdump avec des sommes de bits.
Démo
Afficher l'extrait de code
la source
MATL ,
109 octetsL'entrée est une chaîne entourée de guillemets simples (si l'entrée contient des qoutes simples, échappez-les en les dupliquant).
La sortie est
3
aussi vraie et rien (sortie vide) que la fausse.Essayez-le en ligne!
Le code en binaire est le suivant:
Explication
la source
Gelée ,
1110 octetsEssayez-le en ligne! Ou consultez les tests et la saisie automatique (le code est entièrement ASCII imprimable, qui ont les mêmes valeurs dans la page de codes de Jelly, comme indiqué ci-dessous).
Comment?
la source
Gelée ,
1110 octetsN'utilise aucun no-op ou commentaire.
Essayez-le en ligne!
Panne binaire
Comment ça marche
la source
OBUSE
parce qu'il sonneABUSE
.Mathematica, 88 octets
Contient de nombreux caractères non imprimables entre les guillemets. A 49 de chaque bit.
Voici l'hexdump:
la source
Octave,
5352 octetsFaire une réécriture complète m'a aidé à jouer au code 5 octets, mais j'ai dû ajouter plus d'opérations, ce qui en fait une sauvegarde nette de seulement 1 octet.
Je ne peux pas ajouter de lien TIO, car aucun des interprètes en ligne n'a implémenté la boîte à outils de communication nécessaire pour
de2bi
. Ledec2bin
remplacer à la place coûterait 4 octets (2 pour le code de travail et deux no-ops).Je n'ai trouvé aucun moyen d'éviter l'un des 27 no-ops. Tous les noms de fonction et les parenthèses sont compris entre 64 et 96, ce qui signifie que tous les caractères "nécessaires" ont un 1 en 6ème position (à partir de la droite, 2 ^ 5). J'avais une solution avec seulement 23 no-ops, mais le code lui-même était plus long. Le code réel est de 25 octets et a la somme de colonnes suivante lors du comptage des bits de l'équivalent binaire:
Il y a 22 bits en 6ème position à partir de la droite (2 ^ 5), et seulement 6 bits en 4ème position à partir de la droite (2 ^ 3). Cela signifie que nous devons ajouter au moins 16 octets, pour obtenir le 6 jusqu'à 22. Maintenant, le caractère de commentaire
%
ajoute un peu à la 6e position, en l'augmentant à 23. Tous les caractères ASCII imprimables ont besoin d'au moins l'un des deux bits supérieurs à être1
. Par conséquent, l'ajout de 17 octets nous donnera au moins 27 bits dans chacun des deux "premiers spots" (2 ^ 6 et 2 ^ 5). Maintenant, nous avons 27 bits dans les deux premières places et 22 dans les autres. Afin d'arriver à un équilibre, nous devons ajouter 10 octets, pour arriver à un même 32 bits dans chaque position.Une explication du nouveau code (52 octets):
Un vecteur contenant seulement 1s (vrai) est évalué comme vrai en octave, et un vecteur contenant au moins un zéro est évalué comme faux en octave.
Une explication de l'ancien code (53 octets):
Un vecteur contenant seulement 1s (vrai) est évalué comme vrai en octave, et un vecteur contenant au moins un zéro est évalué comme faux en octave.
la source
JavaScript (ES6),
139111107 octetsContient
816361 de chaque bit.la source
Scala, 149 octets
Usage:
Hexdump:
Non golfé:
Explication:
la source
J , 45 octets
Essayez-le en ligne! Comprend des cas de test pour la plupart des soumissions soumises, ainsi que le code source.
la source
Haskell , 118 octets
Essayez-le en ligne! Utilisation:
_Z "some string"
renvoie soitTrue
ouFalse
.Il y a quelques caractères non imprimables dans le commentaire sur la dernière ligne, voici donc une chaîne du programme utilisant des caractères d'échappement:
Chaque bit se produit 68 fois.
Le code le plus court que j'ai trouvé était de 82 octets:
Cependant, les sommes des bits pour ce code sont
[33,28,41,48,20,79,46]
, donc79 - 20 = 59
pas d'opérations plus 2 octets pour commencer un commentaire seraient en outre nécessaires, totalisant 143 octets.En réorganisant le programme, j'ai trouvé que l'utilisation de lettres majuscules comme noms de variable aide à niveler les sommes car elles n'ont pas le bit en 6ème position. Parce que Haskell ne permet pas aux noms de variables de commencer par une lettre majuscule, ils doivent être ajoutés au début
_
, ce qui ne définit pas non plus le 6e bit.Ce faisant, je me suis retrouvé avec la solution ci-dessus qui a 97 octets avant d'ajouter les no-ops et la somme des bist
[50,47,56,56,48,68,60]
, donc(68 - 47) = 21
, seulement 21 octets doivent être ajoutés dans le commentaire.la source
PHP,
959391 octetsJe suis tellement content que les noms de fonction PHP ne respectent pas la casse!
où
*
doit être remplacé par ASCII 151 (0x97). (PHP se plaindrait de tout caractère de contrôle dans le code - à part\r
et\n
, mais j'ai besoin de quelque chose avec le bit 4 défini, j'ai donc ajouté 128.)+1 octet pour ASCII imprimable pur: utilisez à la
_7
place.Exécutez-le
echo '<input>' | php -nR '<code>'
ou testez-le en ligne . La sortie est1
pour la vérité, vide pour la fausse.la source
Python 2, 117 octets
Tous les "espaces" sont des onglets pour réduire le nombre de bits 0x20.
Contient 66 de chaque bit. (Il n'y en a pas
'%07b'
comme expliqué dans ce numéro .)Vidage hexadécimal:
la source