Menjadi atau tidak menjadi


28

Dalam byte sesedikit mungkin, tentukan apakah dua nilai yang diberikan masing-masing cocok dengan salah satu dari berikut ini:

Nilai pertama

2      string or integer - whichever you prefer
to     case insensitive
too    case insensitive
two    case insensitive
t0     case insensitive (t zero)

Nilai kedua

b      case insensitive
be     case insensitive
bee    case insensitive
b3     case insensitive

Contohnya

2          'Bee'            true
'2'        'b'              true
'not to'   'be'             false
'that is'  'the question'   false

5
N0 l33t? "
T0

7
Mengapa harus menjadi fungsi ?
Dennis

2
@ rybo111 Baiklah! Itu sepertinya mereka tidak mengerti konsep itu;)
Draco18s

13
Yang ini memohon solusi Shakespeare . Non-bersaing tentu saja, karena jumlah byte tidak diragukan lagi akan menjadi besar ...
Darrel Hoffman

1
@LuisMendo OK. Baik baik saja. Mendukung keduanya tidak perlu.
rybo111

Jawaban:


34

Shakespeare , 4778 Bytes

Catatan: jawaban ini tidak dimaksudkan untuk menjadi pesaing yang serius

To Be or Not To Be, This is the Answer.

Hamlet, the main player in our story.
Horatio, Hamlet's guide through his internal struggles.
The Ghost, a handsome honest bold fair gentle king.
Claudius, the worthless usurper of the throne.
Ophelia, who Hamlet always writes two.
Polonius, the unfortunate third man caught between Hamlet and Claudius.
Brabantio, the greater.
Banquo, the lesser.
Emilia, the greater.
Egeus, the lesser.
Othello, the greater.
Orsino, the lesser.
Tybalt, the greater.
Titania, the lesser.
Valentine, who doubled is greater.
Viola, who doubled is lesser.

Act I: A simple question in so many words.

Scene I: Hamlet passes judgment over the cast.

[Enter Hamlet and Horatio]
Hamlet:
    Thou art the sum of a good healthy sunny warrior and a lovely day.
[Exit Horatio]
[Enter Claudius]
Hamlet:
    Thou art the sum of The Ghost and warm cute brave trustworthy hero.
[Exit Claudius]
[Enter Ophelia]
Hamlet:
    Thou art the sum of Claudius and a smooth spaceman.
[Exit Ophelia]
[Enter Polonius]
Hamlet:
    Thou art the sum of Ophelia and a plum.
[Exit Polonius]
[Enter Brabantio]
Hamlet:
    Thou art the sum of The Ghost and the sum of The Ghost and a rich kingdom.
[Exit Brabantio]
[Enter Banquo]
Hamlet:
    Thou art the sum of Brabantio and The Ghost.
[Exit Banquo]
[Enter Emilia]
Hamlet:
    Thou art the sum of Brabantio and the sum of joy and a gentle girl.
[Exit Emilia]
[Enter Egeus]
Hamlet:
    Thou art the sum of Emilia and The Ghost.
[Exit Egeus]
[Enter Othello]
Hamlet:
    Thou art the sum of Emilia and the sum of a cunning lover and the sweetest golden embroidered rose.
[Exit Othello]
[Enter Orsino]
Hamlet:
    Thou art the sum of Othello and The Ghost.
[Exit Orsino]
[Enter Tybalt]
Hamlet:
    Thou art the sum of Othello and the sum of happiness and fair fine heaven.
[Exit Tybalt]
[Enter Titania]
Hamlet:
    Thou art the sum of Tybalt and The Ghost.
[Exit Titania]
[Enter Valentine]
Hamlet:
    Thou art the sum of Tybalt and the sum of a happy day and a pony.
[Exit Valentine]
[Enter Viola]
Hamlet:
    Thou art the sum of Valentine and The Ghost.
[Exeunt]

Scene II: The beginning of Horatio's interrogation.
[Enter Hamlet and Horatio]
Hamlet:
Horatio:
    Open your mind.
    Art thou as good as Tybalt?  If so, let us proceed to Scene IV.
    Art thou as good as Titania?  If so, let us proceed to Scene IV.
    Art thou as good as Ophelia?  If not, let us proceed to Scene XII.


