Це емоджи?


17

Я працював над цим додатком для iOS останнім часом, і я зіткнувся з (досить легко вирішуваною) проблемою: як визначити, чи є моя рядок лише з емоджи?

Ну, це твоя робота сьогодні!

Вхідні дані

Рядок. Якщо наявність символів Unicode для вас проблематично, ви можете використовувати інший розумний формат. Будь ласка, вкажіть, що ви робите, якщо ви робите щось інше, ніж звичайний рядок для отримання введення.

Вихідні дані

Роздрукуйте або поверніть значення truthy, якщо рядок введення містить лише емоджи, а значення фальси, якщо містить будь-які символи, крім емоджи.

Почекайте секунду ... що таке емоджи? 😅

Емоджи - персонаж, що потрапляє в ці діапазони:

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, чи пропонуєте ви посилання на фото тестових випадків чи щось інше?
Даніель

Ну, є емоджи, розповсюджені в усьому питанні, але я думаю, що єдині важливі з них є у тестових випадках, тому зображення лише тестових випадків спрацює.
ETHproductions

@ETHproductions, я додав посилання на фото тестових випадків
Даніель

Чи може введення бути числовим масивом кодових точок Unicode? Також, який діапазон символів / чисел може містити вхід?
Луїс Мендо

Відповіді:


2

Рубі , 61 56 + 1 = 62 57 47 байт

Використовує -nпрапор і приймає дані від STDIN. Принти 0для трюти та фальшивості nil.

-5 байт, тому що я чомусь спочатку думав, що рішення регулярного виразу не буде працювати ???

-10 байт від NieDzejkob за те, що помітив кодове перекриття, яке я пропустив: o

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

Спробуйте в Інтернеті!


1
47 байт, якщо об’єднати два діапазони в регулярному виразі.
NieDzejkob

1
Це 47, чи не так?
Асона Тухід

Так, я забув оновити рахунок, отримавши пропозицію від @NieDzejkob
Value Ink

10

Emojicode , 179 байт

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

Зателефонований, який приймає список цілих чисел, що представляють кодові точки, і повертає 1 або 0.

Спробуйте в Інтернеті!

Emojicode , 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

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

А, як це працює? У регулярному вираженні не вказані кодові точки жодних емоцій ...
NieDzejkob

@NieDzejkob Я вважаю, що JS використовує UTF-16 для Unicode, тому я думаю, що це байтні представлення UTF-16 цих кодових точок. Відповідь буде неповним , хоча, він не для 🛂🚀, ♔☺☠, і 🏐🎅🌝т.д., всі з яких мають бути truthy. Здається, перевіряють лише один діапазон із шести, про які згадує ОП.
sundar

1

Пітон, 87 байт

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

Спробуйте в Інтернеті!

Повертається 1як триєдке значення і Noneяк хибне значення.


Я "запозичив" ваш реджекс, сподіваюся, ви не заперечуєте;)
HyperNeutrino

Оскільки я розповів про це Value Ink, я вам теж скажу - перші дві групи в регулярному 🌀-🙏
виразі

1

Протон , 54 байти

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

Спробуйте в Інтернеті!

-9 байт (3 символи) завдяки NieDzejkob

"Запозичення" регексу Уріеля: P Це коротше завдяки незрозумілим особливостям Протона та літературних виразів.


Як я вже сказав Value Ink, перші дві групи в регулярному вираженні можна об'єднати через суміжні кодові точки:🌀-🙏
NieDzejkob

@NieDzejkob Як саме? Це дає мені помилки: tio.run/##KyjKL8nP@59m@z83sUBDP/rD/BkNuh/mT9//Yf4sEGP2/…
HyperNeutrino


0

QuadR , 47 байт

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

Спробуйте в Інтернеті!

Є…

''≡⍵ порожній рядок, ідентичний результату, коли…

[🌀-🙏🚀-🛿☀-➿︀-︀️] всі емоджи - це…

 замінено нічим

?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.