อิโมติคอนจดจำใบหน้า


25

เขียนโปรแกรมที่รับเป็นอิโมติคอนและ ouputs ถ้าอิโมติคอนมีความสุขหรือเศร้า

โปรแกรมยอมรับสตริงเป็นอินพุตหรือพารามิเตอร์และควรแสดงสตริง "Happy" หากอินพุตอยู่ในรายการไอคอนสื่อความสุขหรือ "เศร้า" หากอินพุตอยู่ในรายการไอคอนแสดงอารมณ์เศร้า

คุณสามารถสมมติว่าอินพุตเป็นอิโมติคอนที่ถูกต้อง (มีความสุขหรือเศร้า) เสมอโดยไม่มีที่ว่างหรือแท็บรอบ ๆ

ต่อไปนี้เป็นรายชื่ออีโมติคอนที่มีความสุขที่คั่นด้วยช่องว่าง:

:-) :) :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

Python ขนาด 86 ไบต์

ฉันควรจะถูกส่งเข้าคุก

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

ที่สั้นที่สุดที่ฉันสามารถทำได้คือเทียบเท่ากับคำตอบ CJam ของมาร์ตินดังนั้นฉันจึงตัดสินใจว่าจะซ่อนอิโมจิที่น่าเศร้าทั้งหมด (ลบตัวละครกลางถ้ามี) ลงในโค้ดด้านหลังของฉันและใช้__file__สูตรโกงของงูหลาม

Muahahaha


คิดดีมาก
edc65

จริงๆแล้วตอนนี้ฉันดูโค้ดของคุณแล้วจะลบช่องว่างหลังจากที่เครื่องหมายโคลอนช่วยอะไรหรือมันจะทำลายโปรแกรมหรือไม่
Beta Decay

6
ฉันชอบที่โปรแกรมมีอิโมติคอนของตัวเอง:c:
อเล็กซ์ A.

@BetaDecay มันจะพัง heheh
cjfaure

1
@AlexA ก็ยังมีเหล่านี้ถ้าคุณมองอย่างระมัดระวัง:8) (8 :] [:
cjfaure

16

CJam, 33 32 ไบต์

ขอบคุณ Dennis ที่ช่วยประหยัด 1 ไบต์

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

ดูเหมือนว่าสั้นกว่าที่จะทำสิ่งเดียวกันโดยไม่ต้อง regex ...

ทดสอบที่นี่

คำอธิบาย

สิ่งนี้อิงจากการสังเกตแบบเดียวกับคำตอบของจอประสาทตา แต่คราวนี้การจับคู่ใบหน้าที่มีความสุขนั้นไม่มีประโยชน์อะไรเลยเราจะจับคู่ใบหน้าที่เศร้าแทน วิธีการแก้ปัญหาเป็นอย่างอื่นเหมือนกันยกเว้นว่ามันไม่ได้ดำเนินการผ่านการทดแทน regex:

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
ว้าวให้โอกาสพวกเราที่เหลือกับ Martin: D
Beta Decay

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.ดี]:<อีโมติคอนใช้ปากเป็นหมวกเพียง แต่พูดว่า
Loovjo

@ Loovjo ยกเว้นไม่มี.หลังจาก "หมวก" ในคำตอบของฉัน ;) "... เป็นหมวกหรือตาในชุดอื่น (เฉพาะในชุดเดียวกัน)"
Martin Ender

8

JavaScript (ES6), 46

