¿Una letra cabe dentro de la otra?

23

¿Recuerdas mi esterilla correctamente agrupada por colores ?

Mi esterilla correctamente agrupada por colores.

Ayer lo estaba mirando y me di cuenta de que algunas letras encajan dentro de otras. Ejemplo: una letra Pcabe en el lugar donde Rva la letra . Así que aquí hay un desafío simple: dadas dos letras, devuelve un valor verdadero si alguna de las letras encaja dentro de la otra (directamente o girado, pero no invertido), o un valor falsey si no lo hacen. Es decir, si la entrada es [P,R]o [R,P], debe devolver la verdad porque en ambos casos una letra cabe dentro de la otra. Si lo consigues [L,U]debes regresar falsey ya que ninguno cabe dentro del otro.

Reglas

  • La entrada debe tener dos caracteres alfanuméricos en el rango [0-9A-Z], ya que también hay números en el tapete, en cualquier forma que necesite (dos caracteres separados como dos entradas, una lista con dos caracteres, una cadena con el 2 caracteres, lo que sea).
  • La salida debe ser coherente (los valores de veracidad y falsey deben ser siempre los mismos).
  • La siguiente es la tabla de ajustes (tenga en cuenta que una letra siempre cabe en su lugar correcto, en caso de que obtenga algo [Y,Y]como entrada):

    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
    

Juro solemnemente que he probado cada ajuste en la colchoneta de mi hijo. (Se seca el sudor de la frente).

Este es el , ¡así que puede ganar el código más corto para cada idioma!

Algunos casos de prueba

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

Puesto de sandbox . Por favor, perdóname si ves más accesorios que me perdí. Muchas gracias a Οurous por ayudarme con la lista de accesorios.

Charlie
fuente
1
kolmogorov-complejidad .
user202729
1
1no encaja F?
user202729
@ user202729 no, porque debes voltearlo 1para que quepa en el, Fpero eso no está permitido en mi tapete. :-)
Charlie
44
Gráfico gráfico de arte ASCII (por supuesto, el ajuste es transitivo)
usuario202729
1
@ Οurousivo fue en esta otra pregunta cuando ya tenía dos respuestas ... Además, el desafío ya tiene muchos casos para probar, más casos no agregarán nada (creo que la parte más creativa es que las dos entradas son intercambiable ya que tiene que verificar ambos accesorios).
Charlie

Respuestas:

6

Python 2 , 135 130 129 bytes

-1 byte gracias a 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'

Pruébalo en línea!

Python 3 , 143 bytes

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)

Pruébalo en línea!

ovs
fuente
5

Retina , 93 92 bytes

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

^$

Pruébalo en línea! Editar: Guardado 1 byte gracias a @ovs.

Neil
fuente
¿ Esto funciona para 92 bytes?
ovs
2

limpia , 276 226 bytes

Vagamente golfista. Puliré mañana.

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

Pruébalo en línea!

Οurous
fuente
2

Haskell , 149 145 bytes

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

Pruébalo en línea!

usuario28667
fuente
2

Javascript 155 153 151 149 bytes

Creo que esto funciona en todos los casos, 1/0 para verdadero / falso.

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

Explicación:

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

Registro de cambios:

  • ahorró 2 bytes gracias a kamoroso94
  • ahorró 2 bytes gracias a Chris M
  • ahorró 2 bytes cambiando el método de búsqueda a .some ()
Brian H.
fuente
¿Esto devuelve cierto si cencaja fo fencaja c? Parece que solo marca un caso.
Charlie
Código corregido para devolver verdadero si fcabec
Brian H.
No soy muy bueno explicando, si alguien quiere aclararlo, siéntase libre de sugerir una edición
Brian H.
Puede usar en includes(f)lugar de indexOf(f)>=0guardar 2 bytes.
kamoroso94
increíble, ni siquiera sabía que era una cosa: D
Brian H.
1

Julia 0.6 , 139 bytes

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

Pruébalo en línea!

Guarda algunos bytes al agrupar los caracteres que se ajustan a 'O'. Pero probar la entrada invertida usa demasiado código ...

Explicación:

  • zip(☐) comprime las letras individuales correspondientes de "OCFILMPV16" & una cadena de letras coincidentes.
  • .in(☐) se aplica por elementos, p. ej. (in(a,'O'),in(b,"OCFILMPV16"))
  • all(.in(☐)) Ambos deben ser encontrados ...
  • |para cualquiera a,bo b,a...
  • any(map(☐)) para al menos un elemento de la lista comprimida.
Lucas
fuente
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]"))}

Pruébalo en línea!

El ejemplo de Try It Online incluye casos de prueba para cada combinación positiva y algunas negativas.

No he optimizado el reg.ex. demasiado, por lo que podría ser más largo de lo necesario

EDITAR: guardado algunos bytes en reg.ex.

Damiano
fuente
1

C (gcc) , 211 bytes

Un primer intento. Muy sencillo.

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

Pruébalo en línea!

gastropner
fuente
0

PHP , 204 bytes

-147 bytes porque volví a la cámara para eliminar 2 bytes solo para descubrir que mi código tenía algunos errores y variables no utilizadas. Mi código ahora es mucho más corto.

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

Pruébalo en línea!

NK1406
fuente
0

Rubí, 140 bytes

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

Más o menos lo mismo que la respuesta de Python 3, pero con una ejecución diferente.

Håvard Nygård
fuente