Конвертировать японские титулы Марио в американские титулы

16

Соглашения об именах для игр серии Super Mario очень странные и не совпадают между регионами.

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

Какой беспорядок!


Вызов:

Учитывая строку, состоящую из японского названия игры Super Mario, выведите соответствующее американское имя. Вы можете ввести японскую строку любым разумным способом и вывести американскую строку (с необязательным переводом строки) любым разумным способом.

Вы должны использовать точные строки, показанные выше. Стандартные лазейки запрещены!

Самый короткий код (в байтах) является победителем.

Джулиан Лахниет
источник
1
codegolf.meta.stackexchange.com/questions/8047/… старайтесь избегать модных столов ...
Роман
1
Но я думал, что японское имя Super Mario Bros. 2 было Doki Doki Panic. Или они снова переиздали ту же игру в Японии, но со скинами Mario?
Shufflepants
@Shufflepants IIRC, да, они переиздали его с скинами Mario как "Super Mario USA".
Pokechu22
1
Можем ли мы предположить, что входные данные должны быть точными японскими именами?
stevefestl
1
@SteveFest Да.
Джулиан Лакниет

Ответы:

14

Сед, 52

  • 1 байт сохранен благодаря @MikeScott

Простая замена:

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

Попробуйте онлайн .

Цифровая травма
источник
2
Вы можете сохранить персонажа, сделав последнюю строку s/B.*4/World/.
Майк Скотт
@MikeScott да - спасибо!
Цифровая травма
6

Сетчатка, 43

  • 1 байт сохранен благодаря @MikeScott

Прямой порт моего седа ответ :

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

Попробуйте онлайн .

Цифровая травма
источник
Мой сохраненный персонаж из версии sed тоже работает здесь - используйте B.*4вместо \S* 4.
Майк Скотт
6

JavaScript (ES6), 82 81 байт

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

Попробуйте онлайн!

Как?

Есть три шаблона для поиска и замены. Мы ищем их всех сразу и используем позициюя совпадения, чтобы вывести строку подстановки.

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
источник
2
Теперь это умно.
darrylyeo
3

JavaScript (ES6), 84 байта

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

darrylyeo
источник
2
+1 за [r='replace']трюк.
Арджун
Я не знаю JS много ... как использовать []работу как функцию?
полностью человек
3
@totallyhuman 1) Свойства объекта JS могут быть доступны с помощью любого из этих двух синтаксисов: object.propertyили object['property']. 2) Метод объекта - это свойство, которому назначена функция. 3) Под капотом JS кратко превращает примитивный тип, такой как строка, в объект, когда для него используется синтаксис доступа к свойству . Вывод: комбинируя все вышеперечисленное, мы можем понять, почему s['replace']()именно то, что написано на банке.
Arnauld
2

Japt , 48 байт

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

Попробуйте онлайн!

Объяснение:

 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 использует библиотеку shoco для сжатия строк. Обратные галочки используются для распаковки строк.

Оливер
источник
2

R 86 байт

function(x)sub("Bros. 4","World",sub("USA","Bros. 2",sub(" 2",": The Lost Levels",x)))
Свен Хоэнштейн
источник
1

Желе ,  44  43 байта

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

Полная программа, которая печатает результат.

Попробуйте онлайн!

Как?

⁹ - 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
Хороший обходной путь к «вычеркнутым 44 нормальным 44».
wizzwizz4
1

Mathematica, 80 байт

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

Анонимная функция. Принимает строку в качестве ввода и возвращает строку в качестве вывода.

LegionMammal978
источник
1

Python 3: 111 байт

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

Получает пользовательский ввод, запускает серию подстановок на основе регулярных выражений и печатает результат.

Струан Дункан-Уилсон
источник
Добро пожаловать на сайт! Я думаю, что короче, если вы делаете from re import*вместо from re import sub as r. Тогда вторая строка станет:print(sub(" USA","Bros. 2",sub(" 2",": The Lost Levels",sub("Bros. 4","World",input()))))
DJMcMayhem
Ага, отлично. Спасибо!
Струан Дункан-Уилсон
0

Go , 134 байта

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

Попробуйте онлайн!

Поскольку Go не поддерживает значения по умолчанию для аргументов, вам придется 1каждый раз вручную передавать .

totallyhuman
источник
0

Партия, 237 99 байт

Предполагая, что ввод в точном формате в вопросе

@set s=%*
@set s=%s: 2=: The Lost Levels%
@set s=%s:USA=Bros. 2%
@set s=%s:Bros. 4=World%
@echo %s%
stevefestl
источник
0

Паскаль (FPC) , 184 182 байта

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.

Попробуйте онлайн!

Объяснение:

zэто массив, который содержит 5 возможных выходных данных, нам просто нужно найти способ индексации в нем. Я заметил 2 параметра, которые можно использовать для различения ввода. Первая часть - длина ввода:

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

Только 3 входы имеют такую же длину , мода 5. Вторая часть является то , что, в положении 19 на входах, 2, 3и4 имеют последовательные кодовые точки, так что они легко могут быть использованы , чтобы заполнить остальную часть индексов , а остальные входы 2 короче.

В Stringумолчанию типа к ShortStringи по умолчанию имеет потенциал для 255 символов, все инициализирована нулями, поэтому безопасно использовать t[19]на всех строках и ее элемент кода является 0 для коротких строк, ничего для индексации не меняется, поэтому индексы более короткие струны являются 0 и 2. Поэтому нам нужны индексы 1, 3 и 4 из 2, 3и 4.

  | Codepoint |  *2 | +19 | mod 5
2 |        50 | 100 | 119 | 4
3 |        51 | 102 | 121 | 1
4 |        52 | 104 | 123 | 3
AlexRacer
источник
0

05AB1E , 37 байт

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

Попробуйте онлайн или проверьте все контрольные примеры.

Объяснение:

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)

Смотрите это для получения дополнительной информации , почему “:€€‹×Œä“это ": the lower levels"; '„Àесть "usa"; и '‚ïесть "world".

Кевин Круйссен
источник