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.

Julian Lachniet
la source
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:

14

sed, 52

  • 1 octet enregistré grâce à @MikeScott

Remplacement simple:

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

Essayez-le en ligne .

Traumatisme numérique
la source
2
Vous pouvez enregistrer un personnage en faisant la dernière ligne s/B.*4/World/.
Mike Scott
@MikeScott oui - merci!
Digital Trauma
6

Rétine, 43

  • 1 octet enregistré grâce à @MikeScott

Port direct de ma réponse sed :

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

Essayez-le en ligne .

Traumatisme numérique
la source
Mon personnage enregistré dans la version sed fonctionne ici aussi - utilisez B.*4plutôt \S* 4.
Mike Scott
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"
Arnauld
la source
2
Maintenant, c'est intelligent.
darrylyeo
5

PHP, 81 octets

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

Essayez-le en ligne!

Jörg Hülsermann
la source
3

JavaScript (ES6), 84 octets

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

darrylyeo
la source
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
3

Python 2 , 96 92 octets

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

Essayez-le en ligne!

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

Oliver
la source
2

R, 86 octets

function(x)sub("Bros. 4","World",sub("USA","Bros. 2",sub(" 2",": The Lost Levels",x)))
Sven Hohenstein
la source
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.
Jonathan Allan
la source
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.

LegionMammal978
la source
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.

Struan Duncan-Wilson
la source
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.

totalement humain
la source
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%
stevefestl
la source
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
AlexRacer
la source
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".

Kevin Cruijssen
la source