Una lettera si inserisce nell'altra?


23

Ricordi il mio tappetino correttamente raggruppato per colore ?

Il mio tappetino correttamente raggruppato per colore

Ieri lo stavo guardando e mi sono reso conto che alcune lettere si adattavano ad altre. Esempio: una lettera si Padatta al punto in cui la lettera Rva. Quindi ecco una semplice sfida: date due lettere, restituite un valore di verità se una delle lettere si inserisce all'interno dell'altra (direttamente o ruotata, ma non capovolta), o un valore di falsa se non lo fanno. Cioè, se l'input è [P,R]o [R,P], è necessario restituire la verità perché in entrambi i casi una lettera si inserisce all'interno dell'altra. Se ottieni [L,U]devi restituire il falso perché nessuno dei due si adatta all'interno dell'altro.

Regole

  • L'input deve essere composto da due caratteri alfanumerici nell'intervallo [0-9A-Z], poiché nel riquadro sono presenti anche numeri, in qualsiasi forma siano necessari (due caratteri separati come due input, un elenco con due caratteri, una stringa con il 2 caratteri, qualunque cosa).
  • L'output deve essere coerente (i valori di verità e falsità devono essere sempre gli stessi).
  • Di seguito è riportata la tabella dei raccordi (si noti che una lettera si adatta sempre al posto giusto, nel caso in cui si ottenga qualcosa di simile [Y,Y]come 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
    

Giuro solennemente di aver testato ogni raccordo nel tappetino di mio figlio. (Si asciuga il sudore dalla fronte.)

Questo è , quindi può vincere il codice più breve per ogni lingua!

Alcuni casi di test

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

Posta sandbox . Per favore, perdonami se trovi più accessori che mi sono perso. Mille grazie a ousurous per avermi aiutato con l'elenco dei raccordi.



1
1non si adatta F?
user202729

@ user202729 no, perché devi capovolgerlo 1per adattarlo a Fma non è consentito nel mio tappetino. :-)
Charlie,

4
Grafico ASCII-art dell'illustrazione (ovviamente il fit-in è transitivo)
user202729

1
@ Οuroso era in questa altra domanda quando aveva già due risposte ... Inoltre, la sfida ha già molti casi da testare, più casi non aggiungeranno nulla ad esso (penso che la parte più creativa sia che i due input sono intercambiabile in quanto è necessario controllare entrambi i raccordi).
Charlie,

Risposte:


6

Python 2 , 135 130 129 byte

-1 byte grazie 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'

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

Provalo online!


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

^$

Provalo online! Modifica: salvato 1 byte grazie a @ovs.


Fa questo lavoro per 92 byte?
Ovs,

2

Pulito , 276 226 byte

Vagamente golf-ish. Luciderà domani.

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

Provalo online!


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)

Provalo online!


2

Javascript 155 153 151 149 byte

Penso che questo funzioni su tutti i casi, 1/0 per vero / 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)

Spiegazione:

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:

  • salvato 2 byte grazie a kamoroso94
  • salvato 2 byte grazie a Chris M
  • salvato 2 byte modificando il metodo di ricerca in .some ()

Questo ritorna vero se si cadatta fo si fadatta c? Sembra che tu controlli solo un caso.
Charlie,

Codice corretto per restituire true se fadattoc
Brian H.

Non sto spiegando troppo bene, se qualcuno vuole rendere più chiaro sentirsi libero di suggerire una modifica
Brian H.

È possibile utilizzare includes(f)invece di indexOf(f)>=0salvare 2 byte.
kamoroso94,

fantastico, non sapevo nemmeno che fosse una cosa: 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"))))

Provalo online!

Ho salvato alcuni byte raggruppando i caratteri che si adattano a "O". Ma testare l'input inverso utilizza troppo codice ...

Spiegazione:

  • zip(☐)comprime le singole lettere corrispondenti "OCFILMPV16"e una stringa di lettere corrispondenti.
  • .in(☐) viene applicato in modo elementare, ad es (in(a,'O'),in(b,"OCFILMPV16"))
  • all(.in(☐)) Entrambi devono essere trovati ...
  • |per uno a,bo b,a...
  • any(map(☐)) per almeno un elemento dell'elenco zippato.

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

Provalo online!

L'esempio su Try It Online include casi di test per ogni combinazione positiva e alcuni negativi.

Non ho ottimizzato reg.ex. troppo, quindi potrebbe essere più lungo del necessario

EDIT: salvato alcuni byte su reg.ex.


1

C (gcc) , 211 byte

Un primo tentativo. Molto diretto.

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

Provalo online!


0

PHP , 204 byte

-147 byte perché sono tornato per rimuovere 2 byte solo per scoprire che il mio codice aveva alcuni bug e variabili inutilizzate! Il mio codice ora è molto più breve.

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

Provalo online!


0

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

Praticamente uguale alla risposta di Python 3, ma con un'esecuzione diversa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.