Bir emoji mi?


17

Son zamanlarda bu iOS uygulaması üzerinde çalışıyorum ve (oldukça kolay bir şekilde çözüldü) bir sorunla karşılaştım: Dizemin sadece emojilerden oluşup oluşmadığını nasıl belirleyebilirim?

Bugün işiniz bu!

Giriş

Dizi. Unicode karakterlerin varlığı sizin için sorunluysa, farklı bir makul biçim kullanabilirsiniz. Giriş almak için normal bir dizeden farklı bir şey yaparsanız lütfen ne yaptığınızı belirtin.

Çıktı

Giriş dizesi yalnızca emojiler içeriyorsa ve bir emoji dışında herhangi bir karakter içeriyorsa bir falsey değeri yazdırın veya döndürün.

Bir saniye ... emoji nedir? 😅

Bir emoji, bu aralıklara giren bir karakterdir:

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

(Bence)

Bu " ", bayttaki en kısa kod kazanır❕

Test senaryoları

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

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

Emojileri göremeyen fakir ruhlar için, burada test vakalarının bir görüntüsü var .


2
Belki emojiyi göremeyenler için bir versiyon (belki bir resim) içerir? ;-)
ETHproductions 7:16 '

@ETHproductions, test senaryolarının bir fotoğrafına veya başka bir şeye bağlantı oluşturmamı önerir misiniz?
Daniel

Tüm soruya yayılmış emojiler var, ama sanırım sadece gerçekten önemli olanlar test vakalarında, bu yüzden sadece test vakalarının bir görüntüsü işe yarayacak.
ETHproductions

@ETHproductions, test senaryolarının bir fotoğrafına bir bağlantı ekledim
Daniel

Giriş, Unicode kod noktalarının sayısal bir dizisi olabilir mi? Ayrıca, giriş hangi karakter / sayı aralığını içerebilir?
Luis Mendo

Yanıtlar:


2

Yakut , 61 56 + 1 = 62 57 47 bayt

-nBayrağı kullanır ve STDIN'den girdi alır. Baskılar 0truthy için ve nilfalsy için.

-5 bayt çünkü bazı nedenlerden dolayı normalde regex çözümünün işe yaramayacağını düşündüm ???

Kaçırdığım bir kod noktası çakışması fark için NieDzejkob -10 bayt : o

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

Çevrimiçi deneyin!


1
Normal aralıkta iki aralığı birleştirirseniz 47 bayt .
NieDzejkob

1
Bu 47 değil mi?
Asone Tuhid

Evet @NieDzejkob
Value Ink

10

Emoji kodu , 179 bayt

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

Kod noktalarını temsil eden ve 1 veya 0 döndüren tamsayıların listesini alan bir çağrılabilir.

Çevrimiçi deneyin!

Emoji kodu , 187 bayt

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

Bir dize alan ve bir boole döndüren bir callable.

Çevrimiçi deneyin!

Açık ve açık

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

Çevrimiçi deneyin!


1

JavaScript, 83 61 bayt

@Shaggy sayesinde -22 bayt

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

gösteri

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 bayt:s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2
Shaggy

Ah, bu nasıl çalışıyor?
Normal

@NieDzejkob JS, Unicode için UTF-16 kullandığına inanıyorum, bu yüzden bu kod noktalarının UTF-16 bayt gösterimleri olduğunu tahmin ediyorum. Bu sorunun cevabı için başarısız, eksik olsa 🛂🚀, ♔☺☠, 🏐🎅🌝hepsi de truthy olmalıdır vb. OP'nin bahsettiği altı aralığın sadece bir aralığını kontrol ediyor gibi görünüyor.
sundar - Monica'yı

1

Python, 87 bayt

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

Çevrimiçi deneyin!

İade 1truthy değeri olarak ve Nonefalsy değeri olarak.


Ben senin regex "ödünç", umursamıyorum umarım;)
HyperNeutrino

Değer Mürekkebini anlattığımdan beri, size de söyleyeceğim - normal ifadedeki ilk iki grup bitişik kod noktaları nedeniyle birleştirilebilir:🌀-🙏
NieDzejkob

1

Proton , 54 bayt

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

Çevrimiçi deneyin!

NieDzejkob sayesinde -9 bayt (3 karakter)

"Borçlanma" Uriel'in normal ifadesi: P Bu, Proton'un belirsiz özellikleri ve normal ifade değişmez değerleri sayesinde daha kısadır


Value Ink'e söylediğim gibi, normal 🌀-🙏
koddaki

@NieDzejkob Tam olarak nasıl? Bana hata veriyor: tio.run/##KyjKL8nP@59m@z83sUBDP/rD/BkNuh/mT9//Yf4sEGP2/…
HyperNeutrino

gibi bu
NieDzejkob

0

QuadR , 47 bayt

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

Çevrimiçi deneyin!

Dır-dir…

''≡⍵ boş bir dize sonucuyla aynı olduğunda…

[🌀-🙏🚀-🛿☀-➿︀-︀️] tüm emojiler…

 hiçbir şeyle değiştirilmedi

?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.