แปลงชื่อมาริโอญี่ปุ่นเป็นชื่ออเมริกัน


16

แบบแผนการตั้งชื่อสำหรับเกมในซีรีย์ Super Mario นั้นแปลกมากและไม่เข้ากันระหว่างแต่ละภูมิภาค

| Japanese Name       | American Name                      |
|---------------------|------------------------------------|
| Super Mario Bros.   | Super Mario Bros.                  |
| Super Mario Bros. 2 | Super Mario Bros.: The Lost Levels |
| Super Mario USA     | Super Mario Bros. 2                |
| Super Mario Bros. 3 | Super Mario Bros. 3                |
| Super Mario Bros. 4 | Super Mario World                  |

ช่างเป็นระเบียบ!


ท้าทาย:

ระบุสตริงที่ประกอบด้วยชื่อภาษาญี่ปุ่นของเกม Super Mario เอาท์พุทชื่ออเมริกันที่เกี่ยวข้อง คุณสามารถป้อนสตริงภาษาญี่ปุ่นผ่านวิธีการที่เหมาะสมและส่งออกสตริงอเมริกัน (ด้วยการขึ้นบรรทัดใหม่ก็ได้) ผ่านวิธีการที่เหมาะสม

คุณต้องใช้สตริงที่แน่นอนที่แสดงด้านบน ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม!

รหัสที่สั้นที่สุด (เป็นไบต์) เป็นผู้ชนะ


1
codegolf.meta.stackexchange.com/questions/8047/…พยายามหลีกเลี่ยงตารางแฟนซี ...
Roman Gräf

1
แต่ฉันคิดว่าชื่อภาษาญี่ปุ่นของ Super Mario Bros. 2 คือ Doki Doki Panic หรือพวกเขาปล่อยเกมเดียวกันในญี่ปุ่นอีกครั้ง แต่มีสกินมาริโอ?
Shufflepants

@Shufflepants IIRC ใช่แล้วพวกเขาปล่อยเวอร์ชั่นใหม่ด้วยสกิน Mario ในชื่อ "Super Mario USA"
Pokechu22

1
เราสามารถสันนิษฐานได้ว่าข้อมูลที่ป้อนต้องเป็นชื่อภาษาญี่ปุ่นที่แน่นอนหรือไม่
stevefestl

1
@SteveFest ใช่
Julian Lachniet

คำตอบ:


14

sed, 52

  • บันทึก 1 ไบต์ด้วย @MikeScott

เปลี่ยนตรงไปตรงมา:

s/ 2/: The Lost Levels/
s/USA/Bros. 2/
s/B.*4/World/

ลองมันออนไลน์


2
s/B.*4/World/คุณสามารถบันทึกตัวอักษรโดยการทำให้บรรทัดสุดท้าย
Mike Scott

@ MikeScott ใช่ - ขอบคุณ!
Digital Trauma

6

เรติน่า, 43

  • บันทึก 1 ไบต์ด้วย @MikeScott

ตรงพอร์ตของคำตอบ sedของฉัน:

 2
: The Lost Levels
USA
Bros. 2
B.*4
World

ลองมันออนไลน์


ตัวอักษรที่บันทึกไว้ของฉันจากรุ่น sed ทำงานที่นี่มากเกินไป - ใช้แทนB.*4 \S* 4
Mike Scott

6

JavaScript (ES6), 82 81 ไบต์

s=>s.replace(/ 2|o.*4|USA/,(_,i)=>['Bros. 2',': The Lost Levels','o World'][i&3])

ลองออนไลน์!

อย่างไร?

ผม

Pattern | Found in              | Position in string | Position MOD 4 | Replaced with
--------+-----------------------+--------------------+----------------+--------------------
/ 2/    | "Super Mario Bros. 2" |                 17 |              1 | ": The Lost Levels"
/o.*4/  | "Super Mario Bros. 4" |                 10 |              2 | "o World"
/USA/   | "Super Mario USA"     |                 12 |              0 | "Bros. 2"

2
ตอนนี้มันฉลาดแล้ว
darrylyeo


3

