มันเป็นอิโมจิหรือไม่


17

ฉันได้ทำงานกับแอพ iOS เมื่อเร็ว ๆ นี้และฉันพบปัญหา (แก้ไขได้ค่อนข้างง่าย): ฉันจะทราบได้อย่างไรว่าสตริงของฉันประกอบด้วยอิโมจิเท่านั้น

นั่นคืองานของคุณวันนี้!

อินพุต

สตริง. หากการปรากฏตัวของ Unicode เป็นปัญหาสำหรับคุณคุณอาจใช้รูปแบบที่เหมาะสมอื่น โปรดระบุสิ่งที่คุณทำถ้าคุณทำบางสิ่งที่แตกต่างจากสตริงปกติสำหรับการป้อนข้อมูล

เอาท์พุต

พิมพ์หรือคืนค่าความจริงหากสตริงอินพุตมีเพียงอิโมจิและค่าเท็จถ้ามันมีตัวละครอื่น ๆ ที่นอกเหนือจากอิโมจิ

รอแป๊บนึง ... อิโมจิคืออะไร? 😅

อีโมจิเป็นตัวละครที่อยู่ในช่วงเหล่านี้:

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

(ฉันคิด)

นี่คือ🔹 code ดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ❕

กรณีทดสอบ

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

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

สำหรับคุณวิญญาณยากจนที่ไม่สามารถดูอีโมจินี่คือภาพของกรณีทดสอบที่


2
อาจรวมถึงรุ่น (อาจเป็นรูปภาพ) สำหรับผู้ที่ไม่เห็นอิโมจิ ;-)
ETHproductions

@ ETHproductions คุณแนะนำให้ฉันลิงค์ไปยังภาพถ่ายของกรณีทดสอบหรืออย่างอื่นหรือไม่?
แดเนียล

มีอิโมจิแพร่กระจายไปทั่วคำถามทั้งหมด แต่ฉันเดาว่ามีเพียงสิ่งที่สำคัญจริงๆเท่านั้นในกรณีทดสอบดังนั้นภาพของกรณีทดสอบจะทำงานได้
ETHproductions

@ETHproductions ฉันเพิ่มลิงก์ไปยังรูปภาพของกรณีทดสอบ
Daniel

อินพุตสามารถเป็นอาร์เรย์ตัวเลขของจุดโค้ด Unicode ได้หรือไม่? นอกจากนี้ยังมีอินพุต / อักขระจำนวนเท่าใด
Luis Mendo

คำตอบ:


2

Ruby , 61 56 + 1 = 62 57 47 ไบต์

ใช้-nแฟล็กและรับอินพุตจาก STDIN พิมพ์0เพื่อความจริงและnilเป็นเท็จ

-5 ไบต์เพราะด้วยเหตุผลบางอย่างฉันเริ่มคิดว่าโซลูชัน regex จะไม่ทำงาน ???

-10 ไบต์จากNieDzejkobสำหรับการสังเกตจุดรหัสทับซ้อนกันที่ฉันพลาด: o

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

ลองออนไลน์!


1
47 ไบต์ถ้าคุณรวมสองช่วงใน regex
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🍉

callable ที่รับรายการจำนวนเต็มแทน codepoints และส่งคืน 1 หรือ 0

ลองออนไลน์!

อิโมจิโคเดะ , 187 ไบต์

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

callable ที่ใช้สตริงและส่งคืนบูลีน

ลองออนไลน์!

Ungolfed และอธิบาย

👴 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

JavaScript, 83 61 ไบต์

-22 ไบต์ขอบคุณ@Shaggy

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 bytes:s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2
Shaggy

เอ่อทำงานนี้ได้อย่างไร Regex ไม่ได้ระบุ codepoints ของอิโมจิใด ๆ ...
NieDzejkob

@NieDzejkob ฉันเชื่อว่า JS ใช้ UTF-16 สำหรับ Unicode ดังนั้นฉันเดาว่านี่เป็นตัวแทน UTF-16 ไบต์ของ codepoints เหล่านั้น คำตอบคือไม่สมบูรณ์ แต่ก็ล้มเหลว🛂🚀, ♔☺☠, 🏐🎅🌝ฯลฯ ซึ่งทั้งหมดควรจะ truthy ดูเหมือนว่าจะตรวจสอบเพียงหนึ่งช่วงจากหกช่วงที่ OP ระบุไว้
sundar - Reinstate Monica

1

Python ขนาด 87 ไบต์

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

ลองออนไลน์!

ส่งคืน1ค่าNoneตามความเป็นจริงและเป็นค่าเท็จ


ฉัน "ยืม" regex ของคุณหวังว่าคุณจะไม่สนใจ;)
HyperNeutrino

เนื่องจากฉันบอก Value Ink เกี่ยวกับเรื่องนี้ฉันจะบอกคุณด้วย - สองกลุ่มแรกใน regex สามารถรวมกันได้เนื่องจาก codepoints ที่อยู่ติดกัน:🌀-🙏
NieDzejkob

1

โปรตอนขนาด 54 ไบต์

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

ลองออนไลน์!

-9 ไบต์ (3 ตัวอักษร) ขอบคุณ NieDzejkob

"การยืม" Uriel's regex: P สั้นลงเนื่องจากคุณสมบัติที่ไม่ชัดเจนของโปรตอนและตัวอักษร regex


ตามที่ฉันบอก Value Ink จะสามารถรวมสองกลุ่มแรกใน regex เนื่องจาก codepoints ที่อยู่ติดกัน:🌀-🙏
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.