文字は他の文字に収まりますか?


23

色別に適切にグループ化されたマットを覚えていますか?

色で適切にグループ化されたマット

昨日私はそれを見ていましたが、いくつかの文字が他の文字に収まることに気付きました。例:P手紙Rが行く場所に収まる。そのため、ここで簡単な課題があります。2つの文字が与えられ、いずれかの文字が他の文字の内側に収まる場合(直接または回転しますが、反転しません)、偽の値を返します。つまり、入力が[P,R]また[R,P]はの場合、どちらの場合も一方の文字が他方の文字に収まるため、真偽を返す必要があります。取得した[L,U]場合は、falseyを他の内部に収まらないため返さなければなりません。

ルール

  • 入力は、マット内にも数字があるため、[0-9A-Z]の範囲の2つの英数字にする必要があります(2つの入力として2つの個別の文字、2つの文字を含むリスト、 2文字、何でも)。
  • 出力は一貫している必要があります(真実と偽の値は常に同じでなければなりません)。
  • 以下はフィッティングの表です([Y,Y]入力としてのようなものを取得する場合のために、文字は常に適切な場所に収まることに注意してください)。

    char fits inside chars
    --------------------------------------------------------
       C             G,O
       F             B,E,P,R
       G             O
       I             0,1,7,B,D,E,F,H,K,L,M,N,O,P,R,T,V,W,X,Z
       L             E
       M             W
       P             R
       S             O
       V             A
       W             M
       0             O
       1             B,E,L
       3             O
       6             9,O
       8             O
       9             6,O
    

私は子供用マットのすべてのフィッティングをテストしたことを厳soleに誓います。(額から汗を乾かします。)

これはなので、各言語の最短コードが勝つかもしれません!

いくつかのテストケース

input  output
-------------
[C,G]  truthy (C fits inside G)
[G,C]  truthy (C fits inside G)
[F,R]  truthy (F fits inside R)
[M,W]  truthy (both fit inside the other)
[O,S]  truthy (S fits inside O)
[T,T]  truthy (T fits in its place)
[E,V]  falsey (no fit found)
[P,L]  falsey

サンドボックスの投稿。あなたが私が見逃したより多くのフィッティングを見つけた場合、私を許してください。フィッティングリストを手伝ってくれたΟurousに感謝します。



1
1収まらないF
user202729

@ user202729いいえ、あなたは 1収まるようにそれFは私のマットでは許可されていません。:-)
チャーリー

4
イラストASCIIアートグラフ(もちろん嵌合には推移的である)
user202729

1
@Ο もう2つの答えがあったときにこの他の質問にありました...さらに、チャレンジにはすでにテストする多くのケースがあり、それ以上のケースは何も追加しません(最も創造的な部分は2つの入力が両方の継手を確認する必要があるため、交換可能です)。
チャーリー

回答:




2

きれいな276 226バイト

漠然とゴルフっぽい。明日磨きます。

import StdEnv
i a b=isMember b a
t=True
f'C'b=i['GO']b
f'F'b=i['BEPR']b
f'O'b=i['GS03689']b
f'I'b=i['017BDEFHKLMNOPRTVWXZ']b
f'L''E'=t
f'P''R'=t
f'V''A'=t
f'M''W'=t
f'1'b=i['BEL']b
f'6''9'=t
f _ _=False
?a b=a==b||f a b||f b a

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



2

ジャバスクリプト155 153 151 149バイト

これはすべてのケースで機能すると思います。true/ falseの場合は1/0です。

(c,f,q=1)=>"CGO,FBEPR,GO,I017BDEFHKLMNOPRTVWXZ,LE,MW,PR,SO,VA,WM,0O,1BEL,3O,69O,8O,96O".split`,`.some((v=>v[0]==c&v.includes(f)))|c==f|(q?F(f,c,0):0)

説明:

