他没有来-挑战挑战


25

编写一个给定字符串的程序或函数,如果有的话,它将zalgo剥离。

扎尔戈

对于本文,zalgo被定义为以下Unicode范围内的任何字符:

  • 组合变音标记(0300–036F)
  • 合并变音符号扩展(1AB0–1AFF)
  • 组合变音符号补充(1DC0–1DFF)
  • 组合符号的变音符号(20D0–20FF)
  • 合并半角线(FE20–FE2F)

https://zh.wikipedia.org/wiki/Combining_character#Unicode_ranges

输入项

  • 可以通过命令行参数,STDIN或您的语言支持的任何其他标准输入法来传递
  • 将是可能包含zalgo或其他非ASCII字符的字符串

输出量

输出应为不包含任何zalgo的字符串。

测试用例

Input -> Output

HE̸͚ͦ ̓C͉Õ̗͕M͙͌͆E̋̃ͥT̠͕͌H̤̯͛ -> HE COMETH
C͉̊od̓e͔͝ ̆G̀̑ͧo͜l͔̯͊f͉͍ -> Code Golf
aaaͧͩa͕̰ȃ̘͕aa̚͢͝aa͗̿͢ -> aaaaaaaaa
ññ        -> ñn
⚡⃤       -> ⚡

计分

因为这是,所以以字节为单位的最短答案会获胜。


3
字符串是否保证仅包含ASCII和/或Zalgo?还是可能包含其他unicode?
DJMcMayhem

4
这些字符的合法使用情况如何?Zalgo几乎只有在那些字符从未有过的方式彼此堆叠时才出现。
Draco18s

@DJMcMayhem输入字符串可能包含其他非ASCII字符,必须将其删除。
完全人类

1
@totallyhuman我在想一种更通用的方法:仅在“标准”字符后出现多个字符时才剥离。这是不错,但a͕̰被剥去a。(现在,由于有了表情符号检测器,我想在表情符号上添加变音符号...🤔̘͕̑pfft,看起来很傻)
Draco18s

2
您应该添加一些具有非ASCII输出的测试用例。
xnor

Answers:


13

视网膜,35字节

T`̀-ͯ᪰-᫿᷀-᷿⃐-⃿︠-︯

在线尝试!

只需从输入中删除挑战中给定范围内的所有字符。该代码当然是超级不可读的,但是从概念上讲,该代码与T`0-9A-Za-z删除所有字母数字字符之类的代码没有什么不同。


3
对我来说似乎无与伦比。
暴民埃里克(Erik the Outgolfer)'17年

@EriktheOutgolfer我不知道,我认为Jelly可能比仅列出字符更有效地生成代码点范围。
马丁·恩德

实际上,我认为它不行。
暴民埃里克(Erik the Outgolfer)'17年

我很惊讶还没有果冻解决方案。
完全人类

@icrieverytim 在这里,撕裂更长的时间。我还没有想出如何比这更有效地生成代码点:P
HyperNeutrino

7

Python 3中73 69个字节

-3个字节感谢L3viathan。

不知道参加自己的挑战是否可以,但是... 从JS和Retina答案中直接窃取了正则表达式和本质上的想法

lambda s:re.sub('[̀-ͯ᪰-᫿᷀-᷿⃐-⃿︠-︯]','',s)
import re

在线尝试!


1
通过使该正常导入语句节省4个字节。
L3viathan '17

您忘记更新字节数。
xnor

@xnor ??对我来说似乎正确。
完全人类

@totallyhuman我的错,错过了那些char是多字节的。
xnor

好吧,可以说我从Retina的答案中窃取了字符范围。(不过请小心,因为我的编辑要删除zalgo和`。)
Neil

4

JavaScript(ES6),55个字节

f=
s=>s.replace(/[̀-ͯ᪰-᫿᷀-᷿⃐-⃿︠-︯]/g,'')
<textarea oninput=o.textContent=f(this.value)></textarea><pre id=o>



4

PHP,67字节

如写短

<?=preg_replace("#[̀-ͯ᪰-᫿᷀-᷿⃐-⃿︠-︯]#u","",$argn);

在线尝试!

PHP,115字节

<?=preg_replace("#[\u{300}-\u{36f}\u{1ab0}-\u{1aff}\u{1dc0}-\u{1dff}\u{20d0}-\u{20ff}\u{fe20}-\u{fe2f}]#u","",$argn);

在线尝试!

PHP,35字节

对于给定的测试用例有效,它将删除所有标记

<?=preg_replace("#\pM#u","",$argn);

在线尝试!


@FelixDombek不,它仅替换所有商标与任何给定的范围
约尔格Hülsermann

3

Python 3、127 118字节

现在只是一个简单的答案,让我们看看它的高尔夫球性。

lambda y:"".join(chr(x)for x in map(ord,y)if not(767<x<880or 6831<x<6912or 7615<x<7680or 8399<x<8448or 65055<x<65072))

变更日志:

  • 我什么时候才能知道理解力比功能性东西(-9字节)短。

0or不是什么,所以您必须对其进行修复,否则它将提高SyntaxError
暴民埃里克(Erik the Outgolfer)'17年

2
@EriktheOutgolfer您真的测试过吗?在Python 3和2上都不
会给

啊对。我有些困惑。
暴民埃里克(Erik the Outgolfer)'17年


2

APL(Dyalog Unicode),43字节

'[̀-ͯ᪰-᫿᷀-᷿⃐-⃿︠-︯]'R''

在线尝试!

PCRE [R E放置所有那些一无所有


44字节版本不使用RegEx或奇怪的字符文字(因此每个字符一个字节):

⍞~⎕UCS65055 8399 7615 6831 767+⍳¨16×2 6~⍨⍳7

在线尝试! ⍳7 1…7(1 2 3 4 5 6 7)

2 6~⍨ 除了2和6(1 3 4 5 7)

16× 乘以16(16 48 64 80 112)

⍳¨ 每个…1…(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16,1 2 3…,…110 111 112)

+ 为每个列表添加偏移量(65056 65057 65058…,…877 878 879)

 征募(拼合)

⎕UCS 转换为相应的Unicode字符

⍞~ 获取文本输入并删除所有此类字符


2

果冻,32字节

“Żȷ'⁺¦60ƭṖ_WTɦ7Ụ|ṫYɠF’bȷ5r2/FỌḟ@

在线尝试!

说明

“Żȷ'⁺¦60ƭṖ_WTɦ7Ụ|ṫYɠF’bȷ5r2/FỌḟ@  Main link
“Żȷ'⁺¦60ƭṖ_WTɦ7Ụ|ṫYɠF’            Base 250 compressed integer; 768008790683206911076160767908400084476505665071
                      bȷ5         Convert into base 100000; [768, 879, 6832, 6911, 7616, 7679, 8400, 8447, 65056, 65071]
                         r2/      Inclusive range on non-overlapping slices of length 2
                            F     Flatten
                             Ọ    chr; cast to character from codepoints
                              ḟ@  Filter; remove all characters from input that are in the characters generated before

o0没意识到我把这个问题提高了。那b65072是我想的吗?:o
totallyhuman

@icrieverytim是数值列表压缩:D
HyperNeutrino

果冻绝对是最zalgo的语言。我想知道如果您使用自己的代码运行该程序会怎样?编辑:不幸的是什么都没有
太空垃圾


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.