あるかどうか


28

可能な限り少ないバイトで、指定された2つの値が次のいずれかに一致するかどうかを判断します。

最初の値

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」
-manatwork

7
なぜ関数でなければならないのですか?
デニス

2
@ rybo111まあ!当時彼らは概念を理解しいなかったようです;)
Draco18s

13
これはシェークスピアのソリューションを請います。バイトカウントが間違いなく巨大なように...、もちろん非競合
ダレル・ホフマン

1
@LuisMendo OK。どちらでも構いません。両方をサポートする必要はありません。
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]

falseの場合は0、trueの場合は1を出力します。

これは簡単に短くなる可能性があります(そして、人々が本当に私に望んでいるなら、単語の長さを短くすることができます)。私はいつもホレイショがハムレットの名のないヒーローだと感じていたので、彼がハムレットに強烈な独白を届けるものであることを確認しました。

コード自体は非常に単純です。Hamletを除くすべての文字は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

これを作成した後、数値的に隣接している次の状態にドロップできるという事実を使用して、シェークスピアにプラグインしました。タイトルでリンクしたシェークスピアのバージョンでのみテストしましたが、実装iircで言語を定義すると信じています。


2
この質問を投稿したとき、このような複雑でありながら非常に適切な答えが得られるとは思いもしませんでした!
rybo111

18

網膜、28

  • @MartinBüttnerのおかげで1バイト節約されました。

おそらく私の最も速いコードゴルフの答え-OPの9分後。

入力パラメーターはコンマ区切りです。出力は、真実の場合は1、偽の場合は0です。

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

オンラインでお試しください。


バグを修正してバイトを節約するとき、私はいつもそれを愛しています!
ニール

5
@ニールうん-削除されたコードはデバッグされたコードです:)
デジタルトラウマ

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ゼロ)を渡さないようです
ニックロバートソン

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

真実の場合は1行を返し、偽の場合は1行を返します。


3

05AB1E39 45バイト

コード:

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

オンラインでお試しください!

CP-1252エンコードを使用します。Truthyは数値が出力されるとき、falsyは何も出力されないときです。

非競合バージョン(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)

@ user81655のおかげで5バイト節約されました。さらなる最適化から3バイトを節約しました。@Patrick Robertsのおかげでさらに3バイト節約できました。

t[wo]?o は、3つすべての同音異義語に一致すると考えることができる最短の正規表現です。

2つの値を単一のパラメーター配列として渡すことが許可されている場合、残りのパラメーターは通常のパラメーターになり、さらに5バイト節約できます。


@ user81655悪くはありませんが、さらに改善しました。
ニール

1
あなたが入力のための残りのパラメータを使用している場合、それはあなたの3つのバイトが保存されます:(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/.test(a)
パトリック・ロバーツ

@PatrickRobertsええ、私はそれについて考えていましたが、何かを保存しているとは思わなかったので、間違って計算したに違いありません。
ニール

iフラグが不足しています。
フローレント

@Florentそれを見つけてくれてありがとう。(たぶん例はすべて小文字であってはならない...)
ニール

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バイト

正規表現が粗雑だと思う場合、これは上記の優れた代替手段ですが、少し長くなります。あと2、3バイト削ることができますが、競合しないので、そのままにしておきます。

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

1
これを見て、Perl 6 [を知らず]、正規表現で非キャプチャグループを示す人は、Perl 5 として(?:、または)Perl 5で記述されます。文字クラスを取得するには、それらを山かっこ<[]>
ブラッドギルバートb2gills

b2gills ++、Perl 6の正規表現の違いに言及することすら考えていませんでした
ホットキー

誰かがそれを知らなかったので、私は下票を得たので、私はいつもそれを指摘します。
ブラッドギルバートb2gills

よりエレガントなゴルフを独自の回答として投稿することを妨げるPP&CGルールはありますか?少し長い*バージョンが価値があると思います。*私はここで、エレガントなゴルフのイディオムには空白を気にしない(カウントしない)ことを含めることを宣言します。
レイフ

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へようこそ!回答の作成とゴルフに時間を費やし、(帰属なしで)盗用しなかった場合は、回答を投稿してください。
デジタル外傷

ああ、ほとんどの言語にはゴルフのヒントスタイルの質問があります。Python も例外で
デジタルトラウマ

これは2(整数)の入力で動作することに注意してください
wnnmaw

3
これはe('oo', '3')、同様の部分文字列に対してもTrueを返します。
マナトワーク

1
@ TheLateOne、Pythonはあまりゴルフに適していないため、pythやcjamなどのゴルフ言語に勝るものはほとんどありませんが、50、60、または70の範囲に入ることは、ほとんどの課題でかなり良いことです。落胆しないでください!
wnnmaw

2

ルビー、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バイト

@Manatworkは2バイト節約しました。

これはかなり強引です。次に正規表現のソリューションを検討します。

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

1
最初の配列の場合:'2 to too two t0'.split()2番目の配列の場合、違いはありません。
マナトワーク

くそー、はい、私は試しました'2,to,too,two,t0'.split(',')。愚かな私。
-Ogaday

1

PowerShell v3 +、74 70バイト

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

正規表現を使用しません。2つの入力を受け取り、最初の入力-in-split演算子によって動的に作成された配列であるかどうかを確認し+、そのブール値をintに変換してから*、2番目が-in2番目の配列であるかどうかを確認して乗算します(ブール値をintとして自動的にキャストします) )。これが機能するのは、x*y == x&yif xおよびycanのみが1orであるためです0

PowerShellは既定で大文字と小文字を区別しないため、無料で入手できます。ウィル出力0または1それぞれfalsey / truthy、ため。-inオペレーターにはv3以降が必要です。

編集-単項-splitを使用して4バイトを保存しました


0

Groovy、52バイト

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

==~ 等しいかどうかをチェックするGroovyのクールな正規表現演算子です。

テスト:

Regex101テスト。

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

どのような場合xであるtyありますか0b
ニール

どういう意味ですか?
Jアトキン

私はf('t', '0b')偽であると期待していますが、あなたのコードが真を返すことを心配しています。
ニール

ああ、わかった。うん、それは間違ったものを返すでしょう。
Jアトキン


0

C#6、132バイト

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

ゴルフされていないバージョン(わずかに読みやすい):

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バイト

Digital Traumaの正規表現を使用します。入力は、コンマで区切られた単一の文字列です。その形式が入力に許可されているかどうかわからない...

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.