Это эмодзи?

17

Недавно я работал над этим приложением для iOS и столкнулся с (довольно легко решаемой) проблемой: как определить, состоит ли моя строка только из смайликов?

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

вход

Строка. Если наличие символов Юникод проблематично для вас, вы можете использовать другой разумный формат. Пожалуйста, укажите, что вы делаете, если вы делаете что-то отличное от обычной строки для ввода данных.

Выход

Выведите или верните истинное значение, если входная строка содержит только смайлики, и значение false, если оно содержит любые символы, кроме смайликов.

Секундочку ... что такое эмодзи? 😅

Emoji - это персонаж, который попадает в следующие диапазоны:

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, я добавил ссылку на фотографию тестовых случаев
Даниэль
Может ли input быть числовым массивом кодовых точек Unicode? Кроме того, какой диапазон символов / цифр может содержать ввод?
Луис Мендо

Ответы:

2

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

Использует -nфлаг и принимает данные от STDIN. Отпечатки 0для правды и nilфальши.

-5 байт, потому что по какой-то причине я изначально думал, что решение регулярных выражений не будет работать ???

-10 байт от NieDzejkob за то, что я заметил совпадение кодовой точки, которое я пропустил: 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 👍
 🍎👍
🍉

Попробуйте онлайн!

NieDzejkob
источник
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
Лохматый
Как это работает? Регулярное выражение не указывает кодовые точки для любых эмодзи ...
NieDzejkob
@NieDzejkob Я считаю, что JS использует UTF-16 для Unicode, поэтому я предполагаю, что это UTF-16-байтовые представления этих кодовых точек. Ответ будет неполным , хотя, он не для 🛂🚀, ♔☺☠, и 🏐🎅🌝т.д., все из которых должны быть truthy. Кажется, проверяется только один диапазон из шести, которые упоминает OP.
sundar - Восстановить Монику
1

Python, 87 байт

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

Попробуйте онлайн!

Возвращает 1как истинное значение и Noneкак ложное значение.

Уриэль
источник
Я "одолжил" ваше регулярное выражение, надеюсь, вы не возражаете;)
HyperNeutrino
Поскольку я рассказал об этом Value Ink, я вам тоже скажу - первые две группы в регулярном выражении могут быть объединены из-за смежных кодовых точек:🌀-🙏
NieDzejkob
1

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

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

Попробуйте онлайн!

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

«Заимствование» регулярного выражения Уриэля: P Это короче благодаря неясным функциям Протона и литералам регулярных выражений

HyperNeutrino
источник
Как я сказал Value Ink, первые две группы в регулярном выражении могут быть объединены из-за смежных кодовых точек:🌀-🙏
NieDzejkob
@NieDzejkob Как именно? Это дает мне ошибки: tio.run/##KyjKL8nP@59m@z83sUBDP/rD/BkNuh/mT9//Yf4sEGP2/…
HyperNeutrino
как это
NieDzejkob
0

QuadR , 47 байт

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

Попробуйте онлайн!

Является…

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

[🌀-🙏🚀-🛿☀-➿︀-︀️] все смайлики ...

 заменить ничем

?

Адам
источник