Dalam Dyalog APL Extended @ Adám , operator (bawah) berarti konjugasi: menerapkan satu fungsi, lalu fungsi kedua, lalu kebalikan dari yang pertama. Sangat menyenangkan untuk memikirkan tindakan kehidupan nyata dalam hal konjugasi:⍢
Masalah ditransformasikan oleh g ke domain lain yang lebih mudah diselesaikan oleh f, dan kemudian ditransformasikan kembali ke domain asli. Contoh dari kehidupan nyata adalah "di bawah anestesi":
apply anesthetics perform surgery wake up from anesthetics
Tantangan
Kebalikan dari suatu baris g
adalah "un" yang diawali dengan g
, dan sebaliknya. Tentukan setiap garis antara s
dan kebalikannya, dalam urutan itu, sebagai "bawah" s
. Untuk setiap baris f
dalam input secara berurutan:
- Jika
f
dan kebalikannya terjadi, jangan lakukan apa pun - Jika
f
tidak "di bawah" tindakan lain, cetakf
- Jika
f
berada "di bawah" sebuah garisg
, cetak dif + " under " + g
mana+
rangkaian.
Memasukkan
String multiline nonempty, atau daftar string, dll., Yang terdiri dari spasi dan huruf kecil (Anda bisa menggunakan huruf besar). Tepat satu baris akan dimulai dengan "un"; dan itu akan menjadi kebalikan dari beberapa baris lainnya. Tidak ada baris yang kosong.
Keluaran
Keluaran dalam format yang sama dengan yang Anda masukkan, atau sebagaimana diizinkan oleh I / O Standar.
Kasus uji:
Input:
apply anesthetics
perform surgery
unapply anesthetics
Output:
perform surgery under apply anesthetics
Input:
unite asia
establish the silk road
ite asia
Output:
establish the silk road under unite asia
Input:
desire a book
walk to store
take the book
pay for the book
unwalk to store
read the book
Output:
desire a book
take the book under walk to store
pay for the book under walk to store
read the book
Input:
drink excessively
undrink excessively
Output:
[empty string]
Jawaban:
Brachylog , 90 byte
Saya membuat ini sementara berada di bawah kesan bahwa ini bisa menjadi rekursif dan beberapa unders dapat ditumpuk. Mungkin tidak dioptimalkan. Juga karena ini adalah bracylog, pipa ledeng membutuhkan beberapa byte.
Cobalah online!
sumber
Retina , 82 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Menjalankan seluruh program modus multiline (sehingga
^
dan$
cocok dengan awal dan akhir garis individu) dan ulangi sampai tidak ada perubahan.Cari baris yang mungkin dimulai dengan
un
dan diikuti oleh baris yang dimulaiun
hanya jika baris sebelumnya tidak sedangkan baris lainnya sama, dan hapus kedua baris. (Ini adalah perubahan perilaku dari Retina 0.8.2, yang memisahkan garis sebelum mencoba untuk mencocokkan dan karenanya tidak pernah dapat menghapus garis jika pertandingan perlu menjangkau lebih dari satu baris sekaligus.)Cari garis yang mungkin dimulai dengan
un
, diikuti oleh setidaknya satu garis, diikuti oleh garis yang dimulaiun
hanya jika garis aslinya tidak sementara sisa garisnya sama.Pindahkan garis asli ke bawah satu baris, dan tambahkan juga dengan
under
garis yang baru saja dilalui. (Jalur tambahan akan ditangani oleh pengulangan.)sumber
Python 2 , 106 byte
Cobalah online!
Jika input dapat berupa daftar dari STDIN dan output dipisahkan oleh baris baru, maka kita memiliki solusi 94-byte ini:
sumber
JavaScript (Babel Node) , 91 byte
Mengambil input sebagai array string dalam huruf kecil. Mengembalikan array string lainnya.
Cobalah online!
Berkomentar
sumber
Bersih , 147 byte
Cobalah online!
sumber