Có một chữ cái phù hợp bên trong khác?


23

Bạn có nhớ mat của tôi được nhóm đúng màu ?

Thảm của tôi được nhóm đúng theo màu sắc

Hôm qua tôi đã nhìn vào nó và nhận ra rằng một số chữ cái phù hợp với những người khác. Ví dụ: một chữ cái Pphù hợp với nơi thư Rđi. Vì vậy, đây là một thách thức đơn giản: đưa ra hai chữ cái, trả về giá trị trung thực nếu bất kỳ một chữ cái nào khớp với nhau (trực tiếp hoặc xoay, nhưng không lật) hoặc giá trị falsey nếu chúng không có. Đó là, nếu đầu vào là [P,R]hoặc [R,P], bạn phải trả lại sự thật vì trong cả hai trường hợp, một chữ cái sẽ khớp với nhau. Nếu bạn nhận được, [L,U]bạn phải trả lại falsey vì không phù hợp với bên kia.

Quy tắc

  • Đầu vào phải có hai ký tự chữ và số trong phạm vi [0-9A-Z], vì cũng có các số trong chiếu, ở bất kỳ dạng nào bạn cần (hai ký tự riêng biệt như hai đầu vào, một danh sách có hai ký tự, một chuỗi có 2 ký tự, sao cũng được).
  • Đầu ra phải nhất quán (giá trị trung thực và falsey phải luôn giống nhau).
  • Sau đây là bảng phụ kiện (lưu ý rằng một chữ cái luôn nằm đúng vị trí của nó, chỉ trong trường hợp bạn nhận được một cái gì đó như [Y,Y]là đầu vào):

    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
    

Tôi thề một cách long trọng rằng tôi đã thử mọi bộ đồ trong tấm thảm của con tôi. (Lau mồ hôi trên trán.)

Đây là , vì vậy có thể mã ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!

Một số trường hợp thử nghiệm

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

Sandbox bài . Xin vui lòng, tha thứ cho tôi nếu bạn phát hiện thêm phụ kiện mà tôi bỏ lỡ. Rất cám ơn urous đã giúp tôi với danh sách phụ kiện.



1
1không phù hợp F?
dùng202729

@ user202729 không, vì bạn cần lật 1để phù hợp với nó Fnhưng điều đó không được phép trong chiếu của tôi. :-)
Charlie

4
Hình minh họa Biểu đồ nghệ thuật ASCII (tất nhiên sự phù hợp là nhất thời)
user202729

1
@ Οurous đó là trong câu hỏi khác này khi nó đã có hai câu trả lời ... Bên cạnh đó, thử thách đã có nhiều trường hợp để kiểm tra, nhiều trường hợp sẽ không thêm bất cứ điều gì vào nó (Tôi nghĩ phần sáng tạo nhất là hai đầu vào là hoán đổi cho nhau khi bạn phải kiểm tra cả hai phụ kiện).
Charlie

Câu trả lời:




2

Sạch sẽ , 276 226 byte

Mơ hồ golf-ish. Sẽ đánh bóng vào ngày mai.

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

Hãy thử trực tuyến!



2

Javascript 155 153 151 149 byte

Tôi nghĩ rằng điều này hoạt động trên tất cả các trường hợp, 1/0 cho đúng / sai.

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

Giải trình:

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

Thay đổi:

  • đã lưu 2 byte nhờ vào kamoroso94
  • đã lưu 2 byte nhờ Chris M
  • đã lưu 2 byte bằng cách thay đổi phương thức tra cứu thành .some ()

Liệu điều này trở lại đúng nếu cphù hợp fhoặc fphù hợp c? Có vẻ như bạn chỉ kiểm tra một trường hợp.
Charlie

Mã cố định để trả về true nếu fphù hợpc
Brian H.

Tôi không giải thích quá tốt, nếu có ai muốn làm cho nó rõ ràng hơn, hãy đề nghị chỉnh sửa
Brian H.

Bạn có thể sử dụng includes(f)thay vì indexOf(f)>=0để lưu 2 byte.
kamoroso94

thật tuyệt, thậm chí còn không biết đó là một điều: 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"))))

Hãy thử trực tuyến!

Đã lưu một số byte bằng cách nhóm các ký tự khớp với 'O'. Nhưng kiểm tra đầu vào đảo ngược sử dụng quá nhiều mã ...

Giải trình:

  • zip(☐)zips các chữ cái đơn tương ứng từ "OCFILMPV16"& một chuỗi các chữ cái phù hợp.
  • .in(☐) được áp dụng theo nguyên tố, vd (in(a,'O'),in(b,"OCFILMPV16"))
  • all(.in(☐)) Cả hai phải được tìm thấy ...
  • |cho một a,bhoặc b,a...
  • any(map(☐)) cho ít nhất một yếu tố của danh sách nén.

1

Kotlin , 147 139 byte

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

Hãy thử trực tuyến!

Ví dụ trên Try It Online bao gồm các trường hợp thử nghiệm cho mọi kết hợp tích cực và một vài trường hợp tiêu cực.

Tôi đã không tối ưu hóa reg.ex. quá nhiều, vì vậy nó có thể dài hơn cần thiết

EDIT: đã lưu một vài byte trên reg.ex.


1

C (gcc) , 211 byte

Một nỗ lực đầu tiên. Rất thẳng thắn.

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

Hãy thử trực tuyến!


0

PHP , 204 byte

-147 byte vì tôi quay lại để loại bỏ 2 byte chỉ để thấy rằng mã của tôi có một vài lỗi và các biến không được sử dụng! Mã của tôi bây giờ ngắn hơn nhiều.

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

Hãy thử trực tuyến!


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

Khá giống câu trả lời của python 3, nhưng với cách thực hiện khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.