Apakah ini emoji?

17

Saya telah bekerja pada aplikasi iOS ini baru-baru ini dan saya mengalami masalah (agak mudah dipecahkan): Bagaimana cara saya menentukan apakah string saya hanya terdiri dari emoji?

Nah, itu tugasmu hari ini!

Memasukkan

Sebuah benang. Jika keberadaan karakter unicode bermasalah bagi Anda, maka Anda dapat menggunakan format wajar yang berbeda. Silakan sebutkan apa yang Anda lakukan jika Anda melakukan sesuatu yang berbeda dari string biasa untuk mengambil input.

Keluaran

Cetak atau kembalikan nilai kebenaran jika string input hanya berisi emoji, dan nilai falsey jika berisi karakter apa pun selain emoji.

Tunggu sebentar ... apa itu emoji? ๐Ÿ˜…

Emoji adalah karakter yang termasuk dalam rentang ini:

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

(Kupikir)

Ini adalah ๐Ÿ”น ๐Ÿ”น, jadi kode terpendek dalam byte menangโ•

Uji kasus

"Is it an emoji? ๐Ÿค”" -> False
"๐Ÿ”นcode-golf๐Ÿ”น" -> False
"๐Ÿ˜ฎ ๐Ÿ˜ฅ ๐Ÿ˜จ ๐Ÿ˜ฉ ๐Ÿ˜ช" -> False
"I have no fancy emojis :(" -> False

"๐Ÿ˜Ž" -> True
"๐Ÿ˜Š๐Ÿ˜˜" -> True

Bagi Anda jiwa-jiwa miskin yang tidak bisa melihat emoji, ini adalah gambar dari kasus uji .

Daniel
sumber
2
Mungkin menyertakan versi (mungkin gambar) untuk mereka yang tidak dapat melihat emoji? ;-)
ETHproduk
@ ETHproductions, apakah Anda menyarankan saya menautkan ke foto kasus uji atau yang lainnya?
Daniel
Ya, ada emoji yang tersebar di seluruh pertanyaan, tapi saya kira satu-satunya yang sangat penting adalah dalam kasus uji, sehingga gambar hanya kasus uji akan bekerja.
ETHproduk
@ ETHproductions, saya menambahkan tautan ke foto test case
Daniel
Bisakah input menjadi array numerik dari titik kode Unicode? Juga, rentang karakter / angka apa yang dapat dimasukkan oleh input?
Luis Mendo

Jawaban:

2

Ruby , 61 56 + 1 = 62 57 47 byte

Menggunakan -nbendera dan mengambil input dari STDIN. Cetakan 0untuk kebenaran dan nilkepalsuan.

-5 byte karena untuk beberapa alasan saya awalnya berpikir solusi regex tidak akan berfungsi ???

-10 byte dari NieDzejkob karena memperhatikan titik kode yang tumpang tindih yang saya lewatkan: o

p$_=~/^[๐ŸŒ€-๐Ÿ™๐Ÿš€-๐Ÿ›ฟโ˜€-โžฟ๏ธ€-๏ธ€๏ธ]*$/

Cobalah online!

Nilai Tinta
sumber
1
47 byte jika Anda menggabungkan dua rentang di regex.
NieDzejkob
1
Itu 47 bukan?
Asone Tuhid
Ya saya lupa memperbarui skor setelah mendapatkan saran dari @NieDzejkob
Value Ink
10

Emojicode , 179 byte

๐Ÿ‡a๐Ÿจ๐Ÿš๐Ÿš‚โžก๐Ÿš‚๐Ÿ”‚n๐Ÿกa๐Ÿ‡๐ŸŠ๐ŸŽ‰๐ŸŽ‰โ—€n 9728๐ŸŽŠโ–ถn 10175โ—€n 65024๐ŸŽ‰๐ŸŽ‰๐ŸŽŠโ–ถn 65039โ—€n 127744๐ŸŽŠโ–ถn 128591โ—€n 128640โ–ถn 128767๐Ÿ‡๐ŸŽ0๐Ÿ‰๐Ÿ‰๐ŸŽ1๐Ÿ‰

Callable yang mengambil daftar bilangan bulat yang mewakili codepoint dan mengembalikan 1 atau 0.

Cobalah online!

Emojicode , 187 byte

