¡Hay tantas formas diferentes de expresar si algo es verdad o no! El objetivo de este desafío es producir una salida estandarizada de truthy
o falsy
para varios valores de verdad y falsedad de entrada.
Para los propósitos de este desafío, las siguientes entradas se consideran verdaderas:
- Una cadena que representa un entero con signo con un valor distinto de cero (contiene solo los dígitos
[0-9]
, con un opcional-
al principio). Tenga en cuenta que la cadena-0
nunca se dará como entrada. Un número entero distinto de cero nunca estará precedido por un0
(es decir01
, nunca se dará como entrada, de manera similar-01
, nunca será gien como entrada). - Las cadenas de mayúsculas y minúsculas equivalentes a uno de
defined
,found
,nonnil
,non-nil
,on
,success
,t
,true
,y
, yyes
Para los propósitos de este desafío, las siguientes entradas se consideran falsas:
- La cadena
0
. Los ceros repetidos (00
,00...
) nunca se darán como entrada. - Una cadena vacía
- Las cadenas de mayúsculas y minúsculas equivalentes a uno de
f
,failure
,false
,n
,nan
,nil
,no
,notfound
,not-found
,null
,nullptr
,off
, yundefined
Entrada
La entrada es una cadena que representa un valor verdadero / falso. La cadena puede provenir de cualquier fuente deseada (stdio, parámetro de función, etc.). No hay espacios en blanco iniciales / finales.
Se garantiza que la entrada coincida con uno de los valores de verdad / falsedad permitidos anteriores (es decir, no es necesario que proporcione ningún tratamiento de errores).
Salida
Su programa / función debe generar un valor de verdad / falsedad que represente la "verdad" o "falsedad" de la entrada. Solo se le permite especificar exactamente 1 valor de verdad y 1 valor de falsedad al que su salida debe convertir la entrada (estos son su valor de verdad / falsedad "estandarizado"). La salida puede escribirse en cualquier sumidero deseado (estándar, valor de retorno, parámetro de salida, etc.).
Especifique qué truthy
y el falsy
valor que eligió en su respuesta.
Ej .: Si elige la cadena true
como valor verdadero, no puede tener también el número entero 1
para verdad.
Casos de prueba
Los casos de prueba están formateados ya que la primera línea es la entrada y la segunda línea es la salida.
-1
true
1
true
1234
true
-4321
true
defined
true
deFined
true
Found
true
nonnil
true
non-nil
true
ON
true
SuCCess
true
T
true
true
true
y
true
YeS
true
0
false
'' (empty string)
false
faLSE
false
f
false
Failure
false
n
false
NaN
false
nil
false
no
false
notfound
false
not-Found
false
NULL
false
nullptr
false
OFF
false
unDefined
false
Puntuación
Este es el código de golf; el código más corto en bytes gana. Se aplican lagunas estándar. Puede usar los complementos deseados.
fuente
0
?00
verdaderos o incluso son entradas válidas? (Supongo que no son válidos, pero solo están comprobando)Respuestas:
MATL , 20 bytes
La entrada es una cadena entre comillas simples. La salida es
1
para la verdad o0
para la falsedad.Pruébalo en línea! O verificar todos los casos de prueba .
Cómo funciona
Esto realiza dos pruebas en la entrada:
0
. Por lo tanto, es suficiente intentar la conversión, tomar el valor absoluto y sumar. Esto da un valor positivo si la entrada contiene un número distinto de cero, y de lo0
contrario.'01...9ab...z'
. La función de conversión de base no distingue entre mayúsculas y minúsculas e ignora los dígitos que no están presentes en el alfabeto (en nuestro caso'-'
). Resulta que el módulo 13 del número resultante es1
,3
,6
o8
para las cadenas Truthy, y no da ninguna de esos valores para las cadenas Falsy. Por lo tanto, se puede usar como una firma. Por lo tanto, realizamos el módulo 13 y vemos si el resultado es alguno de esos cuatro valores. Esto da1
si es, o de lo0
contrario.El resultado final debe ser verdadero si se cumple alguna de las dos condiciones, y falso de lo contrario. Por lo tanto, agregamos los dos números resultantes de 1 y 2 anteriores y los convertimos a lógicos, lo que da
1
o0
como valores de verdad / falsedad estandarizados.fuente
Retina ,
222423 bytesGuardado 1 byte gracias a edc65
Todo el código es solo una expresión regular. El
i`
principio hace que la expresión regular no sea sensible.Salidas
1
para la verdad,0
para falsey.Pruébalo en línea!
fuente
n?on
es genial, lo voy a usar. Creo que no necesitas el primer `\`n?on
.Lote, 142 bytes
Salidas 1 para falsedad, nada para verdad.
fuente
JavaScript (ES6), 35
39Edite usando el
n?on
truco, robado de la respuesta de BusinessCatEditar 2 OP aclarado, sin ceros a la izquierda, guardado 4 bytes
Simplemente vuelve
true
ofalse
Prueba
fuente
\d
del regexp y cambiar al|v!=0
trabajo?\d
por1-9
? Siempre que la pregunta de feersum sea precisa,^([-1-9dsty]|on|fo|non)
debería ser suficiente.Python, 111 bytes
Pruebas en la suma de los valores ASCII, verificación adicional
no
ya queon
tiene el mismo valor.fuente
ord('0')
nolambda s:s.lower()!='no'and sum(map(ord,s.lower()))in[0,48,323,744,523,877,110,785,443,922,315,317,946]>1
Sin embargo, no lo he probado.Python,
1297978 bytesTengo que enviar rápido!
Verdadero es falso y falso es verdadero; Tengo una buena rima para esto, realmente (no)
fuente
' 0 f failure false n nan nil no notfound not-found null nullptr off undefined'.split(' ')
.split()
, porque el separador predeterminado parasplit
espacios en blanco.Python,
8375 bytesDevuelve 0 en caso de éxito, AttributeError en caso de error.
Ahora usando la expresión regular de edc85 para guardar 8 bytes.
fuente
PowerShell v2 +,
3937 bytesPresume que la respuesta a la pregunta de @ feersum es "No, los enteros verdaderos pueden no comenzar con a
0
".Puerto de la respuesta de JavaScript de regex de @ edc65 , con mi propia
1-9
sustitución en lugar de\d
. Utiliza eln?on
truco de @ BusinessCat para jugar más al golf.Emite valores booleanos
$true
o$false
valores literales que, cuando se dejan en la tubería y se envían a través de un implícitoWrite-Output
al final de la ejecución, se imprimenTrue
oFalse
se imprimen en la consola.Si la respuesta es "Sí, los enteros verdaderos pueden comenzar con
0
", entonces los siguientes cambios deben hacerse para5149 bytesSi no le gusta la expresión regular, vaya a PowerShell v3 + y lo siguiente en 107 bytes
Esto toma la cadena de valores de falsey,
-split
los coloca en espacios en blanco y usa el-notin
operador para verificar la entrada$n
contra esa matriz de cadenas (que, por defecto, no distingue entre mayúsculas y minúsculas). Requiere$n-and
que se compruebe contra la cadena vacía.fuente
'^[-1-9dsty]|fo|n?on'
notfound
ynot-found
debido a lafo
.^[-1-9dsty]|^fo|^n?on
pero esa es la misma cantidad de caracteres y menos clara.PHP, 50 bytes
impresiones
1
para la verdad, nada para la falsedadintenté encontrar una solución diferente, pero la expresión regular más corta para falsedad es 3 bytes más larga que la de verdad:
%^(0|fa|f?$|n(?!on)|of|u)%i
fuente
Python, 83 bytes
https://repl.it/ClgO/1
fuente
in
incluyen los s no vacíos?x[:1]
para una cadena vacía? ¿in
Devuelve falso en ese caso? Si es así, deberías poder soltar eland''<x
''[:1] in 'abc'
evalúa como verdadero.