Apakah itu benar atau salah?


8

Ada begitu banyak cara untuk mengekspresikan apakah sesuatu itu benar atau tidak! Tujuan dari tantangan ini adalah untuk menghasilkan keluaran terstandarisasitruthy atau falsyuntuk berbagai nilai input kebenaran dan kepalsuan.

Untuk keperluan tantangan ini, masukan berikut dianggap benar:

  1. String yang mewakili integer yang ditandatangani dengan nilai bukan nol (hanya berisi digit [0-9], dengan opsional -di awal). Perhatikan bahwa string -0tidak akan pernah diberikan sebagai input. Integer non-nol tidak akan pernah didahului oleh 0(yaitu 01tidak akan pernah diberikan sebagai input, demikian pula -01tidak akan pernah menjadi gien sebagai input).
  2. Kasus-sensitif string setara dengan salah satu defined, found, nonnil, non-nil, on, success, t, true, y, danyes

Untuk keperluan tantangan ini, input berikut ini dianggap palsu:

  1. String 0. Nol berulang ( 00, 00...) tidak akan pernah diberikan sebagai input.
  2. String kosong
  3. Kasus-sensitif string setara dengan salah satu f, failure, false, n, nan, nil, no, notfound, not-found, null, nullptr, off, danundefined

Memasukkan

Input adalah string yang mewakili nilai kebenaran / kepalsuan. String dapat berasal dari sumber yang diinginkan (stdio, parameter fungsi, dll.). Tidak ada spasi putih terkemuka / tertinggal.

Input dijamin sesuai dengan salah satu nilai kebenaran / kepalsuan yang diizinkan di atas (yaitu Anda tidak perlu memberikan penanganan kesalahan)

Keluaran

Program / fungsi Anda harus menampilkan nilai kebenaran / kepalsuan yang mewakili "kebenaran" atau "kepalsuan" dari input. Anda hanya diperbolehkan menentukan secara tepat 1 nilai kebenaran dan 1 kepalsuan yang harus dikonversi oleh output Anda (ini adalah nilai kebenaran / kepalsuan "standar" Anda). Output dapat ditulis ke setiap wastafel yang diinginkan (stdio, nilai balik, parameter output, dll.).

Silakan tentukan apa truthydan falsynilai yang Anda pilih dalam jawaban Anda.

Mis .: Jika Anda memilih string truesebagai nilai kebenaran, Anda juga tidak bisa memiliki bilangan bulat 1untuk kebenaran.

Uji Kasus

Kasus uji diformat karena baris pertama adalah input, dan baris kedua adalah output.

-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

Mencetak gol

Ini adalah kode-golf; kode terpendek dalam byte menang. Celah standar berlaku. Anda dapat menggunakan built-in yang diinginkan.


5
Bisakah bilangan bulat positif dimulai dengan 0?
feersum

1
Apakah angka nol berulang seperti benar 00, atau apakah itu input yang valid? (Saya kira mereka tidak valid, tetapi hanya memeriksa)
Zgarb

3
Bagaimana dengan FileNotFound ? ;)
TRiG

@feersum input non-nol tidak akan pernah memiliki nol sebelumnya.
helloworld922

@Zgarb mereka bukan input yang valid
helloworld922

Jawaban:


17

MATL , 20 byte

U|sG36ZA13\[BID1]m+g

Input adalah string yang dilampirkan dalam tanda kutip tunggal. Keluaran adalah 1untuk kebenaran atau 0untuk kepalsuan.

Cobalah online! Atau verifikasi semua kasus uji .

Bagaimana itu bekerja

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

Ini melakukan dua tes pada input:

  1. Cobalah untuk menginterpretasikan input sebagai angka, dan mendeteksi jika itu bukan nol. Fungsi yang digunakan untuk menginterpretasikan string sebagai angka menghasilkan array kosong jika tidak memungkinkan; dan jumlah entri dari array kosong adalah 0. Jadi cukup untuk mencoba konversi, ambil nilai absolut, dan jumlah. Ini memberikan nilai positif jika input berisi angka bukan nol, dan 0sebaliknya.
  2. Dengan asumsi string input tidak mewakili angka, kita perlu mengklasifikasikannya menjadi salah satu dari dua set yang diberikan. Untuk melakukan ini, input ditafsirkan sebagai digit dari angka yang dinyatakan dalam basis-36, menggunakan alfabet '01...9ab...z'. Fungsi konversi basis tidak peka huruf besar-kecil dan mengabaikan angka yang tidak ada dalam alfabet (dalam kasus kami, '-'). Ternyata bahwa modulo 13 dari jumlah yang dihasilkan 1, 3, 6atau 8untuk string truthy, dan tidak memberikan nilai-nilai untuk string falsy. Jadi bisa digunakan sebagai tanda tangan. Kami dengan demikian melakukan modulo 13 dan melihat apakah hasilnya adalah salah satu dari keempat nilai tersebut. Ini memberi 1apakah itu, atau 0sebaliknya.

Hasil akhir harus benar jika salah satu dari kedua kondisi terpenuhi, dan sebaliknya palsu. Jadi kami menambahkan dua angka yang dihasilkan dari 1 dan 2 di atas dan mengubahnya menjadi logis, yang memberikan 1atau 0sebagai nilai kebenaran / kepalsuan terstandarisasi.


9

Retina , 22 24 23 byte

Disimpan 1 byte berkat edc65

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

