Ist es wahr oder falsch?

8

Es gibt so viele verschiedene Möglichkeiten auszudrücken, ob etwas wahr ist oder nicht! Das Ziel dieser Herausforderung ist es, eine standardisierte Ausgabe von truthyoder falsyfür verschiedene Eingabe-Wahrheits- und Falschwerte zu erzeugen.

Für die Zwecke dieser Herausforderung werden die folgenden Eingaben als wahr angesehen:

  1. Eine Zeichenfolge, die eine vorzeichenbehaftete Ganzzahl mit einem Wert ungleich Null darstellt (enthält nur die Ziffern [0-9], -am Anfang steht eine Option ). Beachten Sie, dass die Zeichenfolge -0niemals als Eingabe angegeben wird. Einer Ganzzahl ungleich Null wird niemals ein vorangestellt 0(dh 01wird niemals als Eingabe angegeben, ebenso -01wird niemals als Eingabe angegeben).
  2. Die Groß- und Kleinschreibung Saiten entspricht einem von defined, found, nonnil, non-nil, on, success, t, true, y, undyes

Für die Zwecke dieser Herausforderung werden die folgenden Eingaben als falsch angesehen:

  1. Die Zeichenfolge 0. Wiederholte Nullen ( 00, 00...) werden niemals als Eingabe angegeben.
  2. Eine leere Zeichenfolge
  3. Die Groß- und Kleinschreibung Saiten entspricht einem von f, failure, false, n, nan, nil, no, notfound, not-found, null, nullptr, off, undundefined

Eingang

Die Eingabe ist eine Zeichenfolge, die einen Wahrheits- / Falschwert darstellt. Die Zeichenfolge kann aus einer beliebigen Quelle stammen (stdio, Funktionsparameter usw.). Es gibt kein führendes / nachfolgendes Leerzeichen.

Die Eingabe stimmt garantiert mit einem der oben genannten zulässigen Wahrheits- / Falschwerte überein (dh Sie müssen keine Fehlerbehandlung bereitstellen).

Ausgabe

Ihr Programm / Ihre Funktion muss einen Wahrheits- / Falschwert ausgeben, der die "Wahrhaftigkeit" oder "Falschheit" der Eingabe darstellt. Sie dürfen nur genau 1 Wahrheits- und 1 Falschwert angeben, in den Ihre Ausgabe die Eingabe konvertieren muss (dies sind Ihre "standardisierten" Wahrheits- / Falschwertwerte). Die Ausgabe kann in jede gewünschte Senke geschrieben werden (stdio, Rückgabewert, Ausgabeparameter usw.).

Bitte geben Sie an, was truthyund welchen falsyWert Sie in Ihrer Antwort gewählt haben.

Beispiel: Wenn Sie die Zeichenfolge trueals wahrheitsgemäßen Wert auswählen, können Sie nicht auch die Ganzzahl 1für wahrheitsgemäß haben.

Testfälle

Testfälle werden formatiert, da die erste Zeile die Eingabe und die zweite Zeile die Ausgabe ist.

-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

Wertung

Das ist Code-Golf; Der kürzeste Code in Bytes gewinnt. Es gelten Standardlücken. Sie können alle gewünschten integrierten Funktionen verwenden.

helloworld922
quelle
5
Kann eine positive ganze Zahl beginnen 0?
Feersum
1
Sind wiederholte Nullen 00wahr oder sind sie sogar gültige Eingaben? (Ich nehme an, sie sind nicht gültig, sondern überprüfen nur)
Zgarb
3
Was ist mit FileNotFound ? ;)
TRiG
@feersum Eine Eingabe ungleich Null hat niemals vorangestellte Nullen.
helloworld922
@ Zgarb sie sind keine gültigen Eingaben
helloworld922

Antworten:

17

MATL , 20 Bytes

U|sG36ZA13\[BID1]m+g

Die Eingabe ist eine Zeichenfolge in einfachen Anführungszeichen. Die Ausgabe ist 1für wahr oder 0falsch.

Probieren Sie es online aus! Oder überprüfen Sie alle Testfälle .

Wie es funktioniert

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

