Introdução
Classicamente, os booleanos são um pouco; true
ou false
, 1
ou 0
. Os zeros à esquerda seriam redundantes. Por exemplo, 001
significa o mesmo 00001
ou apenas 1
.
O booleano de 32 bits
Dado um valor truthy / falsey, emita o booleano de 32 bits equivalente como uma string. (Ou como um número, se por algum motivo seu idioma suportar zeros à esquerda.)
Seu programa não precisa funcionar para todos os tipos de verdade / falsidade, apenas para o que sua linguagem de programação funciona melhor.
Exemplo de E / S
Input >> Output
truthy >> 00000000000000000000000000000001
falsey >> 00000000000000000000000000000000
Respostas:
Python 3 ,
33251815 bytesObrigado @ jurjen-bos pela
__mod__
dica.Experimente online!
fonte
lambda b:'%0.32d'%b
?None
truthy ou Falsas ?lambda b:f'{bool(b):032}'
oulambda b:f'{not b<1:032}'
0.32d
.x86-16 Código da Máquina (DOS), 16 bytes
A função acima recebe um valor booleano (0 == falsey, 1 == truthy) no
BL
registro (byte baixo deBX
) e imprime uma string "booleana redundante" na saída padrão.Ele funciona chamando uma interrupção (0x21) para fazer uma chamada de função do DOS (selecionada pela configuração
AH
2) que imprime um único caractere (inDL
) na saída padrão.Primeiro, o caractere ASCII '0' é carregado
DL
, o contador (CX
) é definido como 31 e faz um loop para imprimir os bytes "redundantes". Em seguida, o valor booleano de entrada é adicionado aDL
(seBL
for falsey, adicionar 0DL
permanecerá inalterado como ASCII '0'; seBL
for verdade,DL
será incrementado em um para ASCII '1') e o byte final será impresso.A função não retorna um valor.
Bastante decente para uma linguagem que realmente não faz cordas.
Programa completo, 21 bytes
Se você deseja transformá-lo em um programa completo, são necessários apenas mais 5 bytes. Em vez de passar a entrada em um registro, ela lê a entrada dos argumentos transmitidos na linha de comando ao invocar o aplicativo. Um argumento de 0 é interpretado como falsey, assim como a completa falta de argumentos; um argumento maior que 0 é interpretado como verdade.
Simplesmente monte o código a seguir como um programa COM e execute-o na linha de comando.
Saída de amostra:
Como funciona? Bem, é basicamente a mesma coisa, até você chegar às
CMP
instruções. Isso compara o argumento da linha de comando com o valor doDL
registrador (que você se lembra, contém um ASCII '0'). Em um programa COM, os bytes de código são carregados no deslocamento 0x100. O precedente é o prefixo do segmento de programa (PSP) , que contém informações sobre o estado de um programa DOS. Especificamente, no deslocamento 0x82, você encontra o primeiro argumento (na verdade o segundo, já que o primeiro é um espaço) que foi especificado na linha de comando quando o programa foi chamado. Então, estamos apenas comparando esse byte com um ASCII '0'.A comparação define os sinalizadores e, em seguida, a
SALC
instrução (um código de operação não documentado anterior ao Pentium, equivalente asbb al, al
, mas apenas 1 byte em vez de 2) defineAL
como 0 se os dois valores forem iguais ou -1 se forem diferentes. Em seguida, é óbvio que, quando nós subtraímosAL
a partirDL
, isso resulta em ASCII '0' ou '1', conforme o caso.(Observe que, ironicamente, você o quebrará se passar um argumento com um 0 à esquerda na linha de comando, pois ele olha apenas para o primeiro caractere. Portanto
01
, será tratado como falsey. :-)fonte
Python 3 , 23 bytes
Experimente online!
fonte
'10'[not n]
seria suficiente se esses precisassem ser suportados.'{:032}'.format
para 15 bytes e funcionam da mesma forma sua solução atualbool(n)
seria suficienteJavascript, 23 bytes
!!a
coage a em um booleano, que o plus unário se transforma em um int.fonte
a=>'0'.repeat(31)+(+a)
é um byte mais curto.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 com true, false, 1,0V , 8 bytes
Experimente online!
Explicação:
fonte
Neim ,
65 bytesExperimente online!
Explicação:
Guardou um byte graças a Okx
fonte
ᛝΨβ_I
ᛝ
não está no wiki, onde você o encontrou?Oitava , 17 bytes
Função anônima. Também trabalha em MATLAB.
Experimente online!
fonte
ArnoldC , 369 bytes
Experimente online!
fonte
Brainfuck ,
616036 bytesTenho certeza de que existe uma maneira inteligente de não se mexer tanto com os ponteiros.Eu tinha razão. Havia. Obrigado a @Graviton por me dar a ideia!
Próxima etapa: obtenha os valores 32 e 48 mais rapidamente!
Experimente online!
Foi divertido para um primeiro golfe!
Chegou tarde demais agora.O que eu estou fazendo?fonte
>-[-[-<]>>+<]>--<<-[>+<-----]>--->[-<.>],.
(aceita entrada como 0 ou 1) Experimente Online!Scala, 32 bytes
Desculpe, mas fui forçado a fazê-lo em 32 bytes> _ <
É delimitada por uma função que assume
t
como parâmetro (como umstring
que pode ser "0" ou "1" para resp. Falsy ou truthy) es
é retornado.Experimente Online!
Resposta válida: Scala, 46 bytes
Igual à minha resposta java, eu deveria usar um booleano para o parâmetro Então :
Experimente Online!
fonte
Braingolf ,
108 bytesExperimente online!
␟
é um separador de unidade, ASCII0x1F
ou 31. Não é possível encontrar o caractere realmente para colar no TIO; portanto, o TIO usa# 1-
, o que empurra o espaço (32) e diminui para 31.Explicação
fonte
Oitava , 23 bytes
Experimente online!
Isso é mais curto do que todas as abordagens que tentei
printf
. Talvez eu tenha perdido alguma coisa, desde que fiz isso no meu telefone.Apenas um byte a mais
Isso poderia ter 18 bytes se eu pudesse usar 1/0 como seqüências de caracteres.
Experimente online!
fonte
Java 8,
3127 bytes-4 bytes graças a @ OlivierGrégoire .
Experimente aqui.
fonte
"".format
)String.format
, sabia que havia uma maneira mais curta, mas pensei que provavelmente havia usado uma variável String da última vez ... Obrigado. ;)05AB1E , 5 bytes
Experimente online!
fonte
31úð0:
!Ruby, 21 bytes
Sim, esse espaço precisa estar lá ..: /
Em Ruby, tudo, exceto
false
enil
é verdadeiro; Experimente online!fonte
Mathematica, 36 bytes
Mathematica, 26 bytes
Experimente online!
fonte
Carvão , 5 bytes
Experimente online! (Link para a versão detalhada.)
Como o Charcoal entende
0
e1
comoTrue
ouFalse
, isso apenas imprime 31 se0
a entrada (0
ou1
) como sequência.fonte
True
que, estranhoPython 2 ,
2625 bytesObrigado a Erik, o Outgolfer, por salvar um byte!
Vai para a abordagem completa do programa:
Experimente online!
fonte
~~
por+
por -1. Depois disso, o programa completo não será mais caro . ;)Indesejável, desnecessário, oportunista , 7 bytes
Passe 1 ou 0 para o registro.
fonte
C, 26 bytes
Praticamente a mesma idéia que a solução da 1bluestone , mas em C é mais curta e funciona corretamente para qualquer entrada inteira:
Obviamente, isso inclui algumas variáveis / funções de tipo implícito, como todas as boas respostas C-golf ... O
!!
operador é a maneira mais curta de converter qualquer valor verdadeiro1
em C (via dupla negação,!
é definido para retornar1
ou0
).Teste com:
fonte
Haskell ,
3732 bytesExperimente online!
Obrigado @nimi pelos
-5
bytes!fonte
show(fromEnum x)
em vez delast(...)
. Pointfree ainda mais curto:(('0'<$[1..31])++).show.fromEnum
.Bool
é umEnum
, obrigado!PHP, 28 bytes
Salve como bool.php e execute:
fonte
printf('%032d',$argv[1]);
(requer o-r
sinalizador).Ly ,
201513 bytesEDIT: Salvo 5 bytes graças a ovs.
EDIT: Salva outros 2 bytes imprimindo 0 como um número e não como um caractere.
fonte
65*1+["0"o1-]nu
?Oitava,
1611 bytesExperimente online!
Um identificador de função que leva
"00000000000000000000000000000001"
como verdade e"00000000000000000000000000000000\0"
como falsey.Explicação:
Na oitava, uma matriz é considerada falsey se pelo menos um de seus elementos for zero. O 33º elemento da segunda string é um caractere com o valor ASCII de 0, para que possa ser considerado como falsey.
fonte
Java, 40 caracteres, 40 bytes
Isso usa string como parâmetro, o que não está correto (o valor java falsy / truthy é forçado pelo OP a ser representado por um booleano).
Experimente Online!
Resposta válida: Java, 60 caracteres, 60 bytes
Experimente Online!
Eu sei que já existe uma resposta Java que é mais curta que esta, mas ainda :)
fonte
return
declaração faz parte do seu código, portanto faz parte da sua contagem de bytes. Mas sua resposta não cumpre as regras: você deve obter umboolean
como entrada. "Verdade / falsidade" é traduzido em Java como umtrue
oufalse
outro nada. Portanto, você não pode obter umString
parâmetro como entrada.;
). Além disso, você pode encurtar o seu código como este:c->{String k="";for(;k.length()<31;)k+=0;return k+=c?1:0;}
. Ok+=c?1:0
é encurtark+(c?1:0)
.;
. Uma declaração requer um ponto e vírgula. Um lambda não é uma afirmação.Japonês ,
1311 bytesExplicação:
Salvou um byte usando uma conversão de base 2 integrada!
Para inserir a sequência de 0s na frente do
1
/0
, preciso converter a sequência1
e0
em uma sequência. A maneira típica de fazer isso seria1s
(3 bytes). Mas, como estamos convertendo apenas 1s e 0s, posso usar a base 2 integrada1¤
(2 bytes).A entrada pode estar na forma de um número inteiro ou sequência.
0
e""
são falsas em Japt.Experimente online!
Suíte de teste
fonte
C # (.NET Core) , 29 bytes
O OP disse que 1/0 pode ser usado para truthy / falsey, então pode fazer
a
um int e torna-seC # realmente não tem truthy / falsey, então não usarei esta resposta.
Experimente online!
fonte
Padleft
chega na mesma contagem de bytes aqui.interpolated strings
pode ser bastante útil aqui:b=>$"{(b?1:0):D32}"
19 bytes
MY ,
109 bytesExperimente online!
Explicação (página de códigos [com raciocínio por trás do caractere] / código hexadecimal):
Não acredito que isso seja possível sem nenhum comando de dois argumentos!
Editar: economizou 1 byte usando números primos em vez de aritmético para obter 31.
fonte
APL, 11 bytes
Quão?
1\⍨⊢
- repetir 1 vezes de entrada - retornar matriz vazia com valor falso1↑
- pegue o primeiro item¯32↑
- alinhar à direita com 31 zeros⍕
- formato como stringfonte
⍕¯32↑⊢
deve funcionar∊⍕¨¯32↑⎕
ou algo assim.J, 11 bytes
Experimente online!
como?
nota: em J, os booleanos são 0 ou 1, também conhecido como "a convenção iverson", depois de ken iverson, criador de J e APL
fonte
":
é necessário para que isso funcione - ele altera um booleano para uma string .