Thay thế nam châm tủ lạnh


29

Khi viết tin nhắn bằng nam châm tủ lạnh, bạn sẽ thường thấy mình thay thế 1cho một I. Trong thử thách này, mục tiêu của bạn là tìm hiểu xem một tin nhắn có thể được viết bằng cách sử dụng các chữ cái của một tin nhắn khác hay không. Các thay thế được phép là:

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

Ví dụ, tin nhắn CIRCA 333có thể được sắp xếp lại để đánh vần ICE CREAM, trong đó hai 3s đầu tiên được xoay 180 độ để tạo hai Es và cuối cùng 3được xoay 90 độ ngược chiều kim đồng hồ để tạo một M. Khoảng trắng có thể được bao gồm trong các tin nhắn, nhưng chúng không nên được tính trong giải pháp của bạn, vì chúng được tạo ra bằng cách đặt nam châm trên tủ lạnh.

Đầu vào

Hai chuỗi (hoặc mảng ký tự). Tất cả các tin nhắn sẽ phù hợp^[A-Z0-9 ]+$

Đầu ra

Thật ra nếu hai chuỗi đầu vào là sự sắp xếp lại hợp lệ của nhau, thì khác.

Ví dụ

["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

Ví dụ mạnh mẽ hơn

Đây là tất cả hơn 15 từ chữ cái ánh xạ sang một từ khác. Một số là sự thay thế tầm thường, nhưng tôi bao gồm tất cả những gì tôi tìm thấy.

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

Vì đây là một thử thách golf mã, giải pháp ngắn nhất sẽ thắng! Tôi sẽ chấp nhận giải pháp ngắn nhất trong 7 ngày kể từ ngày đăng. Chúc bạn chơi golf vui vẻ!

Giải pháp mẫu, không chơi gôn

Liên quan

EDIT : Đã có lỗi trong các thay thế, có G = 66 = 9như các thay thế riêng biệt, đã hợp nhất chúng thành một.


2
Tôi nghĩ 48 giờ là một chút ngắn. Còn những người chỉ chơi golf vào cuối tuần thì sao?
Adám

Điểm tốt, tôi sẽ cho nó một tuần.
maxb

1
Các thay thế khác mà bạn có thể xem xét cho phép là 7 cho T, H cho I (nhưng không phải 1 cho H) và 2 cho N hoặc Z
Jeff Zeitlin

1
@JeffZeitlin Chúng tôi đã thảo luận về vấn đề này trong hộp cát thử thách và tôi đã chọn loại trừ tất cả các sự thay thế không thể đảo ngược. Vì TLkhông thể trao đổi, tôi không thể thêm T = 7. Điều tương tự cũng xảy ra N = Z = 2, điều đó có nghĩa là N = Z = R = 2. Tuy nhiên, loại thay thế mà bạn đề xuất sẽ tạo ra một phiên bản khó hơn cho thử thách này, mà tôi có thể đăng vào một thời gian sau. Tôi chỉ muốn xem liệu những loại thử thách này sẽ được đón nhận đầu tiên.
maxb

1
@ 3D1T0R có, việc thay thế phải đi cả hai chiều. Kiểm tra là nếu hai chuỗi là sắp xếp lại hợp lệ của nhau . Ví dụ của bạn sẽ trở lại false.
maxb

Câu trả lời:


4

Japt , 38 36 33 30 byte

Lấy đầu vào là một mảng gồm 2 chuỗi.

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

Hãy thử nó hoặc chạy tất cả các trường hợp thử nghiệm

3 byte được lưu nhờ vào ETH Productstions

®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

Đẹp, hiện đang đánh Jelly! Tôi nghĩ bạn có thể làm ở cuối để tiết kiệm 3 byte.
Sản phẩm ETH

Ồ, vâng, tôi đã quên điều đó. Cảm ơn, @ETHproductions.
Xù xì



9

JavaScript (ES6), 102 100 byte

Lấy đầu vào là hai mảng ký tự theo cú pháp currying (a)(b). Trả về một boolean.

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

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

Làm sao?

Sử dụng hàm trợ giúp g () , cho mỗi s đầu vào :

  • Chữ số 0 đến 8 và chữ X , YZ không thay đổi. Mọi thứ khác được dịch rõ ràng.

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

    Mã số:

    s.map(c => '648UD3F6H1JK73Z0PQ25TUV3'[parseInt(c, 36) - 9] || c)
  • Chúng tôi sắp xếp các ký tự (mang lại tất cả các khoảng trắng ở đầu), nối chúng và xóa tất cả các khoảng trắng hàng đầu.

    Mã số:

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

Cuối cùng, chúng tôi so sánh cả hai đầu ra.


6

Võng mạc 0.8.2 , 42 byte

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

Hãy thử trực tuyến! Có đầu vào trên các dòng riêng biệt, nhưng Liên kết bao gồm các trường hợp thử nghiệm và tiêu đề. Giải trình:

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

Ánh xạ tất cả các chữ cái vào một tập hợp tối thiểu, xóa các khoảng trắng.

%O`.

Sắp xếp từng chuỗi theo thứ tự.

^(.*)¶\1$

So sánh hai giá trị.


5

APL (Dyalog Unicode) , 49 byte SBCS

-1 cảm ơn ngn.

Chức năng tiền tố ẩn danh.

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

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

⎕R PCRE R eplace:
'UMWZ ' năm ký tự này
⎕D, đứng trước các chữ số
 riêng biệt (biến mỗi ký tự thành một chuỗi thay vì là một ký tự)
 với:
⊂⍬ không có gì
'OIREASGLBGCEEN', đứng trước các ký tự này

(... ) áp dụng các chức năng ngầm sau đó:

(...  áp dụng các chức năng ngầm sau đây để mỗi:

   kèm theo nó (để coi nó như một toàn thể)

  ⍋⌷¨ sử dụng từng chỉ mục sẽ sắp xếp nó để lập chỉ mục trong toàn bộ chuỗi (sắp xếp)

≡/ chúng giống hệt nhau phải không? (giảm trận đấu)


''->
ngn

@ngn Không chắc tại sao nó hoạt động, nhưng dù sao cũng cảm ơn.
Adám

5

Python 2 , 108 byte

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

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

Có 23 lớp nhân vật tương đương. Sử dụng chuỗi 36 ký tự '85930A4614012B3C4D5EF6378GH9AI2J3KL7', chúng tôi ánh xạ từng ký tự vào lớp tương đương của nó (bỏ qua khoảng trắng), sau đó sắp xếp mảng kết quả. Hai chuỗi tương đương nếu các danh sách kết quả bằng nhau.


4

Java 10, 262 260 258 216 208 174 byte

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 byte nhờ @Arnauld .
-76 byte nhờ @ OlivierGrégoire .

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

Giải trình:

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})")dường như hoạt động ... mặc dù tôi thậm chí không chắc chắn chính xác như thế nào. : p
Arnauld

@Arnauld Cảm ơn, -2 byte và {2}có thể .cho -2 byte khác. Tôi cũng không chắc chắn 100% nó hoạt động như thế nào. Tôi biết (?<= ... )được sử dụng để phân chia nhưng giữ dấu phân cách trên mỗi mục . Nhưng tôi hơi bối rối tại sao (?=\\G..)(tiếp tục phân định hàng đầu) không hoạt động trong vấn đề đó. Và cũng không thực sự biết làm thế nào các hành vi \\G..vs ..trong phân chia ở đây. Sẽ xem nếu tôi có thể tìm ra nó ở đâu đó, bởi vì tôi không tò mò. ; p Cảm ơn một trong hai cách cho các byte đã lưu. Cần nhớ \\Gkhi tách trên các khối có kích thước bằng nhau. :)
Kevin Cruijssen

1
@Arnauld Nếu bạn muốn có một số thông tin cơ bản về việc (?<=\\G..)chia tách, tôi đã thực hiện một câu hỏi StackoverFlow làm sáng tỏ. Về cơ bản, hành vi không xác định này hoạt động khác nhau ở hầu hết các ngôn ngữ. Mặc dù \Gcó độ dài bằng không, nhưng trong Java với cái nhìn tích cực phía sau sự phân chia, nó có mâu thuẫn với cả hai quy tắc gây ra hành vi mà chúng ta thấy ở đây. Cá nhân tôi vẫn còn hơi mơ hồ, nhưng ít nhất nó đã lưu được 4 byte trong câu trả lời này. ;)
Kevin Cruijssen

1
217 byte . Có thể tiết kiệm nhiều byte hơn, mặc dù.
Olivier Grégoire


3

R , 123 byte

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

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

utf8ToInt chuyển đổi một chuỗi thành một vectơ các điểm mã Unicode.

!sd(a-b)ngắn hơn một byteall(a==b) nhưng điều đó không giúp ích gì ở đây vì tôi thực sự đang xử lý các số nguyên và không logic.


Rất đẹp! Tôi nghĩ rằng bạn cần !anythay cho !sdcác yếu tố có thể bằng nhau, nhưng đến 1. Hãy thử:f(list("BCDEF","ABCDE"))
JayCe

2

J , 56 byte

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

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

Giải trình:

& cho cả đối số trái và phải

-.&' ' xóa khoảng trắng khỏi đầu vào,

rplc thay thế

'0123456789UMWZ';"0'OIREASGLBGCEEN'"1 các ký tự trong đầu vào bằng cách thay thế các ký tự ở cột bên trái bằng các ký tự ở bên phải: (ở đây được chuyển đổi để tiết kiệm không gian)

      |:'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│
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

/:~@ và sắp xếp các chuỗi kết quả

-: các chuỗi được sắp xếp bằng nhau?

Giải pháp ban đầu của tôi:

J , 77 73 byte

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

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

Giải trình:

(' '-.~]) xóa khoảng trắng khỏi cả hai đối số và

e."1 kiểm tra từng nhân vật để trở thành thành viên trong bảng follwing:

[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1 tài liệu tham khảo:

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

1#. cộng các bảng so sánh cho mỗi đối số

-:& họ có hợp nhau không






1

05AB1E , 38 33 byte

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

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

ε                   # 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)

Xem 05AB1E mẹo này của tôi (phần Làm thế nào để chuỗi nén không nằm trong từ điển?Làm thế nào để nén các số nguyên lớn? ) Để hiểu tại sao .•2Θ`ĆĀÑεÉ•"abemwgilorsuz"•B/óÕ¦•48333917025.

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.