그는 아직 멀지 않다-잘고 도전


25

문자열이 주어진 경우 zalgo에서 문자열을 제거하는 프로그램이나 함수를 작성하십시오.

잘고

이 게시물에서 zalgo는 다음 유니 코드 범위의 문자로 정의됩니다.

  • 분음 부호 결합 (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
그 캐릭터를 합법적으로 사용하는 것은 어떻습니까? 잘 고는 그 캐릭터 들이 의도하지 않은 방식으로 서로 쌓일 때만 가능 합니다.
Draco18s

@DJMcMayhem 입력 문자열에 제거 할 수없는 다른 비 ASCII 문자가있을 수 있습니다.
완전히 인간적인

1
@totallyhuman 더 일반적인 접근 방식을 생각하고있었습니다 . "표준"문자 다음에 두 개 이상이 발생 하면 스트리핑 만합니다 . 즉는 괜찮지 만 a͕̰에 제거됩니다 a. (이모티콘 감지기 덕분에 이모 지에 분음 부호를 붙이고 싶습니다 ... ̘͕̑ pfft, 어리석게 보입니다)
Draco18s

2
비 ASCII 출력으로 일부 테스트 케이스를 추가해야합니다.
xnor

답변:


13

망막 , 35 바이트

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

온라인으로 사용해보십시오!

챌린지에서 주어진 범위의 모든 문자를 입력에서 간단히 제거합니다. 코드는 물론 읽을 수 없지만 코드는 개념적으로 T`0-9A-Za-z모든 영숫자를 삭제하는 것과 다르지 않습니다 .


3
나에게는 타의 추종을 불허하는 것 같습니다.
Outgolfer Erik

@EriktheOutgolfer 모르겠다. 젤리가 단순히 문자를 나열하는 것보다 코드 포인트 범위를보다 효율적으로 생성 할 수 있다고 생각합니다.
마틴 엔더

실제로 나는 그것이 가능하지 않다고 생각합니다.
Outgolfer Erik

아직 젤리 솔루션 이 없다는 것에 놀랐습니다 .
완전히 인간적인

@icrieverytim 여기 하고 더 이상 찢어 버립니다 . 나는 이것보다 코드 포인트를 더 효과적으로 생성하는 방법을 알지 못했다. : P
HyperNeutrino

7

파이썬 3 , 73 69 바이트

L3viathan 덕분에 -4 바이트

자신의 도전에 참여하는 것이 괜찮은지 확실하지 않지만 ... 정규식 과 본질적으로 아이디어를 훔쳤습니다 .

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

온라인으로 사용해보십시오!


1
일반적인 import 문으로 4 바이트를 절약하십시오.
L3via5

바이트 수를 업데이트하는 것을 잊었습니다.
xnor

@xnor 허? 나에게 맞는 것 같습니다.
완전히 인간적인

@ totallyhuman 내 실수는 그 문자가 멀티 바이트라는 것을 놓쳤다.
xnor

글쎄, 내가 Retina 답변에서 문자 범위를 훔쳤다고 말하는 것은 공정합니다. (그러나 편집자가 `. 와 함께 zalgo를 제거하고 싶었 기 때문에 .)
Neil

4

자바 스크립트 (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

파이썬 3, 127118 바이트

지금 당장 간단한 대답입니다. 골프가 얼마나 가능한지 봅시다.

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.
Outgolfer Erik

2
@EriktheOutgolfer 실제로 테스트 했습니까? 파이썬 3도 2도 나에게 오류를 발생시키지 않습니다.
L3viathan

아 맞다. 나는 약간 혼란 스러웠다.
Outgolfer Erik


2

APL (Dyalog Unicode) , 43 바이트

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

온라인으로 사용해보십시오!

PCRE R의 eplace 아무것도 모든


RegEx 또는 이상한 문자 리터럴을 사용하지 않는 44 바이트 버전 (따라서 문자 당 단일 바이트) :

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

온라인으로 사용해보십시오! ⍳7 1… 7 (12 34 5 6 7)

2 6~⍨ 2와 6을 제외하고 (1 3 4 5 7)

16× 16 곱하기 (16 48 64 80112)

⍳¨ 1… 각각 (12 34 5678 9 10 11 12 1314 15 16, 1 2 3…,… 110111112)

+ 각 목록에 오프셋 추가 (65056 65057 65058…,… 877878 879)

 입대하다

⎕UCS 해당 유니 코드 문자로 변환

⍞~ 텍스트 입력을 받고 그러한 문자를 모두 제거하십시오


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 yes 숫자 목록 압축 : D
HyperNeutrino

젤리는 확실히 가장 잘 언어입니다. 자체 코드로 프로그램을 실행하면 어떻게 될지 궁금합니다. 편집 : 불행히도 아무것도
우주 쓰레기


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.