Olmak ya da olmamak


28

Mümkün olan en az baytta, verilen her iki değerin aşağıdakilerden biriyle eşleşip eşleşmediğini belirleyin:

İlk değer

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

İkinci değer

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

Örnekler

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

5
N0 l33t? “
T0

7
Neden bir fonksiyon olmak zorunda ?
Dennis,

2
@ rybo111 Peki! Yani gibi görünüyor onlar sonra kavramını anlamadı;)
Draco18s

13
Bu bir Shakespeare çözümü için yalvarır . Elbette rekabet
etmemek

1
@LuisMendo Tamam. Her ikisi de iyi. Her ikisini de desteklemek gerekli değildir.
rybo111,

Yanıtlar:


34

Shakespeare , 4778 Bayt

Not: Bu cevap ciddi bir rakip olmak anlamına gelmez

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]

Yanlış ise 0, true ise 1 çıktı verir.

Bu kolayca daha kısa olabilir (ve eğer insanlar benden gerçekten istemek istiyorsa, kelime uzunlukları kesilebilir), ama bunu yapmak iyi ol 'Will'in yüzüne bir tokat olacaktır. Her zaman Horatio'nun Hamlet'in asıl kahramanı olduğunu hissettim, bu yüzden Hamlet'in yoğun monologu, Hamlet'in nihayet Horatio (yeni çizgiyi temsil eden) kadar iyi olduğunu kanıtlaması gereken kişi olarak teslim etmesini sağladım.

Kodun kendisi oldukça basittir. Tüm Hamletlerin sans karakterleri ascii değerlerdir (Sıralı:) newline,space,0,2,3,B,b,E,e,O,o,T,t,V,vve sonra kod kabul durumu ve reddetme durumuna geçen basit bir durum makinesidir (özellikle bir DFA ) .Scene XIScene XII

Çalıştığım temel şey bu.

Bunu yaptıktan sonra, sayısal olarak bitişik olduklarında bir sonraki duruma düşebileceğim gerçeğini kullanarak Shakespeare'e bağladım. Sadece başlıkta bağladığım Shakespeare sürümü ile test ettim, ancak bir dili bir uygulama iirc ile tanımladığımızı düşünüyorum.


2
Bu soruyu yayınladığımda, böylesine karmaşık ve çok uygun bir cevap alacağımı asla düşünmedim!
rybo111

18

Retina , 28

  • @ MartinBüttner sayesinde 1 bayt kurtarıldı.

Muhtemelen şimdiye kadarki en hızlı kod-golf cevabım - OP'den 9 dakika sonra.

Giriş parametreleri virgülle ayrılmıştır. Çıktı truthy için 1 ve falsey için 0'dır.

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

Çevrimiçi deneyin.


Hata düzeltmek bayt kaydederken ben her zaman seviyorum!
Neil,

5
@Neil yep - silinen kod hata ayıklanmış kod :)
Digital Trauma

1
@DigitalTrauma Gerçekten, cesur yeni dünyamızda yalnızca yeterince ceza koduna izin verilebilir.
FryAmTheEggman

7

Pyth, 34 bayt

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

Çevrimiçi deneyin: Gösteri

Açıklama:

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

Her nasılsa, paketlenmiş dizgeden önceki kodu kaldırırsam, dizge bozulur.
busukxuan

@ FryAmTheEggman Yaptım. Çıktı "! $ 7C <Q / = / LF $ VF4K: .- E" idi
busukxuan

@FryAmTheEggman Birkaç kez denedim ve kalıcı bağlantıyı karşılaştırdım, eksik bir şey vardı. Görünüşe göre cevaptaki bağlantıyı kullanmak yerine kopyalayıp yapıştırdım. Paketlenmiş dizeleri SE'ye yapıştırırken bazı baytları özleyeceğinizi bilmiyordum.
busukxuan

@busukxuan Evet Aynı şeyi fark ettim: P SE ne yazık ki en yazdırılamayan karakterleri gizler.
FryAmTheEggman

1
Bu, ilk değerin koşulunu (t sıfır) geçmiyor gibi görünüyor
Nic Robertson

4

Pyth, 41 bayt

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

Burada dene!

Basit liste araması. Boş bir listeyi sahte değer olarak ve boş olmayan bir listeyi gerçeğe uygun değer olarak yazdırır.

Bakmak ya da daha iyi bir yol tho, bunu gerçekten sevmiyorum.


4

Oracle SQL 11.2, 86 bayt

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

Gerçek için bir satır döndürür, falsey için satır döndürmez.


3

05AB1E , 39 45 bayt

Kod:

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

Çevrimiçi deneyin!

CP-1252 kodlamasını kullanır. Gerçek, bir sayı çıktığında ve sahte ise hiçbir şey çıktığında gerçekleşir.

Rekabet etmeyen sürüm (39 bayt) , en yeni sürümle çalışır:

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

3

ES6, 56 48 45 bayt

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

@ User81655 sayesinde 5 bayt kaydedildi. Bazı ek optimizasyonlardan 3 bayt kurtarıldı. @Patrick Roberts sayesinde 3 bayt daha kaydedildi.

t[wo]?o Üç telefonun hepsine uyabilecek en kısa regex.

İki değeri tek bir parametre dizisi olarak geçmesine izin verilirse, rest parametresi normal bir parametre olabilir ve 5 bayt daha tasarruf sağlar.


@ user81655 Fena değil, ama daha da geliştirdim.
Neil,

