Convertir des titres Mario japonais en titres américains


16

Les conventions de dénomination des jeux de la série Super Mario sont très étranges et ne correspondent pas entre les régions.

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

Quel bordel!


Défi:

Étant donné une chaîne composée du nom japonais d'un jeu Super Mario, affichez le nom américain correspondant. Vous pouvez entrer la chaîne japonaise par n'importe quelle méthode raisonnable, et sortir la chaîne américaine (avec une nouvelle ligne facultative) par n'importe quelle méthode raisonnable.

Vous devez utiliser les chaînes exactes indiquées ci-dessus. Les failles standard sont interdites!

Le code le plus court (en octets) est le gagnant.


1
codegolf.meta.stackexchange.com/questions/8047/… essayez d'éviter les tableaux fantaisistes ...
Roman Gräf

1
Mais je pensais que le nom japonais de Super Mario Bros.2 était Doki Doki Panic. Ou ont-ils de nouveau sorti le même jeu au Japon mais avec les skins Mario?
Shufflepants

@Shufflepants IIRC, oui, ils l'ont réédité avec des skins Mario comme "Super Mario USA".
Pokechu22

1
Pouvons-nous supposer que l'entrée doit être le nom japonais exact?
stevefestl

1
@SteveFest Oui.
Julian Lachniet

Réponses:




6

JavaScript (ES6), 82 81 octets

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

Essayez-le en ligne!

Comment?

je

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
Maintenant, c'est intelligent.
darrylyeo


3

JavaScript (ES6), 84 octets

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


2
+1 pour l' [r='replace']astuce.
Arjun

Je ne connais pas beaucoup JS ... comment fonctionne le []travail en tant que fonction?
2017 totalement humain

3
@totallyhuman 1) Les propriétés des objets JS sont accessibles avec l'une de ces deux syntaxes: object.propertyou object['property']. 2) Une méthode d'un objet est une propriété à laquelle est affectée une fonction. 3) Sous le capot, JS transforme brièvement un type primitif tel qu'une chaîne en un objet lorsqu'une syntaxe d' accès aux propriétés est utilisée dessus. Conclusion: en combinant tout ce qui précède, nous pouvons comprendre pourquoi s['replace']()fait exactement ce qu'il dit sur l'étain.
Arnauld


2

Japt , 48 octets

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

Essayez-le en ligne!

Explication:

 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 utilise la bibliothèque shoco pour la compression de chaînes. Les backticks sont utilisés pour décompresser les chaînes.


2

R, 86 octets

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

1

Gelée ,  44  43 octets

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

Un programme complet qui imprime le résultat.

Essayez-le en ligne!

Comment?

⁹ - 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
Solution de contournement intéressante pour "barré 44 est normal 44".
wizzwizz4

1

Mathematica, 80 octets

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

Fonction anonyme. Prend une chaîne en entrée et renvoie une chaîne en sortie.


1

Python 3: 111 octets

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

Obtient une entrée utilisateur, exécute une série de substitutions basées sur des expressions rationnelles et imprime le résultat.


Bienvenue sur le site! Je pense que c'est plus court si vous le faites à la from re import*place de from re import sub as r. La deuxième ligne deviendrait alors:print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
DJMcMayhem

Aha, excellent. Je vous remercie!
Struan Duncan-Wilson

0

Aller , 134 octets

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

Essayez-le en ligne!

Étant donné que Go ne prend pas en charge les valeurs par défaut pour les arguments, vous devez passer manuellement à 1chaque fois.


0

Lot, 237 99 octets

En supposant que l'entrée est au format exact dans la question

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

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.

Essayez-le en ligne!

Explication:

zest le tableau qui contient 5 sorties possibles, il nous suffit de trouver le moyen de l'indexer. J'ai remarqué 2 paramètres qui peuvent être utilisés pour distinguer l'entrée. La première partie est la longueur de l'entrée:

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

Seuls trois entrées ont la même longueur mod 5. La seconde partie est que, à la position 19 dans les entrées, 2, 3et4 ont des points de code consécutifs, de sorte qu'ils peuvent être facilement utilisés pour remplir le reste des indices , tandis que les 2 entrées restantes sont plus court.

Par Stringdéfaut, le type ShortStringa une capacité de 255 caractères, tous initialisés avec des zéros, il est donc sûr de l'utiliser t[19]sur toutes les chaînes et son point de code est 0 pour les chaînes plus courtes, sans rien changer pour l'indexation, donc les index des chaînes plus courtes sont 0 et 2. Par conséquent, nous avons besoin d' index 1, 3 et 4 de 2, 3et 4.

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

0

05AB1E , 37 octets

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

Essayez-le en ligne ou vérifiez tous les cas de test.

Explication:

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)

Voir ce pour plus d' informations pourquoi “:€€‹×Œä“est ": the lower levels"; '„Àest "usa"; et '‚ïest "world".

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.