Buzdolabı mıknatısı değişimi


29

Buzdolabı mıknatısları ile bir mesaj yazarken, Sürekli olarak bir ikame bulacaksınız 1bir için I. Bu zorlukta amacınız bir mesajın başka bir mesajın harfleri kullanılarak yazılıp yazılmayacağını bulmaktır. İzin verilen değişimler:

A = 4
B = 8
C = U
E = M = W = 3
G = 6 = 9
I = 1
L = 7
N = Z
O = 0
R = 2
S = 5

Örneğin, mesaj CIRCA 333büyü yeniden düzenlenebilir ICE CREAMilk iki yerde, 3s iki olmak için 180 derece döndürülmüş olan Es ve son 390 derece bir hale getirmek için saat yönü tersinde döndürülen M. Beyaz boşluklar mesajlara dahil edilebilir, ancak mıknatısları buzdolabına yerleştirerek yapıldığı için çözümünüzde hesaba katılmamalıdır.

Giriş

İki karakter dizisi (veya karakter dizisi). Tüm mesajlar eşleşecek^[A-Z0-9 ]+$

Çıktı

İki giriş dizesi birbirinin geçerli düzenlemesi ise Truthy, aksi takdirde falsey.

Örnekler

["CIRCA 333", "ICE CREAM"] => true
["DCLV 00133", "I LOVE CODE"] => true
["WE ARE EMISSARIES", "33   423    3315542135"] => true
["WE WANT ICE CREAM", "MET CIRCA 334 MEN"] => true
["I HAVE ICE CREAM", "HAVE 2 ICE CREAMS"] => false

Daha fazla telaşa örnekler

Bunlar, başka bir kelimeyle eşleşen 15+ harfli kelime. Bazıları önemsiz ikamelerdir, ancak bulduğum her şeyi dahil ettim.

["ANTHROPOMORPHISE","ANTHROPOMORPHISM"]
["ANTIPHILOSOPHIES","ANTIPHILOSOPHISM"]
["CIRCUMSTANTIALLY","ULTRAMASCULINITY"]
["DECENTRALIZATION","DENEUTRALIZATION"]
["DIMETHYLNITROSAMINE","THREEDIMENSIONALITY"]
["INSTITUTIONALISE","INSTITUTIONALISM"]
["INTERCRYSTALLINE","INTERCRYSTALLIZE"]
["INTERNATIONALISE","INTERNATIONALISM"]
["OVERCENTRALIZATION","OVERNEUTRALIZATION"]
["OVERCENTRALIZING","OVERNEUTRALIZING"]
["PREMILLENNIALISE","PREMILLENNIALISM"]
["TRANSCENDENTALIZE","TRANSCENDENTALIZM"]

Bu bir kod golf mücadelesi olduğundan, en kısa çözüm kazanır! En kısa çözümü gönderimden itibaren 7 gün içinde kabul edeceğim. Mutlu golf!

Örnek çözüm, golf oynamayan

İlgili

EDIT : Yer değiştirmelerde hata yaptım, ayrı değiştirmeler yaptım G = 6ve 6 = 9bunları birleştirdik.


2
Bence 48 saat biraz kısa. Peki ya sadece hafta sonları golf oynayanlar?
Adâm

İyi nokta, bir hafta vereceğim.
maxb

1
Eğer izin düşünebileceğinin diğer ikameler N veya Z I, T, H, 7 (ancak H, 1) ve 2
Jeff Zeitlin

1
@JeffZeitlin Meydan sanal alanında bunun hakkında bir tartışma yaptık ve geri dönüşü olmayan tüm oyuncu değişimlerini hariç tutmayı seçtim. Yana Tve Ldeğiştirilebilir değildir, ben ekleyemezsiniz T = 7. Aynı şey için N = Z = 2de geçerli N = Z = R = 2. Bununla birlikte, önerdiğiniz ikame türleri, daha sonra gönderebileceğim bu zorluğun daha zor bir versiyonunu yapacaktır. İlk önce bu tür zorlukların iyi karşılanıp karşılanmayacağını görmek istedim.
maxb

