Đó là sự thật hay giả dối?


8

Có rất nhiều cách khác nhau để diễn tả liệu điều gì đó có đúng hay không! Mục tiêu của thách thức này là tạo ra một đầu ra được tiêu chuẩn hóatruthy hoặc falsycho các giá trị trung thực và sai lệch đầu vào khác nhau.

Đối với mục đích của thách thức này, các đầu vào sau đây được coi là trung thực:

  1. Một chuỗi đại diện cho một số nguyên đã ký với giá trị khác không (chỉ chứa các chữ số [0-9], với một tùy chọn -ở đầu). Lưu ý rằng chuỗi -0sẽ không bao giờ được đưa ra làm đầu vào. Một số nguyên khác không sẽ không bao giờ được đi trước bởi một 0(nghĩa là 01sẽ không bao giờ được đưa ra làm đầu vào, tương tự -01sẽ không bao giờ được đưa ra làm đầu vào).
  2. Các chuỗi case-insensitive tương đương với một trong những defined, found, nonnil, non-nil, on, success, t, true, y, vàyes

Đối với mục đích của thử thách này, các đầu vào sau đây được coi là giả mạo:

  1. Chuỗi 0. Các số 0 lặp lại ( 00, 00...) sẽ không bao giờ được đưa ra làm đầu vào.
  2. Một chuỗi rỗng
  3. Các chuỗi case-insensitive tương đương với một trong những f, failure, false, n, nan, nil, no, notfound, not-found, null, nullptr, off, vàundefined

Đầu vào

Đầu vào là một chuỗi đại diện cho một giá trị trung thực / giả. Chuỗi có thể đến từ bất kỳ nguồn nào mong muốn (stdio, tham số hàm, v.v.). Không có khoảng trắng hàng đầu / dấu.

Đầu vào được đảm bảo khớp với một trong các giá trị trung thực / sai lệch được phép ở trên (nghĩa là bạn không cần cung cấp bất kỳ xử lý lỗi nào).

Đầu ra

Chương trình / chức năng của bạn phải xuất ra một giá trị trung thực / giả mạo đại diện cho "tính trung thực" hoặc "giả mạo" của đầu vào. Bạn chỉ được phép chỉ định chính xác 1 giá trị trung thực và 1 giá trị giả mà đầu ra của bạn phải chuyển đổi đầu vào thành (đây là giá trị trung thực / sai lệch "tiêu chuẩn hóa" của bạn). Đầu ra có thể được ghi vào bất kỳ phần chìm nào mong muốn (stdio, giá trị trả về, tham số đầu ra, v.v.).

Vui lòng xác định những gì truthyfalsygiá trị bạn đã chọn trong câu trả lời của bạn.

Ví dụ: Nếu bạn chọn chuỗi truelà giá trị trung thực, bạn cũng không thể có số nguyên 1cho tính trung thực.

Các trường hợp thử nghiệm

Các trường hợp kiểm tra được định dạng là dòng đầu tiên là đầu vào và dòng thứ hai là đầu ra.

-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

Chấm điểm

Đây là môn đánh gôn; mã ngắn nhất trong byte thắng. Tiêu chuẩn áp dụng. Bạn có thể sử dụng bất kỳ tích hợp nào mong muốn.


5
Một số nguyên dương có thể bắt đầu bằng 0?
frageum

1
Là số không lặp đi lặp lại như sự 00thật, hoặc thậm chí chúng là đầu vào hợp lệ? (Tôi cho rằng chúng không hợp lệ, nhưng chỉ cần kiểm tra)
Zgarb

3
Những gì về FileNotFound ? ;)
TRiG

@feersum một đầu vào khác không sẽ không bao giờ có các số 0 trước.
hellowworld922

@Zgarb họ không phải là đầu vào hợp lệ
helloworld922

Câu trả lời:


17

MATL , 20 byte

U|sG36ZA13\[BID1]m+g

Đầu vào là một chuỗi được bao trong các dấu ngoặc đơn. Đầu ra là 1cho sự thật hoặc giả 0.