JavaScript (ES6), 84 ไบต์

s=>s[r='replace'](' 2',': The Lost Levels')[r]('USA',(b='Bros. ')+2)[r](b+4,'World')


2
+1 สำหรับ[r='replace']เคล็ดลับ
Arjun

ฉันไม่รู้ JS มาก ... การใช้[]งานเป็นฟังก์ชั่นอย่างไร
มนุษย์โดยรวม

3
คุณสมบัติ @totallyhuman 1) JS วัตถุสามารถเข้าถึงได้ด้วยทั้งของทั้งสองไวยากรณ์: หรือobject.property object['property']2) วิธีการของวัตถุเป็นคุณสมบัติที่ได้รับมอบหมายฟังก์ชั่น 3) ภายใต้ประทุน JS จะเปลี่ยนประเภทดั้งเดิมเช่นสตริงให้เป็นวัตถุเมื่อมีการใช้ไวยากรณ์การเข้าถึงคุณสมบัติ สรุป: โดยการรวมทั้งหมดข้างต้นเราสามารถเข้าใจว่าทำไมs['replace']()มันตรงกับที่พูดในกระป๋อง
Arnauld


2

Japt , 48 ไบต์

d" 2"`: T” Lo¡ Levels`"USA"`Bžs. 2``Bžs. 4``WŽld

ลองออนไลน์!

คำอธิบาย:

 d" 2"`: T” Lo¡ Levels`"USA"`Bžs. 2``Bžs. 4``WŽld

U                                //  Implicit U = Input
 d                               //  Replace:
   " 2"                          //    " 2" with
       `...`                     //    ": The Lost Levels" decompressed,
            "USA"                //    "USA" with
                 '...'           //    "Bros. 2" decompressed,
                      '...'      //    "Bros. 4" decompressed with
                           '...' //    "World" decompressed

Japt ใช้ไลบรารี shocoสำหรับการบีบอัดสตริง Backticks ใช้ในการคลายสาย



1

เจลลี่ ,  44  43 ไบต์

⁹
HḂ+2⁹Ḳ¤ḣK;⁸ị“¥ḄḞ“ḋṗYP8ḷẇ?Ṅ“¡Ạ ṙṗ%»¤
0ịVĊŀ

โปรแกรมเต็มรูปแบบที่พิมพ์ผลลัพธ์

ลองออนไลน์!

อย่างไร?

⁹ - Link 1: yield right argument: number a, list of characters b
⁹ - link's right argument, b

HḂ+2⁹Ḳ¤ḣK;⁸ị“¥ḄḞ“ḋṗYP8ḷẇ?Ṅ“¡Ạ ṙṗ%»¤ - Link 0: change a name: number a, list of characters b
                   ...Note: at this point a will be 0, 2 or 4 for USA, 2 and 4 respectively
H                                   - halve a (0,1, or 2)
 Ḃ                                  - mod 2   (0,1, or 0)
  +2                                - add 2   (2,3, or 2)
      ¤                             - nilad followed by link(s) as a nilad:
    ⁹                               -   link's right argument, b
     Ḳ                              -   split at spaces
       ḣ                            - head (first two for USA or 4, first three for 2)
        K                           - join with spaces
                                  ¤ - nilad followed by link(s) as a nilad:
          ⁸                         -   link's left argument a
            “¥ḄḞ“ḋṗYP8ḷẇ?Ṅ“¡Ạ ṙṗ%»  -   list of dictionary/string compresions:
                                    -     [" World",": The Lost Levels"," Bros. 2"]
           ị                        - index into (1-based & modular; respectively [4,2,0])

0ịVĊŀ - Main link: list of characters, J
0ị    - index 0 into J - gets the last character '.', '2', 'A', '3', or '4'
  V   - evaluate as Jelly code - the evaluations are:
      -     "Super Mario Bros." :  . - literal 0.5
      -   "Super Mario Bros. 2" :  2 - literal 2
      -       "Super Mario USA" :  A - absolute value (default argument is 0) = 0
      -   "Super Mario Bros. 3" :  3 - literal 3
      -   "Super Mario Bros. 4" :  4 - literal 4
   Ċ  - ceiling - changes a 0.5 to 1 and leaves others as they were
    ŀ - call link at that index as a dyad (left = the evaluation, right = J)
      -   this is one based and modular so 1 & 3 go to Link 1, while 0, 2 & 4 go to Link 0.

