Convertir títulos japoneses de Mario a títulos estadounidenses

16

Las convenciones de nomenclatura para los juegos de la serie Super Mario son muy extrañas y no coinciden entre regiones.

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

¡Que desastre!


Desafío:

Dada una cadena que consiste en el nombre japonés de un juego de Super Mario, genera el nombre estadounidense correspondiente. Puede ingresar la cadena japonesa a través de cualquier método razonable y generar la cadena americana (con una nueva línea opcional) a través de cualquier método razonable.

Debe usar las cadenas exactas que se muestran arriba. ¡Las lagunas estándar están prohibidas!

El código más corto (en bytes) es el ganador.

Julian Lachniet
fuente
1
codegolf.meta.stackexchange.com/questions/8047/… intenta evitar las mesas elegantes ...
Roman Gräf
1
Pero pensé que el nombre japonés para Super Mario Bros.2 era Doki Doki Panic. ¿O volvieron a lanzar el mismo juego en Japón nuevamente pero con las máscaras de Mario?
Shufflepants
@Shufflepants IIRC, sí, lo relanzaron con las máscaras de Mario como "Super Mario USA".
Pokechu22
1
¿Podemos suponer que la entrada debe ser los nombres japoneses exactos?
stevefestl
1
@SteveFest Sí.
Julian Lachniet

Respuestas:

14

sed, 52

  • 1 byte guardado gracias a @MikeScott

Reemplazo directo:

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

Pruébalo en línea .

Trauma digital
fuente
2
Puedes guardar un personaje haciendo la última línea s/B.*4/World/.
Mike Scott
@ MikeScott sí, ¡gracias!
Trauma digital
6

Retina, 43

  • 1 byte guardado gracias a @MikeScott

Puerto directo de mi respuesta sed :

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

Pruébalo en línea .

Trauma digital
fuente
Mi personaje guardado de la versión sed también funciona aquí: use en B.*4lugar de \S* 4.
Mike Scott
6

JavaScript (ES6), 82 81 bytes

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

Pruébalo en línea!

¿Cómo?

yo

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
fuente
2
Ahora eso es inteligente.
darrylyeo
5

PHP, 81 bytes

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

Pruébalo en línea!

Jörg Hülsermann
fuente
3

JavaScript (ES6), 84 bytes

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

Darrylyeo
fuente
2
+1 por el [r='replace']truco.
Arjun
No conozco mucho a JS ... ¿cómo funciona el []trabajo como función?
Totalmente humano
3
@totallyhuman 1) Se puede acceder a las propiedades del objeto JS con cualquiera de estas dos sintaxis: object.propertyo object['property']. 2) Un método de un objeto es una propiedad a la que se le asigna una función. 3) Bajo el capó, JS convierte brevemente un tipo primitivo, como una cadena, en un objeto cuando se utiliza una sintaxis de acceso a la propiedad . Conclusión: al combinar todo lo anterior, podemos entender por qué s['replace']()hace exactamente lo que dice en la lata.
Arnauld
2

Japt , 48 bytes

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

Pruébalo en línea!

Explicación:

 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 usa la biblioteca shoco para la compresión de cadenas. Los backticks se usan para descomprimir cadenas.

Oliver
fuente
2

R, 86 bytes

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

Jalea ,  44  43 bytes

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

Un programa completo que imprime el resultado.

Pruébalo en línea!

¿Cómo?

⁹ - 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
fuente
3
Una buena solución a "44 tachado es normal 44".
wizzwizz4
1

Mathematica, 80 bytes

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

Función anónima. Toma una cadena como entrada y devuelve una cadena como salida.

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

Obtiene la entrada del usuario, ejecuta una serie de sustituciones basadas en expresiones regulares e imprime el resultado.

Struan Duncan-Wilson
fuente
Bienvenido al sitio! Creo que es más corto si lo haces en from re import*lugar de from re import sub as r. Entonces la segunda línea se convertiría en:print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
DJMcMayhem
Ajá, excelente. ¡Gracias!
Struan Duncan-Wilson
0

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

Pruébalo en línea!

Como Go no admite valores predeterminados para argumentos, debe pasarlos manualmente 1cada vez.

totalmente humano
fuente
0

Lote, 237 99 bytes

Asumiendo que la entrada está en formato exacto en la pregunta

@set s=%*
@set s=%s: 2=: The Lost Levels%
@set s=%s:USA=Bros. 2%
@set s=%s:Bros. 4=World%
@echo %s%
stevefestl
fuente
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.

Pruébalo en línea!

Explicación:

zes la matriz que contiene 5 salidas posibles, solo necesitamos encontrar la forma de indexarla. Noté 2 parámetros que se pueden usar para distinguir la entrada. La primera parte es la longitud de la entrada:

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

Solo 3 entradas tienen la misma longitud mod 5. La segunda parte es que, en la posición 19 en las entradas 2,3 y4 tienen puntos de código consecutivos, por lo que se pueden utilizar fácilmente para llenar el resto de los índices mientras que las 2 entradas restantes son corto.

El Stringtipo ShortStringpredeterminado tiene una capacidad para 255 caracteres, todos inicializados con ceros, por lo que es seguro de usar t[19]en todas las cadenas y su punto de código es 0 para cadenas más cortas, sin cambiar nada para indexar, por lo que los índices de cadenas más cortas son 0 y 2. Por lo tanto, necesitamos los índices 1, 3 y 4 de 2, 3y 4.

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

05AB1E , 37 bytes

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

Pruébelo en línea o verifique todos los casos de prueba.

Explicación:

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)

Consulte esto para obtener más información por qué “:€€‹×Œä“es ": the lower levels"; '„Àes "usa"; y '‚ïes "world".

Kevin Cruijssen
fuente