इमोटिकॉन चेहरे की अभिव्यक्ति मान्यता


25

यदि इमोटिकॉन खुश या उदास है, तो एक प्रोग्राम लिखें जो एक इमोटिकॉन और ouputs को इनपुट के रूप में स्वीकार करता है।

कार्यक्रम इनपुट या पैरामीटर के रूप में एक स्ट्रिंग को स्वीकार करता है, और यदि इनपुट खुश इमोटिकॉन सूची में है, या "उदास" है तो इनपुट "इमोटिकॉन" सूची में स्ट्रिंग को "खुश" प्रदर्शित करना चाहिए।

आप मान सकते हैं कि इनपुट हमेशा एक वैध (खुश या उदास) इमोटिकॉन है, जिसमें कोई स्थान या टैब नहीं है।

यहाँ खुश इमोटिकॉन्स की एक अलग सूची है:

:-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D (-: (: (o: [: <: [= (8 (= {: (^:

यहाँ उदास इमोटिकॉन्स की एक अलग सूची है:

>:[ :-( :( :-c :c :-< :< :-[ :[ :{ 8( 8-( ]:< )-: ): >-: >: ]-: ]: }: )8 )-8

यह कोड-गोल्फ है, इसलिए सबसे छोटा कार्यक्रम जीतता है।


1
आप के बारे में भूल :'D, :')और (खुश) :@(गुस्से में)
इस्माइल मिगुएल

जवाबों:


19

पायथन, 86 बाइट्स

मुझे जेल भेजा जाना चाहिए।

x=lambda c: ["happy","sad"][c[0]+c[-1:]in open(__file__).read(88)[::-1]]#<][><:>{:}(:)

सबसे छोटा जो मैं साथ आ सकता था, वह मार्टिन के सीजेएम उत्तर के बराबर था, इसलिए मैंने फैसला किया कि मैं अपने कोड के पीछे सभी उदास इमोजीस (मध्यम चरित्र यदि कोई हो) को __file__छिपाऊंगा और पायथन के क्वीन चीट का उपयोग करूंगा।

Muahahaha।


बहुत अच्छी तरह से सोचा
edc65

दरअसल, अब जब मैं आपके कोड को देखता हूं, तो कोलन की किसी भी चीज की मदद करने के बाद अंतरिक्ष को हटा देगा, या यह सिर्फ कार्यक्रम को तोड़ देगा?
बीटा डेके

6
मुझे यह पसंद है कि कार्यक्रम में अपना स्वयं का इमोटिकॉन शामिल है:c:
एलेक्स ए।

@ BetaDecay इसे तोड़ देगा
hehh

1
@AlexA। यह भी इन है, अगर आप ध्यान से देखो:8) (8 :] [:
cjfaure

16

CJam, 33 32 बाइट्स

1 बाइट बचाने के लिए डेनिस को धन्यवाद।

q)"[(c<{"&\"])>}"&|"sad""happy"?

ऐसा लगता है कि यह रेगेक्स के बिना एक ही काम करने के लिए छोटा है ...

इसका परीक्षण यहां करें।

व्याख्या

यह रेटिना के उत्तर के समान अवलोकन पर आधारित है, लेकिन इस बार खुश चेहरों के मिलान का कोई लाभ नहीं है, इसलिए हम इसके बजाय उदास चेहरों से मेल खाएंगे (क्योंकि खाते में लेने के लिए एक कम मुंह है)। समाधान अन्यथा बिल्कुल वैसा ही है, सिवाय इसके कि इसे रेगेक्स प्रतिस्थापन के माध्यम से लागू नहीं किया गया है:

q)             e# Read input and split off last character.
"[(c<{"&       e# Set intersection with the sad right-hand mouths.
\              e# Pull up remaining emoticon.
"])>}"&        e# Set intersection with the sad left-hand mouths.
|              e# Set union, which amounts to a logical OR in this case.
"sad""happy"?  e# Pick the correct string.

7
वाह, हम में से बाकी को एक मौका दें मार्टिन: डी
बीटा डेके

10

रेटिना , 38 36 बाइट्स

.+[])D3>}]|[<[({].+
happy
^...?$
sad

हम सभी इमोटिकॉन्स को उनके मुंह से पहचान सकते हैं, क्योंकि किसी भी मुंह का उपयोग दूसरे सेट में केवल टोपी या आंखों के रूप में नहीं किया जाता है। खुश लोगों के खाते में लेने के लिए एक और मुंह होता है, लेकिन उन्हें यह लाभ होता है कि मुंह दूसरे सेट में बिल्कुल भी नहीं दिखाई देते हैं, नॉट्स के रूप में भी नहीं (विपरीत सच नहीं है: cदोनों एक उदास मुंह और एक खुश हैं नाक)। इसका मतलब है कि हम एंकर का उपयोग करने से बच सकते हैं लेकिन इसके बजाय यह सुनिश्चित करें कि मुंह के दूसरी तरफ अधिक वर्ण हों।

तो खुश चेहरों के लिए वैध मुंह ] ) D 3 > }दाईं ओर या < [ ( {बाईं ओर हैं। हम उन लोगों के साथ मेल खाते हैं .+[])D3>}]|[<[({].+और उनकी जगह लेते हैं happy। यदि हम मेल नहीं खाते हैं तो स्ट्रिंग (इमोटिकॉन) में दो या तीन अक्षर होंगे, लेकिन अगर हमने किया तो पाँच ( happy) होंगे। इसलिए एक दूसरे चरण में हम दो या तीन अक्षरों को बदलते हैं sad


We can recognise all emoticons by their mouths, because none of the mouths is used as a hat.खैर, ]:<इमोटिकॉन एक मुंह को टोपी के रूप में उपयोग करता है, बस कह रहा है।
लोवजो

@ लोजोवो .मेरे जवाब में "टोपी" के बाद नहीं है । ;) "... दूसरे सेट में एक टोपी या आंखों के रूप में (केवल एक ही सेट में)।"
मार्टिन एंडर

8

जावास्क्रिप्ट (ईएस 6), 46

उदास इमोटिकॉन्स को खोजने के लिए एक regexp का उपयोग करना, जो कि शुरुआत के साथ >)]}या अंत के साथ हैं <([{c। साइड नोट: यहां अन्य रेग्जाप्स छोटे हो सकते हैं लेकिन मुझे उन्हें समझना निश्चित नहीं है।

हमेशा की तरह ध्यान दें: परीक्षण किसी भी ECMAScript 6 अनुपालन करने वाले ब्राउज़र पर टुकड़ा चल (विशेष रूप से नहीं । नवीनतम क्रोम नहीं बल्कि MSIE मैं फ़ायरफ़ॉक्स पर परीक्षण किया, सफारी 9 जा सकते हैं)

बड़ी खबर यह लगता है कि तीर कार्य अंत में क्रोम भूमि पर आ गए! Rel 45, अगस्त 2015

F=s=>/^[\])}>]|[[({<c]$/.test(s)?'sad':'happy'

//Same length
X=s=>/[\])}>].|.[[({<c]/.test(s)?'sad':'happy'

Y=s=>s.match`].|[)}>].|.[[({<c]`?'sad':'happy'
                 
//TEST
out=x=>O.innerHTML+=x+'\n';

sad='>:[ :-( :( :-c :c :-< :< :-[ :[ :{ 8( 8-( ]:< )-: ): >-: >: ]-: ]: }: )8 )-8'.split` `
happy=':-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D (-: (: (o: [: <: [= (8 (= {: (^:'.split` ` 

out('The sad faces')                   
sad.forEach(x=>out(x + ' is ' + F(x)))
out('\nThe happy faces')
happy.forEach(x=>out(x + ' is ' + F(x)))
<pre id=O></pre>


क्रोम पर महान काम करता है
ग्लिसरीन

3
@ ग्लिसरीन तो अब क्रोम पहचान है =>? मुझे वह खबर याद है
edc65

4

जूलिया, 87 69 बाइट्स - एलेक्स ए के लिए 18 बाइट्स बचाए गए।

s=readline();print(s[end-1] in")D]3>}"||s[1] in"([<{"?"happy":"sad")

2
आप if/ के बजाय ternary का उपयोग करके एक गुच्छा बचा सकते हैं elseऔर printअसाइन करने से बचने के लिए अंदर ternary डाल सकते हैं t
एलेक्स ए।

4

पायथन 3 , 77 75 74 72 61 55 बाइट्स

lambda e:('happy','sad')[e[-1]in'[(c<{'or e[0]in'])>}']

इसे ऑनलाइन आज़माएं!

यह कैसे काम करता है

यदि एक चेहरे की स्ट्रिंग के साथ शुरू होता है ])>}या उसके साथ समाप्त होता है [(c<{, तो यह दुखद है, अन्यथा यह खुश है। Tuple Indexing को किस रूप में प्रयोग किया जाता है if


1
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है!
डेनिस

एक फ़ंक्शन का उपयोग करना पूरी तरह से ठीक है। इसके विपरीत, यह मानते हुए कि इनपुट पहले से ही संग्रहीत xहै, अनुमति नहीं है।
डेनिस

3

ब्रेकीलॉग , 50 बाइट्स

(rh{,"[(c<{":Im?};?h{,"])>}":Im?}),"sad".;"happy".

व्याख्या

(                              ),"sad".;"happy".  § If what's in the parentheses is true,
                                                  § output "sad", else output "happy".

 rhA                                              § Unify A with the last char of the input
    ,"[(c<{":ImA                                  § True if A is a char of "[(c<{"
                ;                                 § OR
                 ?hA                              § Unify A with the first char of the input
                    ,"])>}":ImA                   § True if A is a char of "])>}"

2

पायथन, 159 बाइट्स।

i,e=raw_input(),0
for c in i:e=(e,i.index(c))[c in":=8xXB"]
f,s,h=i[:e],i[e+1:],0
for c in f:h+=c in"[(c<{"
for c in s:h+=c in")]}>D"
print["Sad","Happy"][h>0]

2

MATLAB, 85 83 बाइट्स

यहां आकार को कम करने का एक तरीका होना चाहिए।

e=input('');if any([e(end)=='[(c<{',e(1)=='])>}']),'sad';else 'happy';end,disp(ans)

इनपुट एक स्माइली स्ट्रिंग है। पहले और आखिरी पात्रों की तुलना यह निर्धारित करने के लिए की जाएगी कि क्या यह दुखद है। यदि नहीं, तो यह खुश है।

मैं या तो प्रदर्शित नहीं करके 2 बाइट्स को बचाने में सक्षम था, लेकिन उन्हें MATLAB के डिफ़ॉल्ट चर (एन्स) के बजाय असाइन कर रहा था और अगर-स्टेटमेंट के बाद एएनएस प्रदर्शित कर रहा था। लेकिन मैं आश्वस्त हूं कि इसे किसी तरह सुधारा जा सकता है।

2 बदलकर सुधार बाइट्स समारोह रों (ई), करने के लिए ई = इनपुट ( '');


1

पॉवरशेल, 92 बाइट्स

param([char[]]$a)if("<[({".IndexOf($a[0])+"})D3]>".IndexOf($a[-1])-eq-2){"sad"}else{"happy"}

थोड़ी सी चिंता, लेकिन एक बोनस के रूप में, यह रेगेक्स का उपयोग नहीं करता है!

यह .NET <string>.IndexOf()फ़ंक्शन का लाभ लेता है जो स्ट्रिंग में -1वर्ण नहीं मिलने पर वापस लौटता है । इसलिए, यदि पहला वर्ण "खुश" चरित्र नहीं है, तो पहला IndexOf()- अंतिम वर्ण के लिए -1 होगा। तो, अगर यह एक उदास चेहरा है, तो IndexOf()एस हमेशा -2 का योग करेगा, जिसका अर्थ -eq-2है $TRUE, और इस प्रकार sadमुद्रित होता है।


बोनस संस्करण: पॉवरशेल विथ रेगेक्स, 95 बाइट्स

param([char[]]$a)if(($a[0]-match"[<\[\(\{]")-or($a[-1]-match"[\}\)D3\]>]")){"happy"}else{"sad"}

1

पायथन 3 , 75 बाइट्स

lambda y:"sad"if re.match("(.*[[(c<{]$)|(^[\])>}])",y)else"happy"
import re

इसे ऑनलाइन आज़माएं

रेगेक्स आयात इसे थोड़ा लंबा बनाता है, साथ ही Noneएक सरणी सूचकांक के रूप में उपयोग करने में असमर्थता । लेकिन मुझे रेगेक्स पसंद है :)


1

जावा 8, 52 बाइट्स

e->e.matches(".+[\\[(c<{]|[)>\\]}].+")?"sad":"happy"

इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

e->          // Method with String as both parameter return-type
  e.matches( ".+[\\[(c<{]|[)>\\]}].+")                   
             //  Checks if the input matches the regex
   ?"sad"    //  If it does: output "sad"
   :"happy"  //  Else: output "happy"

जावा का String#matchesनिहितार्थ ^...$पूरे स्ट्रिंग से मेल खाता है, यही कारण है कि ज्यादातर चेहरों के साथ खुश चेहरों के लिए जाँच करने के बजाय यह छोटा होता है जैसे कि अन्य जवाबों के साथ करते हैं .+[\\])D3>}]|[<\\[({].+(क्योंकि मेरा रेगेक्स @MartinEnder के रेटिना उत्तर में विफल हो जाएगा , उदाहरण के लिए, खुश परीक्षण मामला :c))।

रेगेक्स स्पष्टीकरण:

^.+[\\[(c<{]|[)>\\]}].+$
^                           Start of the string
 .+                          One or more characters,
   [\\[(c<{]                 followed by one of "[(c<{"
            |               Or
             [)>\\]}]        One of ")>]}",
                     .+      followed by one or more characters
                       $    End of the string
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.