Scene III: Are we to?
Horatio:
    Open your mind.
    Art thou as good as The Ghost?  If so, let us proceed to Scene VII.
    Let us proceed to Scene XII.

Scene IV: Can we go further than t?
Horatio:
    Open your mind.
    Art thou as good as Claudius?  If so, let us proceed to Scene III.
    Art thou as good as Valentine?  If so, let us proceed to Scene VI.
    Art thou as good as Viola?  If so, let us proceed to Scene VI.
    Art thou as good as Othello?  If so, let us proceed to Scene V.
    Art thou as good as Orsino?  If not, let us proceed to Scene XII.

Scene V: Oone oor twoo?
Horatio:
    Open your mind.
    Art thou as good as The Ghost?  If so, let us proceed to Scene VII.
    Art thou as good as Othello?  If so, let us proceed to Scene III.
    Art thou as good as Orsino?  If so, let us proceed to Scene III.
    Let us proceed to Scene XII.

Scene VI: Hamlet desperately searches for whOo?.
Horatio:
    Open your mind.
    Art thou as good as Othello?  If so, let us proceed to Scene III.
    Art thou as good as Orsino?  If so, let us proceed to Scene III.
    Let us proceed to Scene XII.

Scene VII: Knowing to, what to do?
Horatio:
    Open your mind.
    Art thou as good as Brabantio?  If so, let us proceed to Scene VIII.
    Art thou as good as Banquo?  If not, let us proceed to Scene XII.

Scene VIII: Learning what to Bleive.
Horatio:
    Open your mind.
    Art thou as good as me?  If so, let us proceed to Scene XI.
    Art thou as good as Emilia?  If so, let us proceed to Scene X.
    Art thou as good as Egeus?  If so, let us proceed to Scene X.
    Art thou as good as Polonius?  If not, let us proceed to Scene XII.

Scene IX: The Eend is nigh?
Horatio:
    Open your mind.
    Art thou as good as me?  If so, let us proceed to Scene XI.
    Let us proceed to Scene XII.

Scene X: Wee may havee succeeeedeed.
Horatio:
    Open your mind.
    Art thou as good as Emilia?  If so, let us proceed to Scene IX.
    Art thou as good as Egeus?  If so, let us proceed to Scene IX.
    Art thou as good as me?  If not, let us proceed to Scene XII.

Scene XI: Hamlet is at peace.
Horatio:
    Thou art a beacon of happiness. 
    Let us proceed to Scene XIII

Scene XII: The demons have won.
Horatio:
    Thou art nothing.

Scene XIII: Hamlet opens up.
Horatio:
    Hamlet! Open your heart.
[Exeunt]

Output 0 jika salah, 1 jika benar.

Ini bisa dengan mudah menjadi lebih pendek (dan jika orang benar-benar menginginkan saya, kata panjangnya dapat dikurangi), tetapi untuk melakukannya akan menjadi tamparan bagi wajah Will yang baik. Saya selalu merasa Horatio adalah pahlawan tanpa tanda jasa Hamlet, jadi saya memastikan bahwa dialah yang akan mengirim monolog intens ke Hamlet di mana Hamlet akhirnya harus membuktikan bahwa dia sebagus Horatio (yang mewakili baris baru).

Kode itu sendiri cukup sederhana. Semua karakter sans Hamlet adalah nilai ascii (Urutan:) newline,space,0,2,3,B,b,E,e,O,o,T,t,V,vdan kemudian kode tersebut adalah mesin keadaan sederhana (khususnya, DFA ) yang bertransisi Scene XImenjadi keadaan terima dan Scene XIIsebagai keadaan tolak.

Ini adalah dasar yang saya kerjakan.

Setelah membuat ini, saya hanya menancapkannya ke Shakespeare, menggunakan fakta bahwa saya bisa drop down ke keadaan berikutnya ketika mereka berdekatan secara numerik. Saya hanya mengujinya dengan versi Shakespeare yang saya tautkan dalam judul, tetapi saya yakin kami mendefinisikan bahasa dengan iirc implementasi.