1
@ 3D1T0R evet, oyuncu değişikliği her iki yöne de gitmeli. İki dizeleri geçerli düzenlenmeleri ise çek birbirlerine . Örneğiniz geri dönecekti false.
maxb

Yanıtlar:


4

Japt , 38 36 33 30 bayt

Girdiyi 2 karakter dizisi olarak alır.

®d`z³m`i`oiglbg`í)Ôu)ñ xÃr¶

Deneyin veya tüm test durumlarını çalıştırın

ETHProductions sayesinde 3 bayt kurtarıldı

®d`z...m`i`o...g`í)Ôu)ñ xÃr¶
                                 :Implicit input of array U
®                                :Map each Z
 d                               :  For each pair of characters in the following string,
                                 :  replace all occurrences of the 1st character in Z with the 2nd
  `z...m`                        :    The compressed string "znewem"
         i                       :    Prepend
          `o...g`                :      The compressed string "oireasglbg"
                 í               :      Interleave 0-based indices
                  )              :    End prepend
                   Ô             :    Reverse
                    u            :    Convert to uppercase
                     )           :  End replace
                      ñ          :  Sort
                        x        :  Trim
                         Ã       :End map
                          r      :Reduce
                           ¶     :  By testing equality

Güzel, şu an Jelly'i yeniyor! Sonunda 3 bayt kurtarmak için yapabileceğini düşünüyorum .
ETHProductions

Evet, onu unutuyordum. Teşekkürler, @ETHproductions.
Shaggy

10

Python 2 , 145 131 130 129 125 bayt

lambda*a:all(len({sum(map(w.count,x))for w in a})<2for x in'A4 B8 CU EMW3 G69 I1 L7 NZ O0 R2 S5'.split()+list('DFHJKPQTVXY'))

Çevrimiçi deneyin!

Alt:

Python 2,121 bayt

lambda*a:len({(x,sum(map(w.count,x)))for x in'A4 B8 CU EMW3 G69 I1 L7 NZ O0 R2 S5'.split()+list('DFHJKPQTVXY')for w in a})<23

Çevrimiçi deneyin!



9

JavaScript (ES6), 102 100 bayt

Körme sözdiziminde girdiyi iki karakter dizisi olarak alır (a)(b). Bir boole döndürür.

a=>b=>(g=s=>s.map(c=>'648UD3F6H1JK73Z0PQ25TUV3'[parseInt(c,36)-9]||c).sort().join``.trim())(a)==g(b)

Çevrimiçi deneyin!

Nasıl?

Her giriş için s (g) yardımcı fonksiyonunun kullanılması :

  • 0 - 8 arasındaki rakamlar ve X , Y ve Z harfleri değişmeden kalır. Diğer her şey açıkça tercüme edilmiştir.

    0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
             ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    .........648UD3F6H1JK73Z0PQ25TUV3...
    

    Kod:

    s.map(c => '648UD3F6H1JK73Z0PQ25TUV3'[parseInt(c, 36) - 9] || c)
  • Karakterleri (başında tüm boşlukları getiren) sıralarız, birleştiririz ve tüm baştaki boşlukları kaldırırız.

    Kod:

    .sort().join``.trim()

Son olarak, her iki çıkışı da karşılaştırıyoruz.


6

Retina 0.8.2 , 42 bayt

T` dUZMW`_\OIR\EASG\LBGCN\E
%O`.
^(.*)¶\1$

Çevrimiçi deneyin! Ayrı satırlarda girdi alır, ancak Link test durumlarını ve başlığını içerir. Açıklama:

T` dUZMW`_\OIR\EASG\LBGCN\E

Boşlukları silerek tüm harfleri minimal bir diziye eşleyin.

%O`.

Her dize sıraya göre sıralayın.

^(.*)¶\1$

İki değeri karşılaştırın.


5

APL (Dyalog Unicode) , 49 bayt SBCS

-1 sayesinde ngn.

Anonim zımni önek işlevi.

(≡/(⍋⌷¨⊂)¨)(,¨⎕D,'UMWZ ')⎕R('OIREASGLBGCEEN',⊂⍬)

Çevrimiçi deneyin!

