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 .


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!


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!


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


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.


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


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

?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.