Konversi judul Mario Jepang ke judul Amerika


16

Konvensi penamaan untuk game dalam seri Super Mario sangat aneh, dan jangan cocokkan antar wilayah.

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

Berantakan sekali!


Tantangan:

Diberikan string yang terdiri dari nama Jepang dari game Super Mario, menampilkan nama Amerika yang sesuai. Anda dapat memasukkan string Jepang melalui metode apa pun yang masuk akal, dan mengeluarkan string Amerika (dengan baris baru opsional) melalui metode apa pun yang masuk akal.

Anda harus menggunakan string persis seperti yang ditunjukkan di atas. Celah standar dilarang!

Kode terpendek (dalam byte) adalah pemenangnya.


1
codegolf.meta.stackexchange.com/questions/8047/... cobalah untuk menghindari meja mewah ...
Roman Gräf

1
Tapi saya pikir nama Jepang untuk Super Mario Bros 2 adalah Doki Doki Panic. Atau apakah mereka kembali merilis game yang sama di Jepang tetapi dengan Mario Skins?
Shufflepants

@Shufflepants IIRC, ya, mereka merilis ulang dengan kulit Mario sebagai "Super Mario USA".
Pokechu22

1
Bisakah kita menganggap inputnya harus nama Jepang yang tepat?
stevefestl

1
@SteveFest Ya.
Julian Lachniet

Jawaban:




6

JavaScript (ES6), 82 81 byte

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

Cobalah online!

Bagaimana?

saya

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
Nah, itu pintar.
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 untuk [r='replace']triknya.
Arjun

Saya tidak tahu banyak JS ... bagaimana menggunakan []pekerjaan sebagai fungsi?
totallyhuman

3
@totallyhuman 1) properti objek JS dapat diakses dengan salah satu dari dua sintaks ini: object.propertyatau object['property']. 2) Metode objek adalah properti yang diberi fungsi. 3) Di bawah tenda, JS secara singkat mengubah tipe primitif seperti string menjadi objek ketika sintaksis akses properti digunakan di atasnya. Kesimpulan: dengan menggabungkan semua hal di atas, kita dapat memahami mengapa s['replace']()melakukan persis apa yang tertulis di kaleng.
Arnauld


2

Japt , 48 byte

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

Cobalah online!

Penjelasan:

 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 menggunakan perpustakaan shoco untuk kompresi string. Backticks digunakan untuk mendekompresi string.


2

R, 86 byte

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

1

Jelly ,  44  43 byte

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

Program lengkap yang mencetak hasilnya.

Cobalah online!

Bagaimana?

⁹ - 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
Solusi yang bagus untuk "mencoret 44 adalah normal 44".
wizzwizz4

1

Mathematica, 80 byte

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

Fungsi anonim. Mengambil string sebagai input dan mengembalikan string sebagai output.


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

Mendapat input pengguna, menjalankan serangkaian substitusi berbasis regex, dan mencetak hasilnya.


Selamat datang di situs ini! Saya pikir itu lebih pendek jika Anda melakukan from re import*bukan from re import sub as r. Maka baris kedua akan menjadi:print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
DJMcMayhem

Aha, bagus sekali. Terima kasih!
Struan Duncan-Wilson

0

Pergi , 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)}

Cobalah online!

Karena Go tidak mendukung nilai default untuk argumen, Anda harus lulus secara manual 1setiap waktu.


0

Batch, 237 99 byte

Mengasumsikan input dalam format yang tepat dalam pertanyaan

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

Cobalah online!

Penjelasan:

zadalah array yang menampung 5 kemungkinan output, kita hanya perlu menemukan cara untuk mengindeks ke dalamnya. Saya perhatikan 2 parameter yang dapat digunakan untuk membedakan input. Bagian pertama adalah panjang input:

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

Hanya 3 input memiliki panjang yang sama mod 5. Bagian kedua adalah bahwa, pada posisi 19 di input, 2, 3dan 4memiliki titik kode berturut-turut, sehingga mereka dapat dengan mudah digunakan untuk mengisi sisa indeks sedangkan 2 input yang tersisa singkat.

The Stringtipe default untuk ShortStringdan secara default memiliki kapasitas untuk 255 karakter, semua diinisialisasi dengan nol, sehingga aman untuk digunakan t[19]pada semua string dan codepoint adalah 0 untuk string pendek, tidak mengubah apa-apa untuk mengindeks, sehingga indeks string pendek adalah 0 dan 2. Oleh karena itu, kita memerlukan indeks 1, 3 dan 4 dari 2, 3dan 4.

  | 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:'‚ï:™

Cobalah secara online atau verifikasi semua kasus uji.

Penjelasan:

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)

Lihat ini untuk informasi lebih lanjut mengapa “:€€‹×Œä“adalah ": the lower levels"; '„Àadalah "usa"; dan '‚ïadalah "world".

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.