Bir mektup diğerinin içine sığar mı?


23

Paspasın renklere göre düzgün bir şekilde gruplandığını hatırlıyor musunuz ?

Matım düzgün şekilde renklere göre gruplandırılmış

Dün ona bakıyordum ve bazı harflerin diğerlerinin içine sığdığını fark ettim. Örnek: PHarflerin Rgittiği yere bir harf sığar . İşte size basit bir meydan okuma: iki harf verildiğinde, harflerden herhangi birinin diğerinin içine girmesi durumunda (doğrudan veya döndürülmüş fakat çevrilmemiş) gerçek olmayan bir değer veya eğer değilse, bir falsey değeri döndürün. Diğer bir deyişle, giriş [P,R]veya ise [R,P], her iki durumda da bir harf diğerinin içine sığdığı için gerçeği döndürmeniz gerekir. Eğer elde [L,U]edersen, diğerinin içine uymayan falsey'i geri vermelisin.

kurallar

  • Girdi, [0-9A-Z] aralığında iki alfanümerik karakterden oluşmalıdır; matta sayılar da vardır, istediğiniz herhangi bir biçimde (iki giriş gibi iki ayrı karakter, iki karakterli bir liste, bir karakter dizisi 2 karakter, her neyse).
  • Çıktı tutarlı olmalıdır (gerçeği ve falsey değerleri her zaman aynı olmalıdır).
  • Bağlantı parçaları tablosu aşağıdadır ( [Y,Y]giriş gibi bir şey edinmeniz durumunda bir mektubun her zaman uygun yerine oturduğunu unutmayın ):

    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
    

Çocuğumun matındaki her fitingi test ettiğime yemin ederim. (Terini alnından kurur.)

Bu , yani her dilin kazanması için en kısa kod olabilir!

Bazı test durumları

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 gönderisi . Lütfen, kaçırdığım parçaları daha bulursanız beni bağışlayın. Bana bağlantı parçaları listesi için yardımcı olduğum için tourous teşekkürler .



1
1uymuyor Fmu?
user202729

@ user202729 hayır, çünkü 1onu sığdırmak için çevirmeniz gerekir , Fancak bu benim matımın içinde bulunmasına izin verilmez. :-)
Charlie

4
Resimde ASCII-art grafiği (elbette fit-in geçişlidir)
user202729

1
@ Ne yazık ki, zaten iki cevabı vardı , bu başka bir soru oldu ... Ayrıca, meydan okuma zaten test etmek için pek çok dava var, daha fazla dava buna bir şey eklemeyecek (Bence en yaratıcı kısmı iki girdi olmasıdır. her iki bağlantı parçasını da kontrol etmeniz gerektiğinden değiştirilebilir).
Charlie,

Yanıtlar:


6

Python 2 , 135 130 129 bayt

Lynn sayesinde -1 bayt

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'

Çevrimiçi deneyin!

Python 3 , 143 bayt

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)

Çevrimiçi deneyin!


5

Retina , 93 92 bayt

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

^$

Çevrimiçi deneyin! Düzenleme: @ovs sayesinde 1 bayt kaydedildi.


Bu 92 bayt için çalışıyor mu ?
ovs

2

Temiz , 276 226 bayt

Belirgin golf-ish. Yarın parlatır.

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

Çevrimiçi deneyin!



2

Javascript 155 153 151 149 bayt

Bunun tüm durumlarda işe yaradığını düşünüyorum, doğru / yanlış için 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)

Açıklama:

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

Değişiklikler:

  • kamoroso94 sayesinde 2 bayt kurtarıldı
  • Chris M sayesinde 2 bayt kurtardı
  • arama yöntemini .some () olarak değiştirerek 2 bayt kurtardı

Eğer bu doğru dönmek mu cuyan fveya fuyan c? Görünüşe göre sadece bir davayı kontrol ediyorsun.
Charlie

Kod, fuygunsa doğru şekilde döndürülmek üzere düzeltildic
Brian H.

Açıklamayı pek de iyi yapmam, eğer biri daha açık bir düzenleme önerisinde bulunmaktan çekinmeyecekse
Brian H.

2 bayt kaydetmek includes(f)yerine kullanabilirsiniz indexOf(f)>=0.
kamoroso94

harika, bunun bir şey olduğunu bile bilmiyordum: D
Brian H.

1

Julia 0.6 , 139 bayt

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

Çevrimiçi deneyin!

'O' ile eşleşen karakterleri gruplayarak bazı baytlar kaydedildi. Fakat ters girişi test etmek çok fazla kod kullanıyor ...

Açıklama:

  • zip(☐)karşılık gelen tek harflerden "OCFILMPV16"& eşleşen harflerden oluşan bir diziden fermuarlar .
  • .in(☐) eleman yönünde uygulanır, örneğin (in(a,'O'),in(b,"OCFILMPV16"))
  • all(.in(☐)) Her ikisi de bulunmalı ...
  • |ya a,bda b,a...
  • any(map(☐)) sıkıştırılmış listenin en az bir elemanı için.

1

Kotlin , 147 139 bayt

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

Çevrimiçi deneyin!

Çevrimiçi Deneyin sayfasındaki örnek, her pozitif kombinasyon ve birkaç negatif test için test durumlarını içerir.

Reg.ex’i optimize etmedim. Çok fazla, bu yüzden gerekenden daha uzun olabilir

EDIT: reg.ex dosyasına bir kaç byte kaydetti.


1

C (gcc) , 211 bayt

İlk deneme. Çok yalındır.

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

Çevrimiçi deneyin!


0

PHP , 204 bayt

-147 bayt, çünkü kodumun birkaç hata ve kullanılmayan değişkenleri olduğunu bulmak için yalnızca 2 byte'ı kaldırmaya geri döndüm! Kodum şimdi çok daha kısa.

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

Çevrimiçi deneyin!


0

Ruby, 140 bayt

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

Hemen hemen python 3 ile aynı cevap ama farklı bir uygulama.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.