이모 지인가요?


17

최근에이 iOS 앱에서 작업하고 있는데 (쉽게 해결되는) 문제가 발생했습니다. 문자열이 이모티콘만으로 구성되어 있는지 어떻게 확인합니까?

글쎄, 그것은 오늘 당신의 일입니다!

입력

문자열 유니 코드 문자가 문제가되는 경우 다른 합리적인 형식을 사용할 수 있습니다. 입력을 위해 일반 문자열과 다른 작업을 수행하는 경우 수행 할 작업을 알려주십시오.

산출

입력 문자열에 이모티콘 만 포함되어 있으면 참 값을, 또는 이모티콘 이외의 문자가 포함되어 있으면 거짓 값을 인쇄하거나 반환하십시오.

잠깐만 ... 이모 지란? 😅

그림 이모티콘은 다음과 같은 범위에 속하는 문자입니다.

0x1F600...0x1F64F  // Emoticons
0x1F300...0x1F5FF  // Misc Symbols and Pictographs
0x1F680...0x1F6FF  // Transport and Map
0x2600...0x26FF    // Misc symbols
0x2700...0x27BF    // Dingbats
0xFE00...0xFE0F    // Variation Selectors

(생각합니다)

이것은 🔹 🔹이므로 바이트 단위의 가장 짧은 코드가 승리합니다.

테스트 사례

"Is it an emoji? 🤔" -> False
"🔹code-golf🔹" -> False
"😮 😥 😨 😩 😪" -> False
"I have no fancy emojis :(" -> False

"😎" -> True
"😊😘" -> True

그림 이모티콘을 볼 수없는 불쌍한 영혼을 위해 여기에 테스트 사례 이미지가 있습니다 .


2
그림 이모티콘을 볼 수없는 사람들을위한 버전 (이미지 일 수도 있음)이 포함되어 있습니까? ;-)
ETHproductions

@ETHproductions, 테스트 사례의 사진 또는 다른 것에 대한 링크를 제안 하시겠습니까?
Daniel

글쎄, 전체 질문에 이모지가 퍼져 있지만 실제로 테스트 케이스에있는 유일한 중요한 것 같아서 테스트 케이스의 이미지가 효과가 있다고 생각합니다.
ETHproductions

@ETHproductions, 테스트 사례 사진에 대한 링크를 추가했습니다
Daniel

입력이 유니 코드 코드 포인트의 숫자 배열 일 수 있습니까? 또한 입력에 포함 할 수있는 문자 / 숫자 범위는 무엇입니까?
Luis Mendo

답변:


2

루비 , 61 56 + 1 = 62 57 47 바이트

-n플래그를 사용하고 STDIN에서 입력을받습니다. 0진실하고 허위로 인쇄 합니다 nil.

어떤 이유로 든 처음에는 정규식 솔루션이 작동하지 않는다고 생각했기 때문에 -5 바이트 ???

내가 놓친 코드 포인트 겹침에 주목하여 NieDzejkob 에서 -10 바이트 : o

p$_=~/^[🌀-🙏🚀-🛿☀-➿︀-︀️]*$/

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


1
정규식에서 두 범위를 병합하면 47 바이트 입니다.
NieDzejkob

1
47이 아닌가?
Asone Tuhid

예, @NieDzejkob에서 제안을받은 후 점수를 업데이트하는 것을 잊었습니다
Value Ink

10

이모티콘 코드 , 179 바이트

🍇a🍨🐚🚂➡🚂🔂n🍡a🍇🍊🎉🎉◀n 9728🎊▶n 10175◀n 65024🎉🎉🎊▶n 65039◀n 127744🎊▶n 128591◀n 128640▶n 128767🍇🍎0🍉🍉🍎1🍉

코드 포인트를 나타내는 정수 목록을 가져와 1 또는 0을 반환하는 호출 가능.

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

이모티콘 코드 , 187 바이트

