Japon Mario başlıklarını Amerikan başlıklarına dönüştür


16

Super Mario serisindeki oyunların adlandırma kuralları çok garip ve bölgeler arasında eşleşmiyor.

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

Ne dağınıklık!


Meydan okuma:

Bir Super Mario oyununun Japonca isminden oluşan bir dize verildiğinde, karşılık gelen Amerikan isminin çıktısını alın. Japonca dizeyi herhangi bir makul yöntemle girebilir ve Amerikan dizesini (isteğe bağlı bir yeni satır ile) herhangi bir makul yöntemle çıkarabilirsiniz.

Yukarıda gösterilen tam dizeleri kullanmalısınız. Standart boşluklar yasaktır!

En kısa kod (bayt cinsinden) kazanır.


1
codegolf.meta.stackexchange.com/questions/8047/… süslü masalardan kaçınmaya çalışın ...
Roman Gräf

1
Ama Super Mario Bros'un Japonca adının Doki Doki Panik olduğunu düşündüm. Yoksa aynı oyunu tekrar Japonya'da ama Mario kaplamalarıyla mı tekrar yayınladılar?
Shufflepants

@ Shufflepants IIRC, evet, "Super Mario USA" olarak Mario kaplamalarıyla yeniden yayınladılar.
Pokechu22

1
Girdinin tam Japonca adlar olması gerektiğini varsayabilir miyiz?
stevefestl

1
@SteveFest Evet.
Julian Lachniet

Yanıtlar:




6

JavaScript (ES6), 82 81 bayt

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

Çevrimiçi deneyin!

Nasıl?

Aranacak ve değiştirilecek üç desen vardır. Hepsini bir kerede ararız ve ikame dizesini çıkarmak için maçın konumunu kullanırız .ben

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
Şimdi bu akıllıca.
darrylyeo


3

JavaScript (ES6), 84 bayt

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


2
[r='replace']Hüner için +1 .
Arjun

Ben JS fazla bilmiyorum ... nasıl []bir işlev olarak iş kullanarak ?
totallyhuman

3
@totallyhuman 1) JS nesnesi özelliklerine şu iki sözdiziminden biriyle erişilebilir: object.propertyveya object['property']. 2) Nesnenin yöntemi, işlev atanmış bir özelliktir. 3) Kaputun altında, üzerinde bir özellik erişim sözdizimi kullanıldığında JS kısaca dize gibi ilkel bir türü bir nesneye dönüştürür . Sonuç: Yukarıdakilerin tümünü birleştirerek, s['replace']()kalayda tam olarak ne söylediğini anlayabiliriz .
Arnauld


2

Japt , 48 bayt

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

Çevrimiçi deneyin!

Açıklama:

 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, string sıkıştırması için shoco kütüphanesini kullanır . İpleri açmak için ters çentikler kullanılır.


2

R, 86 bayt

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

1

Jöle ,  44  43 bayt

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

Sonucu basan tam bir program.

Çevrimiçi deneyin!

Nasıl?

⁹ - 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
"Üzerinde çarpı işareti olan 44 normaldir 44" için güzel bir çözüm.
wizzwizz4

1

Mathematica, 80 bayt

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

Anonim işlev. Bir dizeyi girdi olarak alır ve bir dizeyi çıktı olarak döndürür.


1

Python 3: 111 bayt

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

Kullanıcı girdisini alır, bir dizi normal ifade tabanlı değişiklik gerçekleştirir ve sonucu yazdırır.


Siteye Hoşgeldiniz! Bunun from re import*yerine bunu yapmak daha kısa olduğunu düşünüyorum from re import sub as r. Sonra ikinci satır şöyle olur:print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
DJMcMayhem

Aha, mükemmel. Teşekkür ederim!
Struan Duncan-Wilson

0

Git , 134 bayt

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

Çevrimiçi deneyin!

Go, bağımsız değişkenler için varsayılan değerleri desteklemediğinden, 1her seferinde manuel olarak geçmeniz gerekir .


0

Parti, 237 99 bayt

Girdinin soruda tam formatta olduğunu varsayarsak

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

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.

Çevrimiçi deneyin!

Açıklama:

z5 olası çıkışı barındıran dizidir, sadece dizine indekslemenin yolunu bulmamız gerekir. Girişi ayırt etmek için kullanılabilecek 2 parametre fark ettim. İlk bölüm girişin uzunluğudur:

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

Sadece 3 giriş aynı uzunluk moduna 5 sahiptir. İkinci bölüm, girişlerdeki 19 konumunda, 2 , 3ve 4kolayca geri kalan 2 giriş ise dizinler geri kalanını doldurmak için kullanılabilir ve böylece, ardışık kod noktalarına sahip daha kısa.

StringTip varsayılan ShortStringkullanımı güvenlidir yüzden ve varsayılan olarak, 255 karakterler için kapasite, tamamen sıfır başlatıldı sahip t[19]tüm dizeleri üzerinde ve codepoint kısa dizeleri için 0'dır indeksleme için herhangi bir değişiklik olmadığını, bu yüzden daha kısa dizgeler olan endeksleri 0 ve 2. Bu nedenle, dizinleri 1, 3 ve gelen 4 mi 2, 3ve 4.

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

0

05AB1E , 37 bayt

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

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın.

Açıklama:

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)

Neden fazla bilgi için bu bakınız “:€€‹×Œä“olduğu ": the lower levels"; '„Àolduğu "usa"; ve '‚ïöyle "world".

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.