เขามาไม่ได้ - ความท้าทาย zalgo


25

เขียนโปรแกรมหรือฟังก์ชั่นที่ให้สตริงจะดึงมันของ zalgo หากมีอยู่

Zalgo

สำหรับโพสต์นี้ zalgo ถูกกำหนดให้เป็นตัวละครจากช่วง Unicode ต่อไปนี้

  • การรวมเครื่องหมายการออกเสียง (0300–036F)
  • การรวมเครื่องหมายการออกเสียงเพิ่มเติม (1AB0–1AFF)
  • การรวมเครื่องหมายการออกเสียงเพิ่มเติม (1DC0–1DFF)
  • การรวมเครื่องหมายการออกเสียงสำหรับสัญลักษณ์ (20D0–20FF)
  • การรวมครึ่งมาร์ค (FE20 – FE2F)

https://en.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 เท่านั้นหรือไม่ หรือมันอาจมียูนิโค้ดอื่น ๆ ?
DJMcMayhem

4
สิ่งที่เกี่ยวกับการใช้งานที่ถูกต้องของตัวละครเหล่านั้น? Zalgo นั้นสวยมากก็ต่อเมื่อตัวละครเหล่านั้นเรียงซ้อนกันในแบบที่ไม่เคยตั้งใจ
Draco18s

@DJMcMayhem สตริงอินพุตอาจมีอักขระอื่นที่ไม่ใช่ ASCII ที่ต้องไม่ถูกลบ
ทั้งหมด

1
@tallyallyhuman ฉันกำลังคิดวิธีทั่วไปมากกว่า: ลอกเฉพาะถ้ามีมากกว่าหนึ่งเกิดขึ้นหลังจากตัวละคร "มาตรฐาน" นั่นคือเป็นดี แต่ได้รับการปล้นa͕̰ a(ตอนนี้ต้องขอบคุณเครื่องตรวจจับอิโมจิฉันต้องการที่จะวางกำกับบนอีโมจิ ... 🤔̘͕̑ pfft ที่ดูโง่)
Draco18s

2
คุณควรเพิ่มกรณีทดสอบด้วยเอาต์พุตที่ไม่ใช่ ASCII
xnor

คำตอบ:


13

เรติน่า 35 ไบต์

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

ลองออนไลน์!

เพียงลบอักขระทั้งหมดในช่วงที่กำหนดในการท้าทายจากอินพุต แน่นอนว่าโค้ดนั้นไม่สามารถอ่านได้สุดขีด แต่รหัสนั้นไม่มีแนวคิดที่แตกต่างจากสิ่งT`0-9A-Za-zที่จะลบตัวอักษรและตัวเลขทั้งหมด


3
ดูเหมือนว่าจะเอาชนะฉันไม่ได้
Erik the Outgolfer

@EriktheOutgolfer ฉันไม่รู้ฉันคิดว่า Jelly อาจสามารถสร้างจุดรหัสได้อย่างมีประสิทธิภาพมากกว่าการแสดงรายการอักขระ
Martin Ender

จริงๆแล้วฉันไม่คิดว่ามันจะเป็นไปได้
Erik the Outgolfer

ฉันประหลาดใจที่ไม่มีเจลลี่โซลูชั่น
สิ้นเชิงมนุษย์

@icrieverytim ที่นี่และตัดให้ยาวขึ้น ฉันไม่ได้คิดวิธีสร้าง codepoints ได้อย่างมีประสิทธิภาพมากกว่านี้: P
HyperNeutrino

7

Python 3 , 73 69 ไบต์

-4 ไบต์ขอบคุณ L3viathan

ไม่แน่ใจว่าการมีส่วนร่วมในการท้าทายของคุณเองนั้นโอเคหรือไม่ แต่ ... ขโมย regex และเป็นหลักความคิดเช่นกัน> <ตรงจากคำตอบของ JS และ Retina

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

ลองออนไลน์!


1
บันทึก 4 ไบต์ด้วยการทำให้คำสั่งนำเข้าปกติ
L3viathan

คุณลืมอัปเดตจำนวนไบต์
xnor

@xnor Huh? ดูเหมือนจะถูกต้องสำหรับฉัน
สิ้นเชิงมนุษย์

@tallyallyhuman ความผิดพลาดของฉันพลาดที่ตัวอักษรเหล่านั้นเป็นมัลติไบต์
xnor

มันยุติธรรมที่จะบอกว่าฉันขโมยช่วงตัวละครจากคำตอบที่จอประสาทตา (ด้วยการดูแล แต่เนื่องจากการแก้ไขของฉันต้องการที่จะลบ zalgo พร้อมกับ`.)
นีล



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 ไบต์

ใช้ได้สำหรับ Testcases ที่กำหนดซึ่งจะลบเครื่องหมายทั้งหมด

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

ลองออนไลน์!


@FelixDombek ไม่ได้แทนที่เฉพาะ Marks ทั้งหมดในช่วงที่กำหนดเท่านั้น
JörgHü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 ไบต์)

0orSyntaxErrorไม่ได้เป็นสิ่งเพื่อให้คุณได้มีการแก้ไขหรือมันจะยกระดับ
Erik the Outgolfer

2
@EriktheOutgolfer คุณจริง ๆ ทดสอบหรือไม่ อย่าโยนข้อผิดพลาดให้ฉันใน Python 3 หรือ 2
L3viathan

โอ้ใช่. ฉันสับสนเล็กน้อย
Erik the Outgolfer


2

APL (Dyalog Unicode) , 43 ไบต์

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

ลองออนไลน์!

PCRE Rแทนที่ทุกคนที่ไม่มีอะไรเลย


เวอร์ชัน 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 ไม่ทราบว่าฉันชนคำถามนี้ lol นั่นคือb65072สิ่งที่ฉันคิดว่ามันคืออะไร? : o
สิ้นเชิงมนุษย์

@icrieverytim ใช่การบีบอัดรายการตัวเลข: D
HyperNeutrino

เยลลี่เป็นภาษาซาลโกมากที่สุดอย่างแน่นอน ฉันสงสัยว่าจะเกิดอะไรขึ้นหากคุณรันโปรแกรมด้วยรหัสของตัวเอง แก้ไข: น่าเสียดายที่ไม่มีอะไร
ขยะอวกาศ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.