3
วิธีแก้ปัญหาที่ดีสำหรับ "การขีดฆ่า 44 เป็นเรื่องปกติ 44"
wizzwizz4

1

Mathematica, 80 ไบต์

#~StringReplace~{" 2"->": The Lost Levels","USA"->"Bros. 2","Bros. 4"->"World"}&

ฟังก์ชั่นไม่ระบุชื่อ รับสตริงเป็นอินพุตและส่งคืนสตริงเป็นเอาต์พุต


1

Python 3: 111 ไบต์

from re import sub as r
print(r(" USA","Bros. 2",r(" 2",": The Lost Levels",r("Bros. 4","World",input()))))

รับอินพุตของผู้ใช้รันชุดของการแทนที่ตาม regex และพิมพ์ผลลัพธ์


ยินดีต้อนรับสู่เว็บไซต์! ฉันคิดว่ามันสั้นถ้าคุณทำแทนfrom re import* from re import sub as rจากนั้นบรรทัดที่สองจะกลายเป็น:print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
DJMcMayhem

อ้าเลิศ ขอขอบคุณ!
Struan Duncan-Wilson


0

Batch, 237 99 bytes

Assuming input is in exact format in the question

@set s=%*
@set s=%s: 2=: The Lost Levels%
@set s=%s:USA=Bros. 2%
@set s=%s:Bros. 4=World%
@echo %s%

0

Pascal (FPC), 184 182 bytes

const s='Super Mario ';b='Bros.';m=s+b;var t:string;z:array[0..4]of string=(m+' 2',m+' 3',m,s+'World',m+': The Lost Levels');begin read(t);write(z[(length(t)+ord(t[19])*2)mod 5])end.

Try it online!

Explanation:

z is the array that holds 5 possible outputs, we just need to find the way to index into it. I noticed 2 parameters that can be used to distinguish input. The first part is length of the input:

Super Mario Bros.   -> 17
Super Mario Bros. 2 -> 19
Super Mario USA     -> 15
Super Mario Bros. 3 -> 19
Super Mario Bros. 4 -> 19

Only 3 inputs have the same length mod 5. The second part is that, at position 19 in the inputs, 2, 3 and 4 have consecutive code points, so they can be easily used to fill out the rest of the indexes while the remaining 2 inputs are shorter.

The String type defaults to ShortString and by default has capacity for 255 characters, all initialized with zeroes, so it is safe to use t[19] on all strings and its codepoint is 0 for shorter strings, not changing anything for indexing, so shorter strings' indexes are 0 and 2. Therefore, we need indexes 1, 3 and 4 from 2, 3 and 4.

  | Codepoint |  *2 | +19 | mod 5
2 |        50 | 100 | 119 | 4
3 |        51 | 102 | 121 | 1
4 |        52 | 104 | 123 | 3

0

05AB1E , 37 ไบต์

l„ 2“:€€‹×Œä“:'„À"bros. 2"©:®Y4:'‚ï:™

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

คำอธิบาย:

l                  # Convert the input to lowercase
 „ 2         :     # Replace " 2" with:
    “:€€‹×Œä“      #  ": the lost levels"
 '„À          :    # Then replace "usa" with:
    "bros. 2"      #  "bros. 2"
             ©     # And store the string "bros. 2" in the register
 ®                 # Retrieve "bros. 2" from the register,
  Y4:              # and replace its "2" with "4"
        :          # Then replace "bros. 4" with:
     '‚ï           #  "world"
™                  # Convert the result to title-case (and output implicitly)

ดูสิ่งนี้สำหรับข้อมูลเพิ่มเติมว่าทำไม“:€€‹×Œä“คือ": the lower levels"; '„Àคือ"usa"; และเป็น'‚ï"world"

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