Converter títulos do Mario japonês em títulos americanos

16

As convenções de nomenclatura para jogos da série Super Mario são muito estranhas e não coincidem entre as regiões.

| 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 bagunça!


Desafio:

Dada uma sequência que consiste no nome japonês de um jogo de Super Mario, produz o nome americano correspondente. Você pode inserir a sequência japonesa através de qualquer método razoável e gerar a sequência americana (com uma nova linha opcional) através de qualquer método razoável.

Você deve usar as strings exatas mostradas acima. As brechas padrão são proibidas!

O código mais curto (em bytes) é o vencedor.

Julian Lachniet
fonte
1
codegolf.meta.stackexchange.com/questions/8047/... tentar tabelas evitar fantasia ...
Roman Gräf
1
Mas achei que o nome japonês de Super Mario Bros. 2 era Doki Doki Panic. Ou eles relançaram o mesmo jogo no Japão novamente, mas com as skins de Mario?
Shufflepants
@Shufflepants IIRC, sim, eles o relançaram com skins de Mario como "Super Mario USA".
precisa saber é o seguinte
1
Podemos assumir que a entrada deve ser o nome japonês exato?
stevefestl
1
@SteveFest Sim.
perfil completo de Julian Lachniet

Respostas:

14

sed, 52

  • 1 byte salvo graças a @MikeScott

Substituição direta:

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

Experimente online .

Trauma Digital
fonte
2
Você pode salvar um personagem fazendo a última linha s/B.*4/World/.
Mike Scott
@MikeScott yes - thanks!
Digital Trauma
6

Retina, 43

  • 1 byte salvo graças a @MikeScott

Porta direta da minha resposta sed :

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

Experimente online .

Trauma Digital
fonte
Meu personagem salvo da versão sed também funciona aqui - use em B.*4vez 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])

Experimente online!

Quão?

Eu

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
fonte
2
Agora isso é inteligente.
darrylyeo
5

PHP, 81 bytes

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

Experimente online!

Jörg Hülsermann
fonte
3

JavaScript (ES6), 84 bytes

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

darrylyeo
fonte
2
+1 para o [r='replace']truque.
Arjun
Eu não sei muito JS ... como é que usar o []trabalho como uma função?
totallyhuman
3
@totallyhuman 1) As propriedades do objeto JS podem ser acessadas com uma destas duas sintaxes: object.propertyou object['property']. 2) Um método de um objeto é uma propriedade à qual é atribuída uma função. 3) Sob o capô, JS transforma rapidamente um tipo primitivo, como uma string, em um objeto quando uma sintaxe de acesso à propriedade é usada nele. Conclusão: combinando tudo o que precede, podemos entender por que s['replace']()faz exatamente o que diz na lata.
precisa
3

Python 2 , 96 92 bytes

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

Experimente online!

totalmente humano
fonte
2

Japonês , 48 bytes

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

Experimente online!

Explicação:

 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 a biblioteca shoco para compactação de strings. Backticks são usados ​​para descomprimir seqüências de caracteres.

Oliver
fonte
2

R, 86 bytes

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

Geléia ,  44  43 bytes

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

Um programa completo que imprime o resultado.

Experimente online!

Quão?

⁹ - 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
fonte
3
Solução legal para "riscado 44 é normal 44".
precisa saber é o seguinte
1

Mathematica, 80 bytes

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

Função anônima. Pega uma string como entrada e retorna uma string como saída.

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

Obtém entrada do usuário, executa uma série de substituições baseadas em regex e imprime o resultado.

Struan Duncan-Wilson
fonte
Bem vindo ao site! Eu acho que é mais curto se você fizer, em from re import*vez de from re import sub as r. Então a segunda linha se tornaria:print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
DJMcMayhem
Ah, excelente. Obrigado!
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)}

Experimente online!

Como o Go não suporta valores padrão para argumentos, você deve passar manualmente 1todas as vezes.

totalmente humano
fonte
0

Lote, 237 99 bytes

Supondo que a entrada esteja no formato exato da pergunta

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

Experimente online!

Explicação:

zé o array que contém 5 saídas possíveis, só precisamos encontrar o caminho para indexá-lo. Notei 2 parâmetros que podem ser usados ​​para distinguir entrada. A primeira parte é o comprimento da entrada:

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

Apenas três entradas tiverem o mesmo comprimento mod 5. A segunda parte é que, na posição 19 nas entradas, 2, 3e 4tem pontos de código consecutivas, para que eles possam ser facilmente usadas para preencher o resto dos índices enquanto os restantes 2 são entradas mais curta.

O Stringtipo padrão é ShortStringe, por padrão, tem capacidade para 255 caracteres, todos inicializados com zeros, portanto, é seguro usá-lo t[19]em todas as cadeias e seu ponto de código é 0 para cadeias mais curtas, não alterando nada na indexação, portanto, os índices das cadeias mais curtas são 0 e 2. Portanto, precisamos dos índices 1, 3 e 4 de 2, 3e 4.

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

05AB1E , 37 bytes

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

Experimente online ou verifique todos os casos de teste.

Explicação:

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)

Veja isto para mais informações porque “:€€‹×Œä“é ": the lower levels"; '„Àé "usa"; e '‚ïé "world".

Kevin Cruijssen
fonte