๐Ÿ‡a๐Ÿ”กโžก๐Ÿ‘Œ๐Ÿ”‚i๐Ÿกa๐Ÿ‡๐Ÿฆn๐Ÿš‚i๐ŸŠ๐ŸŽ‰๐ŸŽ‰โ—€n 9728๐ŸŽŠโ–ถn 10175โ—€n 65024๐ŸŽ‰๐ŸŽ‰๐ŸŽŠโ–ถn 65039โ—€n 127744๐ŸŽŠโ–ถn 128591โ—€n 128640โ–ถn 128767๐Ÿ‡๐ŸŽ๐Ÿ‘Ž๐Ÿ‰๐Ÿ‰๐ŸŽ๐Ÿ‘๐Ÿ‰

Callable yang mengambil string dan mengembalikan boolean.

Cobalah online!

Tidak diikat dan dijelaskan

๐Ÿ‘ด 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 ๐Ÿ‘
 ๐ŸŽ๐Ÿ‘
๐Ÿ‰

Cobalah online!

NieDzejkob
sumber
1

JavaScript, 83 61 byte

-22 byte terima kasih kepada @Shaggy

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

Demo

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
sumber
1
61 byte:s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2
Shaggy
Eh, bagaimana cara kerjanya? Regex tidak menentukan titik kode emoji apa pun ...
NieDzejkob
@NieDzejkob Saya percaya JS menggunakan UTF-16 untuk Unicode, jadi saya kira ini adalah representasi byte UTF-16 dari codepoint tersebut. Jawabannya adalah tidak lengkap meskipun, gagal untuk ๐Ÿ›‚๐Ÿš€, โ™”โ˜บโ˜ , ๐Ÿ๐ŸŽ…๐ŸŒdll, yang semuanya harus truthy. Tampaknya untuk memeriksa hanya untuk satu rentang dari enam yang disebutkan OP.
sundar - Reinstate Monica
1

Python, 87 byte

lambda x:re.match('^[๐Ÿ˜€-๐Ÿ™๐ŸŒ€-๐Ÿ—ฟ๐Ÿš€-๐Ÿ›ฟโ˜€-โžฟ๏ธ€-๏ธ€๏ธ]*$',x)and 1
import re

Cobalah online!

Kembali 1sebagai nilai kebenaran dan Nonenilai palsu.

Uriel
sumber
Saya "meminjam" regex Anda, harap Anda tidak keberatan;)
HyperNeutrino
Karena saya memberi tahu Value Ink tentang hal itu, saya juga akan memberi tahu Anda - dua kelompok pertama di regex dapat digabung karena ๐ŸŒ€-๐Ÿ™
titik temu yang
1

Proton , 54 byte

map(/[๐ŸŒ€-๐Ÿ™๐Ÿš€-๐Ÿ›ฟโ˜€-โžฟ๏ธ€-๏ธ€๏ธ]/.match)+all

Cobalah online!

-9 byte (3 karakter) berkat NieDzejkob

"Meminjam" regex Uriel: P Ini lebih pendek berkat fitur kabur Proton dan regex literal

HyperNeutrino
sumber
Seperti yang saya katakan kepada Value Ink, dua grup pertama di regex dapat digabung karena codepoint yang berdekatan:๐ŸŒ€-๐Ÿ™
NieDzejkob
@NieDzejkob Bagaimana tepatnya? Ini memberi saya kesalahan: tio.run/##KyjKL8nP@59m@z83sUBDP/rD/BkNuh/mT9//Yf4sEGP2/โ€ฆ
HyperNeutrino
seperti ini
NieDzejkob
0

QuadR , 47 byte

''โ‰กโต
[๐ŸŒ€-๐Ÿ™๐Ÿš€-๐Ÿ›ฟโ˜€-โžฟ๏ธ€-๏ธ€๏ธ]

Cobalah online!

Adalahโ€ฆ

โ€ƒ''โ‰กโตโ€ƒstring kosong yang identik dengan hasil saat ...

โ€ƒ[๐ŸŒ€-๐Ÿ™๐Ÿš€-๐Ÿ›ฟโ˜€-โžฟ๏ธ€-๏ธ€๏ธ]โ€ƒsemua emoji adalah ...

โ€ƒโ€ƒdiganti dengan tidak ada

?

Adm
sumber