Có phải là một biểu tượng cảm xúc?


17

Gần đây tôi đã làm việc trên ứng dụng iOS này và tôi gặp phải một vấn đề (khá dễ giải quyết): Làm cách nào để xác định xem chuỗi của tôi chỉ bao gồm biểu tượng cảm xúc?

Vâng, đó là công việc của bạn ngày hôm nay!

Đầu vào

Một chuỗi. Nếu sự hiện diện của các ký tự unicode có vấn đề với bạn thì bạn có thể sử dụng một định dạng hợp lý khác. Vui lòng cho biết những gì bạn làm nếu bạn làm một cái gì đó khác với một chuỗi thông thường để lấy đầu vào.

Đầu ra

In hoặc trả về giá trị trung thực nếu chuỗi đầu vào chỉ chứa biểu tượng cảm xúc và giá trị falsey nếu nó chứa bất kỳ ký tự nào ngoài biểu tượng cảm xúc.

Đợi một chút ... biểu tượng cảm xúc là gì? 😅

Biểu tượng cảm xúc là một nhân vật nằm trong các phạm vi này:

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

(Tôi nghĩ)

Đây là 🔹 , vì vậy mã ngắn nhất tính bằng byte thắng❕

Các trường hợp thử nghiệm

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

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

Đối với bạn, những linh hồn đáng thương không thể nhìn thấy biểu tượng cảm xúc, đây là hình ảnh của các trường hợp thử nghiệm .


2
Có lẽ bao gồm một phiên bản (có thể là một hình ảnh) cho những người không thể nhìn thấy biểu tượng cảm xúc? ;-)
Sản phẩm ETH

@ETHproductions, bạn có đề nghị tôi liên kết đến một bức ảnh của các trường hợp thử nghiệm hay cái gì khác không?
Daniel

Chà, có những biểu tượng cảm xúc được lan truyền trong toàn bộ câu hỏi, nhưng tôi đoán những điều thực sự quan trọng duy nhất là trong các trường hợp thử nghiệm, vì vậy một hình ảnh của các trường hợp thử nghiệm sẽ hoạt động.
Sản phẩm ETH

@ETHproductions, tôi đã thêm một liên kết đến một bức ảnh về các trường hợp thử nghiệm
Daniel

Đầu vào có thể là một mảng số của các điểm mã Unicode không? Ngoài ra, phạm vi của các ký tự / số có thể chứa đầu vào?
Luis Mendo

Câu trả lời:


2

Ruby , 61 56 + 1 = 62 57 47 byte

Sử dụng -ncờ và nhận đầu vào từ STDIN. In 0cho sự thật và giả nil.

-5 byte vì ban đầu tôi nghĩ giải pháp regex sẽ không hoạt động ???

-10 byte từ NieDzejkob vì nhận thấy sự chồng chéo điểm mã mà tôi đã bỏ lỡ: o

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

Hãy thử trực tuyến!


1
47 byte nếu bạn hợp nhất hai phạm vi trong regex.
NieDzejkob

1
Đó không phải là 47 phải không?
Asone Tuhid

Vâng, tôi đã quên cập nhật điểm số sau khi nhận được đề xuất từ ​​@NieDzejkob
Ink Ink

10

Biểu tượng cảm xúc , 179 byte

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

Một cuộc gọi có thể lấy một danh sách các số nguyên đại diện cho các điểm mã và trả về 1 hoặc 0.

Hãy thử trực tuyến!

Biểu tượng cảm xúc , 187 byte

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

Một cuộc gọi có thể lấy một chuỗi và trả về một boolean.

Hãy thử trực tuyến!

Ung dung và giải thích

👴 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 👍
 🍎👍
🍉

Hãy thử trực tuyến!


1

JavaScript, 83 61 byte

-22 byte nhờ @Shaggy

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

Bản giới thiệu

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 byte:s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2
Xù xì

Uh, cái này hoạt động thế nào? Regex không chỉ định mật mã của bất kỳ biểu tượng cảm xúc nào ...
NieDzejkob

@NieDzejkob Tôi tin rằng JS sử dụng UTF-16 cho Unicode, vì vậy tôi đoán đây là các biểu diễn byte UTF-16 của các điểm mã đó. Câu trả lời là không đầy đủ, mặc dù nó không cho 🛂🚀, ♔☺☠, 🏐🎅🌝vv, tất cả trong số đó nên truthy. Dường như chỉ kiểm tra một trong số sáu phạm vi mà OP đề cập.
- Phục hồi Monica

1

Python, 87 byte

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

Hãy thử trực tuyến!

Trả về 1giá trị trung thực và Nonegiá trị giả.


Tôi "mượn" regex của bạn, hy vọng bạn không phiền;)
HyperNeutrino

Vì tôi đã nói với Value Ink về điều đó, tôi cũng sẽ nói với bạn - hai nhóm đầu tiên trong regex có thể được hợp nhất vì các mật mã liền kề:🌀-🙏
NieDzejkob

1

Proton , 54 byte

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

Hãy thử trực tuyến!

-9 byte (3 ký tự) nhờ NieDzejkob

"Mượn" regex của Uriel: P Điều này ngắn hơn nhờ các tính năng tối nghĩa của Proton và nghĩa đen regex


Như tôi đã nói với Value Ink, hai nhóm đầu tiên trong regex có thể được hợp nhất vì các điểm mã liền kề:🌀-🙏
NieDzejkob

@NieDzejkob Chính xác như thế nào? Nó mang lại cho tôi lỗi: tio.run/##KyjKL8nP@59m@z83sUBDP/rD/BkNuh/mT9//Yf4sEGP2/...
HyperNeutrino

như thế này
NieDzejkob

0

QuadR , 47 byte

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

Hãy thử trực tuyến!

Là…

''≡⍵ một chuỗi rỗng giống hệt với kết quả khi đào

[🌀-🙏🚀-🛿☀-➿︀-︀️] tất cả các biểu tượng cảm xúc là giáo dục

 thay thế bằng không có gì

?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.