2
Ketika saya memposting pertanyaan ini, saya tidak pernah membayangkan akan mendapatkan jawaban yang begitu rumit dan pas!
rybo111

18

Retina , 28

  • 1 byte disimpan berkat @ MartinBüttner.

Sangat mungkin jawaban kode-golf tercepat saya - 9 menit setelah OP.

Parameter input dipisahkan dengan koma. Output adalah 1 untuk truey dan 0 untuk falsey.

i`^(2|t[ow]?o|t0),b(e?e?|3)$

Cobalah online.


Saya selalu suka ketika memperbaiki bug menghemat byte!
Neil

5
@Neil yep - kode yang dihapus adalah kode debugged :)
Digital Trauma

1
@DigitalTrauma Sungguh, hanya kode yang cukup menyesal yang dapat diizinkan di dunia baru kita yang berani.
FryAmTheEggman

7

Pyth, 34 byte

.A}Lrw1c2c." Wô-WûÄæ­§Òé
}

Cobalah online: Demonstrasi

Penjelasan:

          ."...   packed string, gets decoded to: "2 TO TOO TWO T0 B BE BEE B3"
         c        split by spaces
       c2         split into 2 lists: [['2', 'TO', 'TOO', 'TWO', 'T0'], 
                                       ['B', 'BE', 'BEE', 'B3']]
   L              for each list:
     w               read a line
    r 1              convert it to uppercase
  }                  and test if it is part of this list list
.A                test if both return true

Entah bagaimana jika saya menghapus kode sebelum string dikemas, string menjadi rusak.
busukxuan

@FryAmTheEggman saya lakukan. Outputnya adalah "! $ 7C <Q / = / LF $ VF4K: .- E"
busukxuan

@FryAmTheEggman Saya mencoba beberapa kali dan membandingkan permalink, ada sesuatu yang hilang. Sepertinya itu karena saya menyalin dan menempel, daripada menggunakan tautan dalam jawabannya. Saya tidak tahu Anda akan kehilangan beberapa byte saat menempelkan string yang dikemas ke dalam SE.
busukxuan

@busukxuan Ya saya hanya memperhatikan hal yang sama: P SE menyembunyikan karakter yang paling tidak patut disayangkan.
FryAmTheEggman

1
Ini tampaknya tidak melewati kondisi (t nol) untuk nilai pertama
Nic Robertson

4

Pyth, 41 byte

&xrw0c"2 to too two t0"dxrw0c"b be bee b3

Coba di sini!

Pencarian daftar langsung. Mencetak daftar kosong sebagai nilai palsu dan daftar tidak kosong sebagai nilai sebenarnya.

Melihat atau cara yang lebih baik, saya tidak terlalu suka yang ini.


4

Oracle SQL 11.2, 86 byte

SELECT 1 FROM DUAL WHERE:1 IN('2','to','too','two','t0')AND:2 IN('b','be','bee','b3');

Mengembalikan satu baris untuk yang benar dan tidak ada baris untuk falsey.


3

05AB1E , 39 45 byte

Kode:

“2€„…«Œ† t0“' ¡)Ilrk\U“b€ïÍÝ b3“' ¡)Ilrk\>X>*

Cobalah online!

Menggunakan pengodean CP-1252. Kebenaran adalah ketika angka dikeluarkan dan falsy adalah ketika tidak ada yang ditampilkan.

Versi yang tidak bersaing (39 byte) , berfungsi dengan versi terbaru:

“2€„…«Œ† t0“ð¡)IlkU“b€ïÍÝ b3“ð¡)Ilk>X>*

3

ES6, 56 48 45 byte

(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/i.test(a)

Disimpan 5 byte berkat @ user81655. Disimpan 3 byte dari beberapa optimasi lebih lanjut. Disimpan 3 byte lagi berkat @ Patrickrick.

t[wo]?o adalah regex terpendek yang dapat saya pikirkan untuk mencocokkan ketiga homofon.

Jika diizinkan untuk melewatkan dua nilai sebagai array parameter tunggal, maka parameter lainnya dapat menjadi parameter normal, menyimpan 5 byte lainnya.


@ user81655 Tidak buruk, tapi saya lebih memperbaikinya.
Neil

1
jika Anda menggunakan parameter sisanya untuk input, itu akan menghemat 3 byte:(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/.test(a)
Patrick Roberts

@ PatrickRoberts Huh, saya sudah memikirkan hal itu, tetapi saya pasti salah perhitungan, karena saya tidak berpikir saya menyelamatkan apa pun.
Neil

The ibendera hilang.
Florent

@Florent, Terima kasih telah melihatnya. (Mungkin contohnya tidak semuanya huruf kecil ...)
Neil

3

Perl 6, 45 44 byte

Terima kasih kepada orang-orang di IRC yang telah membantu saya bermain golf

{@_~~(~2|/:i^t[0|oo?|wo]$/,/:i^b[ee?|3]?$/)}

pemakaian

> my &f = {@_~~(~2|/:i^t[0|oo?|wo]$/,/:i^b[ee?|3]?$/)}
-> *@_ { #`(Block|309960640) ... }
> f("2", "Bee")
True
> f("2", "b")
True
> f("not to", "be")
False
> f("that is", "the question")
False

