ทดแทนแม่เหล็กตู้เย็น


29

เมื่อมีการเขียนข้อความที่มีแม่เหล็กติดตู้เย็น, คุณมักจะพบว่าตัวเองทำหน้าที่แทนสำหรับ1 Iในการท้าทายนี้เป้าหมายของคุณคือค้นหาว่าสามารถเขียนข้อความโดยใช้ตัวอักษรของข้อความอื่นได้หรือไม่ การทดแทนที่ได้รับอนุญาตคือ:

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

ตัวอย่างเช่นข้อความCIRCA 333สามารถจัดใหม่ที่จะสะกดICE CREAMที่สองคนแรก3ที่จะหมุน 180 องศาเพื่อให้ทั้งสองEs และสุดท้าย3คือ 90 Mองศาหมุนทวนเข็มนาฬิกาที่จะทำให้ ช่องว่างสามารถรวมอยู่ในข้อความได้ แต่ไม่ควรนำมาคิดในการแก้ปัญหาของคุณเนื่องจากทำโดยวางแม่เหล็กไว้ในตู้เย็น

อินพุต

สองสตริง (หรืออาร์เรย์อักขระ) ข้อความทั้งหมดจะตรงกัน^[A-Z0-9 ]+$

เอาท์พุต

ความจริงถ้าทั้งสองสายอินพุตเป็น rearrangements ที่ถูกต้องซึ่งกันและกันเป็นเท็จอย่างอื่น

ตัวอย่าง

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

ตัวอย่างความจริงเพิ่มเติม

นี่คือคำศัพท์ 15+ ตัวอักษรที่จับคู่กับคำอื่น บางรายการเป็นการทดแทนเล็กน้อย แต่ฉันรวมทุกอย่างที่ฉันพบ

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

เนื่องจากนี่คือความท้าทายของรหัสกอล์ฟทางออกที่สั้นที่สุดชนะ! ฉันจะยอมรับคำตอบที่สั้นที่สุดใน 7 วันนับจากการโพสต์ มีความสุขในการเล่นกอล์ฟ!

โซลูชันตัวอย่างไม่ใช่สนามกอล์ฟ

ที่เกี่ยวข้อง

แก้ไข : สร้างข้อผิดพลาดในการแทนที่, มีG = 6และ6 = 9แทนที่การแยก, รวมเข้าเป็นหนึ่งเดียว


2
ฉันคิดว่า 48 ชั่วโมงค่อนข้างสั้น แล้วคนที่เล่นกอล์ฟแค่วันหยุดสุดสัปดาห์ล่ะ?
อดัม

จุดดีฉันจะให้มันหนึ่งสัปดาห์
maxb

1
การทดแทนอื่น ๆ ที่คุณอาจพิจารณาอนุญาตคือ 7 สำหรับ T, H สำหรับฉัน (แต่ไม่ใช่ 1 สำหรับ H) และ 2 สำหรับ N หรือ Z
Jeff Zeitlin

1
@JeffZeitlin เรามีการสนทนาเกี่ยวกับเรื่องนี้ในกล่องความท้าทายและฉันเลือกที่จะยกเว้นการแทนที่ทั้งหมดที่ไม่สามารถย้อนกลับได้ ตั้งแต่TและLไม่สามารถแลกเปลี่ยนได้ฉันไม่สามารถเพิ่มT = 7ได้ เดียวกันจะไปสำหรับซึ่งจะบ่งบอกว่าN = Z = 2 N = Z = R = 2อย่างไรก็ตามการทดแทนที่คุณแนะนำจะทำให้เกิดความท้าทายในเวอร์ชันที่ยากขึ้นซึ่งฉันอาจโพสต์ในภายหลัง ฉันแค่อยากจะดูว่าความท้าทายเหล่านี้จะได้รับการตอบรับที่ดีก่อนหรือไม่
maxb

1
@ 3D1T0R ใช่การเปลี่ยนตัวต้องดำเนินการทั้งสองแบบ การตรวจสอบคือถ้าสองสายเป็นเรียบเรียงใหม่ที่ถูกต้องของแต่ละอื่น ๆ falseตัวอย่างของคุณจะกลับมา
maxb

คำตอบ:


4

Japté , 38 36 33 30 ไบต์

รับอินพุตเป็นอาร์เรย์ของ 2 สตริง

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

ลองใช้หรือเรียกใช้กรณีทดสอบทั้งหมด

บันทึกได้ 3 ไบต์ด้วยETHProductions

®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

Nice, Jelly ที่กำลังเต้นอยู่ในขณะนี้! ฉันคิดว่าคุณสามารถทำได้เพื่อบันทึก 3 ไบต์
ETHproductions

