Ngài COMETH KHÔNG - một thách thức zalgo


25

Viết chương trình hoặc hàm, được cung cấp một chuỗi, sẽ loại bỏ chuỗi zalgo, nếu có.

Zalgo

Đối với bài đăng này, zalgo được định nghĩa là bất kỳ ký tự nào trong các phạm vi Unicode sau:

  • Kết hợp các dấu phụ (0300 trừ036F)
  • Kết hợp các dấu phụ được mở rộng (1AB0 Từ1AFF)
  • Kết hợp bổ sung dấu phụ (1DC0 từ1DFF)
  • Kết hợp các dấu phụ cho biểu tượng (20D0 Từ20FF)
  • Kết hợp một nửa nhãn hiệu (FE20F FE2F)

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

Đầu vào

  • Có thể được chuyển qua các đối số dòng lệnh, STDIN hoặc bất kỳ phương thức nhập liệu tiêu chuẩn nào khác được hỗ trợ bởi ngôn ngữ của bạn
  • Sẽ là một chuỗi có thể có hoặc không chứa zalgo hoặc các ký tự không phải ASCII khác

Đầu ra

Đầu ra phải là một chuỗi không chứa bất kỳ zalgo nào.

Các trường hợp thử nghiệm

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
⚡⃤       -> ⚡

Chấm điểm

Vì đây là , câu trả lời ngắn nhất bằng byte thắng.


3
Chuỗi có được đảm bảo chỉ chứa ASCII và / hoặc Zalgo không? Hoặc nó có thể chứa unicode khác?
DJMcMayhem

4
Điều gì về việc sử dụng hợp pháp của những nhân vật đó? Zalgo chỉ có khá nhiều khi những nhân vật đó xếp chồng lên nhau theo cách không bao giờ có ý định.
Draco18

@DJMcMayhem Chuỗi đầu vào có thể có các ký tự không phải ASCII khác không được xóa.
hoàn toàn là

1
@totallyhuman Tôi đã suy nghĩ một cách tiếp cận chung chung hơn: chỉ thoát y nếu có nhiều hơn một lần xuất hiện sau một ký tự "chuẩn". Điều đó là tốt nhưng a͕̰được tước bỏ a. (Cũng bây giờ, nhờ trình phát hiện biểu tượng cảm xúc, tôi muốn đặt dấu phụ trên biểu tượng cảm xúc ... 🤔̘͕̑ pfft, trông thật ngớ ngẩn)
Draco18s

2
Bạn nên thêm một số trường hợp thử nghiệm với đầu ra không phải ASCII.
xnor

Câu trả lời:


13

Võng mạc , 35 byte

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

Hãy thử trực tuyến!

Chỉ cần loại bỏ tất cả các ký tự trong phạm vi được đưa ra trong thử thách từ đầu vào. Tất nhiên, mã này không thể đọc được, nhưng về mặt khái niệm, mã này không khác biệt với thứ gì T`0-9A-Za-zđó sẽ xóa tất cả các ký tự chữ và số.


3
Có vẻ như vô địch với tôi.
Erik the Outgolfer

@EriktheOutgolfer Tôi không biết, tôi nghĩ Jelly có thể tạo ra phạm vi điểm mã hiệu quả hơn là chỉ liệt kê các ký tự.
Martin Ender

Thật ra tôi không nghĩ nó có thể.
Erik the Outgolfer

Tôi ngạc nhiên không có giải pháp Jelly nào.
hoàn toàn là

@icrieverytim ở đây , và rip nó lâu hơn. Tôi chưa tìm ra cách tạo ra các điểm mã hiệu quả hơn thế này: P
HyperNeutrino

7

Python 3 , 73 69 byte

-4 byte nhờ L3viathan.

Không chắc việc tham gia vào thử thách của chính mình có ổn hay không nhưng ... Đánh cắp regex và về cơ bản cũng là ý tưởng> < ngay từ câu trả lời của JS và Retina.

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

Hãy thử trực tuyến!


1
Lưu 4 byte bằng cách tạo một câu lệnh nhập bình thường.
L3viathan

Bạn đã quên cập nhật số byte.
xnor

@xnor Hả? Có vẻ đúng với tôi.
hoàn toàn là

@totallyhuman Sai lầm của tôi, đã bỏ lỡ rằng những char đó là đa bào.
xnor

Chà, thật công bằng khi nói rằng tôi đã đánh cắp phạm vi nhân vật từ câu trả lời của Retina. (Mặc dù cẩn thận, vì biên tập viên của tôi muốn loại bỏ zalgo cùng với `.)
Neil

4

JavaScript (ES6), 55 byte

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



4

PHP, 67 byte

ngắn hơn khi viết ra

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

Hãy thử trực tuyến!

PHP, 115 byte

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

Hãy thử trực tuyến!

PHP, 35 byte

Hợp lệ cho các Testcase đã cho, nó sẽ xóa tất cả các Marks

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

Hãy thử trực tuyến!


@FelixDombek Không, nó chỉ thay thế tất cả các Nhãn hiệu trong phạm vi đã cho mà không có gì
Jörg Hülsermann

3

Python 3, 127 118 byte

Bây giờ chỉ là một câu trả lời đơn giản, hãy xem nó có thể chơi được như thế nào.

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

Thay đổi:

  • Khi nào tôi sẽ biết rằng sự hiểu biết ngắn hơn công cụ chức năng (-9 byte).

0orkhông phải là một điều, vì vậy bạn phải sửa nó hoặc nó sẽ nâng lên SyntaxError.
Erik the Outgolfer

2
@EriktheOutgolfer Bạn đã thực sự kiểm tra nó? Không ném lỗi cho tôi trên cả Python 3 hay 2.
L3viathan

Ô đung rôi. Tôi bối rối một chút.
Erik the Outgolfer


2

APL (Dyalog Unicode) , 43 byte

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

Hãy thử trực tuyến!

PCRE R thay thế tất cả những người không có gì


Phiên bản 44 byte không sử dụng RegEx hoặc các ký tự lạ (và do đó là một byte cho mỗi ký tự):

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

Hãy thử trực tuyến! ⍳7 1 Lầu 7 (1 2 3 4 5 6 7)

2 6~⍨ ngoại trừ 2 và 6 (1 3 4 5 7)

16× nhân với 16 (16 48 64 80 112)

⍳¨ 1 Lọ mỗi (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16, 1 2 3 đường, 110

+ thêm phần bù vào mỗi danh sách (65056 65057 65058 ', 877 878 ​​879)

 tranh thủ (làm phẳng)

⎕UCS chuyển đổi thành ký tự Unicode tương ứng

⍞~ nhận văn bản nhập và loại bỏ tất cả các ký tự như vậy


2

Thạch , 32 byte

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

Hãy thử trực tuyến!

Giải trình

“Żȷ'⁺¦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 Không nhận ra tôi đã đặt câu hỏi này lên lol. Đó có phải là b65072những gì tôi nghĩ rằng nó là? : o
hoàn toàn là

@icrieverytim có nén danh sách số: D
HyperNeutrino

thạch chắc chắn là ngôn ngữ zalgo nhất. tôi tự hỏi điều gì sẽ xảy ra nếu bạn chạy chương trình theo mã riêng của nó? chỉnh sửa: tiếc là không có gì
rác không gian


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.