Alternatif yang tidak bersaing, 54 byte

Ini adalah alternatif yang bagus untuk di atas jika Anda berpikir regex kotor, tetapi sedikit lebih lama. Itu bisa diturunkan beberapa byte lagi, tetapi karena tidak bersaing saya akan membiarkannya.

{@_».lc~~(qw<to too two t0 2>.any,<b be bee b3>.any)}

1
Untuk siapa pun yang melihat ini yang tidak tahu Perl 6. [dan ]menunjukkan grup yang tidak menangkap dalam regex, yang akan ditulis sebagai (?:dan )di Perl 5. Untuk mendapatkan kelas karakter Anda harus menempatkannya di dalam kurung sudut <[dan ]>.
Brad Gilbert b2gills

b2gills ++, saya bahkan tidak berpikir untuk menyebutkan perbedaan dalam regex Perl 6
Hotkeys

Saya mengalami downvote karena seseorang tidak mengetahui hal itu, jadi saya selalu menunjukkannya.
Brad Gilbert b2gills

Apakah ada aturan PP&CG yang menghentikan Anda memposting golf yang lebih elegan sebagai jawabannya sendiri? Saya pikir versi * sedikit lebih lama akan layak. * Saya dengan ini menyatakan bahwa idiom golf yang elegan termasuk tidak peduli (tidak termasuk) spasi putih.
raiph

3

Python 2.7, 133 byte

def e(a, b):
        c, d = """2,too,to,t0,two""","""be,b,bee,b3"""
        return a.lower() in c and b.lower() in d

print e('2', 'bee')

Tidak yakin apakah kami seharusnya memposting solusi jika ada versi yang lebih kecil di komentar tapi ini versi saya di Python.

Sunting: Tanpa fungsi itu hanya 73 byte (dan itu bahkan tidak mendekati jawaban terbaik. Maafkan saya, saya baru

a, b = "to", "bee"
print a in "2 too to t0 two" and b in "be b bee b3"

2
Selamat datang di PPCG! Jika Anda menghabiskan waktu menulis dan bermain golf jawaban dan tidak menjiplak (tanpa atribusi), maka Anda boleh memposting jawaban Anda!
Digital Trauma

Oh dan sebagian besar bahasa memiliki pertanyaan gaya kiat bermain golf di sini. Python tidak terkecuali
Trauma Digital

Perhatikan bahwa ini bekerja dengan input 2(integer)
wnnmaw

3
Ini mengembalikan True juga untuk e('oo', '3')dan substring serupa .
manatwork

1
@TheLateOne, Python tidak terlalu bisa golf, jadi Anda hampir tidak akan pernah mengalahkan bahasa golf seperti pyth atau cjam, tetapi mendapatkan kisaran 50, 60, atau 70 cukup bagus untuk kita di sebagian besar tantangan. Jangan berkecil hati!
wnnmaw

2

Ruby, 53 55 52 byte

f=->(a,b){/^(2|t[wo]?o|t0)$/i=~a&&/^b(e?e?|3)$/i=~b}

Saya akan jujur, ini adalah usaha pertama saya mencoba masalah golf.

Fungsi panggilan dalam bentuk f.call(firstValue, secondValue)

0adalah Truthy, nilis Falsy.

Uji di Sini



1

Pyth, 39 byte

-3 byte oleh @FryAmtheEggman

.A.b}rN1cY\@Q,."0Wѳ5YYÅJB"."3EW´l¢ï

