HE COMETH NOT - tantangan zalgo

25

Tulis program atau fungsi yang, diberi string, akan menghapusnya dari zalgo, jika ada.

Zalgo

Untuk posting ini, zalgo didefinisikan sebagai karakter apa pun dari rentang Unicode berikut:

  • Menggabungkan Tanda Diakritik (0300-036F)
  • Menggabungkan Tanda Diakritik Diperpanjang (1AB0–1AFF)
  • Menggabungkan Tambahan Tanda Diakritik (1DC0–1DFF)
  • Menggabungkan Tanda Diakritik untuk Simbol (20D0–20FF)
  • Menggabungkan Tanda Setengah (FE20 – FE2F)

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

Memasukkan

  • Dapat diteruskan melalui argumen baris perintah, STDIN, atau metode input standar lainnya yang didukung oleh bahasa Anda
  • Akan berupa string yang mungkin atau mungkin tidak mengandung zalgo atau karakter non-ASCII lainnya

Keluaran

Output harus berupa string yang tidak mengandung zalgo apa pun.

Uji Kasus

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

Mencetak gol

Karena ini adalah , jawaban tersingkat dalam byte menang.

benar-benar manusiawi
sumber
3
Apakah string dijamin hanya mengandung ASCII dan / atau Zalgo? Atau mungkin mengandung unicode lainnya?
DJMcMayhem
4
Bagaimana dengan penggunaan karakter tersebut secara sah? Zalgo cukup banyak hanya ketika karakter-karakter itu saling menumpuk dengan cara yang tidak pernah dimaksudkan.
Draco18s
@DJMcMayhem String input mungkin memiliki karakter non-ASCII lain yang tidak boleh dihapus.
sepenuhnya manusiawi
1
@ sebenarnya manusia saya sedang memikirkan pendekatan yang lebih umum: hanya menelanjangi jika lebih dari satu terjadi setelah karakter "standar". Itu baik-baik saja tetapi a͕̰akan dilucuti a. (Juga sekarang, berkat detektor emoji, saya ingin memberi diakritik pada emoji ... 🤔̘͕̑ pfft, yang terlihat konyol)
Draco18s
2
Anda harus menambahkan beberapa test case dengan output non-ASCII.
xnor

Jawaban:

13

Retina , 35 byte

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

Cobalah online!

Cukup hapus semua karakter dalam rentang yang diberikan dalam tantangan dari input. Tentu saja kode ini sangat tidak dapat dibaca, tetapi kode ini secara konseptual tidak berbeda dari sesuatu seperti T`0-9A-Za-zyang akan menghapus semua karakter alfanumerik.

Martin Ender
sumber
3
Tampaknya tak terkalahkan bagi saya.
Erik the Outgolfer
@EriktheOutgolfer Saya tidak tahu, saya pikir Jelly mungkin dapat menghasilkan rentang titik kode lebih efisien daripada hanya daftar karakter.
Martin Ender
Sebenarnya saya tidak berpikir itu bisa.
Erik the Outgolfer
Saya terkejut belum ada solusi Jelly.
manusiawi
@icrieverytim di sini , dan rip lebih lama. Saya belum menemukan cara untuk menghasilkan codepoint lebih efektif dari ini: P
HyperNeutrino
7

Python 3 , 73 69 byte

-4 byte terima kasih kepada L3viathan.

Tidak yakin apakah berpartisipasi dalam tantangan Anda baik-baik saja atau tidak, tetapi ... Mencuri regex dan intinya juga ide> < langsung dari jawaban JS dan Retina.

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

Cobalah online!

benar-benar manusiawi
sumber
1
Simpan 4 byte dengan menjadikannya pernyataan impor normal.
L3viathan
Anda lupa memperbarui jumlah byte.
xnor
@xnor Huh? Tampaknya benar bagi saya.
totallyhuman
@totallyhuman Kesalahan saya, melewatkan bahwa char itu multibyte.
xnor
Baiklah, adil untuk mengatakan bahwa saya mencuri rentang karakter dari jawaban Retina. (Dengan hati-hati, karena editor saya ingin menghapus zalgo bersama dengan `.)
Neil
4

JavaScript (ES6), 55 byte

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

Neil
sumber
4

Japt , 37 byte

r"[̀-ͯ᪰-᫿᷀-᷿⃐-⃿︠-︯]

Cobalah online!

Luke
sumber
4

PHP, 67 Bytes

lebih pendek sebagai tulisan

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

Cobalah online!

PHP, 115 Bytes

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

Cobalah online!

PHP, 35 Bytes

Berlaku untuk Testcases yang diberikan, menghapus semua Tanda

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

Cobalah online!

Jörg Hülsermann
sumber
@FelixDombek Tidak hanya menggantikan semua Marks dalam rentang yang diberikan dengan apa pun
Jörg Hülsermann
3

Python 3, 127 118 byte

Hanya jawaban langsung untuk saat ini, mari kita lihat seberapa bagus golf itu.

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

Changelog:

  • Kapan saya pernah belajar bahwa pemahaman lebih pendek dari hal-hal fungsional (-9 byte).
L3viathan
sumber
0orbukan sesuatu, jadi Anda harus memperbaikinya atau itu akan meningkat SyntaxError.
Erik the Outgolfer
2
@EriktheOutgolfer Apakah Anda benar-benar mengujinya? Tidak melempar kesalahan untuk saya pada Python 3 atau 2.
L3viathan
Oh benar Saya sedikit bingung.
Erik the Outgolfer
3

Bash + coreutils, 41

tr -d '̀-ͯ᪰-᫿᷀-᷿⃐-⃿︠-︯'

Cukup hapus karakter dalam rentang yang diberikan.

Cobalah online .

Trauma Digital
sumber
2

APL (Dyalog Unicode) , 43 byte

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

Cobalah online!

PCRE R mengganti semua yang tidak ada


Versi 44 byte tidak menggunakan RegEx atau literal karakter aneh (dan dengan demikian byte tunggal per karakter):

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

Cobalah online! ⍳7 1… 7 (1 2 3 4 5 6 7)

2 6~⍨ kecuali 2 dan 6 (1 3 4 5 7)

16× kalikan dengan 16 (16 48 64 80 112)

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

+ tambahkan offset ke setiap daftar (65056 65057 65058…,… 877 878 ​​879)

 minta (ratakan)

⎕UCS dikonversi ke karakter Unicode yang sesuai

⍞~ dapatkan input teks dan hapus semua karakter tersebut

Adám
sumber
2

Jelly , 32 byte

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

Cobalah online!

Penjelasan

“Żȷ'⁺¦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
HyperNeutrino
sumber
o0 Tidak sadar saya menabrak pertanyaan ini lol. Apakah itu b65072yang saya pikirkan? : o
totallyhuman
@icrieverytim ya kompresi daftar numerik: D
HyperNeutrino
jelly jelas merupakan bahasa yang paling zalgo. saya bertanya-tanya apa yang akan terjadi jika Anda menjalankan program dengan kode sendiri? sunting: sayangnya tidak ada
sampah luar angkasa
1

Java 8, 57 byte

s->s.replaceAll("[̀-ͯ᪰-᫿᷀-᷿⃐-⃿︠-︯]","")

Coba di sini.

Kevin Cruijssen
sumber