Czy to emoji?

17

Ostatnio pracuję nad tą aplikacją na iOS i napotkałem (raczej łatwo rozwiązany) problem: jak ustalić, czy mój ciąg znaków składa się tylko z emoji?

Cóż, to twoja praca dzisiaj!

Wejście

Ciąg Jeśli obecność znaków Unicode jest dla ciebie problematyczna, możesz użyć innego rozsądnego formatu. Proszę podać, co robisz, jeśli robisz coś innego niż zwykły ciąg znaków do pobierania danych wejściowych.

Wynik

Wydrukuj lub zwróć prawdziwą wartość, jeśli ciąg wejściowy zawiera tylko emoji, oraz wartość falsey, jeśli zawiera znaki inne niż emoji.

Chwileczkę ... co to jest emoji? 😅

Emoji to postać mieszcząca się w następujących zakresach:

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

(Myślę)

Jest to „ ”, więc wygrywa najkrótszy kod w bajtach❕

Przypadki testowe

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

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

Dla was biednych dusz, które nie widzą emoji, oto obraz przypadków testowych .

Daniel
źródło
2
Może zawierać wersję (może obraz) dla tych, którzy nie widzą emoji? ;-)
ETHproductions
@ETHproductions, czy sugerujesz link do zdjęcia przypadków testowych lub coś innego?
Daniel
Cóż, emoji są rozmieszczone w całym pytaniu, ale myślę, że jedyne naprawdę ważne są w przypadkach testowych, więc obraz tylko przypadków testowych będzie działał.
ETHproductions
@ETHproductions, dodałem link do zdjęcia przypadków testowych
Daniel
Czy dane wejściowe mogą być tablicą numeryczną punktów kodu Unicode? Jaki zakres znaków / cyfr może zawierać dane wejściowe?
Luis Mendo,

Odpowiedzi:

2

Rubin , 61 56 + 1 = 62 57 47 bajtów

Używa -nflagi i pobiera dane wejściowe z STDIN. Odbitki 0za prawdę i nilfałsz.

-5 bajtów, ponieważ z jakiegoś powodu początkowo myślałem, że rozwiązanie wyrażenia regularnego nie zadziała ???

-10 bajtów od NieDzejkob za zauważenie nakładania się punktu kodowego, które przegapiłem: o

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

Wypróbuj online!

Wartość tuszu
źródło
1
47 bajtów, jeśli scalisz dwa zakresy w wyrażeniu regularnym.
NieDzejkob,
1
To 47, prawda?
Asone Tuhid
Tak, zapomniałem zaktualizować wynik po otrzymaniu sugestii od @NieDzejkob
Value Ink
10

Emojicode , 179 bajtów

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

Odwołanie, które pobiera listę liczb całkowitych reprezentujących punkty kodowe i zwraca 1 lub 0.

Wypróbuj online!

Emojicode , 187 bajtów

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

Odwołanie, które pobiera ciąg znaków i zwraca wartość logiczną.

Wypróbuj online!

Nie golfił i wyjaśnił

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

Wypróbuj online!

NieDzejkob
źródło
1

JavaScript, 83 61 bajtów

-22 bajty dzięki @Shaggy

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

Próbny

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

Oliver
źródło
1
61 bajtów:s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2
Shaggy
Jak to działa? Wyrażenie regularne nie określa
współrzędnych kodowych
@NieDzejkob Wierzę, że JS używa UTF-16 dla Unicode, więc myślę, że są to reprezentacje bajtów UTF-16 tych współrzędnych kodowych. Odpowiedź jest niekompletny chociaż, to nie powiedzie 🛂🚀, ♔☺☠, 🏐🎅🌝itd., Z których wszystkie powinny być truthy. Wydaje się, że sprawdza tylko jeden z sześciu zakresów wspomnianych przez OP.
Sundar - Przywróć Monikę
1

Python, 87 bajtów

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

Wypróbuj online!

Zwraca 1jako wartość prawdziwości i Nonewartość fałszowania.

Uriel
źródło
„Pożyczałem” twoje wyrażenie regularne, mam nadzieję, że nie masz nic przeciwko;)
HyperNeutrino
Ponieważ powiedziałem o tym 🌀-🙏
firmie
1

Proton , 54 bajty

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

Wypróbuj online!

-9 bajtów (3 znaki) dzięki NieDzejkob

„Pożyczanie” wyrażenia regularnego Uriela: P Jest to krótsze dzięki niejasnym funkcjom Protona i literałom wyrażeń regularnych

HyperNeutrino
źródło
Jak powiedziałem Value Ink, dwie pierwsze grupy w wyrażeniu regularnym mogą zostać połączone z powodu sąsiadujących 🌀-🙏
punktów kodowych
@NieDzejkob Jak dokładnie? Daje mi błędy: tio.run
##
jak to
NieDzejkob,
0

QuadR , 47 bajtów

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

Wypróbuj online!

Jest…

''≡⍵ pusty ciąg identyczny z wynikiem, gdy…

[🌀-🙏🚀-🛿☀-➿︀-︀️] wszystkie emoji są…

 zastąpiony niczym

?

Adám
źródło