Introducción
Clásicamente, los booleanos son un bit; true
o false
, 1
o 0
. Los ceros a la izquierda serían redundantes. Por ejemplo, 001
significa lo mismo que 00001
o simplemente 1
.
El booleano de 32 bits
Dado un valor verdadero / falso, genera el booleano equivalente de 32 bits como una cadena. (O como un número si, por alguna razón, su idioma admite ceros a la izquierda).
Su programa no tiene que funcionar para todos los tipos de verdad / falsedad, solo para lo que su lenguaje de programación funciona mejor.
Ejemplo de E / S
Input >> Output
truthy >> 00000000000000000000000000000001
falsey >> 00000000000000000000000000000000
Respuestas:
Python 3 ,
33251815 bytesGracias @ jurjen-bos por el
__mod__
consejo.Pruébalo en línea!
fuente
lambda b:'%0.32d'%b
?None
verdad o falso ?lambda b:f'{bool(b):032}'
olambda b:f'{not b<1:032}'
0.32d
.Código de máquina x86-16 (DOS), 16 bytes
La función anterior recibe un valor booleano (0 == falsey, 1 == verdad) en el
BL
registro (byte bajo deBX
) e imprime una cadena "booleana redundante" en la salida estándar.Funciona invocando una interrupción (0x21) para realizar una llamada a la función de DOS (seleccionada mediante la configuración
AH
de 2) que imprime un solo carácter (entradaDL
) en la salida estándar.Primero, se carga el carácter ASCII '0'
DL
, el contador (CX
) se establece en 31 y se repite para imprimir los bytes "redundantes". Luego, el valor booleano de entrada se agrega aDL
(siBL
es falsey, agregar 0 dejaráDL
sin cambios como ASCII '0'; siBL
es verdadero,DL
se incrementará en uno a ASCII '1'), y se imprimirá el byte final.La función no devuelve un valor.
Bastante decente para un lenguaje que realmente no hace cadenas.
Programa completo, 21 bytes
Si desea convertirlo en un programa completo, solo se requieren 5 bytes más. En lugar de pasar la entrada en un registro, esto lee la entrada de los argumentos pasados en la línea de comando al invocar la aplicación. Un argumento de 0 se interpreta como falsey, como lo es la falta total de argumentos; Un argumento mayor que 0 se interpreta como verdadero.
Simplemente ensamble el siguiente código como un programa COM y luego ejecútelo en la línea de comando.
Salida de muestra:
¿Como funciona? Bueno, es básicamente lo mismo, hasta llegar a las
CMP
instrucciones. Esto compara el argumento de la línea de comandos con el valor delDL
registro (que, recuerda, contiene un ASCII '0'). En un programa COM, los bytes de código se cargan en el desplazamiento 0x100. Precedente es el prefijo de segmento de programa (PSP) , que contiene información sobre el estado de un programa DOS. Específicamente, en el desplazamiento 0x82, se encuentra el primer argumento (en realidad el segundo, ya que el primero es un espacio) que se especificó en la línea de comando cuando se invocó el programa. Entonces, solo estamos comparando este byte con un ASCII '0'.La comparación establece los indicadores, y luego la
SALC
instrucción (un código de operación no documentado antes del Pentium, equivalente asbb al, al
, pero solo 1 byte en lugar de 2) se estableceAL
en 0 si los dos valores eran iguales, o -1 si eran diferentes. Es entonces evidente que cuando se restaAL
deDL
, esto resulta en ASCII '0' o '1', según el caso.(Tenga en cuenta que, irónicamente, lo romperá si pasa un argumento con un 0
01
inicial en la línea de comando, ya que solo se ve en el primer carácter. Por lo tanto , se tratará como falsey. :-)fuente
Python 3 , 23 bytes
Pruébalo en línea!
fuente
'10'[not n]
sería suficiente si esos necesitan ser apoyados.'{:032}'.format
para 15 bytes y funciona igual que su solución actualbool(n)
sería suficienteJavascript, 23 bytes
!!a
coacciona a en booleano, que el plus unario se convierte en int.fuente
a=>'0'.repeat(31)+(+a)
es un byte más corto.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
funciona con verdadero, falso, 1,0V , 8 bytes
Pruébalo en línea!
Explicación:
fuente
Neim ,
65 bytesPruébalo en línea!
Explicación:
Guardado un byte gracias a Okx
fuente
ᛝΨβ_I
ᛝ
no está en el wiki, ¿dónde lo encontraste?Octava , 17 bytes
Función anónima. Funciona en MATLAB también.
Pruébalo en línea!
fuente
ArnoldC , 369 bytes
Pruébalo en línea!
fuente
Brainfuck ,
616036 bytesEstoy seguro de que hay una forma inteligente de no moverse tanto con los punteros.Yo tenía razón. Había. ¡Gracias a @Graviton por darme la idea!
Siguiente paso: ¡Obtenga los valores 32 y 48 más rápido!
Pruébalo en línea!
Fue divertido para un primer golf!
Ha llegado demasiado tarde ahora.¿Qué estoy haciendo?fuente
>-[-[-<]>>+<]>--<<-[>+<-----]>--->[-<.>],.
(toma la entrada como 0 o 1) ¡ Pruébelo en línea!Scala, 32 bytes
Lo siento, pero me vi obligado a hacerlo en 32 bytes> _ <
Está encerrado por una función que toma
t
como parámetro (como unstring
que puede ser "0" o "1" para resp. Falsedad o verdad), ys
se devuelve.¡Pruébelo en línea!
Respuesta válida: Scala, 46 bytes.
Igual que mi respuesta de Java, se suponía que debía tomar un valor booleano para el parámetro. Entonces :
¡Pruébelo en línea!
fuente
Braingolf ,
108 bytesPruébalo en línea!
␟
es un separador de unidad, ASCII0x1F
o 31. No se puede encontrar el carácter real para pegar en TIO, por lo que TIO en su lugar usa# 1-
, lo que empuja el espacio (32) y disminuye a 31.Explicación
fuente
Octava , 23 bytes
Pruébalo en línea!
Esto es más corto que todos los enfoques que probé
printf
. Sin embargo, podría haber perdido algo, ya que hice esto en mi teléfono.Solo un byte más
Esto podría ser 18 bytes si pudiera tomar 1/0 como cadenas.
Pruébalo en línea!
fuente
Java 8,
3127 bytes-4 bytes gracias a @ OlivierGrégoire .
Pruébalo aquí
fuente
"".format
)String.format
, sabía que de alguna manera había una forma más corta, pero pensé que probablemente usé una variable de cadena la última vez ... Gracias. ;)05AB1E , 5 bytes
Pruébalo en línea!
fuente
31úð0:
!Ruby, 21 bytes
Sí, ese espacio necesita estar allí ...: /
En Ruby todo excepto
false
ynil
es verdad; Pruébalo en línea!fuente
Mathematica, 36 bytes
Mathematica, 26 bytes
Pruébalo en línea!
fuente
Carbón de leña , 5 bytes
Pruébalo en línea! (Enlace a la versión detallada).
Como Charcoal entiende
0
y1
comoTrue
oFalse
, esto solo imprime 310
sy la entrada (0
o1
) como una cadena.fuente
True
, sin embargo, extrañoPython 2 ,
2625 bytes¡Gracias a Erik the Outgolfer por guardar un byte!
Va por el enfoque del programa completo:
Pruébalo en línea!
fuente
~~
con+
por -1. Después de eso, el programa completo ya no será costoso . ;)No deseado, innecesario, oportunista , 7 bytes
Pase 1 o 0 en el registro.
fuente
C, 26 bytes
Prácticamente la misma idea que la solución de 1bluestone , pero en C es más corta y funciona correctamente para cualquier entrada entera:
Por supuesto, esto incluye algunas variables / funciones escritas implícitamente como lo hacen todas las buenas respuestas de C-golf ... El
!!
operador es la forma más corta de convertir cualquier valor verdadero1
en C (a través de la negación doble,!
se define para devolver1
o0
).Prueba con:
fuente
Haskell ,
3732 bytesPruébalo en línea!
Gracias @nimi por
-5
bytes!fuente
show(fromEnum x)
en lugar delast(...)
. Pointfree aún más corto:(('0'<$[1..31])++).show.fromEnum
.Bool
es unEnum
, gracias!PHP, 28 bytes
Guardar como bool.php y ejecutar:
fuente
printf('%032d',$argv[1]);
(requiere la-r
bandera).Ly ,
201513 bytesEDITAR: Guardado 5 bytes gracias a los ovs.
EDITAR: guardó otros 2 bytes imprimiendo 0 como un número en lugar de un carácter.
fuente
65*1+["0"o1-]nu
?Octava,
1611 bytesPruébalo en línea!
Una función de manejo que toma
"00000000000000000000000000000001"
como veraz y"00000000000000000000000000000000\0"
falsey.Explicación:
En Octave, una matriz se considera falsey si al menos uno de sus elementos es cero. El elemento 33 de la segunda cadena es un carácter con el valor ASCII de 0, por lo que puede considerarse como falsey.
fuente
Java, 40 caracteres, 40 bytes
Esto toma una cadena como parámetro, que no es correcto (el valor de Java falso / verdadero es forzado por OP a ser representado por un booleano).
¡Pruébelo en línea!
Respuesta válida: Java, 60 caracteres, 60 bytes.
¡Pruébelo en línea!
Sé que ya hay una respuesta Java que es más corta que esta, pero aún así :)
fuente
return
declaración es parte de su código, por lo tanto, parte de su recuento de bytes. Pero su respuesta no cumple con las reglas: debe obtener unboolean
entrada. "Verdad / falsedad" se traduce en Java comotrue
ofalse
, y nada más. Por lo tanto, no puede obtener unString
parámetro de entrada.;
). Además, puede acortar su código de esta manera:c->{String k="";for(;k.length()<31;)k+=0;return k+=c?1:0;}
. losk+=c?1:0
es acortark+(c?1:0)
.;
. Una declaración requiere un punto y coma. Una lambda no es una declaración.Japt ,
1311 bytesExplicación:
¡Guardado un byte usando una conversión de base 2 incorporada!
Para insertar la cadena de 0s delante de
1
/0
, necesito convertir el1
y0
en una cadena. La forma típica de hacerlo sería1s
(3 bytes). Pero debido a que solo estamos convirtiendo 1s y 0s, puedo usar la base-2 incorporada1¤
(2 bytes).La entrada puede tener la forma de un entero o una cadena.
0
y""
son falsas en Japt.Pruébalo en línea!
Banco de pruebas
fuente
C # (.NET Core) , 29 bytes
OP dijo que 1/0 se puede usar para verdadero / falso, por lo que puede hacer
a
un int y se convierteSin embargo, C # realmente no tiene verdadero / falso así que no usaré esta respuesta.
Pruébalo en línea!
fuente
Padleft
entra en el mismo recuento de bytes aquí.interpolated strings
puede ser bastante útil aquí:b=>$"{(b?1:0):D32}"
19 bytes
MI ,
109 bytesPruébalo en línea!
Explicación (página de códigos [con razonamiento detrás del carácter] / código hexadecimal):
¡No puedo creer que esto sea posible sin ningún comando de dos argumentos!
Editar: guardado 1 byte usando primos en lugar de aritmética para obtener 31.
fuente
APL, 11 bytes
¿Cómo?
1\⍨⊢
- repita 1 veces de entrada - devuelva una matriz vacía en valor falso1↑
- toma el primer artículo¯32↑
- alinear a la derecha con 31 ceros⍕
- formatear como cadenafuente
⍕¯32↑⊢
debería funcionar∊⍕¨¯32↑⎕
o algo.J, 11 bytes
Pruébalo en línea!
¿cómo?
nota: en J, los booleanos son 0 o 1, también conocido como "la convención de iverson", después de ken iverson, creador de J y APL
fuente
":
es necesario para que esto funcione: cambia un valor booleano a una cadena .