⎕R PCRE R eplace:
'UMWZ ' Bu beş karakter
⎕D, basamağı öncesinde
 ayrı (ziyade tek bir karakter olmaktan çok bir dizeye her olun)
 : ile
⊂⍬ hiçbir şey
'OIREASGLBGCEEN', bu karakterlerin öncesinde

() Şuna aşağıdaki taktik işlevini uygulayın:

( Her birine aşağıdaki yapışkan işlevi uygulayın:

   onu içine al (bir bütün olarak tedavi etmek için)

  ⍋⌷¨ dizenin tamamını dizeye dizmek için sıralayacak dizelerin her birini kullanın.

≡/ onlar özdeş mi (lit. eşleşme azaltma)


''->
ngn

@ngn Neden çalıştığından emin değiliz, yine de teşekkürler.
Adâm

5

Python 2 , 108 bayt

lambda a,b:g(a)==g(b)
g=lambda s:sorted('85930A4614012B3C4D5EF6378GH9AI2J3KL7'[int(c,36)]for c in s if'!'<c)

Çevrimiçi deneyin!

23 eşdeğer karakter sınıfı vardır. 36 karakterli dizgileri kullanarak, '85930A4614012B3C4D5EF6378GH9AI2J3KL7'her karakteri eşdeğer sınıfına eşleriz (boşlukları yok sayarız), sonra sonuç dizisini sıralarız. İki dize eşittir, sonuçta elde edilen listeler eşittir.


4

Java 10, 262 260 258 216 208 174 bayt

a->b->n(a).equals(n(b));String n(String s){return s.chars().mapToObj(x->x<48?"":"OIREASGLBG.......ABCDEFGHIJKLENOPQRSTCVEXYN".split("")[x-48]).sorted().reduce("",(a,b)->a+b);}

-2 bayt sayesinde @Arnauld . OlivierGrégoire @
-76 bayt sayesinde .

Çevrimiçi deneyin.

Açıklama:

a->b->                      // Method with two String parameters and boolean return-type
  n(a).equals(n(b))         //  Return if both Strings are equal in the end

String n(String s){         // Separated method with String as both parameter return-type
  return s.chars()          //  Loop over all characters as integers
          .mapToObj(x->x<48?//   If the current character is a space:
             ""             //    Replace it with an empty String to skip it
            :               //   Else:
             "OIREASGLBG.......ABCDEFGHIJKLENOPQRSTCVEXYN".split("")[x-48]
                            //    Convert multi-substitution characters to a single one
          .sorted()         //  Sort all of the converted characters
          .reduce("",(a,b)->a+b);}
                            //  And join all of them together as single String

2
"A4B8CUEMEWE3G6G9I1L7NZO0R2S5".split("(?<=\\G.{2})")iş gibi görünüyor ... tam olarak nasıl olduğundan bile emin değilim. : p
Arnauld

@Arnauld sayesinde -2 bayt ve {2}olabilmektedir .bir -2 bayt. Ayrıca nasıl çalıştığından% 100 emin değilim. Bildiğim (?<= ... )kullanılır bölünmeye ancak ürün başına sınırlayıcı sondaki tutmak . Ama neden (?=\\G..)bu konuda (önde gelen sınırlayıcı tutmaya devam etmiyor) işe yaramadığını biraz kafam karıştı . Ve ayrıca , rakiplerin buradaki ayrılıkta nasıl bir \\G..rol oynadığını da gerçekten bilmiyoruz ... Bir yerde çözebilecek miyim diye bakacağım, çünkü merak etmiyorum. ; p Kaydedilen bayt için her iki şekilde de teşekkürler. \\GDüz boyutlu bloklarda bölünürken hatırlamanız gerekir . :)
Kevin Cruijssen

1
@Arnauld Bir bölmenin (?<=\\G..)içinde biraz bilgi edinmek istiyorsanız , biraz ışık tutan bir StackoverFlow sorusu yaptım . Temelde tanımsız davranış neredeyse her dilde farklı şekilde çalışıyor. \GSıfır uzunluklu olmasına rağmen , Java'da bölmenin içindeki olumlu bakışla, burada gördüğümüz davranışa neden olan her iki kurala da uyuyor. Hala kişisel olarak bana biraz belirsiz, ama en azından bu cevabı 4 bayt kazandı. ;)
Kevin Cruijssen

1
217 bayt . Yine de daha fazla bayt kurtarabilir.
Olivier Grégoire


3

R , 123 bayt

function(x,y=chartr("48UMW36917Z025","ABCEEEGGILNORS",gsub(" ","",x)))all(g(y[1])==g(y[2]))
g=function(z)sort(utf8ToInt(z))

Çevrimiçi deneyin!

utf8ToInt bir dizgiyi Unicode kod noktaları bir vektörüne dönüştürür.

!sd(a-b)bir bayttan daha kısaall(a==b) ancak bu burada yardımcı olmuyor çünkü aslında tamsayılarla değil mantıklarla uğraşıyorum.


Çok hoş! Tüm öğelerin eşit olabileceği için !anyyerine ihtiyacınız olduğunu düşünüyorum !sd, ancak 1'e deneyin.f(list("BCDEF","ABCDE"))
JayCe

2

J , 56 bayt

-:&(-.&' '/:~@rplc'0123456789UMWZ';"0'OIREASGLBGCEEN'"1)

Çevrimiçi deneyin!

Açıklama:

& hem sol hem de sağ argümanlar için

-.&' ' girdideki boşlukları kaldırır,

rplc cümledeki

'0123456789UMWZ';"0'OIREASGLBGCEEN'"1 Sol sütundaki karakterlerin sağdaki karakterlerle değiştirilmesiyle girdideki karakterler: (burada yerden tasarruf için devredilmiştir)

      |:'0123456789UMWZ';"0'OIREASGLBGCEEN'
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│0│1│2│3│4│5│6│7│8│9│U│M│W│Z│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│O│I│R│E│A│S│G│L│B│G│C│E│E│N│
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

/:~@ ve ortaya çıkan dizeleri sıralar

-: sıralanan dizeler eşit midir?

İlk çözümüm:

J , 77 73 bayt

-:&(1#.(' '-.~])e."1[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1)

Çevrimiçi deneyin!

Açıklama:

(' '-.~]) boşlukları her iki argümandan da kaldırır ve

e."1 follwing tablosuna üyelik için her karakteri test eder:

[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1 referans:

EMW3
G69 
A4  
B8  
CU  
I1  
L7  
NZ  
O0  
R2  
S5  
.
.
.  
All other symbols one in a row

1#. her argüman için karşılaştırma tablolarını ekler

-:& Eşleşiyorlar mı?



2

Python 2, 111 bytes

lambda*t:2>len({`sorted(s.translate(dict(map(None,map(ord,'48UMW36917Z025 '),u'ABCEEEGGILNORS'))))`for s in t})

Try it online!

116 bytes

lambda a,b:g(a)==g(b)
g=lambda s,y='4A8BUCMEWE3E6G9G1I7LZN0O2R5S ':y and g(s.replace(y[0],y[1:2]),y[2:])or sorted(s)

Try it online!




1

05AB1E, 38 33 bytes

εðK.•2Θ`ĆĀÑεÉ•u6«•B/óÕ¦•…CN9«‡{}Ë

Try it online or verify all test cases.

Explanation:

ε                   # Map each value in the (implicit) input-list by:
 ðK                 #  Remove all spaces
   .•2Θ`ĆĀÑεÉ•      #  Push compressed string "abemwgilorsuz"
              u     #  To uppercase: "ABEMWGILORSUZ"
               6«   #  Append a 6: "ABEMWGILORSUZ6"
   B/óÕ¦•          #  Push compressed integer 48333917025
          CN9«     #  Append "CN9": "48333917025CN9"
                   #  Transliterate; map all characters in "ABEMWGILORSUZ" in the
                    #  map-string to "48333917025CN9" at the same indices
    {               #  Then sort all characters
}                   # Close the map
 Ë                  # And check if both are equal (which is output implicitly)

See this 05AB1E tip of mine (sections How to compress strings not part of the dictionary? and How to compress large integers?) to understand why .•2Θ`ĆĀÑεÉ• is "abemwgilorsuz" and •B/óÕ¦• is 48333917025.

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.