Tantangan
Yah, saya pikir itu cukup jelas, bukan? Anda harus membuat fungsi atau program yang menggunakan string sebagai argumen dan menampilkan Yoda yang bisa berbicara.
Ini adalah kode-golf , jadi paling tidak jumlah byte yang menang.
Input
Input bisa berupa string apa saja tanpa linefeed. Anda dapat menerjemahkan string jika disusun seperti ini:
Subjek + Kata Kerja + Sesuatu yang lain.
Di mana Subjek adalah kata ganti orang (saya, kamu, dia, dia, itu, kita, mereka). Anda tidak harus mengenali bahwa kata kedua adalah kata kerja.
Jika kata pertama bukan kata ganti, input tersebut valid tetapi hasilnya akan menjadi Too difficult, this sentence is.
You have to win this code challenge -> Translatable
Luke has to win this code challenge -> Untranslatable
Input dapat diakhiri dengan huruf, a. atau a!, bukan dengan a?
Selanjutnya, string dapat berisi Non-Ascii, Parenthesis, koma, titik dua ...
Hasil
Dalam kasus kalimat yang dapat diterjemahkan, keluarannya adalah kalimat yang sama, dengan subjek dan kata kerja di akhir kalimat.
You have to win this code challenge -> To win this code challenge, you have.
Koma, titik, dan huruf kecil pada kata ganti adalah wajib. (Kecuali, tentu saja, jika kata ganti adalah aku).
Seperti yang dinyatakan sebelumnya, jika tidak dapat diterjemahkan Anda harus menampilkan string Too difficult, this sentence is.
Contohnya
You have to win this code challenge -> To win this code challenge, you have.
He won this code challenge -> This code challenge, he won. (I know this is not yoda-speaking, but I don’t want to overcomplicate this challenge)
I ate an ice cream earlier! -> An ice cream earlier, I ate.
I liked the Star Wars original trilogy more than the prequel’s one. -> The Star Wars original trilogy more than the prequel’s one, I liked.
I find your lack of faith disturbing -> Your lack of faith disturbing, I find.
I think we are done with the examples -> We are done with examples, I think.
He is your son, Vader -> Your son, Vader, he is.
I think they’ll add new features -> They’ll add new features, I think.
I made a fantastic code challenge (I hope) -> A fantastic code challenge (I hope), I made.
I love constants like π -> Constants like π, I love.
I’ll be the next President, I swear! -> Too difficult, this sentence is.
This challenge is great! -> Too difficult, this sentence is.
Is this challenge great? -> Too difficult, this sentence is.
Luke is not ready for this task -> Too difficult, this sentence is.
Somebody loves constants like π -> Too difficult, this sentence is.
[Empty string] -> Too difficult, this sentence is.
sumber
You have to win this code challenge
seharusnyaThis code challenge, you have to win
.!
? Apakah itu dijamin tidak akan terjadi atau haruskah kita menanganinya dan mencetak hal yang sama seperti ketika tidak ada kata ganti utama. Bisakah input berisi umpan baris? Apostrof? Colon / tanda kurung / backticks? Karakter non-ASCII? Anda mengatakan "input bisa berupa string apa saja ", tetapi kotak uji Anda hanya mencakup jenis string yang sangat spesifik.Jawaban:
Retina,
162137145134131129Banyak tanda baca sekarang ditangani dengan benar. Kasus cobaan:
You will not win this challenge...! -> Not win this challenge..., you will.
Cobalah secara Online!
Deskripsi:
Jika ada tanda baca pada akhirnya, hapus itu.
Ubah kata ganti menjadi huruf kecil, kecuali I.
Saring semua saluran yang tidak cocok
<Pronoun><space><word><space><word>...
Dibagi menjadi
pronoun + verb
,remainder
. Kemudian atur ulang.Ubah karakter pertama menjadi huruf besar.
Jika hasilnya kosong, itu tidak melewati filter di atas. Cetak pesan kesalahan.
sumber
[^ ]
mungkin bisa diganti dengan di\S
mana - mana, dan di regex pertama[^ ]+
bisa diganti dengan.+
. Di kelas karakter Anda tidak perlu melarikan diri.
jadi[.!]
berfungsi dengan baik. Juga, karena Anda tidak menukar urutan$1
dan$2
pada tahap ketiga, Anda dapat menangkapnya menjadi satu kelompok dan menyimpan 5 byte.([^I]|It)
dapat disingkat menjadi^\w\w
I|It
bisa menjadiI?
, jika Retina mendukung ituES6, 212
Ini mungkin bisa sedikit lebih jauh turun:
JSFiddle (membutuhkan browser terbaru seperti Chrome) atau menjalankannya melalui node.js
Tidak Disatukan:
sumber
I think they’ll add new features
-> kembaliThey, I think.
di Google Chrome 47.0.2526.106 m. Juga, itu tidak sukaI love constants like π
. Untuk menambahkan itu,I made a fantastic code challenge (I hope)
kembaliA fantastic code challenge , I made.
bukanA fantastic code challenge (I hope), I made.
^
ke awal regex Anda jika tidak kalimat dengan teks apa pun sebelum kata ganti masih akan diuraikan sebagai valid.JavaScript (ES6), 164 byte
Penjelasan
Hampir menyakitkan berapa banyak byte yang menggunakan huruf kapital dari huruf pertama dalam JavaScript ...
Uji
Tes tidak menggunakan tugas penataan untuk membuatnya lebih kompatibel lintas-browser.
Tampilkan cuplikan kode
sumber
^(((It?)|You|[HW]e|[ST]hey) \\S+) (.*?)[.!]?$
)? P [4] [0] .toUpperCase () + p [4] .slice (1) +, ${p[3]?p[1]:p[1].toLowerCase()}.
: "Terlalu sulit, kalimat ini adalah."It
tinggal dikapitalisasi dan juga cocokShey
bukanShe
.Python, 261 byte
Ternyata Python tidak keberatan hal-hal seperti
b[-1]in".!"
Selanjutnya saya akan bermain dengan objek pertandingan lebih banyak, jika tidak ada yang mengalahkan saya untuk itu :)sumber
b=b[:-1]
bagian itu.b=b[:-1]
di akhir baris denganif
. Anda dapat menghapus spasi dari setelah kembali pada baris terakhir. ini akan merusak kompatibilitas python3 dengan mengganti 2 spasi dengan tab dan 3 dengan tab dan spasiPython,
218217204 byteTidak yakin apakah ini bisa diturunkan lebih lanjut.
Tidak Disatukan:
sumber
s.split(' ')
kes.split()
dan'I|We|You|He|She|It|They'.split('|')
untuk'I We You He She It They'.split()
, menggantiif...else
dengan daftar boolean yang sama yang digunakan di tempat lain, mengubaht[0]in
ket[0]in
, menghapus lubang di sekitar pengembalianGNU sed, 129 byte
Saya menyertakan +1 byte untuk
-r
bendera.Penjelasan
Jika kami cocok dengan pemimpin
I
kami melompat ke label:Jika kami mencocokkan salah satu kata ganti lainnya, kami menurunkannya, lalu melompat ke label:
Kalau tidak, kita mencetak pesan kegagalan dan pindah ke jalur input berikutnya:
Jika kami melompat ke label, kami menghapus tanda baca terakhir:
dan menukar dua kata pertama dengan sisa kalimat, menggunakan huruf besar kata pertama yang baru dan menambahkan tanda baca yang diperlukan saat kita melakukannya:
sumber
You are
melewati baris pertama dan kedua tetapi tidak cocok dengan yang terakhir, jadi outputnyayou are
bukan pesan kesalahan. Tambahkan tanda centang...|They) \S+ \S/\L&/
pada dua baris pertama.