🍇a🔡➡👌🔂i🍡a🍇🍦n🚂i🍊🎉🎉◀n 9728🎊▶n 10175◀n 65024🎉🎉🎊▶n 65039◀n 127744🎊▶n 128591◀n 128640▶n 128767🍇🍎👎🍉🍉🍎👍🍉

문자열을 가져 와서 부울을 반환하는 호출 가능.

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

언 골프 및 설명

👴 A callable that takes a 🔡 called input and returns a 👌
🍇 input 🔡 ➡ 👌
 👴 For each character in input
 🔂 character 🍡 input 🍇
  👴 Create a frozen called n containing the unicode codepoint of character
  🍦 n 🚂 character
  👴 If the value is in one of specific ranges, return 👎 (if the current character is not an emoji)
  🍊🎉🎉◀n 9728🎊▶n 10175◀n 65024🎉🎉🎊▶n 65039◀n 127744🎊▶n 128591◀n 128640▶n 128767🍇
   🍎 👎
  🍉
 🍉
 👴 Since we're here, all characters are an emoji, so return 👍
 🍎👍
🍉

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


1

자바 스크립트, 83 61 바이트

@Shaggy 덕분에 -22 바이트

s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2

데모

f=s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2

document.writeln(f("🔹code-golf🔹")) //false
document.writeln(f("😮 😥 😨 😩 😪")) //false
document.writeln(f("I have no fancy emojis :(")) //false
document.writeln(f("😎")) //true
document.writeln(f("😊😘")) //true


1
61 바이트 :s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2
Shaggy

어, 어떻게 작동합니까? 정규 표현식은 어떤 이모티콘의 코드 포인트를 지정하지 않습니다 ...
NieDzejkob

@ NieDzejkob JS가 유니 코드에 UTF-16을 사용한다고 생각하므로 이러한 코드 포인트의 UTF-16 바이트 표현이라고 생각합니다. 대답은 실패, 불완전하지만입니다 🛂🚀, ♔☺☠, 🏐🎅🌝모두 truthy해야한다 등. OP가 언급 한 6 개 중 하나의 범위 만 확인하는 것 같습니다.
sundar-복 직원 Monica

1

파이썬, 87 바이트

lambda x:re.match('^[😀-🙏🌀-🗿🚀-🛿☀-➿︀-︀️]*$',x)and 1
import re

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

반환 1truthy 값으로하고 Nonefalsy 값으로.


나는 당신의 정규식을 "빌린"당신이 생각하지 않았 으면)
HyperNeutrino

Value Ink에 대해 말 했으므로, 정규식의 처음 두 그룹은 인접한 코드 포인트로 인해 병합 될 수 있습니다.🌀-🙏
NieDzejkob

1

양성자 , 54 바이트

map(/[🌀-🙏🚀-🛿☀-➿︀-︀️]/.match)+all

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

NieDzejkob 덕분에 -9 바이트 (3 자)

"차용"Uriel의 정규 표현식 : P 이것은 프로톤의 모호한 기능과 정규 표현식 리터럴 덕분에 더 짧습니다.


Value Ink에 말한 것처럼 정규식의 처음 두 그룹은 인접한 코드 포인트로 인해 병합 될 수 있습니다.🌀-🙏
NieDzejkob

@NieDzejkob 정확히 어떻게? 그것은 나에게 오류를 제공합니다 tio.run/##KyjKL8nP@59m@z83sUBDP/rD/BkNuh/mT9//Yf4sEGP2/...
HyperNeutrino

같은
NieDzejkob

0

QuadR , 47 바이트

''≡⍵
[🌀-🙏🚀-🛿☀-➿︀-︀️]

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

...

''≡⍵ 다음과 같은 경우 결과와 동일한 빈 문자열

[🌀-🙏🚀-🛿☀-➿︀-︀️] 모든 이모티콘은…

 아무것도 대체하지 않았다

?

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