Operasi pengucapan


24

Tantangan

Tulis fungsi atau program yang mengambil string yang terdiri dari satu atau lebih kata ganti orang subjektif , dipisahkan oleh tanda + , sebagai argumen. Keluaran harus berupa kata ganti tunggal, yaitu hasil dari relasi yang didefinisikan dalam paragraf berikutnya.

Tentu saja, silakan edit karena Anda ingin memperbaiki kesalahan tata bahasa yang pasti ada;)

Ini adalah tantangan kode-golf, sehingga kode terpendek menang.

Hubungan itu

Tujuan dari tugas ini adalah menerjemahkan dalam "matematika-berbicara" sesuatu yang kita gunakan setiap hari. Bagaimana kita berpikir tentang "Kamu dan aku"? Ya, "Kita", bukan? Jadi, jika inputnya adalah You+Ioutput harus berupa string We. Dengan lebih dari dua kata ganti, akan terlihat seperti: You+He+They->You

Relasi didefinisikan sebagai tabel ini:

      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

Masalah 'Kamu'

Seperti yang Anda lihat, saya bukan penutur bahasa Inggris asli. Dalam bahasa saya (Italia) ada perbedaan antara bentuk jamak Anda ( voi , dalam bahasa Italia) dan bentuk tunggal Anda ( tu ). Ketika saya memikirkan tantangan ini, saya tidak berpikir dalam bahasa Inggris, jadi ada masalah yang tidak mungkin dikenali jika saya menggunakan bentuk jamak atau tunggal. Untungnya (atau jelas?), Input / output tidak berubah di kedua bentuk, sehingga Anda dapat menggunakan salah satu dari mereka dan Anda akan membahas kedua kasus!

Tentang input

Masukan akan selalu dalam bentuk "Pronoun + Pronoun + Pronoun" ... kata ganti akan memiliki huruf pertama dalam huruf besar dan sisanya dalam huruf kecil. Plus tidak akan dikelilingi oleh spasi, hanya dengan kata ganti. Input kosong dimungkinkan dan hasilnya harus berupa output kosong.

Bonus

Sedikit bonus 15% jika program akan mengelola dua kata ganti baru: She and It . Mereka sama dengan Dia, jelas. Ingatlah bahwa relasi ini refleksif, jadi Dia -> Dia dan Itu -> Itu. Oleh karena itu, kombinasi apa pun yang hanya mencakup Dia, Dia atau Itu harus menghasilkan Mereka.

Contohnya

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, jika Anda berbicara tentang contoh Anda benar, saya akan menambahkan beberapa. Bagaimanapun, hubungan "plus" ini refleksif, jadi Dia + Dia adalah Dia, saya + saya adalah saya ....
Simone Chelo

5
Saya mendapat " I+I=I", karena hanya ada satu " I" dari pembicara yang diberikan. Tapi tidak bisakah " He+He=They"? Umumnya jika Anda mengatakan " He" dua kali dalam konstruksi ini, Anda merujuk pada dua subjek pria yang berbeda , bukan yang sama dua kali.
Darrel Hoffman

Banyak dialek bahasa Inggris memiliki padanan dengan voi . Di tangan saya, itu semua , dan digunakan dalam register resmi. Satu lain yang umum adalah kasih , meskipun saya tidak berpikir salah satu yang akan digunakan dalam pidato resmi benar-benar. Secara tradisional, Anda juga memiliki kamu , yang dikenal banyak orang karena itu umum dalam terjemahan Alkitab tertentu. Anda harus menambahkan di salah satu atau melemparkan engkau juga untuk benar-benar menggoyang.
user0721090601

Jawaban:


9

Retina, 62 61 56 53 52 byte

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

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

Golf lebih lanjut dan penjelasan datang kemudian.

4 langkah substitusi melakukan hal berikut:

  • apa pun berkali-kali itu sendiri
  • jika ada Kita atau Saya + hasilnya hasilnya adalah Kita
  • untuk hal lain yang mengandung Anda hasilnya adalah Anda
  • jika kita masih memiliki banyak bagian atau satu-satunya Mereka itu Mereka hanya Dia dan mereka yang dapat dibiarkan

Cobalah online di sini.

3 byte disimpan berkat Martin Büttner.


Kecuali untuk tahap terakhir, Anda dapat menggunakan .sebagai ganti \+, karena hanya karakter itulah yang diperbolehkan di depan huruf kapital atau setelahnya 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])

Penjelasan

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
)

Uji


Wow, saya suka pendekatan ini! Saya pikir saya membuat bonus yang sangat buruk, karena untuk mencapainya di sini Anda harus menambahkan 7 byte dalam array (", She, It") dan 28 dalam matriks, mencapai 165 -15% = 140 ...
Simone Chelo

2

Perl 5, 67 byte

79 byte sebenarnya, tapi ada bonus 15%.

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

2

Python 159 153 byte

EDIT : Terima kasih @ Pietu1998

Ini adalah terjemahan langsung dari jawaban 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]

Coba di sini


stidak perlu menjadi variabel, dan Anda dapat menghapus garis & ruang ekstra antara fordan r=garis. Juga, Anda mungkin ingin memeriksa apakah ini bisa lebih pendek sebagai suatu fungsi.
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]}

Fitur bonus: menangani banyak ekspresi pada baris perintah yang sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.