Apakah surat itu pas dengan yang lain?

23

Apakah Anda ingat tikar saya dengan benar dikelompokkan berdasarkan warna ?

Mataku dikelompokkan berdasarkan warna

Kemarin saya melihatnya dan menyadari bahwa beberapa surat cocok dengan yang lain. Contoh: surat Ppas di tempat surat itu Rpergi. Jadi, inilah tantangan sederhana: diberi dua huruf, kembalikan nilai kebenaran jika ada satu huruf yang pas di dalam yang lain (langsung atau diputar, tetapi tidak terbalik), atau nilai falsey jika tidak. Artinya, jika inputnya adalah [P,R]atau [R,P], Anda harus mengembalikan kebenaran karena dalam kedua kasus satu huruf cocok di dalam yang lain. Jika Anda mendapatkan [L,U]Anda harus mengembalikan falsey karena tidak cocok di dalam yang lain.

Aturan

  • Input harus terdiri dari dua karakter alfanumerik dalam rentang [0-9A-Z], karena ada juga angka dalam mat, dalam bentuk apa pun yang Anda perlukan (dua karakter terpisah sebagai dua input, daftar dengan dua karakter, string dengan karakter 2 karakter, terserah).
  • Outputnya harus konsisten (nilai-nilai kebenaran dan falsey harus selalu sama).
  • Berikut ini adalah tabel kelengkapan (perhatikan bahwa surat selalu pas di tempat yang tepat, kalau-kalau Anda mendapatkan sesuatu seperti [Y,Y]input):

    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
    

Saya bersumpah bahwa saya telah menguji setiap pemasangan di tikar anak saya. (Keringkan keringatnya dari dahinya.)

Ini adalah , jadi semoga kode terpendek untuk setiap bahasa menang!

Beberapa test case

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

Posting kotak pasir . Tolong, maafkan saya jika Anda melihat lebih banyak perlengkapan yang saya lewatkan. Banyak terima kasih kepada Οurous karena membantu saya dengan daftar perlengkapan.

Charlie
sumber
1
kolmogorov-kompleksitas .
user202729
1
1tidak cocok F?
user202729
@ user202729 tidak, karena Anda perlu membalik 1agar pas di Ftapi itu tidak diperbolehkan di mataku. :-)
Charlie
4
Ilustrasi grafik ASCII-art (tentu saja fit-in adalah transitif)
user202729
1
@ Οurous itu ada dalam pertanyaan lain ini ketika sudah memiliki dua jawaban ... Selain itu, tantangannya sudah memiliki banyak kasus untuk diuji, lebih banyak kasus tidak akan menambahkan apa pun untuk itu (saya pikir bagian paling kreatif adalah bahwa kedua input tersebut adalah dapat dipertukarkan karena Anda harus memeriksa kedua fiting).
Charlie

Jawaban:

6

Python 2 , 135 130 129 byte

-1 byte terima kasih kepada Lynn

lambda s:cmp(*s)%2*s[::cmp(*s)|1]in'OIH TIE XI7 RF O8 OGC LI0 O3 O96 VA O6 KI PI WI L1 WMI O0 RIB NI1 FE SOC VID ZIFB1 PF LE1 RP'

Cobalah online!

Python 3 , 143 byte

lambda*i:any({*i}&{a,c}=={*i}for a,b in zip('CFGILMPSVW013689','GO BEPR O 017BDEFHKLMNOPRTVWXZ E W R O A M O BEL O 9O O 6O'.split())for c in b)

Cobalah online!

ovs
sumber
5

Retina , 93 92 byte

O`.
(.)\1|1[BEL]|69|AV|CG|BF|EF|EL|FP|FR|[017BDEFH]I|I[KLMNOPRTVWXZ]|MW|PR|OS|[03689CG]O

^$

Cobalah online! Sunting: Disimpan 1 byte berkat @ovs.

Neil
sumber
Apakah ini berfungsi untuk 92 byte?
Ovs
2

Bersih , 276 226 byte

Samar-samar golf-ish. Akan dipoles besok.

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

Cobalah online!

Suram
sumber
2

Haskell , 149 145 byte

[]!_=0>1
(a:b:c)!t=(a,b)==t||(b,a)==t||c!t
f x y=x==y||"0I0O1B1E1I1L3O696O7I8O9OAVBFBICGCODIEFEIELFIFPFRGOHIIKILIMINIOIPIRITIVIWIXIZMWOSPR"!(x,y)

Cobalah online!

pengguna28667
sumber
2

Javascript 155 153 151 149 byte

Saya pikir ini bekerja pada semua kasus, 1/0 untuk true / false.

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

Penjelasan:

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]))});

Changelog:

  • disimpan 2 byte berkat kamoroso94
  • disimpan 2 byte berkat Chris M
  • menyimpan 2 byte dengan mengubah metode pencarian ke .some ()
Brian H.
sumber
Apakah ini kembali benar jika ccocok fatau fcocok c? Tampaknya Anda hanya memeriksa satu kasing.
Charlie
Kode ditetapkan untuk mengembalikan true jika fcocokc
Brian H.
Saya tidak terlalu baik menjelaskan, jika ada yang ingin membuatnya lebih jelas merasa bebas untuk menyarankan suntingan
Brian H.
Anda dapat menggunakan includes(f)alih-alih indexOf(f)>=0menyimpan 2 byte.
kamoroso94
luar biasa, bahkan tidak tahu itu hal: D
Brian H.
1

Julia 0,6 , 139 byte

(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"))))

Cobalah online!

Menyimpan beberapa byte dengan mengelompokkan karakter yang sesuai dengan 'O'. Tetapi menguji input terbalik menggunakan terlalu banyak kode ...

Penjelasan:

  • zip(☐) ritsleting huruf tunggal yang sesuai dari "OCFILMPV16" & serangkaian huruf yang cocok.
  • .in(☐) diterapkan secara elemen, misalnya (in(a,'O'),in(b,"OCFILMPV16"))
  • all(.in(☐)) Keduanya harus ditemukan ...
  • |untuk salah satu a,batau b,a...
  • any(map(☐)) untuk setidaknya satu elemen dari daftar zip.
LukeS
sumber
1

Kotlin , 147 139 bytes

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]"))}

Cobalah online!

Contoh di Try It Online mencakup uji kasus untuk setiap kombinasi positif dan beberapa kombinasi negatif.

Saya belum mengoptimalkan reg.ex. terlalu banyak, jadi mungkin lebih lama dari yang diperlukan

EDIT: menyimpan beberapa byte pada reg.ex.

Damiano
sumber
1

C (gcc) , 211 byte

Upaya pertama. Sangat lurus ke depan.

i;char*c="CFGILMPSVW013689",*x[]={"GO","BEPR","O","017BDEFHKLMNOPRTVWXZ","E","W","R","O","A","M","O","BEL","O","9O","O","6O"};h(a,b){return(i=strchr(c,a)-c)>=0&&strchr(x[i],b);}f(a,b){return a==b|h(a,b)|h(b,a);}

Cobalah online!

gastropner
sumber
0

PHP , 204 byte

-147 byte karena saya kembali untuk menghapus 2 byte hanya untuk menemukan bahwa kode saya memiliki beberapa bug dan variabel yang tidak digunakan! Kode saya sekarang jauh lebih pendek.

<?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);}

Cobalah online!

NK1406
sumber
0

Ruby, 140 byte

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

Hampir sama dengan jawaban python 3, tetapi dengan eksekusi yang berbeda.

Håvard Nygård
sumber