Converti i titoli giapponesi di Mario in titoli americani


16

Le convenzioni di denominazione per i giochi della serie Super Mario sono molto strane e non coincidono tra le regioni.

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

Che casino!


Sfida:

Data una stringa composta dal nome giapponese di un gioco di Super Mario, produce il corrispondente nome americano. È possibile immettere la stringa giapponese tramite qualsiasi metodo ragionevole e generare la stringa americana (con una nuova riga facoltativa) tramite qualsiasi metodo ragionevole.

È necessario utilizzare le stringhe esatte mostrate sopra. Sono vietate le scappatoie standard!

Il codice più breve (in byte) è il vincitore.


1
codegolf.meta.stackexchange.com/questions/8047/… cerca di evitare tavoli stravaganti ...
Roman Gräf,

1
Ma ho pensato che il nome giapponese di Super Mario Bros. 2 fosse Doki Doki Panic. O hanno rilasciato nuovamente lo stesso gioco in Giappone ma con le skin di Mario?
Shufflepants,

@Shufflepants IIRC, sì, lo hanno rilasciato nuovamente con le skin Mario come "Super Mario USA".
Pokechu22,

1
Possiamo supporre che l'input debba essere l'esatto nome giapponese?
stevefestl,

1
@SteveFest Sì.
Julian Lachniet,

Risposte:




6

JavaScript (ES6), 82 81 byte

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

Provalo online!

Come?

io

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
Ora è intelligente.
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 per il [r='replace']trucco.
Arjun,

Non conosco molto JS ... come funziona l'utilizzo del []lavoro come funzione?
totalmente umano il

3
@totallyhuman 1) Le proprietà dell'oggetto JS sono accessibili con una di queste due sintassi: object.propertyo object['property']. 2) Un metodo di un oggetto è una proprietà a cui è assegnata una funzione. 3) Sotto il cofano, JS trasforma brevemente un tipo primitivo come una stringa in un oggetto quando su di esso viene utilizzata una sintassi di accesso alla proprietà . Conclusione: combinando tutto quanto sopra, possiamo capire perché s['replace']()fa esattamente quello che dice sulla scatola.
Arnauld,


2

Japt , 48 byte

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

Provalo online!

Spiegazione:

 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 utilizza la libreria shoco per la compressione delle stringhe. I backtick sono usati per decomprimere le stringhe.


2

R, 86 byte

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

1

Gelatina ,  44  43 byte

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

Un programma completo che stampa il risultato.

Provalo online!

Come?

⁹ - 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
Bella soluzione al "44 barrato è normale 44".
wizzwizz4,

1

Mathematica, 80 byte

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

Funzione anonima. Accetta una stringa come input e restituisce una stringa come output.


1

Python 3: 111 byte

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

Ottiene l'input dell'utente, esegue una serie di sostituzioni basate su regex e stampa il risultato.


Benvenuti nel sito! Penso che sia più corto se lo fai from re import*invece di from re import sub as r. Quindi la seconda riga diventerebbe:print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
DJMcMayhem

Ah, eccellente. Grazie!
Struan Duncan-Wilson,

0

Vai , 134 byte

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

Provalo online!

Poiché Go non supporta i valori predefiniti per gli argomenti, devi passare manualmente 1ogni volta.


0

Lotto, 237 99 byte

Supponendo che l'input sia nel formato esatto nella domanda

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

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.

Provalo online!

Spiegazione:

zè l'array che contiene 5 possibili output, dobbiamo solo trovare il modo di indicizzarlo. Ho notato 2 parametri che possono essere utilizzati per distinguere l'input. La prima parte è la lunghezza dell'input:

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 ingressi hanno la stessa lunghezza mod 5. La seconda parte è che, nella posizione 19 negli ingressi 2,3 e4 hanno punti di codice consecutivi, in modo che possano essere facilmente utilizzati per compilare il resto degli indici mentre le rimanenti 2 ingressi sono più corto.

Il Stringtipo predefinito è ShortStringe per impostazione predefinita ha una capacità di 255 caratteri, tutti inizializzati con zero, quindi è sicuro da usare t[19]su tutte le stringhe e il suo punto di codice è 0 per le stringhe più brevi, non cambiando nulla per l'indicizzazione, quindi gli indici delle stringhe più brevi sono 0 e 2. Pertanto, abbiamo bisogno indici 1, 3 e 4 da 2, 3e 4.

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

0

05AB1E , 37 byte

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

Provalo online o verifica tutti i casi di test.

Spiegazione:

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)

Vedi questo per maggiori informazioni perché “:€€‹×Œä“è ": the lower levels"; '„Àè "usa"; ed '‚ïè "world".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.