이모티콘 표정 인식


25

이모티콘이 행복하거나 슬픈 경우 이모티콘을 입력하고 출력하는 프로그램을 작성하십시오.

프로그램은 문자열을 입력 또는 매개 변수로 허용하고 입력이 행복 이모티콘 목록에 있으면 "happy"문자열을 표시하고 입력이 슬픈 이모티콘 목록에 있으면 "sad"문자열을 표시해야합니다.

입력이 항상 유효한 (행복하거나 슬픈) 이모티콘이며 공간이나 탭이없는 것으로 가정 할 수 있습니다.

다음은 공백으로 구분 된 행복한 이모티콘 목록입니다.

:-) :) :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, :')(행복)과 :@(화가) 에 대해 잊어 버렸습니다
Ismael Miguel

답변:


19

파이썬, 86 바이트

나는 감옥에 보내 져야한다.

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

내가 얻을 수있는 가장 짧은 것은 Martin의 CJam 답변과 동일했기 때문에 내 코드와 반대로 슬픈 이모티콘을 모두 숨기고 파이썬의 __file__부정 행위를 사용하기로 결정했습니다 .

무 하하하.


매우 잘 생각
edc65

사실, 이제 코드를 살펴보면 콜론이 도움이 된 후에 공백을 제거하거나 프로그램을 중단합니까?
Beta Decay

6
나는 프로그램이 자신의 이모티콘을 포함하는 것을 좋아한다 :c:
Alex A.

@BetaDecay 그것은 그것을 깰거야 heheh
cjfaure

1
@AlexA. 주의 깊게 보면 그것은 또한이있다 :8) (8 :] [:
cjfaure

16

CJam, 33 32 바이트

1 바이트를 절약 해 준 Dennis에게 감사합니다.

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

정규식없이 같은 일을하는 것이 더 짧은 것 같습니다 ...

여기에서 테스트하십시오.

설명

이것은 Retina 답변과 동일한 관찰을 기반으로하지만 이번에는 행복한 얼굴과 일치하는 것은 아무런 이점이 없으므로 대신 슬픈 얼굴을 일치시킵니다 (입이 적어지기 때문에). 솔루션은 정규식 대체를 통해 구현되지 않는다는 점을 제외하고는 완전히 동일합니다.

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
Woah, 나머지 사람들에게 Martin에게 기회를주세요. Martin : D
Beta Decay

10

망막 , 38 36 바이트

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

다른 이모티콘 세트 (모두 같은 세트에서만)로 모자 나 눈으로 사용되지 않았기 때문에 모든 이모티콘을 입으로 인식 할 수 있습니다. 행복한 사람은 입을 하나 더 고려해야하지만, 코가 아니라 입이 다른 세트에 전혀 나타나지 않는다는 이점이 있습니다 (반대가 사실이 아닙니다 : c슬픈 입이자 행복합니다) 코). 즉, 앵커 사용을 피할 수 있지만 입 반대편에 더 많은 캐릭터가 있는지 확인하십시오.

따라서 행복한 얼굴을위한 유효한 입은 ] ) D 3 > }오른쪽 또는 < [ ( {왼쪽에 있습니다. 우리는 그것들을 일치 .+[])D3>}]|[<[({].+시키고로 대체합니다 happy. 일치하지 않으면 문자열에 2 ~ 3 개의 문자 (이모티콘)가 있지만 일치하면 5 개 ( happy)가 있습니다. 두 번째 단계에서 두세 문자를로 바꿉니다 sad.


We can recognise all emoticons by their mouths, because none of the mouths is used as a hat.글쎄, ]:<이모티콘은 입으로 모자로 사용합니다.
Loovjo

@Loovjo .는 내 대답에 "모자" 가 없다는 것을 제외하고는 . ;) "... 다른 세트의 모자 또는 눈으로서 (동일 세트에서만)."
Martin Ender

8

자바 스크립트 (ES6), 46

로 그 시작에 슬픈 이모티콘, 찾기 위해 정규 표현식을 사용 >)]}하거나 끝나는을 <([{c. 참고 사항 : 다른 정규 표현식은 더 짧을 수 있지만 이해하지는 못합니다.

일반적인 참고 사항 : 시험은 어떤 ECMA 스크립트 6 호환 브라우저에서 미리보기를 실행 (특히 없습니다 . 최신 크롬하지만 MSIE을 나는 파이어 폭스에서 테스트, 사파리 9 갈 수있다)

빅 뉴스 화살표 기능이 마침내 크롬 랜드에 도착한 것 같습니다! Rel 45, 2015 년 8 월

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
@Glycerine은 이제 Chrome을 인식 =>합니까? 나는 그 소식을 놓쳤다
edc65

4

Julia, 87 69 바이트-Alex A 덕분에 18 바이트 절약

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

2
if/ 대신 삼항을 사용 else하고 삼항을 내부에 두어 print할당하지 않아도 무리를 절약 할 수 있습니다 t.
Alex A.

4

파이썬 3 , 77 75 74 72 61 55 바이트

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

온라인으로 사용해보십시오!

작동 원리

페이스 스트링이로 시작 ])>}하거나로 끝나는 [(c<{경우 슬프고 그렇지 않으면 행복합니다. 튜플 인덱싱이로 사용됩니다 if.


1
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다!
Dennis

기능을 사용하는 것은 완벽합니다. 반대로 입력이 이미 저장되어 있다고 가정하면 x허용되지 않습니다.
Dennis

3

Brachylog , 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

Python, 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)

입력은 스마일 문자열입니다. 첫 문자와 마지막 문자를 비교하여 슬픈 지 판단합니다. 그렇지 않다면 행복합니다.

두 가지 중 하나를 표시하지 않고 대신 MATLAB의 기본 변수 (ans)에 할당 한 다음 if 문 뒤에 an을 표시하여 2 바이트를 절약 할 수있었습니다. 그러나 나는 그것이 어떻게 든 향상 될 수 있다고 확신합니다.

함수 s (e)e = input ( '') 으로 변경하여 2 바이트 개선 ; .


1

PowerShell, 92 바이트

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

조금 장황하지만 보너스로 정규식을 사용하지 않습니다!

문자열에서 문자 찾지 못하면<string>.IndexOf() 반환 하는 .NET 함수를 활용 합니다. 따라서 첫 번째 문자가 "행복한"문자가 아닌 경우 첫 번째 문자는 마지막 문자와 마찬가지로 -1이됩니다. 따라서 슬픈 얼굴 인 경우 s는 항상 -2로 합산되어 is를 의미 하므로 인쇄됩니다.-1IndexOf()IndexOf()-eq-2$TRUEsad


보너스 변형 : Regex가 포함 된 PowerShell, 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.