Introducción
Clásicamente, los booleanos son un bit; trueo false, 1o 0. Los ceros a la izquierda serían redundantes. Por ejemplo, 001significa lo mismo que 00001o 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?Noneverdad 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
BLregistro (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
AHde 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(siBLes falsey, agregar 0 dejaráDLsin cambios como ASCII '0'; siBLes verdadero,DLse 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
CMPinstrucciones. Esto compara el argumento de la línea de comandos con el valor delDLregistro (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
SALCinstrucció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 estableceALen 0 si los dos valores eran iguales, o -1 si eran diferentes. Es entonces evidente que cuando se restaALdeDL, 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
01inicial 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}'.formatpara 15 bytes y funciona igual que su solución actualbool(n)sería suficienteJavascript, 23 bytes
!!acoacciona 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)+~~afunciona 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
tcomo parámetro (como unstringque puede ser "0" o "1" para resp. Falsedad o verdad), ysse 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, ASCII0x1Fo 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
falseyniles 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
0y1comoTrueoFalse, esto solo imprime 310sy la entrada (0o1) 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 verdadero1en C (a través de la negación doble,!se define para devolver1o0).Prueba con:
fuente
Haskell ,
3732 bytesPruébalo en línea!
Gracias @nimi por
-5bytes!fuente
show(fromEnum x)en lugar delast(...). Pointfree aún más corto:(('0'<$[1..31])++).show.fromEnum.Booles unEnum, gracias!PHP, 28 bytes
Guardar como bool.php y ejecutar:
fuente
printf('%032d',$argv[1]);(requiere la-rbandera).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
returndeclaració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 unbooleanentrada. "Verdad / falsedad" se traduce en Java comotrueofalse, y nada más. Por lo tanto, no puede obtener unStringpará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:0es 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 el1y0en 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.
0y""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
aun int y se convierteSin embargo, C # realmente no tiene verdadero / falso así que no usaré esta respuesta.
Pruébalo en línea!
fuente
Padleftentra en el mismo recuento de bytes aquí.interpolated stringspuede ser bastante útil aquí:b=>$"{(b?1:0):D32}"19 bytesMI ,
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 .