地理语言


16

Geobitsian语言是一种新的英语变体,其中一个单词被分成多个段,每个段必须以不同的字母开头。然后,每当这些起始字母之一出现在另一个字符串中时,它就会被其相应的整个段替换,从而保持大写。

此过程称为Geobitsizing

例如“ Geobits ” 这个词可以被分解成geo bits废话诗。

Algy met a Bear
A Bear met Algy
The Bear was bulgy
The bulge was Algy

将与它进行地理位

Algeoy met a Bitsear
A Bitsear met Algeoy
The Bitsear was bitsulgeoy
The bitsulgeoe was Algeoy

因为每个g变成geo,每个G(尽管没有)变成Geo,每个b变成bits,每个B变成Bits

注意,每个替换都是针对原始字符串执行的,而不是任何中间步骤。例如,如果geo已经gbo取而代之的是,b的产生不会与更换bits

挑战

编写一个程序或函数,可以生成地球人的语言。

接受由小写字母(az)和空格组成的单行字符串。这将是用作Geobitsizing参数的单词,并用空格分隔各段。您可以假设:

  • 细分不会为空。因此空格将不会彼此相邻,也不会位于字符串的开头或结尾。
  • 每个段均以不同的字母开头。因此,不能超过26。

例如,你必须支持一些有效的分割字符串是geo bitsbutt neralex,和do o r k nob(单个字母段有没有影响,但有效)。但是geo butt nerAlex,和do o r k n ob是无效的。

您的程序或函数还需要输入另一个任意字符串,以将Geobitsizing应用于,打印或返回结果的Geobitsian语言。

  • 您可以假定此字符串仅包含换行符和可打印的ASCII。

  • 请记住,从输入到输出都必须保留字母大小写。

以下是一些no pro gr am m ing用作Geobitsizing参数的示例:

[empty string][empty string]

iing

IIng

Mmmm, mmm... MmmmMMM: m&m!Mmmm, mmm... MmmmMMM: m&m!(不变)

People think bananas are great, don't you?Proeoprole thingnok bamnoamnoams amre grreamt, dono't you?

Pet a Puppy
Google Wikipedia

Proet am Prouproproy
Groogrle Wingkingproedingam

请注意,无论自变量如何排列,结果都应该相同,例如,ing pro m no am gr应产生与上述相同的结果。

以字节为单位的最短代码获胜。


我们可以将“地位调整参数”作为数组吗?例如["no", "pro", "gr", "am", "m", "ing"]
Downgoat

@Upgoat对不起,但没有。
加尔文的业余爱好

@Upgoat尝试\\b${l}(\\S+)尽管这样做确实要花费您5个字节。
尼尔

3
-1用于以空格分隔的字符串的任意输入要求
AdmBorkBork '16

2
建议的测试用例:abra cadabra!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~它应该涵盖所有边缘情况,如果尝试使用正则表达式,则有很多情况...
Dennis

Answers:


6

果冻,18 字节

ṣ⁶;Œu1¦€$;©ZḢiЀị®

在线尝试!

备用版本,15字节(无竞争)

果冻的标题大小写功能有一个错误;它没有大写第一个单词。该问题已得到解决,因此现在可以进行以下工作。

ṣ⁶;Œt$;©ZḢiЀị®

该代码与竞争版本中的代码相同,不同之处在于Œt(标题大小写)代替了由实现的条件大写Œu1¦€

怎么运行的

ṣ⁶;Œu1¦€$;©ZḢiЀị®  Main link. Left argument: w (words). Right argument: s (string)

ṣ⁶                  Split w at spaces.
        $           Combine the two links to the left into a monadic chain.
       €              Map over the words.
   Œu1¦                 Uppercase the item at index 1.
  ;                   Append the result to the unmodified words.
         ;          Append all characters in s to the list of words.
          ©         Copy the result to the register.
           Z        Zip/transpose, grouping the first chars into the first list.
            Ḣ       Head; extract the list of first characters.
             iЀ    Find the first index of each character in s.
                ị®  Select the characters/strings from the list in the register
                    that are at those indices.

5

Python 3,71个字节

lambda w,s:s.translate({ord(t[0]):t for t in(w+' '+w.title()).split()})

Ideone上进行测试

怎么运行的

在Python 3中,内建str.translate函数接受一个字符串和一个字典,并将其代码点是该字典的键的字符串中的每个字符替换为对应的值,该值可以是字符串,整数或None(等价于空字符串)。

