それは真実か偽物ですか?


8

何かが真実であるかどうかを表現するには、非常に多くの異なる方法があります!この課題の目標は、生産することである標準の出力truthyfalsy、さまざまな入力truthyとfalsy値のために。

この課題のために、以下の入力は真実と見なされます。

  1. ゼロ以外の値を持つ符号付き整数を表す文字列(数字のみが含まれ、先頭に[0-9]オプションがあります-)。文字列-0が入力として与えられることは決してないことに注意してください。0以外の整数の前にaが付くことは決してありません0(つまり01、入力として与えられることはなく、同様に入力として与えられる-01こともありません)。
  2. いずれかに相当する、大文字と小文字を区別しない文字列definedfoundnonnilnon-nilonsuccessttruey、及びyes

この課題のために、次の入力は偽物と見なされます。

  1. 文字列0。繰り返されるゼロ(0000...)は入力として与えられません。
  2. 空の文字列
  3. いずれかに相当する、大文字と小文字を区別しない文字列ffailurefalsennannilnonotfoundnot-foundnullnullptroff、及びundefined

入力

入力は、真偽値を表す文字列です。文字列は任意のソース(stdio、関数パラメーターなど)から取得できます。先頭/末尾の空白はありません。

入力は、上記の許可された真偽値のいずれかに一致することが保証されています(つまり、エラー処理を提供する必要はありません)。

出力

プログラム/関数は、入力の「真実性」または「偽性」を表す真偽値を出力する必要があります。出力で入力を変換する必要がある正確に1つの真偽値と1つの偽値のみを指定できます(これらは「標準化された」真偽値)。出力は、任意のシンク(stdio、戻り値、出力パラメーターなど)に書き込むことができます。

回答で選択したものtruthyfalsy値を指定してください。

例:文字列trueを真の値として選択した場合、真の整数も使用できません1

テストケース

テストケースは、1行目が入力、2行目が出力であるため、フォーマットされています。

-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

得点

これはコードゴルフです。バイト単位の最短コードが優先されます。標準の抜け穴が適用されます。必要なビルトインを使用できます。


5
正の整数で始めることはできます0か?
feersum

1
ゼロの繰り返しは00真実のようですか、それとも有効な入力ですか?(私はそれらが有効ではなく、チェックしているだけだと思います)
Zgarb

3
何についてのするFileNotFound?;)
TRiG 2016

@feersumゼロ以外の入力には、先行するゼロはありません。
helloworld922 2016

@Zgarbそれらは有効な入力ではありません
helloworld922

回答:


17

MATL、20バイト

U|sG36ZA13\[BID1]m+g

入力は、単一引用符で囲まれた文字列です。出力は1、真実または0偽造です。

オンラインでお試しください!または、すべてのテストケースを確認します

使い方

U|s      % Take input implicitly. Interpret as number, absolute value, sum
G36ZA    % Push input again. Convert from base-36
13\      % Modulo 13
[BID1]   % Push array [6 3 8 1]
m        % True if member: gives 1 iff the result from modulo 13 is in the array
+g       % Add, convert to logical. Display implicitly

これにより、入力に対して2つのテストが実行されます。

  1. 入力を数値として解釈し、それがゼロ以外であるかどうかを検出してください。文字列を数値として解釈するために使用される関数は、それが不可能な場合は空の配列を出力します。空の配列のエントリの合計は0です。したがって、変換を試し、絶対値を取り、合計するだけで十分です。これは、入力にゼロ以外の数値が含まれている場合は正の値を、0それ以外の場合は正の値を返します。
  2. 入力文字列が数値を表していないと仮定すると、それを2つの与えられたセットの1つに分類する必要があります。これを行うために、入力は、基数36で表された数字の桁数として、alphabetを使用して解釈されます'01...9ab...z'。基本変換関数は大文字と小文字を区別せず、アルファベットにない数字(この場合は'-')を無視します。これは、結果として得られる数のモジュロ13であることが判明136または8truthyストリングのため、およびfalsyストリングのためのこれらの値のいずれかを与えません。そのため、署名として使用できます。したがって、13を法として実行し、結果がこれらの4つの値のいずれかであるかどうかを確認します。これ1は、0そうであるかどうかを示します。

2つの条件のいずれかが満たされている場合、最終結果は真実であり、そうでない場合は偽です。我々は与える、論理的に1及び2上及び変換から生じる2つの数値を追加するように1、または0標準truthy / falsy値として。


9

Retina22 24 23バイト

edc65のおかげで1バイト節約

i`^([-1-9sdty]|fo|n?on)

コード全体は単なる正規表現です。i`開始時には、正規表現のケース小文字を区別しないになります。

1真実、偽りの出力0

オンラインでお試しください!


