¡Hay tantas formas diferentes de expresar si algo es verdad o no! El objetivo de este desafío es producir una salida estandarizada de truthyo falsypara 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-0nunca 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é truthyy el falsyvalor que eligió en su respuesta.
Ej .: Si elige la cadena truecomo valor verdadero, no puede tener también el número entero 1para 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?00verdaderos 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
1para la verdad o0para 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 lo0contrario.'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,6o8para 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 da1si es, o de lo0contrario.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
1o0como 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
1para la verdad,0para falsey.Pruébalo en línea!
fuente
n?ones 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?ontruco, robado de la respuesta de BusinessCatEditar 2 OP aclarado, sin ceros a la izquierda, guardado 4 bytes
Simplemente vuelve
trueofalsePrueba
fuente
\ddel regexp y cambiar al|v!=0trabajo?\dpor1-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
noya queontiene 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]>1Sin 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 parasplitespacios 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-9sustitución en lugar de\d. Utiliza eln?ontruco de @ BusinessCat para jugar más al golf.Emite valores booleanos
$trueo$falsevalores literales que, cuando se dejan en la tubería y se envían a través de un implícitoWrite-Outputal final de la ejecución, se imprimenTrueoFalsese 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,
-splitlos coloca en espacios en blanco y usa el-notinoperador para verificar la entrada$ncontra esa matriz de cadenas (que, por defecto, no distingue entre mayúsculas y minúsculas). Requiere$n-andque se compruebe contra la cadena vacía.fuente
'^[-1-9dsty]|fo|n?on'notfoundynot-founddebido a lafo.^[-1-9dsty]|^fo|^n?onpero esa es la misma cantidad de caracteres y menos clara.PHP, 50 bytes
impresiones
1para 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)%ifuente
Python, 83 bytes
https://repl.it/ClgO/1
fuente
inincluyen los s no vacíos?x[:1]para una cadena vacía? ¿inDevuelve falso en ese caso? Si es así, deberías poder soltar eland''<x''[:1] in 'abc'evalúa como verdadero.