(Titre avec merci à @ChasBrown)
L'arrière-plan
Ce défi est inspiré d'une question que j'ai récemment publiée sur Puzzling Stack Exchange . N'hésitez pas à suivre le lien si vous êtes intéressé par la question d'origine. Sinon, je ne vous ennuierai pas avec les détails ici.
Les faits
Chaque caractère ASCII standard imprimable a une valeur décimale comprise entre 32 et 126 inclus. Ceux-ci peuvent être convertis en leurs nombres binaires correspondants dans la plage 100000 à 1111110 inclus. Lorsque vous additionnez les bits de ces nombres binaires, vous vous retrouverez toujours avec un entier compris entre 1 et 6 inclus.
Le défi
Étant donné un entier compris entre 1 et 6 inclus en entrée, écrivez un programme ou une fonction qui produira dans n'importe quel format acceptable tous les caractères ASCII standard imprimables où la somme des bits de leur valeur binaire est égale à l'entier en entrée.
Les exemples / cas de test
1 -> ' @'
2 -> '!"$(0ABDHP`'
3 -> '#%&)*,1248CEFIJLQRTXabdhp'
4 -> ''+-.3569:<GKMNSUVYZ\cefijlqrtx'
5 -> '/7;=>OW[]^gkmnsuvyz|'
6 -> '?_ow{}~'
Une implémentation de référence Python non golfée est disponible ici (TIO) .
Les règles
- Supposons que l'entrée sera toujours un entier (ou une représentation sous forme de chaîne d'un entier) entre 1 et 6 inclus.
- Vous pouvez écrire un programme pour afficher les résultats ou une fonction pour les renvoyer.
- La sortie peut être dans n'importe quel format raisonnable mais doit être cohérente pour toutes les entrées . Si vous choisissez de sortir une chaîne entre guillemets, le même type de guillemets doit être utilisé pour toutes les entrées.
- Échappatoires standard interdites comme d'habitude.
- C'est le code golf, donc le code le plus court dans chaque langue l'emporte.
63
vs?
)?'
) pour la représentation sous forme de chaîne d'une chaîne par défaut, mais utilise des guillemets doubles ("
) si la chaîne contient un guillemet simple et pas de guillemets doubles . Non pas que ce cas spécifique importera beaucoup, car vous feriez probablement mieux de renvoyer la chaîne réelle au lieu de sa représentation, et vous pouvez toujours utiliser des guillemets simples dans une telle chaîne pour l'entrée, mais je pense qu'il vaut la peine de mentionner ici.« »
)? : DRéponses:
Assemblage 8088, IBM PC DOS,
353029 octetsLangage machine:
Inscription:
Programme exécutable PC DOS autonome, entrez le numéro à partir de la ligne de commande. La sortie s'affiche dans la fenêtre de la console.
Téléchargez et testez ABCT.COM (AsciiBitCounT).
la source
Ensemble CP-1610 ( Intellivision ), 20 DECLEs 1 = 25 octets
PrendN dans R0 et un pointeur vers le tampon de sortie dans R4 . Écrit tous les caractères correspondants dans le tampon et marque la fin des résultats avec NUL .
Sortie pour N = 2
NB: La parenthèse ouvrante ressemble beaucoup à un crochet ouvrant dans la police Intellivision. Les deux personnages sont cependant distincts.
capture d'écran de jzIntv
1. Un opcode CP-1610 est codé avec une valeur de 10 bits, connue sous le nom de «DECLE». Cette routine dure 20 DECLEs, commençant à 4819 $ et se terminant à 482C $ (inclus).
la source
Python 2 , 62 octets
Essayez-le en ligne!
la source
sum(map(int,bin(i)[2:]))==n
peut devenirbin(i).count('1')==n
pour économiser 7 octets.05AB1E , 8 octets
Essayez-le en ligne!
Explication
la source
Perl 6 ,
4134 octetsEssayez-le en ligne!
Bloc de code anonyme qui prend un nombre et renvoie une chaîne de caractères valides.
Explication:
On peut prouver que pour tout nombren dans la base b , n≡digitsum(n)(modb−1) (indice: rappelez-vous queb(modb−1)=1 ).
Nous pouvons l'utiliser pour obtenir la somme des chiffres de notre nombre binaire en l'analysant comme un nombre décimal et en le modulant par 9, ce qui est valide car la plage de nombres que nous utilisons est garantie d'avoir moins de 9 bits. Ceci est aidé par la conversion automatique de Perl 6 de la chaîne binaire en nombre décimal lorsqu'elle est utilisée dans un contexte numérique.
la source
Gelée , 8 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 60 octets
Utiliser l'astuce modulo de Jo King
Essayez-le en ligne!
JavaScript (Node.js) ,
7069 octetsEssayez-le en ligne!
Commenté
la source
Brachylog , 7 octets
Essayez-le en ligne!
Un prédicat qui fonctionne comme un générateur , prend l'entrée via sa variable de sortie et produit chaque caractère via sa variable d'entrée. Parce que Brachylog.
la source
Japt , 9 octets
Essayez-le ou testez toutes les entrées
la source
Excel (2016 ou version ultérieure), 76 octets
Prend l'entrée de A1, sort dans la cellule dans laquelle vous mettez cette formule. Il s'agit d'une formule matricielle, vous devez donc appuyer sur Ctrl+ Shift+ Enterpour la saisir. Le "2016 ou plus tard" est dû au fait qu'il a besoin de la
CONCAT
fonction (le déconseilléCONCATENATE
ne prendra pas un tableau comme argument).la source
C (bibliothèque standard),
7467 octetsUtilisation uniquement des fonctions de bibliothèque standard. Merci à @gastropner pour l'amélioration de 74 à 67 octets.
Essayez-le en ligne!
la source
f(1)
boîtier (car le++i
saute).R ,
7768 octetsApproche utilisant pour boucle
-9 octets grâce à Giuseppe
Essayez-le en ligne!
Précédemment:
R ,
78 6966 octets-12 octets grâce à Giuseppe
Transforme les nombres 32 à 126 en une matrice de bits, puis additionne les lignes pour trouver celles qui correspondent au numéro d'entrée.
Essayez-le en ligne!
la source
intToBits(x)>0
plutôt queas.single
|0
et obtenu une erreur et j'ai simplement supposé que les opérateurs logiques ne fonctionneraient pas.sapply
plutôt quematrix
Java 10,
9897947067 octets-24 octets grâce à NahuelFouilleul .
Essayez-le en ligne.
Explication:
Contient un caractère non imprimable avec une valeur unicode
127
.la source
n.bitCount
. :)Java 8,
13171 octets-60 octets merci à tout le monde dans les commentaires
Retourne un
java.util.stream.IntStream
des codepointsEssayez-le en ligne!
Utilisation de HashSet, 135 octets. Renvoie un
Set<Object>
:Essayez-le en ligne!
la source
Long.toBinaryString(i)
peut êtreLong.toString(i,2);
C # (Visual C # Interactive Compiler) , 86 octets
Merci à @ExpiredData de m'avoir donné l'idée d'utiliser
Sum()
! Quand je reviens à mon PC, je vais remplacer la chaîne"0123456"
par des non imprimables, économisant trois octets.Essayez-le en ligne!
la source
Sum()
!Dyalog APL Extended,
2422 octetsEssayez-le en ligne!
-2 octets grâce à ngn
Alternative 22 octets dans Dyalog APL régulier par ngn:
Essayez-le en ligne!
la source
(
expr)∘=
->⎕=
expr⎕ucs 32+⍸⎕=32↓+/↑,⍳7⍴2
(⎕io ← 0)Python 2 , 69 octets
Essayez-le en ligne!
la source
Gaia , 10 octets
Essayez-le en ligne!
la source
J ,
3127 octets-4 octets grâce à Galen
Essayez-le en ligne!
Réponse originale
Essayez-le en ligne!
2#:@i.@^8:
produit les nombres binaires 0 à 255 (2 ^ 8
soit 256)1#.
somme chacun]=
produit un masque binaire indiquant où la somme est égale à l'entrée d'originea.#~ mask
utilise ce masque binaire pour filtrer l'alphabet ascii complet de Ja.
&(95{.32}.])
mais avant de le faire, ne prenez que les éléments 32 ... 126 de l'alphabet et du masquela source
[:u:32+[:I.]=1#.32#:@+i.@95
pour 27 octetsi.@95
Perl 5
-a
,5043 octets@NahuelFouilleul économise 7 octets
Essayez-le en ligne!
la source
"@F"
au lieu de$F[0]
%9
astuce par @JoKingK (ngn / k) , 20 octets
Solution:
Essayez-le en ligne!
Explication:
Évalué de droite à gauche:
la source
6502 assembly (NES), 22 octets
Langage machine:
Assemblée:
Programme complet . Testé avec FCEUX 2.2.3, devrait fonctionner sur n'importe quel émulateur NES standard.
Inspiré par la réponse de Ryan Russell. Entrée donnée à l'adresse CPU 60 $. Sorties vers la mémoire de l'unité de traitement d'images de la console.
la source
Wolfram Language (Mathematica) , 70 octets
Essayez-le en ligne!
la source
PowerShell , 83 octets
Essayez-le en ligne!
Prend des entrées
$n
, construit une plage de32
à126
et extrait ces nombres où|?{}
: le nombre,convert
édToString
en base2
;t
oCharArra convertiy
;group
ed en0
s et1
s; prendre l'[1]
index de ce regroupement; en prenant.count
celui - ci, et en vérifiant qu'il est-eq
ual à notre$n
ombre d' entrée . Ces nombres sont ensuitechar
convertis en tableau et laissés sur le pipeline. La sortie est implicite, avec des retours à la ligne entre les éléments.la source
Rubis , 48 octets
Essayez-le en ligne!
la source
Charcoal, 10 bytes
Try it online! Link is to verbose version of code. Explanation:
la source
PHP, 72 bytes
Try it online!
la source
count_chars(decbin($x),1)[49]
can just bedecbin($x)%9
Red, 92 bytes
Try it online!
la source
Octave with Communications Package, 32 bytes
Try it online!
la source
Factor, 94 bytes
Try it online!
la source