ใช้ regexp เพื่อค้นหาอีโมติคอนเศร้าที่มีจุดเริ่มต้นที่มีหรือลงท้ายด้วย>)]} <([{cหมายเหตุด้าน: regexps อื่น ๆ ที่นี่อาจสั้นกว่านี้ แต่ฉันไม่แน่ใจว่าจะเข้าใจมันหรือไม่

หมายเหตุปกติ: ทดสอบการเรียกใช้ตัวอย่างข้อมูลบนเบราว์เซอร์ที่สอดคล้องกับ EcmaScript 6 (โดยเฉพาะอย่างยิ่งChrome ที่ไม่ใช่รุ่นใหม่ล่าสุด แต่ไม่ใช่ MSIE ฉันทดสอบบน Firefox, Safari 9 แล้ว)

ข่าวใหญ่ดูเหมือนว่าฟังก์ชั่นลูกศรมาถึง Chrome ในที่สุด! 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>


ใช้งานได้ดีกับโครเมี่ยม
Glycerine

3
@Glycerine ตอนนี้ Chrome รู้จัก=>หรือไม่ ฉันพลาดข่าวนั้น
edc65

4

Julia, 87 69 bytes - บันทึกแล้ว 18 bytes ขอบคุณ Alex A.

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

2
คุณสามารถบันทึกพวงโดยใช้ ternary แทนของif/ elseและวางภายในประกอบไปด้วยการหลีกเลี่ยงการกำหนดprint t
Alex A.

4

Python 3 , 77 75 74 72 61 55 ไบต์

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

ลองออนไลน์!

มันทำงานยังไง

หากสตริงใบหน้าเริ่มต้นด้วย])>}หรือลงท้ายด้วย[(c<{มันจะเศร้ามิฉะนั้นก็มีความสุข Tuple ifการจัดทำดัชนีที่ใช้เป็น


1
ยินดีต้อนรับสู่ Programming Puzzles & Code Golf!
เดนนิส

การใช้ฟังก์ชั่นนั้นดีมาก ในทางตรงข้ามสมมติว่าอินพุต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)

อินพุตเป็นสตริงยิ้ม อักขระตัวแรกและตัวสุดท้ายจะถูกนำมาเปรียบเทียบเพื่อพิจารณาว่าเป็นเรื่องน่าเศร้าหรือไม่ ถ้าไม่มันก็มีความสุข

ฉันสามารถบันทึก 2 ไบต์โดยไม่แสดงผลใด ๆ แต่กำหนดให้ตัวแปรเริ่มต้นของ MATLAB (ans) แทนแล้วแสดง ans หลังจากคำสั่ง if แต่ฉันเชื่อว่ามันสามารถปรับปรุงได้อย่างใด

การปรับปรุง 2 ไบต์โดยการเปลี่ยนฟังก์ชั่น s (e),เป็นe = input (''); .


1

PowerShell, 92 ไบต์

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

คำพูดเล็กน้อย แต่เป็นโบนัสมันไม่ใช้ regex!

สิ่งนี้ใช้ประโยชน์จาก<string>.IndexOf()ฟังก์ชัน. NET ที่ส่งคืน-1หากไม่พบอักขระในสตริง ดังนั้นหากตัวอักษรตัวแรกไม่ใช่ตัวอักษร "ความสุข" ตัวอักษรตัวแรกIndexOf()จะเป็น -1 เช่นเดียวกันกับตัวอักษรตัวสุดท้าย ดังนั้นหากเป็นหน้าเศร้าIndexOf()s จะรวมเป็น -2 เสมอหมายถึง-eq-2คือ$TRUEและsadถูกพิมพ์ออกมา


ชุดโบนัส: PowerShell พร้อม Regex, 95 ไบต์

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

1

Python 3 , 75 ไบต์

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

ลองออนไลน์

การนำเข้า regex ทำให้มันยาวเกินไปรวมทั้งไม่สามารถใช้Noneเป็นดัชนีอาร์เรย์ได้ แต่ฉันชอบ regex :)


1

Java 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"

ของ Java String#matchesโดยปริยายเพิ่ม^...$เพื่อให้ตรงกับสตริงทั้งหมดซึ่งเป็นเหตุผลที่มันจะสั้นลงเพื่อตรวจสอบใบหน้าเศร้าแทนการตรวจสอบสำหรับใบหน้ามีความสุขชอบมากที่สุดคำตอบอื่น ๆ ทำด้วย.+[\\])D3>}]|[<\\[({].+(เพราะ regex ของฉันจะล้มเหลวในการ@MartinEnderคำตอบ Retina 'sเช่นเนื่องจาก กรณีทดสอบความสุข:c))

คำอธิบาย Regex:

^.+[\\[(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.