Prenez une chaîne, s
contenant des caractères ASCII imprimables en entrée, et sortez sa "somme divisée binaire". Besoin d'une explication?
Comment obtenez-vous la somme fractionnée binaire?
Nous utiliserons la chaîne A4
comme exemple dans l'explication suivante.
Convertissez les caractères en binaire, en traitant chaque lettre comme un caractère ASCII 7 bits
A -> ASCII 65 -> 1000001 4 -> ASCII 52 -> 0110100
Concaténer les nombres binaires en un nouveau nombre binaire
A4 -> 1000001 & 0110100 -> 10000010110100
Divisez le nouveau nombre binaire en morceaux, où aucun ne
1
peut avoir un0
à sa gauche. Vous ne devez pas fractionner l'1
art.10000010110100 -> 100000, 10, 110, 100
Convertissez ces nombres binaires en décimal
100000, 10, 110, 100 -> 32, 2, 6, 4
Prenez la somme de ces nombres:
32 + 2 + 6 + 4 = 44
Ainsi, la sortie de la chaîne A4
devrait être 44
.
Cas de test:
a
49
A4
44
codegolf
570
Hello, World!
795
code-golf
string
base-conversion
binary
Stewie Griffin
la source
la source
8372
fait.Réponses:
Python 2 ,
868176 octets-5 octets merci Adnan
-5 octets merci xnor
Essayez-le en ligne!
for c in input():s=s*128+ord(c)
pour effectuer la conversion ASCII numériquement, où*128
est utilisé pour déplacer à gauches
7 fois (étapes 1 et 2)eval(('0'+new_bin).replace('01','0+0b1'))
pour diviser et additionner (étapes 3, 4 et 5)la source
eval
! Faire la conversion ASCII économise numériquement quelques octets.Gelée , 13 octets
Essayez-le en ligne!
Comment ça marche
la source
MATL , 14 octets
Essayez-le en ligne!
Explication
Considérez la saisie
'A4'
comme exemple.la source
05AB1E , 18 octets
Code:
Explication:
Utilise l' encodage 05AB1E . Essayez-le en ligne!
la source
05AB1E , 14 octets
Un portage de ma réponse Jelly , en utilisant le décalage 128 de la réponse 05ab1e d' Adnan (plutôt que le 256 dans la réponse Jelly que j'ai écrite).
Essayez-le en ligne!
Comment?
la source
JavaScript (ES6),
9792 octetsEdit: enregistré 5 octets avec l'aide de @ ConorO'Brien.
la source
s=>eval([...s].map(e=>(e.charCodeAt()+128).toString(2).slice(1)).join``.replace(/1+0*/g,'+0b$&'))
vous pouvez utiliser ma méthode de remplacement pour enregistrer un octet, je penseJapt ,
1812 octetsPrend l'entrée en une seule chaîne.
J'ai également essayé l'ajout de 128 ou 256 utilisé par d'autres réponses, mais le remplissage 0 était plus court à utiliser.
Rasé un énorme 6 octets grâce à ETHproductions et Oliver .
Essayez-le ici.
la source
òÈ<YÃ
peut êtreò<
(avec un espace de fin) etËn2Ãx
peut l'êtrexn2
. Vous pouvez également utiliserT
à la place de0
pour économiser sur la virgule. (Aussi, n'hésitez pas à nous rejoindre dans le salon de discussion Japt si vous avez des questions ou souhaitez de l'aide avec le golf :-))T
astuce, je ne savais pas que vous pouviez (ab) utiliser des variables pour cela, c'est très pratique. La fonction automatiquexn2
semble un peu bizarre lors de sa compilation,x("n", 2)
donc je pense que cela prendra encore un peu avant de comprendre pleinement la logique derrière eux. Avec votre aide, la solution Japt est maintenant liée à la première place avec la réponse Jelly .n2
:Í
. Il n'a pas encore atteint TIO, mais vous pouvez l'utiliser ici: ethproductions.github.io/japt/?v=1.4.5&code=Y1+k+VQ3w/…Gelée ,
1615 octets-1 octet grâce à Dennis (pas besoin d'aplatir de 1 lorsqu'un aplatissement complet est correct - remplacer
;/
parF
)Essayez-le en ligne!
Comment?
la source
;/
peut être remplacé parF
.PHP, 116 octets
Version en ligne
PHP, 117 octets
Essayez-le en ligne!
PHP, 120 octets
Essayez-le en ligne!
ou
la source
Pyth , 21 octets
C'est trop long...
Suite de tests.
la source
[F #],
249245 octetsEssayez-le en ligne!
Remarque: la version sur tio.run a "système ouvert" dans l'en-tête, j'ai ajouté son nombre au code ci-dessus. Je ne sais pas quelles sont les règles sur les importations.
Non golfé
la source
open System
c'est la même chose que C #,using System;
alors oui, vous devez l'inclure dans le décompte. Si vous pouvez le faire en F #, vous pourrez pleinement vous qualifier pour quoi que ceSystem
soit. Par exemple, en C #System.Console...
au lieu deusing System;Console...
Perl 6 , 62 octets
la source
.ords
au lieu de.comb».ord
. le préfixe[~]
peut souvent être utilisé à la place de.join
.comb
existe qui fait lam:g/…
chose./11*0*/
peut être raccourci/1+0*/
. Je suis venu avec{sum map {:2($_)},comb /1+0*/,[~] .ords».fmt('%07b')}
J , 34 octets
Essayez-le en ligne!
Explication
la source
mathématique 193 octets
la source
f=FromDigits;l=Flatten;
au début, puis en remplaçant toutes les instances de ces deux fonctions parf
etl
.J , 40 octets
usage:
renvoie 44
la source
Clojure, 150 octets
Eh bien, j'espérais que la conversion de l'ASCII en octets était plus courte que cela. Le corps de boucle réel est assez court,
r
permettant d'accumuler le résultat actuel etR
d'accumuler le résultat total. Si le bit précédentp
est0
et le bit actuelc
est1
alors nous divisons un nouveau morceau et nous accumulonsR
, sinon nous mettons à jour ler
et le conservonsR
tel qu'il était.la source
Python 123 octets
Mis à jour, merci à Martin Ender.
la source
lambda w:
suffirait pour rendre votre réponse valide.lambda w:
.f=
, car nous autorisons les fonctions sans nom (sauf si vous faites référence au nom de la fonction pour les appels récursifs).K (oK) , 31 octets
Solution:
Essayez-le en ligne!
Exemples:
Explication:
Convertissez en valeurs ASCII, convertissez en binaire 7 bits, aplatissez, trouvez où diffère et contre la liste d'origine pour trouver où
1
diffèrent. Coupez à ces indices, reconvertissez en décimal et résumez:Prime
Géré une version 31 octets dans K4 aussi, mais comme il n'y a pas de TIO pour cela, je poste ma solution ok.
la source
APL (Dyalog) , 30 octets
Essayez-le en ligne!
Comment?
⎕UCS⍵
- Unicodify2⊥⍣¯1¨
- encoder chacun en binaire¯7↑¨
- et pad vers la gauche avec des zéros à 7 places∊
- aplatir1∘+⊆⊢
- partition par soi augmentée d'un2⊥¨
- décode chacun du binaire+/
- sommela source