Konwertuj japońskie tytuły Mario na amerykańskie

16

Konwencje nazewnictwa gier z serii Super Mario są bardzo dziwne i nie pasują do siebie między regionami.

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

Co za bałagan!


Wyzwanie:

Biorąc pod uwagę ciąg znaków składający się z japońskiej nazwy gry Super Mario, wypisz odpowiednią amerykańską nazwę. Możesz wprowadzić ciąg japoński za pomocą dowolnej rozsądnej metody, a wypuścić ciąg amerykański (z opcjonalnym znakiem nowej linii) dowolną rozsądną metodą.

Musisz użyć dokładnych ciągów pokazanych powyżej. Standardowe luki są zabronione!

Najkrótszy kod (w bajtach) jest zwycięzcą.

Julian Lachniet
źródło
1
codegolf.meta.stackexchange.com/questions/8047/... staraj się unikać fantazyjnych stołów ...
Roman Gräf
1
Ale myślałem, że japońska nazwa Super Mario Bros. 2 to Doki Doki Panic. Czy może ponownie wypuścili tę samą grę w Japonii, ale ze skórkami Mario?
Shufflepants
@Shufflepants IIRC, tak, wydali go ponownie ze skórkami Mario jako „Super Mario USA”.
Pokechu22
1
Czy możemy założyć, że dane wejściowe muszą być dokładnie japońskimi nazwami?
stevefestl
1
@ SteveFest Tak.
Julian Lachniet

Odpowiedzi:

14

sed, 52

  • 1 bajt zapisany dzięki @MikeScott

Prosta wymiana:

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

Wypróbuj online .

Cyfrowa trauma
źródło
2
Możesz zapisać znak, tworząc ostatnią linię s/B.*4/World/.
Mike Scott,
@MikeScott tak - dzięki!
Cyfrowa trauma
6

Retina, 43

  • 1 bajt zapisany dzięki @MikeScott

Bezpośredni port mojej odpowiedzi sed :

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

Wypróbuj online .

Cyfrowa trauma
źródło
Działa tu również moja zapisana postać z wersji sed - użyj B.*4zamiast \S* 4.
Mike Scott,
6

JavaScript (ES6), 82 81 bajtów

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

Wypróbuj online!

W jaki sposób?

ja

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
źródło
2
To jest sprytne.
darrylyeo
5

PHP, 81 bajtów

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

Wypróbuj online!

Jörg Hülsermann
źródło
3

JavaScript (ES6), 84 bajtów

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

darrylyeo
źródło
2
+1 za [r='replace']lewę.
Arjun
Nie znam dużo JS ... jak działa []praca jako funkcja?
całkowicie ludzki,
3
@ totalniehuman 1) Do właściwości obiektu JS można uzyskać dostęp za pomocą jednej z tych dwóch składni: object.propertylub object['property']. 2) Metoda obiektu to właściwość, której przypisano funkcję. 3) Pod maską JS na krótko zamienia prymitywny typ, taki jak łańcuch, w obiekt, gdy używana jest w nim składnia dostępu do właściwości . Wniosek: łącząc wszystkie powyższe, możemy zrozumieć, dlaczego s['replace']()robi dokładnie to, co mówi na puszce.
Arnauld
3

Python 2 , 96 92 bajtów

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

Wypróbuj online!

całkowicie ludzki
źródło
2

Japt , 48 bajtów

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

Wypróbuj online!

Wyjaśnienie:

 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 używa biblioteki shoco do kompresji ciągów. Wsteczne są używane do dekompresji ciągów.

Oliver
źródło
2

R, 86 bajtów

function(x)sub("Bros. 4","World",sub("USA","Bros. 2",sub(" 2",": The Lost Levels",x)))
Sven Hohenstein
źródło
1

Galaretka ,  44  43 bajtów

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

Pełny program, który drukuje wynik.

Wypróbuj online!

W jaki sposób?

⁹ - 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
źródło
3
Dobre obejście dla „przekreślonego 44 jest normalne 44”.
wizzwizz4
1

Mathematica, 80 bajtów

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

Funkcja anonimowa. Pobiera ciąg jako dane wejściowe i zwraca ciąg jako dane wyjściowe.

LegionMammal978
źródło
1

Python 3: 111 bajtów

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

Pobiera dane wejściowe użytkownika, uruchamia serię podstawień opartych na wyrażeniach regularnych i drukuje wynik.

Struan Duncan-Wilson
źródło
Witamy na stronie! Myślę, że jest krótszy, jeśli to zrobisz from re import*zamiast from re import sub as r. Wtedy druga linia miałaby print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
postać
Aha, świetnie. Dziękuję Ci!
Struan Duncan-Wilson
0

Idź , 134 bajty

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

Wypróbuj online!

Ponieważ Go nie obsługuje domyślnych wartości argumentów, musisz ręcznie przekazać za 1każdym razem.

całkowicie ludzki
źródło
0

Partia, 237 99 bajtów

Zakładając, że dane wejściowe są dokładnie sformatowane w pytaniu

@set s=%*
@set s=%s: 2=: The Lost Levels%
@set s=%s:USA=Bros. 2%
@set s=%s:Bros. 4=World%
@echo %s%
stevefestl
źródło
0

Pascal (FPC) , 184 182 bajtów

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.

Wypróbuj online!

Wyjaśnienie:

zto tablica, która zawiera 5 możliwych wyników, musimy tylko znaleźć sposób na indeksowanie do niej. Zauważyłem 2 parametry, których można użyć do rozróżnienia danych wejściowych. Pierwsza część to długość danych wejściowych:

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

Tylko 3 wejścia mają tę samą długość mod 5. Drugą częścią jest to, że w pozycji 19 na wejściach 2 , 3i 4posiadają kolejne punkty kodu, dzięki czemu można je łatwo stosować do wypełnienia reszty indeksów a pozostałe są 2 wejścia krótszy.

W Stringdomyślnie typ do ShortStringi domyślnie ma zdolności do 255 znaków, wszystko zainicjowany zerami, więc jest bezpieczny w użyciu t[19]na wszystkich strunach, a jej punkt kodowy jest 0 krótsze ciągi, nie zmieniając niczego dla indeksowania, więc indeksy krótszy Strings' oznaczają 0 i 2. W związku z tym, musimy indeksach 1, 3 i 4, z 2, 3a 4.

  | Codepoint |  *2 | +19 | mod 5
2 |        50 | 100 | 119 | 4
3 |        51 | 102 | 121 | 1
4 |        52 | 104 | 123 | 3
AlexRacer
źródło
0

05AB1E , 37 bajtów

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

Wypróbuj online lub sprawdź wszystkie przypadki testowe.

Wyjaśnienie:

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)

Zobacz więcej informacji dlaczego “:€€‹×Œä“jest ": the lower levels"; '„Àjest "usa"; i '‚ïjest "world".

Kevin Cruijssen
źródło