Seluruh kode hanyalah sebuah regex. Pada i`awalnya membuat case regex tidak sensitif.

Keluaran 1untuk kebenaran, 0untuk falsey.

Cobalah online!


Sangat n?onbagus, saya akan menggunakannya. Saya pikir Anda tidak perlu `` `pertama
edc65

@ edc65: Anda benar, saya tidak, cukup aneh.
Business Cat

Trik yang bagus dengan n?on.
AdmBorkBork

8

Batch, 142 byte

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

Output 1 untuk falsy, tidak ada untuk truthy.


Jawaban seperti ini membuat saya ingin menulis skrip otomatis yang memposting pertanyaan tentang Peninjauan Kode diunggulkan dengan konten Code Golf. lap tisu
corsiKa

Ini luar biasa . Meskipun mungkin ada solusi yang lebih pendek, saya tidak peduli, ini adalah pemenang yang jelas.
philomory

6

JavaScript (ES6), 35 39

Edit menggunakan n?ontrik, dicuri dari jawaban BusinessCat

Sunting 2 OP yang diklarifikasi, tanpa 0s terkemuka, menyimpan 4 byte

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

Cukup mengembalikan trueataufalse

Uji

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


Apakah menghapus \ddari regexp dan mengubah |v!=0berfungsi?
Neil

Bagaimana kalau menukar \dfor 1-9? Asalkan pertanyaan feersum akurat, ^([-1-9dsty]|on|fo|non)harus cukup.
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]

Tes pada jumlah nilai ASCII, pemeriksaan tambahan nokarena onmemiliki nilai yang sama.

  • Sunting1: lupa menguji nilai integer. Sekarang memeriksa input yang salah

@ edc65 jawaban pertama tidak, sekarang memeriksa salah dan termasuk ord('0')tidak
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]>1Saya belum mengujinya.
James

4

Python, 129 79 78 byte

Harus mengirimkan dengan cepat!

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

Benar itu salah dan salah adalah benar; Saya punya sajak yang bagus untuk ini, saya sungguh (tidak)


Mengapa downvote? Tampaknya berfungsi, hanya benar salah dan salah benar, itu diizinkan
edc65

2
Anda dapat mempersingkat array string menjadi tulisan' 0 f failure false n nan nil no notfound not-found null nullptr off undefined'.split(' ')
KarlKastor

@KarlKastor Anda sebenarnya dapat menggunakan .split(), karena pemisah default untuk splitadalah spasi.
Skyler

@ Skyler aku tahu, tapi entah bagaimana ada senar kosong yang hilang.
KarlKastor

3

Python, 83 75 byte

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

Mengembalikan 0 pada kesuksesan, AttributeError pada kegagalan.

Sekarang menggunakan regex edc85 untuk menghemat 8 byte.


2
Ah ya, si tua baik "meledak program saat gagal tes" pendekatan. Saya suka melihat komentar seperti "kami tidak mungkin sampai di sini dengan argumen yang tidak valid" :-)
corsiKa

2

PowerShell v2 +, 39 37 byte

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

Menganggap bahwa jawaban untuk pertanyaan @ feersum adalah "Tidak, bilangan bulat yang sebenarnya tidak boleh dimulai dengan a 0."

Port dari JavaScript jawaban regex @ edc65 , dengan 1-9substitusi sendiri alih-alih \d. Gunakan n?ontrik @ BusinessCat untuk bermain golf lebih lanjut.

Keluaran Boolean literal $trueatau $falsenilai - nilai, yang bila dibiarkan melalui pipa dan dikirim melalui implisit Write-Outputpada akhir hasil eksekusi Trueatau Falsedicetak ke konsol.


Jika jawabannya "Ya, bilangan bulat yang benar dapat dimulai dengan 0," maka perubahan berikut harus dilakukan untuk 51 49 byte

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

Jika Anda tidak suka regex, pilih PowerShell v3 + dan yang berikut ini di 107 byte

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

Ini mengambil string nilai falsey, -splitmenempatkannya di whitespace, dan menggunakan -notinoperator untuk memeriksa input $nterhadap array string (yang, secara default, case-insensitive). Memerlukan $n-anduntuk memeriksa string kosong.


Anda tidak perlu tanda kurung untuk menggunakan pergantian di regex: '^[-1-9dsty]|fo|n?on' :)
briantist

@ briantist Tanpa parens, cocok notfounddan not-foundkarena fo.
AdmBorkBork

Doh, kamu benar. Anda bisa melakukannya ^[-1-9dsty]|^fo|^n?ontetapi jumlah karakter yang sama dan kurang jelas.
briantist

1

PHP, 50 byte

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

cetakan 1untuk kebenaran, tidak ada untuk kepalsuan

mencoba untuk datang dengan solusi yang berbeda, tetapi regex terpendek untuk falsy adalah 3 byte lebih lama daripada itu untuk truey: %^(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


Tidak intermasuk non-kosong?
Titus

@Itus saya tidak yakin apa yang Anda maksud.
atlasologist

Apa x[:1]untuk string kosong? Apakah inreturn false dalam kasus itu? Jika demikian, Anda harus dapat melepaskanand''<x
Titus

@Itus, saya mengerti maksud Anda. Saya memiliki pemikiran yang sama pada awalnya, tetapi ''[:1] in 'abc'mengevaluasi kebenarannya.
atlasologist
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.