古西班牙字母顺序


22

在1994年之前,西班牙词典使用字母顺序排列,具有特殊性:有向图llch被认为是单字母。ch立即跟进c,并ll立即跟进l。添加以西班牙语开头的字母ñn则顺序为:

a, b, c, ch, d, e, f, g, h, i, j, k, l, ll, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z

自1994年以来ll,并ch被认为是(两个字母组ll并且ch分别地),并且因此按字母顺序相同的英文字母的例外ñ

旧的命令肯定会更有趣

挑战

输入零个或多个单词的列表,然后输出根据旧西班牙字母顺序排序的列表。排序是在单词之间(而不是单词中的字母之间)。也就是说,单词是原子的,并且输出将以可能不同的顺序包含相同的单词。

为了简化,我们不会考虑字母ñ,或重音的元音áéíóú,或大写字母。每个字都是一个或多个字符的序列,取值范围从ASCII 97(a)到ASCII 122(z)。

如果l连续超过两个字母,则应将它们从左到右分组。也就是说,lllis lland then l(不是land then ll)。

输入格式可以是:用空格,换行符或任何方便的字符分隔的单词。您可以选择是否将单词用引号引起来。单词列表或单词数组也是可以接受的。任何合理的格式均有效;只需在答案中说明即可。

以类似的方式,输出将是任何合理的格式(不一定与输入相同)。

打高尔夫,最短的胜利。

测试用例

在以下示例中,单词用空格分隔。第一行输入,第二行输出:

llama coche luego cocina caldo callar calma
caldo calma callar cocina coche luego llama

cuchara cuchillo cubiertos cuco cueva
cubiertos cuco cuchara cuchillo cueva

“单词”也可以是单个字母:

b c a ch ll m l n
a b c ch l ll m n

或不太可能的组合(请记住将l分组为从左到右的规则):

lll llc llz llll lllz
llc lll lllz llll llz

空的输入应给出空的输出:



当然,此顺序也可以应用于其他语言:

chiaro diventare cucchiaio
cucchiaio chiaro diventare

all alternative almond at ally a amber
a almond alternative all ally amber at

5
现在纠正该问题为时已晚,因为它有一个答案,但实际上rr也是一个字母。我认为它晚于ll和ch失去了作为单个字母的地位,因此Wikipedia中的解释并没有多大错。
彼得·泰勒

“ tweo”?Filler +
CalculatorFeline

3
@PeterTaylor官方学院(RAE)没有考虑rr任何一封信;至少不会因为1803年,但它是真实的,显然它被认为是美洲的一个字母
路易斯Mendo

1
看来匈牙利人应该受到一个单独的,更加困难的挑战:-)
路易斯·门多

1
威尔士字母有很多负载,可能很有趣,因为它们不是按(英文)字母顺序排列,也不包含所有拉丁字符:a,b,c,ch,d,dd,e,f,ff,g, ng,h,i,j,l,ll,m,n,o,p,ph,r,rh,s,t,th,u,w,y
Algy Taylor

Answers:


7

Pyth,14 13字节

更新:看到这被接受,并注意到一个琐碎的1字节高尔夫。哎呀

:D"ll|ch|."1Q

在线尝试。 测试套件。

对于每个单词,找到regex的所有非重叠匹配ll|ch|.。这将单词拆分为“字母”。然后,只需按拆分列表对单词进行排序即可。


好办法!(现在我终于明白了):-)
路易斯·门多

:D
这段

3

PowerShell,46 44 51 50字节

$args|sort @{e={$_-replace'(?=ch|ll)(.).','$1Α'}}

Α角色是在谈到在PowerShell中的默认排序顺序所有拉丁字母后,希腊字母α(至少在我的机器上,我不知道,如果是在其他语言环境不同)。它以UTF8编码计为2个字节。

用法示例,假设此字符串保存在名为的文件中es-sort.ps1

> es-sort.ps1 'lzego' 'luego' 'llama'

luego
lzego
llama

2

Mathematica,81个字节

StringReplace[Sort@StringReplace[#,"ch"->"cZ","ll"->"lZ"],"cZ"->"ch","lZ"->"ll"]&

与TimmyD的答案相同。


1

Python 2中,128个 116字节

lambda p:map(''.join,sorted([{'!':'ll','?':'ch'}.get(c,c)for c in w.replace('ll','!').replace('ch','?')]for w in p))

我仍然觉得这里肯定有改进的空间。


1

Javascript,95个字节

s=>s.map(a=>a.replace(/ll|ch/g,m=>m[0]+'~')).sort().map(a=>a.replace(/.~/g,m=>m>'d'?'ll':'ch'))

1

Perl,40个字节

包括+1的 -p

使用STDIN上的单词列表运行:

perl -p spanisort.pl <<< "llama coche luego cocina caldo callar calma"

spanisort.pl

s/ll|ch|./\u$&/g;$_="\L@{[sort split]}"
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.