Tujuan dari tantangan ini adalah untuk menerima input dan output input tersebut tetapi dengan urutan kalimat terbalik. Input Contoh:
Hello friend. What are you doing? I bet it is something I want to do too!
Contoh Output:
I bet it is something I want to do too! What are you doing? Hello friend.
Seperti yang dapat Anda katakan dari contoh, program Anda harus berurusan dengan tanda tanya, poin seru, dan titik. Anda dapat menganggap setiap kalimat memiliki tanda baca dan spasi sebelum kalimat berikutnya. Trailing spasi / baris baru ok, asalkan bisa dibaca. Kode terpendek menang.
Semoga berhasil!
EDIT: Anda dapat mengasumsikan kalimat tidak memiliki tanda kutip atau tanda kurung, tetapi jika Anda membuat kode Anda dapat menangani keduanya, maka Anda mendapatkan -5 byte Contoh output untuk paren / kutipan:
"Hello, " she said. (I didn't know what she was talking about.) --> (I didn't know what she was talking about.) "Hello, " she said.
"Hello!" she said. (I hesitated. How should I respond? This is too much!) I responded, "Hi there. How are you? What is your cat's name?" without thinking any more about it.
Jawaban:
Julia,
4542 byte - 5 bonus = 37Ini menciptakan fungsi anonim yang menerima string sebagai input dan mengembalikan string dengan kalimatnya terbalik. Ini menangani setiap karakter khusus dengan tepat, meskipun tanda kutip ganda dan tanda dolar harus diloloskan, jika tidak mereka tidak memiliki string yang valid di Julia.
Penjelasan + tidak dikumpulkan:
Contoh:
Dan jika Anda tidak suka melihat kutipan yang keluar di output:
Disimpan 3 byte pada ekspresi reguler berkat Martin Büttner! Sebelumnya ini digunakan lookbehind a:
(?<=[.?!])
.sumber
CJam,
2322 byteSaya tidak yakin apakah ini memenuhi syarat untuk bonus atau tidak, tapi begini solusinya:
Ekspansi Kode (sedikit kedaluwarsa) :
Cobalah online di sini
sumber
J,
3532Ini hampir menangani input bonus, kecuali saya harus lolos dari tanda kutip tunggal, jadi saya kira itu tidak masuk hitungan. (Juga, pengiriman pertama saya di sini)
Pemakaian:
sumber
Perl, 27/25
Atau dari baris perintah:
sumber
perl -nE 'say reverse/ |[^.?!]*.\)?/g'
, sehingga jumlah total Anda menjadi 23.PHP, 60
sumber
[?!.]\K
saja?Bash + coreutils, 40 byte
Ini berbunyi dari STDIN sehingga masukan dapat saya arahkan kembali dari file, atau cukup pip, misalnya:
sumber
(foo bar.)
ditukar sebagai satu unit?Pip , 25 byte
Setelah menambahkan ruang untuk string input, kita menemukan semua indeks
.
,?
dan!
, tambahkan 2, dan menggunakan^@
split-pada operator untuk memecah string menjadi kalimat (masing-masing dengan ruang tambahan). Membalikkan daftar, dan dicetak secara otomatis di akhir program. Voa!Contoh yang menunjukkan tahapan perhitungan utama dengan input
A! B? C. D!
:sumber
Retina ,
61343330 byteKredit ke nutki untuk memotong ini sebanyak 24 byte.
Dimana
<empty>
singkatan dari baris kosong. Ini mengasumsikan bahwa#
itu bukan bagian dari input, tetapi jika itu tidak sah, saya dapat menukar dengan karakter lain, termasuk"
(yang saya hanya perlu menangani untuk bonus) atau sesuatu yang tidak patut dicetak. Anda dapat menjalankan kode seperti itu dalam satu file jika menggunakan-s
flag, atau Anda dapat meletakkan setiap baris dalam file terpisah dan meneruskannya ke Retina.Membalikkan ini dengan penggantian regex tunggal adalah mungkin, tetapi benar-benar rumit. Bahkan dengan grup .NET balancing, saya membutuhkan sekitar 90 byte, jadi saya mencoba melakukannya dalam beberapa langkah.
Di Retina, setiap pasangan garis adalah satu tahap penggantian, di mana garis pertama adalah pola dan garis kedua adalah penggantian.
Tahap ini hanya menyiapkan string untuk diproses lebih lanjut. Ini menambahkan a
#
sebagai penanda. Marker ini menunjukkan bahwa semua yang ada di depannya telah diletakkan di tempat yang tepat, dan semua yang setelah itu masih perlu diproses.Tahap ini bertukar kalimat, dengan berulang kali menggerakkan kalimat terakhir di depan
#
(yang bergerak maju melalui string dalam proses). The+`
menginstruksikan Retina mengulangi tahap ini sampai output berhenti berubah. Sebagai contoh, berikut adalah bagaimana inputfoo. bar! blah?
akan diproses:Dan akhirnya kita cukup menghapus penanda:
sumber
.+
=>$0 #
dan diulang(.*?[.!?] )(.*#)
=>$2$1
?Jawa, 113
sumber
JavaScript (ES6) 47
45Seperti yang dinyatakan, ini adalah latihan regex sederhana. Dalam javascript:
sumber
Python 2, 62
Tidak akan meningkatkan untuk bonus, karena itu mungkin tidak sebanding dengan biaya byte.
sumber
Matlab (93 byte)
sumber
Ruby 41
Jawaban Ruby lainnya tidak memiliki cukup WTF.
Ini setidaknya berfungsi di Ruby 2. Jika
a
danF
switch berfungsi di 1.8.7, saya kira Anda bisa drop$_=
untuk menyimpan tiga karakter.Membalikkan setiap baris di stdin dan mencetak ke stdout:
sumber
Ruby, 48 (42 tanpa put) byte
reverse_sentence.rb
Pemakaian:
Keluaran:
Criticism more than welcome.
sumber
.join(" ")
=>*" "
k, 31
.
sumber
C# - LINQPAD - 93 - 5 = 88 bytes
C# Console App 189 - 5 = 184 bytes
regex shamelessly flogged from Alex A. :)
sumber
namespace System
then within thatusing Linq;usingText.RegularExpressions
saving 2xsystem
.Clojure - 44
71charsImproved and simplified RE, eliminated unnecessary whitespace.
Output is a sequence of the sentences in the original string, with the order of the sentences reversed:
Input: "Hello friend. What are you doing? I bet it is something I want to do too!" Output: ("I bet it is something I want to do too!" "What are you doing?" "Hello friend.")
sumber
Ruby, 47
credits to Martin Büttner, for saving some characters.
sumber
gets
to save a byte, print it with$><<
to save byte (no need for a space) and join the string with*''
to save two bytes.CJam, 21 bytes
This works by turning spaces after
!
s,.
s and?
s into the number 1 (not the character 1 nor the character with code point 1, so the input can still contain those), splitting at 1's, reversing the order of the resulting chunks and joining by spaces.Try it online in the CJam interpreter.
How it works
sumber