Faça Enquanto Falso
Hoje, no trabalho, um dos meus colegas estava descrevendo o caso de uso do do while (false). A pessoa com quem ele estava conversando achou que isso era bobagem e simples, se as declarações fossem muito melhores. Em seguida, passamos a perder metade do dia discutindo a melhor maneira de escrever algo equivalente a:
do
{
//some code that should always execute...
if ( condition )
{
//do some stuff
break;
}
//some code that should execute if condition is not true
if ( condition2 )
{
//do some more stuff
break;
}
//further code that should not execute if condition or condition2 are true
}
while(false);
Este é um idioma que é encontrado em c com bastante frequência. Seu programa deve produzir a mesma saída que o pseudocódigo abaixo, dependendo das condições.
do
{
result += "A";
if ( C1)
{
result += "B";
break;
}
result += "C"
if ( C2 )
{
result += "D";
break;
}
result += "E";
}
while(false);
print(result);
Portanto, a entrada pode ser:
1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false
e a saída deve ser:
1. "AB"
2. "AB"
3. "ACD"
4. "ACE"
Isso é código-golfe, então as respostas serão julgadas em bytes. As brechas padrão são proibidas.
Sim, essa é uma pergunta simples, mas espero que possamos ver algumas respostas criativas. Espero que a simplicidade incentive as pessoas a usar idiomas com os quais estão menos confiantes.
return result
no lugar debreak
. Então você recebe os bônus de reutilização e simplifica também o código de chamada. Mas talvez eu esteja perdendo alguma coisa.goto
usargoto
más formas :) #do{}while(false)
é dentro de macros. Um simplesif
não é suficiente, porque interage mal comelse
s ao redor que podem estar presentes. Sem uma macro, você também pode remover odo
ewhile
.Respostas:
Python 3, 31
Economizou 1 byte graças ao xnor.
Apenas um byte de distância do ES6. : / Python estúpido e sua longa sintaxe de função anônima.
Viva um forro!
Casos de teste:
fonte
x*"AB"
, poderá economizar espaço depois.λ
um sinônimo delambda
seria ótimo :)JavaScript ES6,
302625 bytesUma função anônima simples que recebe duas entradas. Atribua a uma variável a ser chamada. Atualização : Vamos pular na onda do índice. Ele salva 4 bytes. Eu garanti minha liderança sobre o Python . Salva um byte, currying a função; ligar como
(...)(a)(b)
. Obrigado Patrick Roberts!Versão antiga e original, 30 bytes (incluída para não derreter na resposta python
(;
):fonte
:b?
Macro do pré-processador C, 34
Experimente online .
fonte
Haskell, 28 bytes
Exemplo de uso:
False # True
->"ACD"
.Usando os valores de entrada diretamente como guardas.
fonte
MATL , 15
17bytesAs entradas são
0
ou1
em linhas separadas. Como alternativa,0
pode ser substituído porF
(MATL'sfalse
) e1
porT
(MATL'strue
).Experimente online!
fonte
Brainfuck, 65 bytes
Isso pressupõe que C1 e C2 sejam inseridos como 0 ou 1 bytes brutos. por exemplo
Golfe:
Ungolfed:
Acredito que vale a pena notar que esta solução é , de fato, baseada em romper os loops while.
fonte
GNU Sed, 21
Ideone .
fonte
NTFJ , 110 bytes
Mais legível:
Isso foi certamente divertido. Experimente aqui , usando dois caracteres (
0
ou1
) como entrada.Usando o método da ETHProduction para converter para 0, 1 (caracteres) em bits, isso se torna mais simples.
Este é o método mencionado. Pressionando 193 (
##~~~~~#@
), NANDing (|
) com o valor de entrada superior (nesse caso, o primeiro código de caractere, um 48 ou 49). Isso gera 254 para 1 e 255 para 0. NANDing com 255 (########@
) produz um 0 ou 1 bit de acordo com a entrada.Isso imprime um
A
, pois todas as entradas começam comA
.*
apareceA
ao imprimir, para que a pilha permaneça inalterada em relação ao estado anterior.Caso 1: o primeiro bit é
1
e(
ativa o código dentro.~#~~~~#~@*
imprimeB
e########@^
empurra 255 e salta para essa posição no código. Sendo este o fim do programa, ele termina.Caso 2: o primeiro bit é
0
.(
pula para)
e o código continua.Isso imprime a
C
, porque esse é o próximo caractere.Isso converte nossa segunda entrada em um pouco.
Se o nosso segundo bit for 1, passamos a imprimir um
E
.Esta é a representação NAND da negação booleana de nossa parte:
A NAND (0 NAND A) = NOT A
.Isso agora é ativado se o bit foi ae é
0
impressoE
.fonte
Pitão, 16 bytes
Suíte de teste
Ternários!
Explicação:
Entrada em duas linhas consecutivas.
fonte
CJam, 15
1617bytesExperimente online!
Um byte desligado graças a @randomra, e um byte desligado graças a @Dennis
Explicação:
Versão antiga (16 bytes):
Explicação:
fonte
Pitão, 13 caracteres, 19 bytes
Recebe entrada no formato [a, b]
Explicação
Experimente aqui
Ou use uma suíte de testes
fonte
«
como 1 byte cada (2 bytes em UTF-8). Amboswc
e este concordar que é 19 bytes.C, 76 bytes
Renomeei
c1
parac
,c2
paraC
eresult
parar
. Programadores em C vão ao extremo para evitargoto
. Se você tiver um problema com sintaxe absurda em C, é mais provável que seja porque você não o usougoto
.Ungolfed
fonte
char r[4]="A";
? Meu C está enferrujado."AC"
e substituindo tudo, desder[1]=67
ar[2]=69;
comr[2]=c2?68:69;
C, 41 bytes
Não tenho certeza se a pergunta requer um programa, uma função ou um trecho de código.
Aqui está uma função:
Ele obtém a entrada em dois parâmetros, que devem ser 0 ou 1 (bem,
b
deve) e é impresso em stdout.Define
a
para um de0x4241
,0x454341
ou0x444341
. Quando impresso como uma string, em um sistema ASCII little endian, fornece a saída necessária.fonte
R ,
413937 bytesExperimente online!
Em R,
TRUE
eFALSE
são coagidos1
e0
respectivamente quando você tenta usá-los como números. Podemos converter esses números para os índices1
,2
e3
através da fórmula1+a+a^b
.Estes valores são então utilizados para indexar a lista
ACD
,ACE
,AB
para se obter a saída correcta.Economizou dois bytes graças ao JayCe.
Se você preferir uma versão com uma
if
instrução, há o seguinte para 41 bytes:Experimente online!
fonte
^
Mathematica,
3530 bytesMuito simples. Função anônima.
fonte
Retina, 22 bytes
Experimente Online
fonte
^
comm`
, para que ele funcione para a entrada de várias linhas, o que não é necessário para a pergunta, mas facilita o teste.JavaScript, 38 bytes
Use no-delimitador
0
ou em1
vez defalse
/true
fonte
split` `
vez desplit(" ")
+('0b'+prompt())
vez deparseInt(prompt(),2)
Objeto Caché , 27 bytes
fonte
ArnoldC , 423 bytes
Como o ArnoldC não parece ter uma entrada formal, basta alterar os 2 primeiros
YOU SET US UP
valores para 0 ou 1.Explicação
Este é apenas um monte de instruções condicionais que respondem por todas as saídas possíveis. Por que você pode perguntar? Bem, ArnoldC realmente não tem compreensão de strings. Não pode nem concatenar seqüências de caracteres! Como resultado, temos que recorrer ao método mais ... ineficiente.
fonte
Java, 28 bytes
O mesmo padrão de muitas das respostas. tipo é
BiFunction<Boolean,Boolean, String>
.fonte
(c,d)->
pode ser jogado em 1 bytec->d->
quando você usa umjava.util.function.Function<Boolean, java.util.function.Function<Boolean, String>>
.Pitão, 21 bytes
Experimente aqui!
A entrada é tomada como 0 ou 1, em vez de verdadeiro / falso, enquanto C1 é o primeiro.
Explicação
Apenas usando o fato de que existem apenas 4 resultados possíveis. Funciona interpretando a entrada como binária, convertendo-a na base 10 e usando-a para escolher o resultado certo da string de pesquisa.
fonte
Y , 20 bytes
No caso de a primeira entrada ser uma, apenas uma entrada é aceita. Presumo que esse comportamento seja permitido. Experimente aqui!
Ungolfed:
Explicado:
Isso empurra os personagens
B
, em seguida,A
para a pilha.Isso requer uma entrada, a incrementa, a abre e se move sobre esse número de seções.
Caso 1:
j1 = 0
. Este é o mais interessante.r$
inverte a pilha e exibe um valor,'C'E
empurra caracteresC
eE
.@
converteE
em sua contraparte numérica, subtrai a segunda entrada e a converte em um caractere.r
desverte a pilha. Em seguida, o programa vê o link C e passa para o próximo linkp
e imprime a pilha.Caso 2: o programa passa para o último link
p
, que apenas imprime a pilha inteira.fonte
PowerShell, 40 bytes
Matrizes aninhadas indexadas por entrada. No PowerShell,
$true
/1
e$false
/0
são praticamente equivalentes (graças à tipecasting muito flexível), de modo que os índices são bem classificados em uma matriz de dois elementos. Isso é realmente o mais próximo de um ternário que o PowerShell recebe, e eu o usei várias vezes no golfe.Exemplos
fonte
K, 37 bytes
fonte
Vitsy , 26 bytes
Espera entradas como 1s ou 0s através de STDIN com uma nova linha separando.
Na verdade, descobri um problema sério com as declarações if durante esse desafio. D: Isso é publicado com a versão quebrada, mas funciona muito bem. (Eu atualizarei isso depois de corrigir o problema).Observe que atualizei o Vitsy com uma correção de if / ifnot. Essa mudança não me concede nenhuma vantagem, apenas esclarecimentos.Explicação:
Experimente Online!
fonte
cera de abelha , 26 bytes
Interpretando
0
como falso,1
como verdadeiro.Resultado:
Clone meu intérprete de cera de abelha do meu repositório Github .
fonte
C,
4745 bytesComo existem apenas três resultados diferentes, podemos escolher uma das três cadeias de caracteres como esta:
Agradecimentos a Herman L por 2 bytes
Demo
fonte
char*f(c,d){return"AB\0 ACE\0ACD"+(!c<<d+2);}
Perl, 23 bytes
Requer o
-E
|-M5.010
sinalizador e recebe a entrada como 1 e 0:Solução alternativa que requer
-p
e é 22 + 1 = 23 bytes:fonte
say-<>?AB:-<>?ACD:ACE
é dois bytes mais curto.05AB1E ,
2320 bytesCódigo:
Experimente online!
fonte
i„ABë„AC69I-çJ
Experimente online ou verifique todos os casos de teste .I
. ; pJaponês, 19 bytes
Teste online!
Curiosidade: Seriam 16 bytes se não fosse por um bug:
fonte