Est-ce un emoji?

17

J'ai travaillé sur cette application iOS récemment et j'ai rencontré un problème (assez facile à résoudre): comment puis-je déterminer si ma chaîne est composée uniquement d'emojis?

Eh bien, c'est votre travail aujourd'hui!

Contribution

Un string. Si la présence de caractères unicode vous pose problème, vous pouvez utiliser un format raisonnable différent. Veuillez indiquer ce que vous faites si vous faites quelque chose de différent d'une chaîne régulière pour prendre des entrées.

Production

Affiche ou renvoie une valeur véridique si la chaîne d'entrée ne contient que des emojis, et une valeur falsey si elle contient des caractères autres que des emojis.

Attendez une seconde ... qu'est-ce qu'un emoji? 😅

Un emoji est un personnage qui se situe dans ces plages:

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

(Je pense)

C'est 🔹 🔹, donc le code le plus court en octets gagne❕

Cas de test

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

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

Pour vous pauvres âmes qui ne peuvent pas voir les emojis, voici une image des cas de test .

Daniel
la source
2
Peut-être inclure une version (peut-être une image) pour ceux qui ne peuvent pas voir les emojis? ;-)
ETHproductions
@ETHproductions, proposez-vous de créer un lien vers une photo des cas de test ou autre chose?
Daniel
Eh bien, il y a des emojis répartis sur toute la question, mais je suppose que les seuls vraiment importants sont dans les cas de test, donc une image des seuls cas de test fonctionnera.
ETHproductions
@ETHproductions, j'ai ajouté un lien vers une photo des cas de test
Daniel
L'entrée peut-elle être un tableau numérique de points de code Unicode? De plus, quelle plage de caractères / chiffres l'entrée peut-elle contenir?
Luis Mendo

Réponses:

2

Rubis , 61 56 + 1 = 62 57 47 octets

Utilise l' -nindicateur et prend l'entrée de STDIN. Imprime 0pour véridique et nilpour fausse.

-5 octets parce que pour une raison quelconque, je pensais initialement que la solution regex ne fonctionnerait pas ???

-10 octets de NieDzejkob pour avoir remarqué un chevauchement de points de code que j'ai manqué: o

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

Essayez-le en ligne!

Encre de valeur
la source
1
47 octets si vous fusionnez deux plages dans l'expression régulière.
NieDzejkob
1
C'est 47 n'est-ce pas?
Asone Tuhid
Oui, j'ai oublié de mettre à jour le score après avoir reçu la suggestion de @NieDzejkob
Value Ink
10

Emojicode , 179 octets

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

Appelable qui prend une liste d'entiers représentant les points de code et renvoie 1 ou 0.

Essayez-le en ligne!

Emojicode , 187 octets

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

Un appelable qui prend une chaîne et renvoie un booléen.

Essayez-le en ligne!

Non golfé et expliqué

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

Essayez-le en ligne!

NieDzejkob
la source
1

JavaScript, 83 61 octets

-22 octets grâce à @Shaggy

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

Démo

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
la source
1
61 octets:s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2
Shaggy
Euh, comment ça marche? Le regex ne spécifie les points de code d'aucun emoji ...
NieDzejkob
@NieDzejkob Je crois que JS utilise UTF-16 pour Unicode, donc je suppose que ce sont les représentations d'octets UTF-16 de ces points de code. La réponse est incomplète cependant, il échoue pour 🛂🚀, ♔☺☠, 🏐🎅🌝etc., qui devraient tous être truthy. Il semble ne vérifier qu'une seule plage sur les six mentionnées par OP.
sundar
1

Python, 87 octets

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

Essayez-le en ligne!

Renvoie 1une valeur véridique et Noneune valeur fausse.

Uriel
la source
J'ai "emprunté" votre expression régulière, j'espère que cela ne vous dérange pas;)
HyperNeutrino
Depuis que j'en ai parlé à Value Ink, je vais vous le dire aussi - les deux premiers groupes de l'expression régulière peuvent être fusionnés en raison de points de code adjacents:🌀-🙏
NieDzejkob
1

Proton , 54 octets

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

Essayez-le en ligne!

-9 octets (3 caractères) grâce à NieDzejkob

"Emprunter" l'expression régulière d'Uriel: P Ceci est plus court grâce aux fonctionnalités obscures et aux littéraux d'expression rationnelle de Proton

HyperNeutrino
la source
Comme je l'ai dit à Value Ink, les deux premiers groupes de l'expression régulière peuvent être fusionnés en raison de points de code adjacents:🌀-🙏
NieDzejkob
@NieDzejkob Comment exactement? Cela me donne des erreurs: tio.run/##KyjKL8nP@59m@z83sUBDP/rD/BkNuh/mT9//Yf4sEGP2/…
HyperNeutrino
comme ça
NieDzejkob
0

QuadR , 47 octets

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

Essayez-le en ligne!

Est…

''≡⍵ une chaîne vide identique au résultat lorsque ...

[🌀-🙏🚀-🛿☀-➿︀-︀️] tous les emojis sont…

 remplacé par rien

?

Adam
la source