Coba di sini .


Saya akan memperbaikinya ketika saya sampai di komputer.
lirtosiast

1

Python, 85 83 byte

@Manatwork menyelamatkan saya dua byte.

Ini adalah kekuatan yang sangat kasar, saya akan melihat ke solusi regex berikutnya.

lambda a,b:a.lower()in'2 to too two t0'.split()and b.lower()in['b','be','bee','b3']

1
Untuk array pertama: '2 to too two t0'.split()Untuk array kedua tidak ada bedanya.
manatwork

Sial, ya, saya mencoba '2,to,too,two,t0'.split(','). Saya konyol.
Ogaday

1

PowerShell v3 +, 74 70 byte

param($a,$b)+($a-in-split'2 to too two t0')*($b-in-split'b be bee b3')

Tidak menggunakan regex. Mengambil dua input, memeriksa apakah yang pertama adalah -inarray yang telah dibuat secara dinamis oleh -splitoperator, mengubah Boolean menjadi int +, kemudian mengalikannya *dengan memeriksa apakah -inarray kedua adalah array kedua (yang secara otomatis akan melemparkan Boolean sebagai sebuah int ). Ini berfungsi karena x*y == x&yjika xdan yhanya bisa 1atau0 .

PowerShell secara default tidak peka huruf besar-kecil, jadi kami mendapatkannya gratis. Akan menghasilkan 0atau 1untuk falsey / truthy, masing-masing. Membutuhkan v3 atau yang lebih baru untuk -inoperator.

Sunting - Disimpan 4 byte dengan menggunakan unary -split


0

Groovy, 52 byte

f={x,y->"$x $y"==~"(?i)(2|t([wo]o?|0)) (b(ee?|3)?)"}

==~ adalah operator regex keren di groovy yang memeriksa kesetaraan.

Tes:

Tes Regex101 .

assert f('2', 'Bee') == true
assert f('2', 'b') == true
assert f('not to', 'be') == false
assert f('that is', 'the question') == false

Bagaimana jika xyang tdan yadalah 0b?
Neil

Apa maksudmu?
J Atkin

Saya berharap f('t', '0b')menjadi salah, tetapi saya khawatir kode Anda akan kembali benar.
Neil

Ohhhh, Ok, aku mengerti. Ya itu akan mengembalikan hal yang salah.
J Atkin

0

MATL , 32 41 43 byte

jk'^(2|t[ow]?o|t0),b(e?e?|3)$'XX

Pendekatan yang sama dengan jawaban Retina @ DigitalTrauma . Input dipisahkan oleh koma. Output yang sebenarnya adalah string dengan dua input lebih kecil; falsy bukanlah keluaran.

Cobalah online!

j                                % input as a string
k                                % convert to lowercase
'^(2|t[ow]?o|t0),b(e?e?|3)$'     % regular expression to match the two inputs
XX                               % match regular expression

0

C # 6, 132 byte

bool t(string x,string y)=>new[]{"2","to","too","two","t0"}.Contains(x.ToLower())&&new[]{"b","be","bee","b3"}.Contains(y.ToLower());

Versi tidak dikunci (Hanya sedikit lebih mudah dibaca):

bool t(string x, string y) => new[] { "2", "to", "too", "two", "t0" }.Contains(x.ToLower()) && new[] { "b", "be", "bee", "b3" }.Contains(y.ToLower());

0

Python 2, 67 byte

Menggunakan regex Trauma Digital. Input adalah string tunggal yang dipisahkan oleh koma. Tidak yakin apakah format itu diizinkan untuk input ...

import re
f=lambda x:bool(re.match('^(2|t[ow]?o|t0),b(e?e?|3)$',x))
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.