Hacer mientras sea falso
Hoy, en el trabajo, uno de mis colegas describía el caso de uso de do while (falso). La persona con la que estaba hablando pensó que esto era una tontería y que si las declaraciones serían mucho mejores. Luego procedimos a perder la mitad de nuestro día discutiendo la mejor manera de escribir 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 es un idioma que se encuentra en c con bastante frecuencia. Su programa debe producir el mismo resultado que el pseudocódigo siguiente, según las condiciones.
do
{
result += "A";
if ( C1)
{
result += "B";
break;
}
result += "C"
if ( C2 )
{
result += "D";
break;
}
result += "E";
}
while(false);
print(result);
Por lo tanto, la entrada podría ser:
1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false
y la salida debería ser:
1. "AB"
2. "AB"
3. "ACD"
4. "ACE"
Este es el código de golf, por lo que las respuestas se juzgarán por bytes. Las lagunas estándar están prohibidas.
Sí, esta es simple, pero esperamos ver algunas respuestas creativas, espero que la simplicidad aliente a las personas a usar idiomas con los que tienen menos confianza.
return result
en lugar debreak
. Luego obtienes los bonos de reutilización y simplifica el código de llamada también. Pero tal vez me estoy perdiendo algo.goto
porque usargoto
es una mala forma :)do{}while(false)
es dentro de macros. Un simpleif
no es suficiente, porque interactúa mal conelse
s alrededor que pueden estar presentes. Sin una macro, también puede eliminar eldo
ywhile
.Respuestas:
Pitón 3, 31
Guardado 1 byte gracias a xnor.
Solo un byte de distancia de ES6. : / Stupid Python y su larga sintaxis de función anónima.
¡Hurra por una camisa!
Casos de prueba:
fuente
x*"AB"
, puede guardar el espacio después.λ
un sinónimo delambda
sería genial :)JavaScript ES6,
302625 bytesUna función anónima simple que toma dos entradas. Asignar a una variable para llamar. Actualización : saltemos al carro del índice. Ahorra 4 bytes. He asegurado mi ventaja sobre Python . Guardado un byte al curry la función; llamar como
(...)(a)(b)
. Gracias Patrick Roberts!Versión original anterior, 30 bytes (incluida para no fundirse en la respuesta de Python
(;
):fuente
:b?
C preprocesador macro, 34
Pruébalo en línea .
fuente
Haskell, 28 bytes
Ejemplo de uso:
False # True
->"ACD"
.Usando los valores de entrada directamente como guardias.
fuente
MATL , 15
17bytesLas entradas son
0
o1
en líneas separadas. Alternativamente,0
puede ser reemplazado porF
(MATL'sfalse
) y1
porT
(MATL'strue
).Pruébalo en línea!
fuente
Brainfuck, 65 bytes
Esto supone que C1 y C2 se ingresan como 0 o 1 bytes sin formato. p.ej
Golfizado:
Sin golf:
Creo que vale la pena señalar que esta solución se basa en romper bucles while.
fuente
GNU Sed, 21
Ideone .
fuente
NTFJ , 110 bytes
Más legible:
Eso fue ciertamente entretenido. Pruébelo aquí , usando dos caracteres (
0
o1
) como entrada.Usando el método de ETHProduction para convertir a 0, 1 (caracteres) en bits, esto se vuelve más simple.
Este es el método mencionado. Presionando 193 (
##~~~~~#@
), NANDING (|
) con el valor de entrada superior (en este caso, el primer código de caracteres, un 48 o 49). Esto produce 254 para 1 y 255 para 0. NANDAR con 255 (########@
) produce un 0 o 1 bit de acuerdo con la entrada.Esto imprime un
A
, ya que toda la entrada comienza conA
.*
apareceA
cuando se imprime, por lo que la pila no cambia desde su estado anterior.Caso 1: el primer bit es
1
, y(
activa el código dentro.~#~~~~#~@*
imprimeB
y########@^
empuja 255 y salta a esa posición en el código. Siendo este el final del programa, termina.Caso 2: el primer bit es
0
.(
salta)
y el código continúa.Esto imprime un
C
, porque ese es el próximo personaje.Esto convierte nuestra segunda entrada a un bit.
Si nuestro segundo bit es un 1, procedemos a imprimir un
E
.Esta es la representación NAND de la negación de Boole de nuestro grano de arena:
A NAND (0 NAND A) = NOT A
.Esto ahora se activa si el bit era un
0
, e imprimeE
.fuente
Pyth, 16 bytes
Banco de pruebas
¡Ternarios!
Explicación:
Entrada en dos líneas consecutivas.
fuente
CJam, 15
1617bytesPruébalo en línea!
Un byte desactivado gracias a @randomra, y un byte desactivado gracias a @Dennis
Explicación:
Versión anterior (16 bytes):
Explicación:
fuente
Pyth, 13 caracteres, 19 bytes
Toma entrada en forma [a, b]
Explicación
Pruébalo aquí
O use una suite de prueba
fuente
«
como 1 byte cada una (2 bytes en UTF-8). Amboswc
y esto coinciden en que son 19 bytes.C, 76 bytes
Cambié el nombre
c1
ac
,c2
toC
yresult
tor
. Los programadores de C van a los extremos para evitargoto
. Si alguna vez tienes un problema con una sintaxis absurda en C, lo más probable es que no lo hayas utilizadogoto
.Sin golf
fuente
char r[4]="A";
? Mi C está oxidada."AC"
y reemplazando todo der[1]=67
ar[2]=69;
porr[2]=c2?68:69;
C, 41 bytes
No estoy seguro de si la pregunta requiere un programa, una función o un fragmento de código.
Aquí hay una función:
Obtiene la entrada en dos parámetros, que deben ser 0 o 1 (bueno,
b
debe), e imprime en stdout.Se establece
a
en uno de0x4241
,0x454341
o0x444341
. Cuando se imprime como una cadena, en un sistema ASCII little endian, proporciona la salida requerida.fuente
R ,
413937 bytesPruébalo en línea!
En R,
TRUE
yFALSE
están obligados a1
y0
respectivamente cuando intenta utilizarlos como números. Podemos convertir estos números a los índices1
,2
y3
por medio de la fórmula1+a+a^b
.Estos valores se utilizaron a continuación para índice de la lista
ACD
,ACE
,AB
para producir la salida correcta.Ahorró dos bytes gracias a JayCe.
Si en cambio prefiere una versión con una
if
declaración, hay lo siguiente para 41 bytes:Pruébalo en línea!
fuente
^
Mathematica,
3530 bytesMuy simple. Función anónima.
fuente
Retina, 22 bytes
Pruébalo en línea
fuente
^
conm`
, para que funcione para la entrada de varias líneas, lo cual no es necesario para la pregunta, pero facilita las pruebas.JavaScript, 38 bytes
Utilice sin delimitador
0
o en1
lugar defalse
/true
fuente
split` `
lugar desplit(" ")
+('0b'+prompt())
lugar deparseInt(prompt(),2)
Caché ObjectScript , 27 bytes
fuente
ArnoldC , 423 bytes
Como ArnoldC no parece tener una entrada formal, simplemente cambie los primeros 2
YOU SET US UP
valores a 0 o 1.Explicación
Esto es solo un montón de declaraciones condicionales que representan todas las salidas posibles. ¿Por qué, puedes preguntar? Bueno, ArnoldC realmente no tiene comprensión de cuerdas. ¡Ni siquiera puede concatenar cadenas! Como resultado, tenemos que recurrir al método más ... ineficiente ...
fuente
Java, 28 bytes
La misma plantilla que muchas de las respuestas. tipo es
BiFunction<Boolean,Boolean, String>
.fuente
(c,d)->
se puede jugar golf por 1 bytec->d->
cuando usas ajava.util.function.Function<Boolean, java.util.function.Function<Boolean, String>>
.Pyth, 21 bytes
Pruébalo aquí!
La entrada se toma como 0 o 1 en lugar de verdadero / falso mientras que C1 viene primero.
Explicación
Simplemente usando el hecho de que solo hay 4 resultados posibles. Funciona interpretando la entrada como binaria, convirtiéndola en base 10 y usándola para elegir el resultado correcto de la cadena de búsqueda.
fuente
Y , 20 bytes
En el caso de que la primera entrada sea una, solo se toma una entrada. Supongo que este comportamiento está permitido. Pruébalo aquí!
Sin golf:
Explicado:
Esto empuja a los personajes
B
y luegoA
a la pila.Esto toma una entrada, la incrementa, la saca y se mueve sobre ese número de secciones.
Caso 1:
j1 = 0
. Este es el más interesante.r$
invierte la pila y muestra un valor,'C'E
empuja caracteresC
yE
.@
convierteE
a su contraparte numérica, resta la segunda entrada y la reconvierte en un carácter.r
deshace la pila. Luego, el programa ve el enlace C y se mueve al siguiente enlacep
e imprime la pila.Caso 2: el programa se mueve al último enlace
p
, que simplemente imprime la pila completa.fuente
PowerShell, 40 bytes
Matrices anidadas indexadas por entrada. En PowerShell,
$true
/1
y$false
/0
son prácticamente equivalentes (gracias a un tipo de letra muy flojo), por lo que se indexa muy bien en una matriz de dos elementos. Esto es realmente tan cercano a un ternario como PowerShell, y lo he usado muchas veces en el golf.Ejemplos
fuente
K, 37 bytes
fuente
Vitsy , 26 bytes
Espera entradas como 1s o 0s a través de STDIN con una nueva línea de separación.
De hecho, descubrí un problema grave con las declaraciones if durante este desafío. D: Esto se publica con la versión rota, pero funciona bien. (Actualizaré esto después de solucionar el problema)Tenga en cuenta que he actualizado Vitsy con una solución de if / ifnot. Este cambio no me otorga ninguna ventaja, solo una aclaración.Explicación:
Pruébalo en línea!
fuente
cera de abejas , 26 bytes
Interpretando
0
como falso,1
como verdadero.Salida:
Clone mi intérprete de cera de abejas de mi repositorio de Github .
fuente
C,
4745 bytesComo solo hay 3 resultados diferentes, podemos elegir una de tres cadenas como esta:
Gracias a Herman L por 2 bytes.
Manifestación
fuente
char*f(c,d){return"AB\0 ACE\0ACD"+(!c<<d+2);}
Perl, 23 bytes
Requiere el
-E
|-M5.010
marca y toma la entrada como 1 y 0:Solución alternativa que requiere
-p
y es 22 + 1 = 23 bytes:fuente
say-<>?AB:-<>?ACD:ACE
es dos bytes más corto.05AB1E ,
2320 bytesCódigo:
Pruébalo en línea!
fuente
i„ABë„AC69I-çJ
Pruébelo en línea o verifique todos los casos de prueba .I
. ; pJapt, 19 bytes
¡Pruébelo en línea!
Dato curioso: serían 16 bytes si no fuera por un error:
fuente