将日语马里奥标题转换为美国标题


16

《超级马里奥》系列游戏的命名约定非常奇怪,并且在不同地区之间不匹配。

| 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
但我认为超级马里奥兄弟2的日语名称是Doki Doki Panic。还是他们再次在日本重新发行了同款游戏,但使用了马里奥皮肤?
Shufflepants

@Shufflepants IIRC,是的,他们确实将其与Mario皮一起重新发布为“ Super Mario USA”。
Pokechu22年

1
我们可以假设输入的名称必须是准确的日语名称吗?
stevefestl

1
@SteveFest是的。
朱利安·拉希尼特

Answers:




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"

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']
Arjun 2015年

我不太了解JS ...如何将[]工作用作函数?
–totalhuman

3
@totallyhuman 1)可以使用以下两种语法之一来访问JS对象属性:object.propertyobject['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库进行字符串压缩。反引号用于解压缩字符串。



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"}&

匿名函数。将字符串作为输入并返回字符串作为输出。


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

啊哈,太好了。谢谢!
Struan Duncan-Wilson

0

前进 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每次都必须手动传递。


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)184182字节

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处23并且4具有连续的代码点,因此可以轻松地使用它们来填充其余的索引,而其余2个输入是较短。

String类型默认为ShortString,默认情况下可容纳255个字符,所有字符都用零初始化,因此可以安全地t[19]在所有字符串上使用,短字符串的代码点为0,索引不更改任何内容,因此短字符串的索引为0和2。因此,我们所需要的索引1,3和4从234

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.