Konvertieren Sie japanische Mario-Titel in amerikanische Titel


16

Die Namenskonventionen für Spiele in der Super Mario-Reihe sind sehr seltsam und stimmen nicht zwischen Regionen überein.

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

Was für ein Chaos!


Herausforderung:

Geben Sie bei einer Zeichenfolge, die aus dem japanischen Namen eines Super Mario-Spiels besteht, den entsprechenden amerikanischen Namen aus. Sie können die japanische Zeichenfolge mit einer angemessenen Methode eingeben und die amerikanische Zeichenfolge (optional mit einer neuen Zeile) mit einer angemessenen Methode ausgeben.

Sie müssen die oben angegebenen genauen Zeichenfolgen verwenden. Standardlücken sind verboten!

Der kürzeste Code (in Bytes) ist der Gewinner.


1
Versuchen Sie, ausgefallene Tische zu meiden ...
Roman Gräf

1
Aber ich dachte, der japanische Name für Super Mario Bros. 2 wäre Doki Doki Panic. Oder haben sie dasselbe Spiel in Japan erneut veröffentlicht, aber mit den Mario-Skins?
Shufflepants

@Shufflepants IIRC, ja, sie haben es mit Mario-Skins als "Super Mario USA" neu veröffentlicht.
Pokechu22

1
Können wir annehmen, dass die Eingabe die genauen japanischen Namen sein muss?
Stevefestl

1
@SteveFest Ja.
Julian Lachniet

Antworten:




6

JavaScript (ES6), 82 81 Bytes

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

Probieren Sie es online!

Wie?

ich

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
Das ist klug.
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 für den [r='replace']Trick.
Arjun

Ich weiß nicht viel über JS ... wie funktioniert die Verwendung der []Arbeit als Funktion?
Totalhuman

3
@totallyhuman 1) Auf JS-Objekteigenschaften kann mit einer dieser beiden Syntaxen zugegriffen werden: object.propertyoder object['property']. 2) Eine Methode eines Objekts ist eine Eigenschaft, der eine Funktion zugewiesen ist. 3) Unter der Haube verwandelt JS einen primitiven Typ wie einen String kurz in ein Objekt, wenn eine Eigenschaftszugriffssyntax verwendet wird. Fazit: Wenn wir all das kombinieren, können wir verstehen, warum s['replace']()genau das tut, was es verspricht.
Arnauld


2

Japt , 48 Bytes

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

Probieren Sie es online!

Erläuterung:

 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 verwendet die Shoco-Bibliothek zur Komprimierung von Strings. Backticks werden zum Dekomprimieren von Strings verwendet.


2

R, 86 Bytes

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

1

Jelly ,  44  43 Bytes

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

Ein vollständiges Programm, das das Ergebnis druckt.

Probieren Sie es online!

Wie?

⁹ - 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
Ein guter Workaround für "durchgestrichene 44 ist normale 44".
wizzwizz4

1

Mathematica, 80 Bytes

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

Anonyme Funktion. Nimmt einen String als Eingabe und gibt einen String als Ausgabe zurück.


1

Python 3: 111 Bytes

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

Ruft Benutzereingaben ab, führt eine Reihe von regulären Ersetzungen durch und druckt das Ergebnis aus.


Willkommen auf der Seite! Ich denke, es ist kürzer, wenn Sie from re import*stattdessen tun from re import sub as r. Dann würde die zweite Zeile print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
lauten

Aha, ausgezeichnet. Vielen Dank!
Struan Duncan-Wilson

0

Los , 134 Bytes

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

Probieren Sie es online!

Da Go keine Standardwerte für Argumente unterstützt, müssen Sie diese 1jedes Mal manuell übergeben .


0

Batch, 237 99 Bytes

Angenommen, die Eingabe ist in der Frage im genauen Format

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

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.

Probieren Sie es online!

Erläuterung:

zIst das Array, das 5 mögliche Ausgaben enthält, müssen wir nur den Weg finden, um es zu indizieren. Mir sind 2 Parameter aufgefallen, die zur Unterscheidung von Eingaben verwendet werden können. Der erste Teil ist die Länge der Eingabe:

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

Nur 3 Eingänge haben die gleiche Länge von Mod 5. Der zweite Teil ist, dass an Position 19 in den Eingängen 2, 3und4 haben aufeinander folgende Codepunkte, so dass sie leicht den Rest der Indizes auszufüllen verwendet werden , während die restlichen 2 Eingänge sind kürzer.

Der StringTyp ShortStringhat standardmäßig eine Kapazität von 255 Zeichen, die alle mit Nullen initialisiert sind. Daher kann er sicher für t[19]alle Zeichenfolgen verwendet werden, und sein Codepunkt ist 0 für kürzere Zeichenfolgen. Für die Indizierung wird nichts geändert. Die Indizes für kürzere Zeichenfolgen sind also 0 und 2. Deshalb müssen wir Indizes 1, 3 und 4 aus 2, 3und 4.

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

0

05AB1E , 37 Bytes

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

Probieren Sie es online aus oder überprüfen Sie alle Testfälle.

Erläuterung:

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)

Weitere Informationen finden Sie “:€€‹×Œä“hier ": the lower levels". '„Àist "usa"; und '‚ïist "world".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.