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 .


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!


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!


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


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.


„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


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
##


0

QuadR , 47 bajtów

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

Wypróbuj online!

Jest…

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

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

 zastąpiony niczym

?

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.