introduction
Classiquement, les booléens sont un bit; true
ou false
, 1
ou 0
. Les zéros non significatifs seraient simplement redondants. Par exemple, 001
signifie la même chose que 00001
ou juste 1
.
Le booléen 32 bits
Étant donné une valeur truey / falsey, sortez l'équivalent booléen 32 bits sous forme de chaîne. (Ou sous forme de nombre si, pour une raison quelconque, votre langue prend en charge les zéros non significatifs.)
Votre programme ne doit pas fonctionner pour tous les types de vérités / fausses, mais uniquement pour ce que votre langage de programmation fonctionne le mieux.
Exemple i / o
Input >> Output
truthy >> 00000000000000000000000000000001
falsey >> 00000000000000000000000000000000
Réponses:
Python 3 ,
33251815 octetsMerci @ jurjen-bos pour l'
__mod__
astuce.Essayez-le en ligne!
la source
lambda b:'%0.32d'%b
marcherait?None
vrai ou faux ?lambda b:f'{bool(b):032}'
oulambda b:f'{not b<1:032}'
0.32d
.Code machine x86-16 (DOS), 16 octets
La fonction ci-dessus reçoit une valeur booléenne (0 == falsey, 1 == truey) dans le
BL
registre (octet bas deBX
) et imprime une chaîne "booléenne redondante" sur la sortie standard.Il fonctionne en appelant une interruption (0x21) pour effectuer un appel de fonction DOS (sélectionné en définissant
AH
sur 2) qui imprime un seul caractère (inDL
) sur la sortie standard.Tout d'abord, le caractère ASCII «0» est chargé dans
DL
, le compteur (CX
) est défini sur 31 et il boucle pour imprimer les octets «redondants». Ensuite, la valeur booléenne d'entrée est ajoutée àDL
(s'ilBL
s'agit de falsey, l'ajout de 0 resteraDL
inchangé en tant que ASCII '0'; s'ilBL
est véridique,DL
sera incrémenté de un à ASCII '1'), et l'octet final sera imprimé.La fonction ne renvoie pas de valeur.
Assez décent pour une langue qui ne fait pas vraiment de cordes.
Programme complet, 21 octets
Si vous voulez en faire un programme complet, seulement 5 octets supplémentaires sont nécessaires. Au lieu de passer l'entrée dans un registre, cela lit l'entrée des arguments passés sur la ligne de commande lors de l'appel de l'application. Un argument de 0 est interprété comme falsey, tout comme l'absence totale d'arguments; un argument supérieur à 0 est interprété comme véridique.
Assemblez simplement le code suivant en tant que programme COM, puis exécutez-le sur la ligne de commande.
Exemple de sortie:
Comment ça marche? Eh bien, c'est essentiellement la même chose, jusqu'à ce que vous arriviez à l'
CMP
instruction. Cela compare l'argument de ligne de commande avec la valeur duDL
registre (qui, vous vous en souvenez, contient un «0» ASCII). Dans un programme COM, les octets de code sont chargés à l'offset 0x100. Il s'agit du préfixe de segment de programme (PSP) , qui contient des informations sur l'état d'un programme DOS. Plus précisément, à l'offset 0x82, vous trouvez le premier argument (en fait le second, car le premier est un espace) qui a été spécifié sur la ligne de commande lorsque le programme a été appelé. Donc, nous comparons simplement cet octet avec un «0» ASCII.La comparaison définit les indicateurs, puis l'
SALC
instruction (un opcode non documenté avant le Pentium, équivalent àsbb al, al
, mais seulement 1 octet au lieu de 2) prend la valeurAL
0 si les deux valeurs sont égales, ou -1 si elles sont différentes. Il est alors évident que lorsque nous soustrayonsAL
deDL
, cela se traduit par ASCII «0» ou «1», selon le cas.(Notez que, quelque peu ironiquement, vous le casserez si vous passez un argument avec un 0 de tête sur la ligne de commande, car il ne regarde que le premier caractère. Il
01
sera donc traité comme falsey. :-)la source
Python 3 , 23 octets
Essayez-le en ligne!
la source
'10'[not n]
suffirait si ceux-ci devaient être soutenus.'{:032}'.format
pour 15 octets et fonctionne de la même manière que votre solution actuellebool(n)
serait suffisantJavascript, 23 octets
!!a
transforme un en booléen, que l'unaire plus transforme en int.la source
a=>'0'.repeat(31)+(+a)
est un octet plus court.Your program doesn't have to work for every truthy/falsy type, only what your programming language work best for.
a=>'0'.repeat(31)+~~a
fonctionne avec vrai, faux, 1,0V , 8 octets
Essayez-le en ligne!
Explication:
la source
Neim ,
65 octetsEssayez-le en ligne!
Explication:
Un octet enregistré grâce à Okx
la source
ᛝΨβ_I
ᛝ
n'est pas sur le wiki, où l'avez-vous trouvé?Octave , 17 octets
Fonction anonyme. Fonctionne également dans MATLAB.
Essayez-le en ligne!
la source
ArnoldC , 369 octets
Essayez-le en ligne!
la source
Brainfuck ,
616036 octetsJe suis sûr qu'il existe un moyen intelligent de ne pas trop se déplacer avec les pointeurs.J'avais raison. Il y avait. Merci à @Graviton de m'avoir donné l'idée!
Étape suivante: obtenez les valeurs 32 et 48 plus rapidement!
Essayez-le en ligne!
C'était amusant pour un premier golf!
Il est devenu trop tard maintenant.Qu'est-ce que je fais mêmela source
>-[-[-<]>>+<]>--<<-[>+<-----]>--->[-<.>],.
(prend l'entrée comme 0 ou 1) Essayez-le en ligne!Scala, 32 octets
Désolé mais j'ai été obligé de le faire en 32 octets> _ <
Il est entouré par une fonction prenant
t
comme paramètre (comme unstring
qui peut être "0" ou "1" pour resp. Fausses ou véridiques), ets
est retourné.Essayez-le en ligne!
Réponse valide: Scala, 46 octets
Identique à ma réponse java, je devais prendre un booléen pour le paramètre. Donc :
Essayez-le en ligne!
la source
Braingolf ,
108 octetsEssayez-le en ligne!
␟
est un séparateur d'unités, ASCII0x1F
ou 31. Impossible de trouver le caractère à coller dans TIO, donc TIO utilise à la place# 1-
, ce qui pousse l'espace (32) et diminue à 31.Explication
la source
Octave , 23 octets
Essayez-le en ligne!
C'est plus court que toutes les approches avec lesquelles j'ai essayé
printf
. J'ai peut-être manqué quelque chose, puisque je l'ai fait sur mon téléphone.Un seul octet de plus
Cela pourrait être de 18 octets si je pouvais prendre 1/0 comme chaînes.
Essayez-le en ligne!
la source
Java 8,
3127 octets-4 octets grâce à @ OlivierGrégoire .
Essayez-le ici.
la source
"".format
)String.format
je savais qu'il y avait un moyen plus court en quelque sorte, mais je pensais que j'avais probablement utilisé une variable String la dernière fois ... Merci. ;)05AB1E , 5 octets
Essayez-le en ligne!
la source
31úð0:
!Rubis, 21 octets
Oui, cet espace doit être là ..: /
En Ruby tout sauf
false
etnil
est véridique; Essayez-le en ligne!la source
Mathematica, 36 octets
Mathematica, 26 octets
Essayez-le en ligne!
la source
Fusain , 5 octets
Essayez-le en ligne! (Lien vers la version détaillée.)
Comme le charbon de bois comprend
0
et1
commeTrue
ouFalse
, cela affiche seulement 310
s et l'entrée (0
ou1
) sous forme de chaîne.la source
True
, bizarrePython 2 ,
2625 octetsMerci à Erik l'Outgolfer d' avoir sauvé un octet!
Opte pour l'approche programme complète:
Essayez-le en ligne!
la source
~~
par+
-1. Après cela, le programme complet ne sera plus cher . ;)Indésirable, inutile, opportuniste , 7 octets
Passez 1 ou 0 dans le registre.
la source
C, 26 octets
À peu près la même idée que la solution de 1bluestone , mais en C, elle est plus courte et fonctionne correctement pour toute entrée entière:
Bien sûr, cela inclut certaines variables / fonctions typées implicitement comme le font toutes les bonnes réponses de C-golf ... L'
!!
opérateur est le moyen le plus court pour convertir n'importe quelle valeur véridique1
en C (via la double négation, il!
est défini pour retourner soit1
ou0
).Testez avec:
la source
Haskell ,
3732 octetsEssayez-le en ligne!
Merci @nimi pour les
-5
octets!la source
show(fromEnum x)
au lieu delast(...)
. Pointfree encore plus court:(('0'<$[1..31])++).show.fromEnum
.Bool
unEnum
, merci!PHP, 28 octets
Enregistrez sous bool.php et exécutez:
la source
printf('%032d',$argv[1]);
(nécessite l'-r
indicateur).Ly ,
201513 octetsEDIT: 5 octets enregistrés grâce aux ovs.
EDIT: enregistré 2 octets supplémentaires en imprimant 0 sous forme de nombre plutôt que de caractère.
la source
65*1+["0"o1-]nu
marcherait?Octave,
1611 octetsEssayez-le en ligne!
Une poignée de fonction qui prend
"00000000000000000000000000000001"
aussi vrai"00000000000000000000000000000000\0"
que falsey.Explication:
Dans Octave, un tableau est considéré comme falsey si au moins un de ses éléments est nul. Le 33e élément de la deuxième chaîne est un caractère avec la valeur ASCII de 0, il peut donc être considéré comme falsey.
la source
Java, 40 caractères, 40 octets
Cela prend la chaîne comme paramètre, ce qui n'est pas correct (la valeur java falsifiée / vraie est forcée par OP pour être représentée par un booléen).
Essayez-le en ligne!
Réponse valide: Java, 60 caractères, 60 octets
Essayez-le en ligne!
Je sais qu'il existe déjà une réponse Java qui est plus courte que celle-ci, mais quand même :)
la source
return
instruction fait partie de votre code, donc une partie de votre nombre d'octets. Mais votre réponse ne respecte pas les règles: vous devez obtenir uneboolean
entrée. "Truthy / falsy" est traduit en Java commetrue
oufalse
, et rien d'autre. Vous ne pouvez donc pas obtenir unString
paramètre d'entrée.;
). Aussi, vous pouvez raccourcir votre code comme ceci:c->{String k="";for(;k.length()<31;)k+=0;return k+=c?1:0;}
. C'estk+=c?1:0
de raccourcirk+(c?1:0)
.;
. Une instruction nécessite un point-virgule. Un lambda n'est pas une déclaration.Japt ,
1311 octetsExplication:
Enregistré un octet en utilisant une conversion en base 2 intégrée!
Pour insérer la chaîne de 0 devant le
1
/0
, je dois lancer le1
et0
dans une chaîne. La façon typique de le faire serait1s
(3 octets). Mais comme nous ne convertissons que des 1 et des 0, je peux utiliser la base 2 intégrée1¤
(2 octets).L'entrée peut être sous la forme d'un entier ou d'une chaîne.
0
et""
sont fausses dans Japt.Essayez-le en ligne!
Suite de tests
la source
C # (.NET Core) , 29 octets
OP dit que 1/0 peut être utilisé pour truey / falsey, donc peut faire
a
un int et il devientC # n'a pas vraiment de vérité / falsey, donc je n'utiliserai pas cette réponse.
Essayez-le en ligne!
la source
Padleft
vient énormément le même nombre d'octets.interpolated strings
peut être très utile ici:b=>$"{(b?1:0):D32}"
19 bytes
MY ,
109 octetsEssayez-le en ligne!
Explication (page de code [avec le raisonnement derrière le caractère] / code hexadécimal):
Je ne peux pas croire que cela soit possible sans aucune commande à deux arguments!
Edit: enregistré 1 octet en utilisant des nombres premiers au lieu de l'arithmétique pour obtenir 31.
la source
APL, 11 octets
Comment?
1\⍨⊢
- répéter 1 fois l'entrée - retourner un tableau vide sur la valeur falsifiée1↑
- prenez le premier article¯32↑
- aligner à droite avec 31 zéros⍕
- format sous forme de chaînela source
⍕¯32↑⊢
∊⍕¨¯32↑⎕
ou quelque chose.J, 11 octets
Essayez-le en ligne!
Comment?
note: en J, les booléens sont 0 ou 1, également connu comme "la convention d'iverson", d'après ken iverson, créateur de J et APL
la source
":
est nécessaire pour que cela fonctionne - il change un booléen en chaîne .