Hãy thử trực tuyến! Hoặc xác minh tất cả các trường hợp thử nghiệm .

Làm thế nào nó hoạt động

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

Điều này thực hiện hai bài kiểm tra trên đầu vào:

  1. Cố gắng diễn giải đầu vào dưới dạng số và phát hiện nếu nó không khác. Hàm được sử dụng để giải thích một chuỗi dưới dạng một số tạo ra một mảng trống nếu không thể; và tổng các mục của một mảng trống là 0. Vì vậy, nó đủ để thử chuyển đổi, lấy giá trị tuyệt đối và tổng. Điều này mang lại giá trị dương nếu đầu vào chứa số khác không, và mặt 0khác.
  2. Giả sử chuỗi đầu vào không đại diện cho một số, chúng ta cần phân loại nó thành một trong hai bộ đã cho. Để làm điều này, đầu vào được hiểu là các chữ số của một số được biểu thị trong cơ sở-36, sử dụng bảng chữ cái '01...9ab...z'. Hàm chuyển đổi cơ sở không phân biệt chữ hoa chữ thường và bỏ qua các chữ số không có trong bảng chữ cái (trong trường hợp của chúng tôi '-'). Nó chỉ ra rằng các modulo 13 số kết quả là 1, 3, 6hoặc 8cho các dây truthy, và không đưa ra bất kỳ của những giá trị cho các chuỗi falsy. Vì vậy, nó có thể được sử dụng như một chữ ký. Do đó, chúng tôi thực hiện modulo 13 và xem kết quả có phải là một trong bốn giá trị đó không. Điều này cho 1nếu nó là, hoặc 0cách khác.

Kết quả cuối cùng phải là sự thật nếu bất kỳ một trong hai điều kiện được đáp ứng, và giả mạo khác. Vì vậy, chúng tôi thêm hai số kết quả từ 1 và 2 ở trên và chuyển đổi thành logic, cung cấp 1hoặc 0như các giá trị trung thực / sai lệch được tiêu chuẩn hóa.


9

Võng mạc , 22 24 23 byte

Đã lưu 1 byte nhờ edc65

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