โอ้ใช่ฉันลืมไปแล้ว ขอขอบคุณ @ETHproductions
Shaggy


10

Ruby , 99 72 71 ไบต์

->a{!!a.map{|x|x.tr("0-9UZMW","OIREASGLBGCNE").chars.sort-[" "]}.uniq!}

ลองออนไลน์!

ใช้อาร์เรย์ของสตริงโดยสมมติว่าอินพุตเป็นตัวพิมพ์ใหญ่เช่นเดียวกับในกรณีทดสอบทั้งหมด

-1 ไบต์ golfed โดย benj2240



ใช่ว่าได้ผลขอบคุณ
Kirill L.

9

JavaScript (ES6), 102 100 ไบต์

(a)(b)จะเข้าเป็นสองอาร์เรย์ของตัวละครในไวยากรณ์ currying ส่งคืนบูลีน

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

ลองออนไลน์!

อย่างไร?

การใช้ฟังก์ชันผู้ช่วยg ()สำหรับแต่ละอินพุตs :

  • ตัวเลข0ถึง8และตัวอักษรX , YและZจะไม่มีการเปลี่ยนแปลง ทุกอย่างถูกแปลอย่างชัดเจนแล้ว

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

    รหัส:

    s.map(c => '648UD3F6H1JK73Z0PQ25TUV3'[parseInt(c, 36) - 9] || c)
  • เราจัดเรียงตัวละคร (ซึ่งนำช่องว่างทั้งหมดในตอนเริ่มต้น) เข้าร่วมและลบช่องว่างนำหน้าทั้งหมด

    รหัส:

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

ในที่สุดเราจะเปรียบเทียบผลลัพธ์ทั้งสอง


6

เรติน่า 0.8.2 , 42 ไบต์

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

ลองออนไลน์! รับอินพุตเป็นบรรทัดแยกจากกัน แต่ลิงก์มีกรณีทดสอบและส่วนหัว คำอธิบาย:

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

แมปตัวอักษรทั้งหมดเป็นชุดที่น้อยที่สุดการลบช่องว่าง

