เป็นหรือไม่เป็น


28

ในไบต์ที่น้อยที่สุดที่เป็นไปได้ตรวจสอบว่าค่าสองค่าที่กำหนดให้แต่ละคู่ตรงกันอย่างใดอย่างหนึ่งต่อไปนี้:

ค่าแรก

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

ค่าที่สอง

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

ตัวอย่าง

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

5
N0 l33t หรือไม่ “ t0 b3”
จัดการ

7
ทำไมมันต้องเป็นฟังก์ชั่น ?
Dennis

2
@ rybo111 ดี! ดูเหมือนว่าพวกเขาจะไม่เข้าใจแนวคิดแล้ว;)
Draco18s

13
อันนี้ขอร้องให้แก้ปัญหาของเช็คสเปียร์ แน่นอนว่าไม่ใช่การแข่งขันเนื่องจากการนับจำนวนไบต์จะมีขนาดใหญ่อย่างแน่นอน
Darrel Hoffman

1
@LuisMendo ตกลง ทั้งเป็นเรื่องปกติ ไม่จำเป็นต้องรองรับทั้งคู่
rybo111

คำตอบ:


34

เช็คสเปียร์ , 4778 ไบต์

หมายเหตุ: คำตอบนี้ไม่ได้หมายถึงการเป็นคู่แข่งที่ร้ายแรง

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]

ส่งออก 0 ถ้าเท็จ 1 ถ้าเป็นจริง

สิ่งนี้อาจสั้นกว่านี้ได้อย่างง่ายดาย (และหากผู้คนต้องการให้ฉันเป็นจริงความยาวของคำอาจถูกลดทอนลง) แต่หากทำเช่นนั้นจะเป็นการตบหน้าของความปรารถนาดี ฉันมักจะรู้สึกว่า Horatio เป็นฮีโร่ที่ไม่ได้รับการฝึกฝนของ Hamlet ดังนั้นฉันจึงทำให้แน่ใจว่าเขาเป็นคนเดียวที่จะส่งบทคนเดียวที่รุนแรงไปยัง Hamlet ซึ่ง Hamlet ต้องพิสูจน์ในท้ายที่สุดว่าเขาดีเท่ากับ Horatio (ซึ่งหมายถึงบรรทัดใหม่)

โค้ดนั้นเรียบง่าย ตัวละครทุกตัวจะต้องมีค่าเป็น ASCII (ตามลำดับ:) newline,space,0,2,3,B,b,E,e,O,o,T,t,V,vจากนั้นรหัสจะเป็นกลไกแบบง่าย ๆ (โดยเฉพาะDFA ) ที่เปลี่ยนScene XIเป็นสถานะการยอมรับและสถานะScene XIIการปฏิเสธ

This is the basic one I worked off of.

หลังจากทำสิ่งนี้ฉันเพิ่งเสียบเข้ากับเช็คสเปียร์โดยใช้ความจริงที่ว่าฉันสามารถเลื่อนลงไปยังสถานะถัดไปเมื่อพวกเขาอยู่ติดกันเป็นตัวเลข ฉันทดสอบกับ Shakespeare เวอร์ชันที่ฉันเชื่อมโยงไว้ในชื่อเท่านั้น แต่ฉันเชื่อว่าเรากำหนดภาษาด้วยการใช้งาน iirc


2
เมื่อฉันโพสต์คำถามนี้ฉันไม่เคยนึกภาพเลยว่าฉันจะได้คำตอบที่ซับซ้อนและยังเหมาะสมมาก!
rybo111

18

จอประสาทตา 28

  • บันทึก 1 ไบต์ขอบคุณ @ MartinBüttner

อาจเป็นคำตอบที่เร็วที่สุดของฉัน - กอล์ฟ - 9 นาทีหลังจาก OP

พารามิเตอร์อินพุตคั่นด้วยเครื่องหมายจุลภาค ผลลัพธ์คือ 1 สำหรับความจริงและ 0 สำหรับความเท็จ

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

ลองออนไลน์


ฉันรักเสมอเมื่อแก้ไขข้อผิดพลาดบันทึกไบต์!
Neil

5
@Neil yep - รหัสที่ถูกลบนั้นเป็นรหัสที่ดีบั๊ก :)
บาดเจ็บทางดิจิตอล

1
@DigitalTrauma แท้จริงแล้วรหัสสำนึกผิดอย่างเพียงพอเท่านั้นที่สามารถได้รับอนุญาตในโลกใหม่ที่กล้าหาญของเรา
FryAmTheEggman

7

Pyth, 34 ไบต์

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

ลองใช้งานออนไลน์: การสาธิต

คำอธิบาย:

          ."...   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