Toàn bộ mã chỉ là một regex. Lúc i`bắt đầu làm cho trường hợp regex không nhạy cảm.

Đầu ra 1cho sự thật, 0cho falsey.

Hãy thử trực tuyến!


Thật n?ontuyệt, tôi sẽ sử dụng nó. Tôi nghĩ rằng bạn không cần `\`
edc65

@ edc65: Bạn nói đúng, tôi không, thật kỳ lạ.
Mèo kinh doanh

Thủ thuật hay với n?on.
admBorkBork

8

Hàng loạt, 142 byte

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

Đầu ra 1 cho giả, không có gì cho sự thật.


Những câu trả lời như thế này khiến tôi muốn viết một kịch bản tự động gửi câu hỏi về Đánh giá mã có nội dung với Code Golf. lau nước mắt
corsiKa

Điều này thật tuyệt vời . Ngay cả khi có thể có giải pháp ngắn hơn, tôi không quan tâm, đây là người chiến thắng rõ ràng.
triết học

6

JavaScript (ES6), 35 39

Chỉnh sửa bằng n?onthủ thuật, bị đánh cắp từ câu trả lời của BusinessCat

Chỉnh sửa 2 OP được làm rõ, không có 0 đầu, lưu 4 byte

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

Đơn giản chỉ cần trả lại truehoặcfalse

Kiểm tra

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


Có phải loại bỏ \dtừ regrec và thay đổi để |v!=0làm việc?
Neil

Làm thế nào về việc hoán đổi \dcho 1-9? Với điều kiện là câu hỏi của frageum là chính xác, ^([-1-9dsty]|on|fo|non)nên đủ.
admBorkBork

4

Python, 111 byte

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]

Kiểm tra tổng giá trị ASCII, kiểm tra thêm nooncó cùng giá trị.

  • Edit1: quên kiểm tra các giá trị nguyên. Bây giờ kiểm tra đầu vào sai

@ edc65 câu trả lời đầu tiên không, bây giờ kiểm tra giả và kể cả ord('0')không
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]>1Tôi đã không kiểm tra nó mặc dù.
James

4

Python, 129 79 78 byte

Phải nộp nhanh!

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

Đúng là sai và sai là đúng; Tôi có một vần điệu hay cho điều này, tôi thực sự làm (không)


Tại sao các downvote? Nó dường như hoạt động, chỉ đúng là sai và sai là đúng, điều đó được cho phép
edc65

2
Bạn có thể rút ngắn mảng chuỗi đang viết' 0 f failure false n nan nil no notfound not-found null nullptr off undefined'.split(' ')
KarlKastor

@KarlKastor Bạn thực sự có thể sử dụng .split()thay thế, bởi vì dấu phân cách mặc định cho splitlà khoảng trắng.
Skyler

@Skyler Tôi biết, nhưng sau đó có một chuỗi trống bị thiếu.
KarlKastor

3

Python, 83 75 byte

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

Trả về 0 khi thành công, AttributionError khi thất bại.

Bây giờ sử dụng regex của edc85 để lưu 8 byte.


2
À đúng rồi, phương pháp "bùng nổ chương trình cũ" khi nó thất bại trong bài kiểm tra ". Tôi thích nhìn thấy những bình luận như "chúng tôi không thể đạt được ở đây với những lý lẽ không hợp lệ" :-)
corsiKa

2

PowerShell v2 +, 39 37 byte

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

Giả sử rằng câu trả lời cho câu hỏi của @ frageum là "Không, số nguyên trung thực có thể không bắt đầu bằng a 0."

Câu trả lời JavaScript regex của cổng @ edc65 , với sự 1-9thay thế của riêng tôi thay vì \d. Sử dụng n?onthủ thuật @ BusinessCat để chơi gôn hơn nữa.

Xuất ra Boolean theo nghĩa đen $truehoặc $falsecác giá trị, khi để lại trên đường ống và được gửi qua một ẩn Write-Outputở cuối kết quả thực hiện trong Truehoặc Falseđược in ra bàn điều khiển.


Nếu câu trả lời là "Có, số nguyên trung thực có thể bắt đầu bằng 0", thì những thay đổi sau đây cần được thực hiện cho 51 49 byte

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

Nếu bạn không thích regex, hãy truy cập PowerShell v3 + và sau đây với 107 byte

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

Cái này lấy chuỗi các giá trị falsey, đặt -splitchúng trên khoảng trắng và sử dụng -notintoán tử để kiểm tra đầu vào $ndựa vào mảng chuỗi đó (theo mặc định, không phân biệt chữ hoa chữ thường). Yêu cầu $n-andkiểm tra đối với chuỗi trống.


Bạn không cần dấu ngoặc đơn để sử dụng luân phiên trong regex: '^[-1-9dsty]|fo|n?on' :)
briantist

@briantist Nếu không có parens, nó phù hợp notfoundnot-foundfo.
admBorkBork

Bạn ơi, bạn nói đúng. Bạn có thể làm ^[-1-9dsty]|^fo|^n?onnhưng đó là cùng một số ký tự và ít rõ ràng hơn.
briantist

1

PHP, 50 byte

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

in 1cho sự thật, không có gì cho giả

đã cố gắng đưa ra một giải pháp khác, nhưng regex ngắn nhất cho giả là dài hơn 3 byte so với sự thật: %^(0|fa|f?$|n(?!on)|of|u)%i


0

Python, 83 byte

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

https://repl.it/ClgO/1


Don Tiếtt các ins bao gồm không trống?
Tít

@Titus Tôi không chắc ý của bạn là gì.
đồ học

Điều gì x[:1]cho một chuỗi trống? Có intrả lại sai trong trường hợp đó? Nếu vậy, bạn sẽ có thể thảand''<x
Tít

@Titus, tôi hiểu ý của bạn. Tôi đã có cùng suy nghĩ lúc đầu, nhưng ''[:1] in 'abc'đánh giá là đúng.
đồ học
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.