将单词字符串w转换为首字母大写(即,将每个单词的首字母大写)并将其附加到的结果上,将w+' '创建一个由空格分隔的单词字符串,并使用大小写形式(首字母)。如果没有第二个参数,则str.split在空格处分割,因此(w+' '+w.title()).split()创建所有单词的列表

最后,字典理解{ord(t[0]):t for t in...}将每个单词t转换为具有键ord(t[0])(第一个字母的代码点)和值t的字典条目,因此str.translate将执行预期的替换。


3

Python,126 99 95 81字节

非常感谢丹尼斯:

lambda G,S,j=''.join:j(s+j(g[1:]for g in G.split()if g[0]==s.lower())for s in S)

Edit1:不需要追加到临时

Edit2:S可能包含大写...

Edit3:不要重复G

Edit4:多压缩一点,然后推到一行

Edit5:使用未命名的Lambda和 j=join' '



2

Vim,46次击键

丑陋的,哈基。

A <esc>:s/\<\w/:%s\/\0\\c\/\\0/g<cr>:s/ /eg<C-v><Cr>/g<cr>dgg@"

为什么不在V中?D:
Downgoat

@Upgoat因为这是一辆越野车。
DJMcMayhem


2

Pyth, 18岁 16

MsXGhMJcjdrBH3)J

在这里尝试

定义g执行地理位化的功能。作为一个程序,如果第二个字符串是单行,则会短一些,但是多行输入不值得:

sXwhMJcjdrBz3)J

这里的总体思路是为大小写的geobitsian字符串加上标题并将其附加到原始字符串。然后将其拆分为空格,并为每个字符串取第一个字母并将其映射到它表示的字符串。这样X,每个单词的第一个字母就会变成完整的单词。


你只是...登高的丹尼斯吗?
Bojidar Marinov

@BojidarMarinov如果您将丹尼斯用其他有错误的语言算作郊游,那就对了;)
FryAmTheEggman

2

Python 2,83 78字节

lambda w,s:''.join(c+w[(' '+w).find(' '+c.lower()):].split()[0][1:]for c in s)

Ideone上进行测试

怎么运行的

我们遍历字符串s中的所有字符c

我们在单词字符串w之前添加一个空格,然后搜索出现小写c的情况,并在其前面加一个空格。

  • 如果这种情况发生存在,find将返回字符串中的空间的指数' '+w,其中指数匹配Çw ^

    w[...:]因此从第一个字母c的单词开始返回w的尾部。在空格处分割尾巴,选择第一个块(单词)并删除其第一个字母。split()[0][1:]

    c之前的结果之前,我们获得以c开头的正确大小写的单词。

  • 如果没有单词以c开头,find则将返回-1

    因此,w[...:]产生w的最后一个字符,split()将其包装在数组中,取消[0]包装,并[1:]从字符串中删除唯一的字符。

    c之前,我们获得了字符为c的单例字符串,因此整个操作都是无操作的。

最后,''.join连接所有结果字符串,返回s的Geobitsize版本。



1

CJam,19个字节

lq\S/_32af.^+_:c\er

在这里测试。

说明

l       e# Read first line of input (list of words).
q\      e# Read remaining input and swap with first line.
S/      e# Split around spaces.
_       e# Duplicate.
32af.^  e# Convert the first letter of each word to upper case by taking
        e# the element-wise XOR with the list [32].
+       e# Append the upper-cased words to the original ones.
_:c     e# Duplicate and convert each word to its first character.
\       e# Swap characters with words.
er      e# Transliteration, replacing each character with the corresponding word.

1

JavaScript的ES6,67个 63 70字节

g=>s=>s.replace(/\S/g,l=>l+(g.match(`\\b\\${l}(\\S+)`,'i')||[,""])[1])

在Firefox上进行测试。错误使此时间超出我的期望

说明

function(gbarg, str) {
   return str.replace(/\S/g, function(chr) { // Replace non-whitespace w/...
        return chr + (
         gbarg.match(`\\b\\${l}(\\S+)`,'i')  // That word in the gbstr
        ||[,""])[1]                          // if not in gbstr, use blank str
   });
}

f("abracadabra")("1Dbw")返回"1abracadabraDbracadabrababracadabrawbracadabra"
丹尼斯

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.