F=(
c, // input 1
f, // input 2
q=1 // variable used to execute F twice
)=>(
"CGO,FBEPR,GO,I017BDEFHKLMNOPRTVWXZ,LE,MW,PR,SO,VA,WM,0O,1BEL,3O,69O,8O,96O".split`,` 
                              // array of strings where [0] is input 1 and [>0] are the fittings
.some(                        // any element of the array meets:
(v=>v[0]==c&v.includes(f)))|  // input 1 equals [0] and input 2  exists in the lookup string OR
c==f|                         // input 1 equals input 2 OR
(q?F(f,c,0):0)                // input 2 fits inside input 1

let F=(c,f,q=1)=>"CGO,FBEPR,GO,I017BDEFHKLMNOPRTVWXZ,LE,MW,PR,SO,VA,WM,0O,1BEL,3O,69O,8O,96O".split`,`.some((v=>v[0]==c&v.includes(f)))|c==f|(q?F(f,c,0):0);
let tests = [
  ["C","G"],  //truthy (C fits inside G)
  ["G","C"],  //truthy (C fits inside G)
  ["F","R"],  //truthy (F fits inside R)
  ["M","W"],  //truthy (both fit inside the other)
  ["O","S"],  //truthy (S fits inside O)
  ["T","T"],  //truthy (T fits in its place)
  ["E","V"],  //falsey (no fit found)
  ["P","L"]   //falsey
];
tests.forEach((v)=>{console.log("F('"+v[0]+"','"+v[1]+"') = " + F(v[0],v[1]))});

変更ログ:

  • kamoroso94のおかげで2バイト節約
  • Chris Mのおかげで2バイト節約
  • 検索方法を.some()に変更することで2バイトを節約しました

c適合fまたはf適合の場合、これはtrueを返しますかc?1つのケースのみをチェックしているようです。
チャーリー

f適合する場合にtrueを返すように修正されたコードc
ブライアンH.

誰もが、それは明確な感触編集を示唆して自由にしたい場合、私は、説明もいいじゃない
ブライアンH.

includes(f)代わりにindexOf(f)>=0を使用して、2バイトを節約できます。
kamoroso94

素晴らしい、それが事であることさえ知らなかった:D
ブライアンH.

1

ジュリア0.6、139バイト

(a,b)->(a==b)|any(map(x->all(in.((a,b),x))|all(in.((b,a),x)),zip("OCFILMPV16",split("CGS0368 G BEPR 017BDEFHKLMNOPRTVWXZ E W R A BEL 9"))))

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

「O」に収まる文字をグループ化することで、いくつかのバイトを節約しました。しかし、逆入力をテストするのはコードを使いすぎます...

説明:

  • zip(☐)"OCFILMPV16"一致する文字の文字列とそれに対応する文字列から、対応する1文字を圧縮します。
  • .in(☐) 例えば、要素ごとに適用されます (in(a,'O'),in(b,"OCFILMPV16"))
  • all(.in(☐)) 両方を見つけなければなりません...
  • |いずれかのためa,bb,a...
  • any(map(☐)) zip形式のリストの少なくとも1つの要素。

1

コトリン147 139バイト

fun p(s:String)=setOf(s,s.reversed()).any{it.matches(Regex("(.)\\1|F[BEPR]|I[017BDEFHKLMNOPRTVWXZ]|1[BEL]|69|CG|LE|MW|PR|VA|O[CG69038S]"))}

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

上の例 Try It Onlineは、すべてのプラスの組み合わせといくつかのマイナスの組み合わせのテストケースが含まています。

reg.exを最適化していません。多すぎるため、必要以上に長くなる可能性があります

編集: reg.exに数バイトを保存しました。



0

PHP、204バイト

-147バイト。コードにいくつかのバグと未使用の変数があることを確認するためだけに2バイトを削除するために戻ってきたからです。私のコードは今ではずっと短くなっています。

<?php $a=fgets(STDIN);for($w=0;$w<2;$w++){if(strpos(explode(',','GO,BEPR,O,017BDEFHKLMNOPRTVWXZ,E,W,R,O,A,M,O,BEL,O,9O,O,6O')[strpos(CFGILMPSVW013689,$a[0])],$a[1])!==false){echo"t";break;}$a=strrev($a);}

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


0

ルビー、140バイト

->c,t{x='CFGILMPSVW013689'.chars.zip('GO BEPR O 017BDEFHKLMNOPRTVWXZ E W R O A M O BEL O 9O O 6O'.split).to_h;p x.key?(c)&&x[c].include?(t)}

python 3の回答とほぼ同じですが、実行方法が異なります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.