ВІН НЕ ЗНАЄ - виклик залго


25

Напишіть програму або функцію, яка, даючи рядок, позбавить її від 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
@totallyhuman Я думав про більш загальний підхід: знімати лише, якщо після "стандартного" характеру виникає більше одного . Це добре, але a͕̰його позбавляють a. (Також тепер, завдяки детектору смайлів, я хочу поставити діакритику на емоджі ... 🤔̘͕̑ pfft, це виглядає нерозумно)
Draco18s

2
Вам слід додати кілька тестових випадків з не-ASCII виведенням.
xnor

Відповіді:


13

Сітківка , 35 байт

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

Спробуйте в Інтернеті!

Просто вилучає з вводу всі символи в діапазонах, заданих у виклику. Код, звичайно, нечитабельний, але він концептуально не відрізняється від чогось такого, T`0-9A-Za-zщо видалило б усі буквено-цифрові символи.


3
Мені здається досить неперевершеним.
Ерік Аутгольфер

@EriktheOutgolfer Я не знаю, я думаю, що Jelly, можливо, зможе генерувати діапазони кодових точок ефективніше, ніж просто перелічити символи.
Мартін Ендер

Насправді я не думаю, що це в змозі.
Ерік Аутгольфер

Я здивований, що ще немає рішення з желе.
повністюлюдсько

@icrieverytim тут , і зірвати його довше. Я не зрозумів, як генерувати кодові точки більш ефективно, ніж це: P
HyperNeutrino

7

Python 3 , 73 69 байт

-4 байти завдяки L3viathan.

Не впевнений, чи брати участь у вашому власному виклику добре чи ні, але ... Викрадіть регекс, а також ідею також> < прямо з відповідей JS і Retina.

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

Спробуйте в Інтернеті!


1
Збережіть 4 байти, зробивши це звичайною заявою про імпорт.
L3viathan

Ви забули оновити кількість байтів.
xnor

@xnor Так? Мені здається, що це правильно.
повністюлюдсько

@totallyhuman Моя помилка, пропустив, що ці чари є багатобайтовими.
xnor

Ну, справедливо сказати, що я вкрав діапазон символів з відповіді Ретіна. (Хоча з обережністю, оскільки мій редактор хотів видалити залго разом із `.)
Ніл

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 Ні, він замінює лише всі позначки в заданих діапазонах нічим
Jörg 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.
Ерік Аутгольфер

2
@EriktheOutgolfer Ви насправді це протестували? Не кидає для мене помилки ні на Python 3, ні на 2.
L3viathan

Авжеж. Я трохи розгубився.
Ерік Аутгольфер


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 Не зрозумів, що я зіткнувся з цим питанням хаха. Це те, b65072що я думаю, що це? : o
повністюлюдський

@icrieverytim так числове стиснення списку: D
HyperNeutrino

желе - це, безумовно, сама залго мова. мені цікаво, що буде, якби ви запустили програму за власним кодом? редагувати: на жаль нічого
космічний мотлох


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.