%O`.

เรียงลำดับสตริงแต่ละรายการตามลำดับ

^(.*)¶\1$

เปรียบเทียบค่าทั้งสอง


5

APL (Dyalog Unicode) , 49 ไบต์SBCS

-1 ขอบคุณ ngn

ฟังก์ชันนำหน้าเงียบโดยไม่ระบุชื่อ

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

ลองออนไลน์!

⎕R PCRE R eplace:
'UMWZ ' อักขระห้าตัวเหล่านี้
⎕D, นำหน้าด้วยตัวเลข
 แยกกัน (ทำให้แต่ละตัวเป็นสตริงแทนที่จะเป็นอักขระเดียว)
 ด้วย:
⊂⍬ ไม่มีสิ่งใด
'OIREASGLBGCEEN', นำหน้าด้วยอักขระเหล่านี้

(... ) ใช้ฟังก์ชัน tacit ต่อไปนี้กับสิ่งนั้น:

(...  ใช้ฟังก์ชัน tacit ต่อไปนี้กับแต่ละรายการ:

   ล้อมรอบมัน (เพื่อรักษาโดยรวม)

  ⍋⌷¨ ใช้แต่ละดัชนีที่จะเรียงลำดับเพื่อจัดทำดัชนีลงในสตริงทั้งหมด (เรียงลำดับ)

≡/ พวกเขาเหมือนกันหรือไม่ (lit. การลดการจับคู่)


''->
ngn

@ngn ไม่แน่ใจว่าทำไมถึงได้ผล แต่ก็ขอบคุณอยู่ดี
อดัม

5

Python 2 , 108 ไบต์

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

ลองออนไลน์!

มีอักขระที่เทียบเท่ากัน 23 คลาส การใช้สตริง 36 อักขระ'85930A4614012B3C4D5EF6378GH9AI2J3KL7'เราแมปอักขระแต่ละตัวกับคลาสที่เทียบเท่า (ละเว้นการเว้นวรรค) จากนั้นเรียงลำดับอาร์เรย์ผลลัพธ์ สองสตริงเทียบเท่ากันหากรายการผลลัพธ์มีค่าเท่ากัน


4

Java 10, 262 260 258 216 208 174 ไบต์

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 ไบต์ขอบคุณที่@Arnauld
-76 ไบต์ขอบคุณที่@ OlivierGrégoire

ลองออนไลน์

คำอธิบาย:

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})")ดูเหมือนว่าจะใช้งานได้ ... แม้ว่าฉันจะไม่แน่ใจด้วยซ้ำ : p
Arnauld

@Arnauld ขอบคุณ, -2 ไบต์และ{2}สามารถ.อีก -2 ไบต์ ฉันยังไม่แน่ใจ 100% ว่ามันทำงานอย่างไร ฉันรู้ว่า(?<= ... )ถูกนำมาใช้ในการแยก แต่ให้ลากตัวคั่นต่อรายการ แต่ฉันสับสนเล็กน้อยว่าทำไม(?=\\G..)(นำตัวคั่นต่อไป) ไม่ทำงานในเรื่องนั้น และก็ไม่รู้เหมือนกันว่า\\G..vs ..ทำหน้าที่ในการแยกที่นี่ จะดูว่าฉันสามารถหาได้ที่ไหนสักแห่งเพราะฉันไม่อยากรู้ ขอบคุณทั้งสองวิธีสำหรับไบต์ที่บันทึกไว้ จำเป็นต้องจำ\\Gเมื่อแบ่งบล็อกขนาดใหญ่ :)
Kevin Cruijssen

1
@Annauld ถ้าคุณต้องการพื้นหลังเกี่ยวกับ(?<=\\G..)การแบ่งฉันได้ทำคำถาม StackoverFlowซึ่งหลั่งน้ำตาแสงบางอย่าง โดยทั่วไปแล้วพฤติกรรมที่ไม่ได้กำหนดจะทำงานแตกต่างกันในเกือบทุกภาษา แม้ว่าจะ\Gมีความยาวเป็นศูนย์ แต่ใน Java ที่มีการมองในเชิงบวกภายในตัวแบ่งมันค่อนข้างขัดแย้งกับกฎทั้งสองที่ทำให้เกิดพฤติกรรมที่เราเห็นที่นี่ ฉันเองก็ยังคลุมเครืออยู่บ้าง แต่อย่างน้อยก็ช่วยได้ 4 ไบต์ในคำตอบนี้ ;)
Kevin Cruijssen

1
217 ไบต์ สามารถบันทึกได้มากกว่าไบต์
Olivier Grégoire

1
174 ไบต์
Olivier Grégoire

3

R , 123 ไบต์

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

ลองออนไลน์!

utf8ToInt แปลงสตริงเป็นเวกเตอร์ของจุดโค้ด Unicode

!sd(a-b)สั้นกว่าหนึ่งไบต์all(a==b)แต่นั่นไม่ได้ช่วยที่นี่เพราะฉันกำลังจัดการกับจำนวนเต็มไม่ใช่ลอจิคัล


ดีมาก! ฉันคิดว่าคุณต้องการ!anyแทนที่!sdองค์ประกอบอาจจะเท่ากันทั้งหมด แต่ต่อ 1 ลอง:f(list("BCDEF","ABCDE"))
JayCe

2

J , 56 ไบต์

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

ลองออนไลน์!

คำอธิบาย:

& สำหรับอาร์กิวเมนต์ทั้งซ้ายและขวา

-.&' ' ลบช่องว่างออกจากอินพุต

rplc แทนที่

'0123456789UMWZ';"0'OIREASGLBGCEEN'"1 อักขระในอินพุตโดยการแทนที่อักขระในคอลัมน์ซ้ายด้วยอักขระในหนึ่งขวา: (นี่ถูกย้ายเพื่อประหยัดพื้นที่)

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

/:~@ และเรียงลำดับสตริงผลลัพธ์

-: จัดเรียงสตริงจะเท่ากัน?

ทางออกแรกของฉัน:

J , 77 73 ไบต์

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

ลองออนไลน์!

คำอธิบาย:

(' '-.~]) ลบช่องว่างออกจากทั้งอาร์กิวเมนต์และ

e."1 ทดสอบอักขระแต่ละตัวเพื่อเป็นสมาชิกในตาราง follwing:

[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1 การอ้างอิง:

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

1#. เพิ่มตารางเปรียบเทียบสำหรับแต่ละอาร์กิวเมนต์

-:& พวกเขาตรงกับ?






1

05AB1E , 38 33 ไบต์

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

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

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

ดู 05AB1E นี้เคล็ดลับของฉัน (ส่วนวิธีการบีบอัดสตริงไม่ใช่ส่วนหนึ่งของพจนานุกรม?และวิธีการบีบอัดจำนวนเต็มขนาดใหญ่? )จะเข้าใจว่าทำไม.•2Θ`ĆĀÑεÉ•เป็น"abemwgilorsuz"และเป็น•B/óÕ¦•48333917025

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.