Hoạt động của đại từ


24

Các thách thức

Viết hàm hoặc chương trình lấy một chuỗi gồm một hoặc nhiều đại từ nhân xưng chủ quan , được phân tách bằng dấu + , làm đối số. Đầu ra phải là một đại từ duy nhất, đó là kết quả của mối quan hệ được xác định trong đoạn tiếp theo.

Tất nhiên, hãy thoải mái chỉnh sửa khi bạn muốn sửa những lỗi ngữ pháp chắc chắn có mặt;)

Đây là một thử thách chơi gôn, vì vậy mã ngắn nhất sẽ thắng.

Mối quan hệ

Mục tiêu của nhiệm vụ này là dịch trong "math-speak" thứ gì đó mà chúng ta sử dụng hàng ngày. Làm thế nào để chúng ta nghĩ về "Bạn và tôi"? Chà, "Chúng ta", phải không? Vì vậy, nếu đầu vào là You+Iđầu ra nên là chuỗi We. Với nhiều hơn hai đại từ, nó sẽ giống như: You+He+They->You

Mối quan hệ được định nghĩa như bảng này:

      I  You    He   We   You   They
I     I  We     We   We   We    We
You      You    You  We   You   You
He              He   We   You   They
We                   We   We    We
You                       You   You
They                            They

Vấn đề 'Bạn'

Chà, như bạn có thể thấy tôi không phải là người nói tiếng Anh bản ngữ. Trong ngôn ngữ của tôi (tiếng Ý) có sự khác biệt giữa số nhiều bạn ( với , trong tiếng Ý) và số ít bạn ( tu ). Khi tôi nghĩ thử thách này tôi đã không nghĩ bằng tiếng Anh, vì vậy có một vấn đề là không thể nhận ra nếu tôi sử dụng dạng số nhiều hay số ít. May mắn thay (hoặc rõ ràng?), Đầu vào / đầu ra không thay đổi trong cả hai hình thức, vì vậy bạn có thể sử dụng một trong số chúng và bạn sẽ bao gồm cả hai trường hợp!

Về đầu vào

Đầu vào sẽ luôn ở dạng "Đại từ + Đại từ + Đại từ" ... Các đại từ sẽ có chữ cái đầu tiên viết hoa và phần còn lại bằng chữ thường. Điểm cộng sẽ không được bao quanh bởi khoảng trắng, chỉ có đại từ. Đầu vào trống là có thể và kết quả phải là đầu ra trống.

Tiền thưởng

Một phần thưởng nhỏ 15% nếu chương trình sẽ quản lý hai đại từ mới: She and It . Họ giống như Ngài, rõ ràng. Hãy nhớ rằng mối quan hệ này là phản xạ, vì vậy Cô ấy -> Cô ấy và Nó -> Nó. Do đó, bất kỳ sự kết hợp nào chỉ bao gồm Cô, Anh hoặc Nó nên xuất ra Chúng.

Ví dụ

You+I          -> We
You+He+They    -> You
I+You+He+They  -> We
They           -> They
They+You       -> You
You+You+I+You  -> We

For Bonus
She            -> She
She+He         -> They
I+It+He        -> We
It+You         -> You

@Timwi, nếu bạn đang nói về những ví dụ bạn đúng, tôi sẽ thêm một vài ví dụ. Dù sao, mối quan hệ "cộng" này là phản xạ, vì vậy He + He is He, I + I is I ....
Simone Chelo

5
Tôi nhận được " I+I=I", vì chỉ có thể có một " I" từ một người nói nhất định. Nhưng không thể " He+He=They"? Nói chung nếu bạn nói " He" hai lần trong công trình này, bạn đang đề cập đến hai đối tượng nam khác nhau , không phải cùng một hai lần.
Darrel Hoffman

Nhiều phương ngữ của tiếng Anh có tương đương với . Trong tôi, nó là của bạn , và được sử dụng trong sổ đăng ký chính thức. Một người phổ biến khác là bạn , mặc dù tôi không nghĩ rằng người ta thực sự được sử dụng trong bài phát biểu chính thức. Theo truyền thống, bạn cũng có ngươi , cũng được biết đến nhiều bởi vì nó phổ biến trong các bản dịch Kinh Thánh nhất định. Bạn nên thêm vào một trong những thứ này hoặc ném vào bạn để thực sự làm mọi thứ rung chuyển.
user0721090601

Câu trả lời:


9

Võng mạc, 62 61 56 53 52 byte

(.+)\+(?=\1)

.*(W|.I|I.).*
We
.*Y.*
You
.{4,}
They

Tiếp tục chơi golf và giải thích đến sau.

4 bước thay thế làm như sau:

  • bất cứ điều gì nhiều lần là chính nó
  • nếu có bất kỳ Chúng tôi hoặc tôi + bất kỳ kết quả nào là Chúng tôi
  • cho bất cứ điều gì khác có chứa Bạn kết quả là Bạn
  • nếu chúng ta vẫn còn nhiều bộ phận hoặc duy nhất Họ chỉ là họ và họ có thể còn lại

Hãy thử trực tuyến tại đây.

3 byte được lưu nhờ Martin Büttner.


Ngoại trừ giai đoạn cuối, bạn có thể sử dụng .thay vì \+, vì đó là ký tự duy nhất được phép ở trước chữ in hoa hoặc sau I.
Martin Ender

6

JavaScript (ES6), 130 byte

s=>(a=",I,You,He,We,They".split`,`,m="012345014444042242042345044444042545",r=0,s.split`+`.map(p=>r=m[+m[a.indexOf(p)]+r*6]),a[r])

Giải trình

s=>(

  // a = array of each pronoun (including an empty string at index 0)
  a=",I,You,He,We,They".split`,`,

  // m = 6 x 6 map of pronoun indices for each combination of pronouns
  m="012345014444042242042345044444042545",

  r=0,                        // r = index of result pronoun
  s.split`+`.map(p=>          // for each pronoun in the input string
    r=m[+m[a.indexOf(p)]+r*6] // combine each pronoun with the previous one
  ),
  a[r]                        // return the resulting pronoun
)

Kiểm tra


Wow, tôi thích cách tiếp cận này! Tôi nghĩ rằng tôi đã kiếm được một phần thưởng rất kém, vì để đạt được nó ở đây, bạn phải thêm 7 byte trong mảng (", She, It") và 28 trong ma trận, đạt 165 -15% = 140 ...
Simone Chelo

2

Perl 5, 67 byte

79 byte thực sự, nhưng có phần thưởng 15%.

$a{$_}=""for split/[+\s]/,<>;@_=%a;say@_<3?@_:I~~@_||We~~@_?We:You~~@_?You:They

2

Python 159 153 byte

EDIT : Cảm ơn @ Pietu1998

Đây là bản dịch trực tiếp câu trả lời Javascript ES6:

a=",I,You,He,We,They".split(',')
m="012345014444042242042345044444042545"
r=0
for p in raw_input().split('+'):r=int(m[int(m[a.index(p)])+r*6])
print a[r]

Hãy thử nó ở đây


skhông cần phải là biến và bạn có thể xóa dòng & khoảng trắng thừa giữa dòng forr=dòng. Ngoài ra, bạn có thể muốn kiểm tra nếu điều này có thể ngắn hơn như là một chức năng.
PurkkaKoodari

1

Ruby, 150 136 131 119 111 byte

ARGV.each{|a|puts %w[We You I He They][a.bytes.inject(0){|m,c|m|({87=>15,73=>7,89=>11,84=>9,72=>8}[c]||0)}%5]}

Tính năng phần thưởng: xử lý nhiều biểu thức trên cùng một dòng lệnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.