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.

Julian Lachniet
sumber
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:

14

sed, 52

  • 1 byte disimpan berkat @MikeScott

Penggantian langsung:

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

Cobalah online .

digital Trauma
sumber
2
Anda dapat menyimpan karakter dengan membuat baris terakhir s/B.*4/World/.
Mike Scott
@ MikeScott ya - terima kasih!
Digital Trauma
6

Retina, 43

  • 1 byte disimpan berkat @MikeScott

Port langsung dari jawaban sed saya :

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

Cobalah online .

digital Trauma
sumber
Karakter saya yang disimpan dari versi sed juga berfungsi di sini - gunakan B.*4sebagai ganti \S* 4.
Mike Scott
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"
Arnauld
sumber
2
Nah, itu pintar.
darrylyeo
5

PHP, 81 Bytes

<?=str_replace([" 2",USA,"Bros. 4"],[": The Lost Levels","Bros. 2",World],$argn);

Cobalah online!

Jörg Hülsermann
sumber
3

JavaScript (ES6), 84 byte

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

Darrylyeo
sumber
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
3

Python 2 , 96 92 byte

lambda s:r(r(r(s,' 2',': The Lost Levels'),'USA','Bros. 2'),'Bros. 4','World')
r=str.replace

Cobalah online!

benar-benar manusiawi
sumber
2

Japt , 48 byte

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

Cobalah online!

Penjelasan:

 d" 2"`: T&#148; Lo¡ Levels`"USA"`B&#158;s. 2``B&#158;s. 4``W&#142;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.

Oliver
sumber
2

R, 86 byte

function(x)sub("Bros. 4","World",sub("USA","Bros. 2",sub(" 2",": The Lost Levels",x)))
Sven Hohenstein
sumber
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.
Jonathan Allan
sumber
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.

LegionMammal978
sumber
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.

Struan Duncan-Wilson
sumber
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.

benar-benar manusiawi
sumber
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%
stevefestl
sumber
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
AlexRacer
sumber
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".

Kevin Cruijssen
sumber