絵文字ですか?


17

私は最近このiOSアプリで作業していて、(かなり簡単に解決した)問題に遭遇しました:私の文字列が絵文字のみで構成されているかどうかをどのように判断しますか?

まあ、それは今日のあなたの仕事です!

入力

文字列。Unicode文字の存在に問題がある場合は、別の妥当な形式を使用できます。入力を取得するために通常の文字列とは異なる何かをした場合、何をするかを述べてください。

出力

入力文字列に絵文字のみが含まれる場合は真理値を出力するか、絵文字以外の文字が含まれる場合は偽値を返します。

ちょっと待って...絵文字って何?😅

絵文字は、次の範囲に含まれるキャラクターです。

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

(おもう)

これは🔹code isなので、バイト単位の最短コードが勝ちます❕

テストケース

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

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

絵文字が表示されない貧しい人々のために、テストケースの画像を次に示します


2
おそらく、絵文字を見ることができない人のためのバージョン(おそらく画像)を含めますか?;-)
ETHproductions 16

@ETHproductions、テストケースの写真などにリンクすることをお勧めしますか?
ダニエル

さて、質問全体に絵文字が広がっていますが、本当に重要なのはテストケースのみであるため、テストケースだけのイメージが機能すると思います。
ETHproductions 16

@ETHproductions、テストケースの写真へのリンクを追加しました
ダニエル

入力はUnicodeコードポイントの数値配列にできますか?また、入力にはどの範囲の文字/数字を含めることができますか?
ルイスメンドー

回答:


2

ルビー61 56 + 1 = 62 57 47バイト

-nフラグを使用し、STDINから入力を受け取ります。プリント0truthyためとnilfalsyため。

なんらかの理由で正規表現ソリューションが機能しないと最初に思ったため、-5バイト?

NieDzejkobから-10バイト、コードポイントのオーバーラップに気付いたので見逃しました:o

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

オンラインでお試しください!


1
正規表現の2つの範囲をマージする場合は47バイト
NieDzejkob

1
それは47ですよね?
アソーヌトゥヒド

ええ、@ NieDzejkob
Value Ink

10

絵文字コード、179バイト

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

コードポイントを表す整数のリストを受け取り、1または0を返す呼び出し可能オブジェクト。

オンラインでお試しください!

絵文字コード、187バイト

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

文字列を取り、ブール値を返す呼び出し可能オブジェクト。

オンラインでお試しください!

非ゴルフと説明

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

オンラインでお試しください!


1

JavaScript、83 61バイト

@Shaggyのおかげで-22バイト

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

デモ

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バイト:s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2
シャギー

ええと、これはどのように機能しますか?正規表現は...どんな絵文字のコードポイントを指定していない
NieDzejkob

@NieDzejkob JSはUnicodeにUTF-16を使用していると思うので、これらはそれらのコードポイントのUTF-16バイト表現だと思います。その答えは、それがために失敗し、不完全しかしである🛂🚀♔☺☠🏐🎅🌝すべてがtruthyあるべき、など。OPが言及している6つの範囲のうち1つの範囲のみをチェックするようです。
スンダ-復活モニカ

1

Python、87バイト

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

オンラインでお試しください!

戻り値1truthy値としておよびNonefalsy値として。


私はあなたの正規表現を「借りました」、あなたが気にしないことを望みます;)
HyperNeutrino

私はそれについてバリューインクを告げたので、私もあなたを教えてあげましょう-正規表現の最初の2つのグループがあるため、隣接するコードポイントをマージすることができます:🌀-🙏
NieDzejkob

1

プロトン、54バイト

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

オンラインでお試しください!

-9バイト(3文字)NieDzejkobのおかげ

Urielの正規表現を「借りる」:Pこれは、Protonのあいまいな機能と正規表現リテラルのおかげで短くなります。


:私は価値のインクを語ったとして、正規表現の最初の2つのグループがあるため、隣接するコードポイントをマージすることができます🌀-🙏
NieDzejkob

@NieDzejkobどのように正確に?エラーが発生します:tio.run
##KyjKL8nP@59m@

以下のようなこの
NieDzejkob

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.