1
Giriş için rest parametresini kullanırsanız, size 3 byte kazandırır:(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/.test(a)
Patrick Roberts

@PatrickRoberts Huh, Bunun hakkında düşünmüştüm, ama yanlış hesaplamış olmalıyım, çünkü hiçbir şeyi saklayacağımı düşünmedim.
Neil,

iBayrak eksik.
Florent

@Florent Bunu tespit ettiğiniz için teşekkür ederiz. (Belki de örneklerin tümü küçük harf olmamalıdır ...)
Neil,

3

Perl 6, 45 44 bayt

Bu golf oynamak için bana yardım için IRC millet teşekkür

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

kullanım

> 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

Rekabet etmeyen bir alternatif, 54 bayt

Eğer regexlerin brüt olduğunu düşünüyorsanız, ancak bu biraz daha uzun bir seçenek. Birkaç byte daha golf oynayabilirdi ama rekabet etmediğinden beri olduğu gibi bırakacağım.

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

1
Perl 6. bilmiyor bu bakan herkes [ve ]olarak yazılabilir olacak bir regex, olmayan bir yakalama grubunu temsil (?:ve )sen köşeli ayraç içinde onları yere sahip bir karakter sınıfını almak için Perl 5. <[ve ]>.
Brad Gilbert b2gills

b2gills ++, hatta 6 regexes Perl farklılıkları söz düşünmüyordu
Kısayollar

Bir oy kullanmadım çünkü birisi bunu bilmiyordu, ben de her zaman işaret ediyorum.
Brad Gilbert

Daha zarif golfü kendi cevabı olarak yayınlamanızı engelleyen bir PP&CG kuralı var mı? Bence biraz daha uzun bir * versiyona değecek. * Zarif golf deyimlerinin beyaz boşluklara aldırış etmemeyi (saymamayı) içerir.
16'da

3

Python 2.7, 133 bayt

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

Yorumlarda daha küçük bir sürüm varsa, çözüm göndermemiz gerektiğinden emin değilim, ancak işte Python'daki sürümüm.

Düzenleme: Bu fonksiyon olmadan sadece 73 bayt (ve en iyi cevaplara yakın bile değil. Affet beni, yeniyim)

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

2
PPCG'ye Hoşgeldiniz! Bir cevap yazmak ve golf oynamak için zaman harcadıysanız ve intihal etmediyseniz (atıf olmadan), cevabınızı gönderebilirsiniz!
Dijital Travma,

Ah ve çoğu dilde burada golf ipucu tarzı bir soru var. Python istisna değildir
Dijital Travma,

Bunun 2(integer) girişi ile çalıştığını unutmayın
wnnmaw

3
Bu, True e('oo', '3')ve ayrıca benzer alt dizeler için döndürür .
Manatwork

1
@TheLateOne, Python çok golf oynamaz, bu yüzden neredeyse hiç pyth veya cjam gibi golf dillerini yenemezsiniz, ancak 50, 60 veya 70 serisine girmek çoğu zorlukta bizim için oldukça iyidir. Cesaretini kırma!
wnnmaw

2

Ruby, 53 55 52 bayt

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

Dürüst olacağım, bu bir sorunu golf yapmaya ilk girişim.

Şeklinde işlev çağrısı f.call(firstValue, secondValue)

0Truthy, nilFalsy.

Burada sınayın




1

Python, 85 83 bayt

@Manworkwork bana iki bayt kazandırdı.

Bu oldukça kaba bir güç, daha sonra regex çözümlerine bakacağım.

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

1
İlk dizi için: '2 to too two t0'.split()İkinci dizi için farketmez.
Manatwork

Kahretsin, evet denedim '2,to,too,two,t0'.split(','). Aptal ben.
Ogaday

1

PowerShell v3 +, 74 70 bayt

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

Regex kullanmaz. İki girdi alır, ilki operatör -intarafından dinamik olarak oluşturulan dizi olup olmadığını kontrol eder -split, Boolean'ı int ile dönüştürür +, sonra ikinci dizinin *ikinci olup olmadığını kontrol ederek çoğaltır -in(Boolean'ı otomatik olarak int olarak atacak) ). Bu işe yarıyor, çünkü x*y == x&yeğer xve yolabilir 1veya 0.

PowerShell varsayılan olarak büyük / küçük harf duyarsızdır, bu nedenle bunu ücretsiz olarak alıyoruz. Çıktı 0veya 1sırasıyla falsey / truthy için. -inOperatör için v3 veya daha yenisini gerektirir .

Düzenleme - unary -split kullanarak 4 bayt kurtardı


0

Groovy, 52 bayt

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

==~ groovy'de eşitliği kontrol eden serin bir regex operatörüdür.

Testler:

Regex101 testi.

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

Ya xolduğunu tve yolduğunu 0b?
Neil,

Ne demek istiyorsun?
J Atkin

f('t', '0b')Sahte olmayı beklerdim , ancak kodunuzun doğru çıkmasından endişe ediyorum.
Neil,

Ohhhh, Tamam, anladım. Evet yanlış şeyi geri getirecekti.
J Atkin

0

MATL , 32 41 43 bayt

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

@ DigitalTrauma'nın Retina cevabı ile aynı yaklaşım . Girişler virgül ile ayrılır. Truthy çıkışı iki girişin küçük harfli olduğu bir dizedir; sahte, çıktı değildir.

Çevrimiçi deneyin!

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 bayt

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

Ungolfed versiyonu (Sadece biraz daha okunaklı):

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 bayt

Digital Trauma'nın regex'ini kullanır. Giriş, virgülle ayrılmış tek bir dizedir. Giriş için bu biçime izin verilip verilmediğinden emin değilim ...

import re
f=lambda x:bool(re.match('^(2|t[ow]?o|t0),b(e?e?|3)$',x))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.