อย่างใดถ้าฉันลบรหัสก่อนที่สตริงบรรจุสตริงจะเสีย
busukxuan

@FryAmTheEggman ฉันทำ ผลลัพธ์คือ "! $ 7C <Q / = / LF $ VF4K: .- E"
busukxuan

@FryAmTheEggman ฉันลองสองสามครั้งและเปรียบเทียบความคิดเห็นมีบางสิ่งที่ขาดหายไป ดูเหมือนว่าเป็นเพราะฉันคัดลอกและวางแทนที่จะใช้ลิงก์ในคำตอบ ฉันไม่รู้ว่าคุณจะพลาดไบต์เมื่อวางสตริงใน SE
busukxuan

@busukxuan ใช่ฉันเพิ่งสังเกตเห็นสิ่งเดียวกัน: P SE ซ่อนตัวละครที่ไม่สามารถพิมพ์ออกมาได้อย่างน่าเสียดาย
FryAmTheEggman

1
สิ่งนี้ดูเหมือนจะไม่ผ่านเงื่อนไข (t ศูนย์) สำหรับค่าแรก
Nic Robertson

4

Pyth, 41 ไบต์

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

ลองที่นี่!

ค้นหารายการที่ตรงไปตรงมา พิมพ์รายการว่างเปล่าเป็นค่าเท็จและรายการไม่ว่างเป็นค่าจริง

มองหรือวิธีที่ดีกว่าฉันไม่ชอบอันนี้


4

Oracle SQL 11.2, 86 ไบต์

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

ส่งคืนหนึ่งแถวสำหรับความจริงและไม่มีแถวสำหรับความเท็จ


3

05AB1E , 39 45 ไบต์

รหัส:

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

ลองออนไลน์!

ใช้การเข้ารหัส CP-1252 ความจริงก็คือเมื่อจำนวนจะถูกเอาท์พุทและเป็นเท็จเมื่อไม่มีอะไรจะเอาท์พุท

รุ่นที่ไม่ใช่คู่แข่ง (39 ไบต์) ใช้งานได้กับรุ่นใหม่ล่าสุด:

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

3

ES6, 56 48 45 ไบต์

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

บันทึก 5 ไบต์ด้วย @ user81655 บันทึก 3 ไบต์จากการเพิ่มประสิทธิภาพเพิ่มเติมบางอย่าง บันทึกอีก 3 ไบต์ด้วย @Patrick Roberts

t[wo]?o เป็น regex ที่สั้นที่สุดที่ฉันสามารถนึกได้เพื่อจับคู่ homophones ทั้งสาม

หากได้รับอนุญาตให้ส่งผ่านค่าสองค่าเป็นอาร์เรย์พารามิเตอร์เดียวพารามิเตอร์ที่เหลือสามารถกลายเป็นพารามิเตอร์ปกติโดยบันทึกอีก 5 ไบต์


@ user81655 ไม่เลว แต่ฉันได้ปรับปรุงต่อไป
Neil

