Chuyển đổi các tựa game Mario của Nhật Bản thành các tựa game của Mỹ


16

Các quy ước đặt tên cho các trò chơi trong sê-ri Super Mario rất lạ và không khớp giữa các khu vực.

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

Thật là một mớ hỗn độn!


Thử thách:

Đưa ra một chuỗi bao gồm tên tiếng Nhật của một trò chơi Super Mario, xuất ra tên Mỹ tương ứng. Bạn có thể nhập chuỗi tiếng Nhật thông qua bất kỳ phương thức hợp lý nào và xuất chuỗi Mỹ (với một dòng mới tùy chọn) thông qua bất kỳ phương thức hợp lý nào.

Bạn phải sử dụng các chuỗi chính xác được hiển thị ở trên. Sơ hở tiêu chuẩn bị cấm!

Mã ngắn nhất (tính bằng byte) là người chiến thắng.


1
codegolf.meta.stackexchange.com/questions/8047/ khăn cố gắng tránh các bảng ưa thích ...
Roman Gräf

1
Nhưng tôi nghĩ tên tiếng Nhật của Super Mario Bros 2 là Doki Doki Panic. Hay họ đã phát hành lại trò chơi tương tự ở Nhật Bản một lần nữa nhưng với skin Mario?
Shufflepants

@Shufflepants IIRC, vâng, họ đã phát hành lại nó với skin Mario là "Super Mario USA".
Pokechu22

1
Chúng ta có thể giả sử đầu vào phải là tên chính xác của Nhật Bản?
stevefestl

1
@SteveFest Có.
Julian Lachniet

Câu trả lời:




6

JavaScript (ES6), 82 81 byte

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

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

Làm sao?

Có ba mẫu để tìm và thay thế. Chúng tôi tìm kiếm tất cả chúng cùng một lúc và sử dụng vị trí của trận đấu để suy ra chuỗi thay thế.i

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
Bây giờ thì thông minh.
darrylyeo


3

JavaScript (ES6), 84 byte

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


2
+1 cho [r='replace']mánh khóe.
Arjun

Tôi không biết nhiều về JS ... làm thế nào để sử dụng []công việc như một hàm?
hoàn toàn là

3
@totallyhuman 1) Các thuộc tính đối tượng JS có thể được truy cập bằng một trong hai cú pháp sau: object.propertyhoặc object['property']. 2) Một phương thức của một đối tượng là một thuộc tính được gán một hàm. 3) Dưới mui xe, JS nhanh chóng biến một kiểu nguyên thủy như chuỗi thành một đối tượng khi sử dụng cú pháp truy cập thuộc tính trên nó. Kết luận: bằng cách kết hợp tất cả những điều trên, chúng ta có thể hiểu tại sao s['replace']()lại nói chính xác những gì nó nói trên hộp thiếc.
Arnauld


2

Japt , 48 byte

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

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

Giải trình:

 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 sử dụng thư viện shoco để nén chuỗi. Backticks được sử dụng để giải nén chuỗi.


2

R, 86 byte

function(x)sub("Bros. 4","World",sub("USA","Bros. 2",sub(" 2",": The Lost Levels",x)))

1

Thạch ,  44  43 byte

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

Một chương trình đầy đủ in kết quả.

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

Làm sao?

⁹ - 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
Cách giải quyết tốt đẹp để "vượt qua 44 là bình thường 44".
wizzwizz4

1

Toán học, 80 byte

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

Chức năng ẩn danh. Lấy một chuỗi làm đầu vào và trả về một chuỗi là đầu ra.


1

Python 3: 111 byte

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

Nhận đầu vào của người dùng, chạy một loạt các thay thế dựa trên regex và in kết quả.


Chào mừng đến với trang web! Tôi nghĩ rằng nó ngắn hơn nếu bạn làm from re import*thay vì from re import sub as r. Sau đó, dòng thứ hai sẽ trở thành:print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
DJMcMayhem

Aha, xuất sắc. Cảm ơn bạn!
Struan Duncan-Wilson

0

Đi , 134 byte

import."strings"
func f(s string)string{r:=Replace;return r(r(r(s," 2",": The Lost Levels",1),"USA","Bros. 2",1),"Bros. 4","World",1)}

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

Vì Go không hỗ trợ các giá trị mặc định cho các đối số, bạn phải vượt qua thủ công 1mỗi lần.


0

Mẻ, số 237 99 byte

Giả sử đầu vào có định dạng chính xác trong câu hỏi

@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 byte

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.

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

Giải trình:

zlà mảng chứa 5 đầu ra có thể, chúng ta chỉ cần tìm cách lập chỉ mục vào nó. Tôi nhận thấy 2 tham số có thể được sử dụng để phân biệt đầu vào. Phần đầu tiên là chiều dài của đầu vào:

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

Chỉ có 3 đầu vào có cùng độ dài mod 5. Phần thứ hai là, tại vị trí 19 trong các đầu vào 2, 34 có điểm mã liên tục, vì vậy họ có thể dễ dàng sử dụng để điền vào phần còn lại của các chỉ số trong khi 2 đầu vào còn lại là ngắn hơn.

Các String loại mặc định ShortStringvà theo mặc định có khả năng chứa 255 ký tự, tất cả khởi tạo với zero, vì vậy nó là an toàn để sử dụng t[19]trên tất cả các chuỗi và điểm mã của nó là 0 cho các chuỗi ngắn hơn, không thay đổi bất cứ điều gì cho chỉ mục, vì vậy chỉ số chuỗi ngắn hơn là 0 và 2. Do đó, chúng ta cần các chỉ số 1, 3 và 4 từ 2, 34.

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

0

05AB1E , 37 byte

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

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:

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)

Xem điều này để biết thêm thông tin tại sao “:€€‹×Œä“": the lower levels"; '„À"usa"; và '‚ï"world".

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.