n?on私はそれを使用するつもりです、素晴らしいです。最初の `\`は必要ないと思います
edc65

@ edc65:あなたが正しい、私は違う、奇妙なことに十分だ。
ビジネス猫

との素敵なトリックn?on
AdmBorkBork

8

バッチ、142バイト

@goto l%1 2>nul
:l
:l0
:lfailure
:lfalse
:ln
:lnan
:lnil
:lno
:lnotfound
:lnot-found
:lnull
:lnullptr
:loff
:lundefined
@echo 1

偽の場合は1、真の場合は何も出力しません。


このような回答があると、Code GolfのコンテンツがシードされたCode Reviewに質問を投稿する自動スクリプトを書きたくなります。涙を拭く
corsiKa

これはすごい。より短い解決策があったとしても、私は気にしません、これは明らかに勝者です。
哲学

6

JavaScript(ES6)、35 39

n?onBusinessCatの答えから盗んだトリックを使用して編集する

編集2 OPが明確になり、先行0なし、4バイト節約

v=>/^([-1-9dsty]|fo|n?on)/i.test(v)

単に戻るtruefalse

テスト

f=v=>/^([-1-9dsty]|fo|n?on)/i.test(v)

trues=[-1,1,1234,-4321,'defined','deFined','Found',
'nonnil','non-nil','ON','SuCCess','T','true','y','YeS']
falses=[0,'','faLSE','f','Failure','n','NaN','nil',
'no','notfound','not-Found','NULL','nullptr','OFF','unDefined']

console.log('TRUE: '+trues.map(x=>f(x)))

console.log('FALSE:' +falses.map(x=>f(x)))


\d正規表現からを削除して機能するように変更し|v!=0ますか?
Neil

どのようにスワップについて\dのために1-9?フィーアサムの質問が正確である^([-1-9dsty]|on|fo|non)という条件で、十分です。
AdmBorkBork

4

Python、111バイト

def b(s):s=s.lower();return s!='no'and not sum(map(ord,s))in[0,48,323,744,523,877,110,785,443,922,315,317,946]

ASCII値の合計のテスト、追加のチェック noonます。それ以来は同じ値を持っています。

  • Edit1:整数値でテストするのを忘れました。誤った入力をチェックしています

@ edc65最初の答えはありませんでしたが、今はfalseをチェックし、ord('0')そうしました
Karl Napf

lambda 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私はそれをテストしていません。
ジェームズ

4

Python、129 79 78バイト

早く提出しなきゃ!

lambda n:n.lower()[:3]in" 0 f n no nil fai fal nan not nul off und".split(" ")

真は偽であり、偽は真です。私はこれのための素晴らしい韻を持っています、私は本当にします(しません)


なぜ反対票か。機能しているようですが、trueはfalse、falseはtrueです。それは許可されています
edc65

2
書き込む文字列配列を短くすることができます' 0 f failure false n nan nil no notfound not-found null nullptr off undefined'.split(' ')
KarlKastor

@KarlKastor .split()のデフォルトのセパレータsplitは空白なので、実際に使用できます。
スカイラー、

@Skyler知っていますが、どういうわけか空の文字列が欠落しています。
KarlKastor

3

Python、83 75バイト

import re
def f(s):return re.search(r'^([-1-9dsty]|fo|n?on)',s.lower()).pos

成功した場合は0、失敗した場合はAttributeErrorを返します。

edc85の正規表現を使用して8バイトを節約します。


2
ああそう、古き良き「プログラムがテストに失敗したときにプログラムを爆発させる」というアプローチ。「無効な引数でここに到達できなかった」などのコメントを見るのが好きです:-)
corsiKa

2

PowerShell v2 +、39 37バイト

$args[0]-match'^([-1-9dsty]|fo|n?on)'

@feersumの質問への答えが「いいえ、真実の整数は0。で始まってはいけません。」であると仮定します。

@ edc65さんの港正規表現JavaScriptの答えは私自身と、1-9代わりの置換\d。さらにゴルフするために@BusinessCat のn?onトリックを使用します。

リテラルブール値$trueまたはリテラル値を出力し$falseます。これは、パイプラインに残され、Write-Output実行の最後に暗黙的に送信されると、結果として、TrueまたはFalseコンソールに出力されます。


答えが「はい、真の整数はで始まる可能0性があります」である場合、51 49バイトに対して次の変更を行う必要があります。

param($n)$n-ne0-and$n-match'^([-\ddsty]|fo|n?on)'

正規表現が気に入らない場合は、PowerShell v3 +以降を107バイトで使用してください

param($n)$n-and$n-notin-split'0 f failure false n nan nil no notfound not-found null nullptr off undefined'

これは、誤った値の文字列を取り、-split空白にそれらを入れ、-notin演算子を使用して、$nその文字列の配列に対して入力をチェックします(デフォルトでは、大文字と小文字は区別されません)。$n-and空の文字列をチェックする必要があります。


正規表現で代替を使用するために括弧は必要ありません:'^[-1-9dsty]|fo|n?on' :)
ブリアンティスト

括弧なし@briantist、それが一致したnotfoundnot-found理由のfo
AdmBorkBork

おお、あなたは正しい。あなたがすること^[-1-9dsty]|^fo|^n?onができますが、それは同じ文字数であり、あまり明確ではありません。
ブライアンティスト2016

1

PHP、50バイト

<?=preg_match('%^([-1-9dsty]|fo|n?on)%i',$argv[1])

プリント 1真実のために、偽りのために何もない

別の解決策を考え出そうとしましたが、偽の最短正規表現は真実の正規表現よりも3バイト長くなっています。 %^(0|fa|f?$|n(?!on)|of|u)%i


0

Python、83バイト

lambda x:x.lower()[:3]in['fou','non','on']or x[:1].lower()in'dsty-123456789'and''<x

https://repl.it/ClgO/1


ドントinsが空でない含めますか?
タイタス

@タイタス私はあなたが何を意味するのかわからない。
アトラスロジスト2016

x[:1]空の文字列は何ですか?いin戻りfalseが、その場合には?もしそうなら、あなたはand''<x
2016

@タイタス、私はあなたが何を意味するのかわかります。最初は同じ考えでしたが、''[:1] in 'abc'評価はtrueです。
アトラスロジスト2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.