Dies führt zwei Tests an der Eingabe durch:

  1. Versuchen Sie, die Eingabe als Zahl zu interpretieren und festzustellen, ob sie ungleich Null ist. Die Funktion zum Interpretieren einer Zeichenfolge als Zahl gibt ein leeres Array aus, wenn dies nicht möglich ist. und die Summe der Einträge eines leeren Arrays ist 0. Es reicht also aus, die Konvertierung zu versuchen, den absoluten Wert und die Summe zu nehmen. Dies ergibt einen positiven Wert, wenn die Eingabe eine Zahl ungleich Null enthält, 0andernfalls.
  2. Angenommen, die Eingabezeichenfolge stellt keine Zahl dar, müssen wir sie in eine der beiden angegebenen Mengen klassifizieren. Zu diesem Zweck wird die Eingabe als die Ziffern einer Zahl interpretiert, die in der Basis 36 unter Verwendung des Alphabets ausgedrückt wird '01...9ab...z'. Die Basiskonvertierungsfunktion unterscheidet nicht zwischen Groß- und Kleinschreibung und ignoriert Ziffern, die im Alphabet nicht vorhanden sind (in unserem Fall '-'). Es stellt sich heraus , dass die Modulo 13 der sich ergebende Zahl ist 1, 3, 6oder 8für die truthy Saiten, und jeder dieser Werte nicht für die falsy Saiten geben. So kann es als Signatur verwendet werden. Wir führen also Modulo 13 durch und prüfen, ob das Ergebnis einer dieser vier Werte ist. Dies gibt, 1ob es ist oder 0nicht.

Das Endergebnis sollte wahr sein, wenn eine der beiden Bedingungen erfüllt ist, und ansonsten falsch. Also haben wir die beiden Zahlen aus 1 und 2 und Konvertit logische hinzufügen, die gibt 1oder 0als standardisierte truthy / falsy Werte.

Luis Mendo
quelle
9

Netzhaut , 22 24 23 Bytes

Dank edc65 1 Byte gespeichert

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

