Перетворити японські назви Маріо в американські


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/… намагайтеся уникати фантазійних таблиць ...
Roman Gräf

1
Але я подумав, що японське ім’я для Super Mario Bros. 2 - Докі Докі Паніка. Або вони знову випустили ту саму гру в Японії, але зі шкурками Маріо?
Shufflepants

@Shufflepants IIRC, так, вони повторно випустили його зі шкурками Маріо як "Super Mario USA".
Pokechu22

1
Чи можна припустити, що вхід повинен бути точним японським іменем?
stevefestl

1
@SteveFest Так.
Julian Lachniet

Відповіді:




6

JavaScript (ES6), 82 81 байт

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

Спробуйте в Інтернеті!

Як?

i

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
Тепер це розумно.
darrylyeo


3

JavaScript (ES6), 84 байти

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


2
+1 за [r='replace']трюк.
Арджун

Я дуже не знаю JS ... як використовується []робота як функція?
повністюлюдський

3
@totallyhuman 1) Властивості JS-об'єкта можна отримати з будь-якого з цих двох синтаксисів: object.propertyабо object['property']. 2) Метод об’єкта - це властивість, якій присвоюється функція. 3) Під капотом JS коротко перетворює примітивний тип, такий як рядок, в об'єкт, коли на ньому використовується синтаксис доступу до властивості . Висновок: комбінуючи все вищезазначене, ми можемо зрозуміти, чому s['replace']()саме те, що написано на жерсті.
Арнольд


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 використовує бібліотеку шоко для стискання рядків. Для декомпресії рядків використовуються задні посилання.



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

Математика, 80 байт

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

Анонімна функція. Приймає рядок як вхідний і повертає рядок як вихідний.


1

Пітон 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

Пакетна, 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%

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.