Existem muitas maneiras diferentes de expressar se algo é verdadeiro ou não! O objetivo desse desafio é produzir uma saída padronizada de truthy
ou falsy
para vários valores de verdade e falsidade de entrada.
Para os propósitos deste desafio, as seguintes entradas são consideradas verdadeiras:
- Uma sequência que representa um número inteiro assinado com um valor diferente de zero (contém apenas os dígitos
[0-9]
, com um opcional-
no início). Observe que a string-0
nunca será fornecida como entrada. Um número inteiro diferente de zero nunca será precedido por a0
(ou seja01
, nunca será dado como entrada, da mesma forma-01
nunca será obtido como entrada). - As cordas de maiúsculas e minúsculas equivalentes a um de
defined
,found
,nonnil
,non-nil
,on
,success
,t
,true
,y
, eyes
Para os propósitos deste desafio, as seguintes entradas são consideradas falsas:
- A cadeia
0
. Zeros repetidos (00
,00...
) nunca serão dados como entrada. - Uma string vazia
- As cordas de maiúsculas e minúsculas equivalentes a um de
f
,failure
,false
,n
,nan
,nil
,no
,notfound
,not-found
,null
,nullptr
,off
, eundefined
Entrada
A entrada é uma sequência que representa um valor de verdade / falsidade. A string pode vir de qualquer fonte desejada (stdio, parâmetro de função etc.). Não há espaços em branco à esquerda / à direita.
A entrada é garantida para corresponder a um dos valores permitidos de verdade / falsidade acima (ou seja, você não precisa fornecer nenhum tratamento de erros).
Resultado
Seu programa / função deve gerar um valor de verdade / falsidade que represente a "verdade" ou "falsidade" da entrada. Você só pode especificar exatamente 1 valor de verdade e 1 valor de falsidade para o qual sua saída deve converter a entrada (esses são seus valores de verdade / falsidade "padronizados"). A saída pode ser gravada em qualquer coletor desejado (stdio, valor de retorno, parâmetro de saída, etc.).
Especifique o valor truthy
e o falsy
valor que você escolheu na sua resposta.
Ex .: Se você escolher a sequência true
como um valor de verdade, também não poderá ter o número inteiro 1
para a verdade.
Casos de teste
Os casos de teste são formatados como a primeira linha é a entrada e a segunda linha é a saída.
-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
Pontuação
Isso é código-golfe; o código mais curto em bytes vence. Aplicam-se brechas padrão. Você pode usar quaisquer embutidos desejados.
fonte
0
?00
verdade ou são entradas válidas? (Suponho que eles não são válidos, mas apenas verificando)Respostas:
MATL , 20 bytes
Entrada é uma cadeia de caracteres entre aspas simples. A saída é verdadeira
1
ou0
falsa.Experimente online! Ou verifique todos os casos de teste .
Como funciona
Isso realiza dois testes na entrada:
0
. Portanto, basta tentar a conversão, pegar o valor absoluto e somar. Isso fornece um valor positivo se a entrada contiver um número diferente de zero, e0
caso contrário.'01...9ab...z'
. A função de conversão de base não diferencia maiúsculas de minúsculas e ignora os dígitos que não estão presentes no alfabeto (no nosso caso'-'
). Acontece que o modulo 13 do número resultante é1
,3
,6
ou8
para as cordas truthy, e não dá qualquer um desses valores para as cordas Falsas. Portanto, pode ser usado como uma assinatura. Assim, executamos o módulo 13 e verificamos se o resultado é algum desses quatro valores. Isso dá1
se for ou0
não.O resultado final deve ser verdadeiro se alguma das duas condições for atendida e, caso contrário, falsificado. Portanto, adicionamos os dois números resultantes de 1 e 2 acima e convertemos em lógico, que fornece
1
ou0
como valores padronizados de verdade / falsidade.fonte
Retina ,
222423 bytesGuardado 1 byte graças a edc65
O código inteiro é apenas uma regex. O
i`
início torna o caso de regex insensitivo.Saídas
1
para verdade,0
para falsey.Experimente online!
fonte
n?on
é ótimo, eu vou usá-lo. Eu acho que você não precisa do primeiro `\`n?on
.Lote, 142 bytes
Saídas 1 por falsidade, nada por verdade.
fonte
JavaScript (ES6), 35
39Edite usando o
n?on
truque, roubado da resposta do BusinessCatEditar 2 OP esclarecido, nenhum 0 inicial, salvo 4 bytes
Simplesmente retorna
true
oufalse
Teste
fonte
\d
partir da regexp e mudar para o|v!=0
trabalho?\d
por1-9
? Desde que a pergunta do feersum seja precisa,^([-1-9dsty]|on|fo|non)
deve ser suficiente.Python, 111 bytes
Testes na soma dos valores ASCII, verificação extra para,
no
poison
tem o mesmo valor.fonte
ord('0')
nãolambda 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
Eu não testei embora.Python,
1297978 bytesTem que enviar rápido!
Verdadeiro é falso e falso é verdadeiro; Eu tenho uma bela rima para isso, eu realmente (não)
fonte
' 0 f failure false n nan nil no notfound not-found null nullptr off undefined'.split(' ')
.split()
, porque o separador padrão parasplit
é espaço em branco.Python,
8375 bytesRetorna 0 em caso de sucesso, AttributeError em falha.
Agora, usando o regex do edc85 para economizar 8 bytes.
fonte
PowerShell v2 +,
3937 bytesSupõe que a resposta à pergunta de @ feersum é "Não, números inteiros verdadeiros não podem começar com a
0
".Porta da resposta JavaScript do regex do @ edc65 , com minha própria
1-9
substituição em vez de\d
. Usa on?on
truque do @ BusinessCat para jogar ainda mais.Emite valores
$true
ou$false
valores booleanos literais que, quando deixados no pipeline e enviados por meio de um implícitoWrite-Output
no final da execução, resultamTrue
ouFalse
são impressos no console.Se a resposta for "Sim, inteiros verdadeiros podem começar com
0
", as seguintes alterações deverão ser feitas para5149 bytesSe você não gosta de regex, vá para o PowerShell v3 + e o seguinte em 107 bytes
Isso pega a cadeia de valores falsey, coloca-
-split
os no espaço em branco e usa o-notin
operador para verificar a entrada$n
com base nessa matriz de cadeias (que, por padrão, não diferencia maiúsculas de minúsculas). Requer a$n-and
verificação contra a cadeia vazia.fonte
'^[-1-9dsty]|fo|n?on'
:)notfound
enot-found
por causa dafo
.^[-1-9dsty]|^fo|^n?on
mas esse é o mesmo número de caracteres e menos claro.PHP, 50 bytes
imprime
1
por verdade, nada por falsidadetentou encontrar uma solução diferente, mas o menor regex para falsy é 3 bytes mais longo do que para verdade:
%^(0|fa|f?$|n(?!on)|of|u)%i
fonte
Python, 83 bytes
https://repl.it/ClgO/1
fonte
in
inclui não vazio?x[:1]
uma string vazia? Retornain
false nesse caso? Em caso afirmativo, você deve ser capaz de eliminar oand''<x
''[:1] in 'abc'
avalia como verdadeiro.