Der gesamte Code ist nur ein regulärer Ausdruck. Das i`am Anfang macht den Regex-Fall unempfindlich.

Outputs 1für Wahrheit, 0für Falsey.

Probieren Sie es online aus!

Geschäftskat
quelle
Das n?onist toll, ich werde es benutzen. Ich denke, Sie brauchen nicht das erste `\`
edc65
@ edc65: Du hast recht, ich nicht, seltsamerweise.
Business Cat
Schöner Trick mit n?on.
AdmBorkBork
8

Stapel, 142 Bytes

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

Gibt 1 für falsch aus, nichts für wahr.

Neil
quelle
Antworten wie diese veranlassen mich, ein automatisiertes Skript zu schreiben, das Fragen zu Code Review mit Code Golf-Inhalten enthält. Tücher Träne
CorsiKa
Das ist unglaublich . Auch wenn es kürzere Lösungen geben könnte, ist es mir egal, dies ist der klare Gewinner.
Philomory
6

JavaScript (ES6), 35 39

Bearbeiten Sie mit dem n?onTrick, der aus der Antwort von BusinessCat gestohlen wurde

Bearbeiten 2 OP geklärt, keine führenden Nullen, 4 Bytes gespeichert

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

Einfach zurück trueoderfalse

Prüfung

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)))

edc65
quelle
Funktioniert das Entfernen des \dregulären Ausdrucks und das Wechseln zum regulären Ausdruck |v!=0?
Neil
Wie wäre es mit dem Tauschen \dgegen 1-9? Vorausgesetzt, dass Feersums Frage zutreffend ist, ^([-1-9dsty]|on|fo|non)sollte dies ausreichen.
AdmBorkBork
4

Python, 111 Bytes

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]

Tests zur Summe der ASCII-Werte, zusätzliche Prüfung für noda onhat den gleichen Wert.

  • Edit1: Ich habe vergessen, auf ganzzahlige Werte zu testen. Überprüfen Sie nun, ob falsche Eingaben vorliegen
Karl Napf
quelle
@ edc65 die erste Antwort nicht, jetzt auf falsch und einschließlich ord('0')tut
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]>1Ich habe es aber nicht getestet.
James
4

Python, 129 79 78 Bytes

Muss schnell einreichen!

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

Wahr ist falsch und falsch ist wahr; Ich habe einen schönen Reim dafür, das tue ich wirklich (nicht)

Zerstörbare Zitrone
quelle
Warum das Downvote? Es scheint zu funktionieren, nur wahr ist falsch und falsch ist wahr, das ist erlaubt
edc65
2
Sie können das zu schreibende String-Array verkürzen' 0 f failure false n nan nil no notfound not-found null nullptr off undefined'.split(' ')
KarlKastor
@KarlKastor Sie können .split()stattdessen tatsächlich verwenden , da das Standardtrennzeichen für splitLeerzeichen ist.
Skyler
@ Skyler Ich weiß, aber dann fehlt irgendwie die leere Zeichenfolge.
KarlKastor
3

Python, 83 75 Bytes

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

Gibt bei Erfolg 0 zurück, AttributeError bei Fehler.

Verwenden Sie jetzt den regulären Ausdruck von edc85, um 8 Bytes zu sparen.

Skyler
quelle
2
Ach ja, der gute alte Ansatz "Explodiere das Programm, wenn es den Test nicht besteht". Ich liebe es, Kommentare wie "Wir hätten hier nicht mit ungültigen Argumenten erreichen können" zu sehen :-)
corsiKa
2

PowerShell v2 +, 39 37 Byte

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

Vorausgesetzt, die Antwort auf die Frage von @ feersum lautet "Nein, wahrheitsgemäße Ganzzahlen dürfen nicht mit a beginnen 0."

Port der regulären JavaScript-Antwort von @ edc65 mit meiner eigenen 1-9Ersetzung anstelle von \d. Verwendet den n?onTrick von @ BusinessCat, um weiter Golf zu spielen.

Ausgänge literal Booleschen $trueoder $falseWerte, die , wenn sie auf der Rohrleitung verlassen und durch einen impliziten geschickt Write-Outputam Ende der Ausführungsergebnisse in Trueoder Falsean der Konsole gedruckt wird.


Wenn die Antwort "Ja, wahrheitsgemäße Ganzzahlen können mit beginnen 0" lautet, müssen die folgenden Änderungen für 51 49 Bytes vorgenommen werden

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

Wenn Sie Regex nicht mögen, wählen Sie PowerShell v3 + und das Folgende mit 107 Byte

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

Dies verwendet die Zeichenfolge von Falsey-Werten, -splits sie in Leerzeichen, und verwendet den -notinOperator, um die Eingabe $nmit diesem Array von Zeichenfolgen zu vergleichen (bei dem standardmäßig die Groß- und Kleinschreibung nicht berücksichtigt wird). Erfordert die $n-andPrüfung mit der leeren Zeichenfolge.

AdmBorkBork
quelle
Sie brauchen keine Klammern, um Alternation in Regex zu verwenden: '^[-1-9dsty]|fo|n?on' :)
Briantist
@briantist Ohne die Parens passt es notfoundund not-foundwegen der fo.
AdmBorkBork
D'oh, du hast recht. Sie könnten tun, ^[-1-9dsty]|^fo|^n?onaber das ist die gleiche Anzahl von Zeichen und weniger klar.
Briantist
1

PHP, 50 Bytes

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

Drucke 1für wahr, nichts für falsch

hat versucht, eine andere Lösung zu finden, aber der kürzeste reguläre Ausdruck für Falschheit ist 3 Byte länger als der für Wahrheit: %^(0|fa|f?$|n(?!on)|of|u)%i

Titus
quelle
0

Python, 83 Bytes

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

https://repl.it/ClgO/1

Atlasologe
quelle
Sind die innicht nicht leer?
Titus
@Titus Ich bin nicht sicher, was du meinst.
Atlasologe
Was ist x[:1]für eine leere Zeichenfolge? Gibt inreturn in diesem Fall false zurück? Wenn ja, sollten Sie in der Lage sein, dieand''<x
Titus
@Titus, ich verstehe was du meinst. Ich hatte zuerst den gleichen Gedanken, aber ''[:1] in 'abc'bewertet als wahr.
Atlasologe