1
ถ้าคุณใช้พารามิเตอร์ส่วนที่เหลือสำหรับการป้อนข้อมูลก็จะช่วยให้คุณประหยัด 3 ไบต์:(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/.test(a)
แพทริคโรเบิร์ต

@PatrickRoberts Huh ฉันคิดเกี่ยวกับเรื่องนั้น แต่ฉันต้องคาดคะเนเพราะฉันไม่คิดว่าฉันจะบันทึกอะไรเลย
Neil

iธงจะหายไป
Florent

@ ที่ดีขอบคุณสำหรับการระบุว่า (อาจเป็นตัวอย่างที่ไม่ควรเป็นตัวพิมพ์เล็กทั้งหมด ... )
Neil

3

Perl 6, 45 44 ไบต์

ขอบคุณผู้คนใน IRC ที่ช่วยฉันลงสนามกอล์ฟนี้

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

การใช้

> 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

ทางเลือกอื่นที่ไม่ใช่การแข่งขัน 54 ไบต์

นี่เป็นทางเลือกที่ดีสำหรับข้างต้นหากคุณคิดว่า regexes มีค่าใช้จ่ายขั้นต้น แต่จะนานกว่าเล็กน้อย มันสามารถเล่นกอล์ฟได้สองสามไบต์ แต่เนื่องจากมันไม่ใช่การแข่งขันฉันจะปล่อยให้มันเป็นอย่างนั้น

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

1
ให้ทุกคนที่กำลังมองหาที่นี้ที่ไม่ทราบ Perl 6 [และ]แสดงถึงกลุ่มที่ไม่ได้จับใน regex ซึ่งจะเขียนเป็น(?:และ)ใน Perl 5. เพื่อให้ได้ตัวละครคลาสที่คุณต้องวางไว้ในวงเล็บมุมและ<[ ]>
Brad Gilbert b2gills

b2gills ++ ฉันไม่คิดว่าจะพูดถึงความแตกต่างใน Perl 6 regexes
Hotkeys

ฉันมีคะแนนโหวตเพราะมีคนไม่ทราบดังนั้นฉันจึงชี้ให้เห็นเสมอ
Brad Gilbert b2gills

มีกฎ PP&CG ที่ห้ามไม่ให้คุณโพสต์สนามกอล์ฟที่หรูหรากว่านี้เป็นคำตอบของตัวเองหรือไม่? ฉันคิดว่าเวอร์ชันที่ยาวขึ้นเล็กน้อยจะคุ้มค่า * ฉันขอประกาศว่าสำนวนกอล์ฟที่สง่างามรวมถึงการไม่ใส่ใจเกี่ยวกับช่องว่าง (ไม่นับ)
raiph

3

Python 2.7, 133 ไบต์

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

ไม่แน่ใจว่าเราควรโพสต์วิธีแก้ปัญหาหรือไม่หากมีข้อคิดเห็นน้อยกว่านี้ แต่นี่เป็นเวอร์ชันของฉันใน Python

แก้ไข: หากไม่มีฟังก์ชั่นจะมีเพียง 73 ไบต์ (และนั่นก็ไม่ใกล้คำตอบที่ดีที่สุดให้อภัยฉันฉันใหม่

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

2
ยินดีต้อนรับสู่ PPCG! หากคุณใช้เวลาเขียนและเล่นกอล์ฟคำตอบและไม่ลอกเลียนแบบ (ไม่มีการระบุแหล่งที่มา) คุณก็ยินดีโพสต์คำตอบของคุณ!
Digital Trauma

โอ้และภาษาส่วนใหญ่มีคำถามสไตล์เคล็ดลับการเล่นกอล์ฟที่นี่ Python นั้นไม่มีข้อยกเว้น
Digital Trauma เมื่อ

โปรดทราบว่านี่ใช้งานได้กับอินพุตของ2(จำนวนเต็ม)
wnnmaw

3
นี้จะส่งกลับทรูยังe('oo', '3')และที่คล้ายกันสตริง
จัดการ

1
@TheLateOne, Python ไม่สามารถเล่นกอล์ฟได้ดังนั้นคุณแทบจะไม่สามารถเอาชนะภาษากอล์ฟเช่น pyth หรือ cjam ได้ แต่การอยู่ในช่วง 50, 60 หรือ 70 นั้นค่อนข้างดีสำหรับเราในความท้าทายส่วนใหญ่ อย่าท้อแท้!
wnnmaw

2

Ruby, 53 55 52 ไบต์

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

ฉันจะซื่อสัตย์นี่เป็นครั้งแรกที่ฉันพยายามตีกอล์ฟให้มีปัญหา

ฟังก์ชั่นการโทรในรูปแบบของ f.call(firstValue, secondValue)

0เป็นความจริงnilเป็นเท็จ

ทดสอบที่นี่




1

Python, 85 83 bytes

@Manatwork saved me two bytes.

This is pretty brute force, I'll look into regex solutions next.

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

1
For the first array: '2 to too two t0'.split() For the second array makes no difference.
manatwork

Damn, yes, I tried '2,to,too,two,t0'.split(','). Silly me.
Ogaday

1

PowerShell v3+, 74 70 bytes

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

Doesn't use regex. Takes two input, checks if the first one is -in the array that's been dynamically created by the -split operator, converts that Boolean to an int with +, then multiplies that * with checking whether the second is -in the second array (which will automatically cast the Boolean as an int). This works because x*y == x&y if x and y can only be 1 or 0.

PowerShell by default is case-insensitive, so we get that for free. Will output 0 or 1 for falsey/truthy, respectively. Requires v3 or newer for the -in operator.

Edit -- Saved 4 bytes by using unary -split


0

Groovy, 52 bytes

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

==~ is a cool regex operator in groovy that checks for equality.

Tests:

Regex101 test.

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

What if x is t and y is 0b?
Neil

What do you mean?
J Atkin

I'd expect f('t', '0b') to be false, but I'm concerned that your code would return true.
Neil

Ohhhh, Ok, I got it. Yep it would return the wrong thing.
J Atkin


0

C# 6, 132 bytes

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

Ungolfed version (Only slightly more readable):

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 bytes

Uses Digital Trauma's regex. Input is a single string separated by a comma. Not sure if that format is allowed for input...

import re
f=lambda x:bool(re.match('^(2|t[ow]?o|t0),b(e?e?|3)$',x))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.