Dalam tantangan kode saya sebelumnya , saya meminta Anda untuk menulis fungsi yang memberi tahu Anda baris mana yang telah dihapus.
Petunjuknya adalah:
Tulis fungsi yang berisi lima baris.
Jika Anda menjalankan fungsi apa adanya, itu harus mengembalikan 0.
Jika Anda menghapus salah satu dari lima baris dan menjalankan fungsinya, itu akan memberi tahu Anda baris mana yang telah dihapus (misalnya, jika Anda menghapus baris terakhir, ia harus mengembalikan 5).
Sekarang, mari kita coba sesuatu yang sedikit lebih sulit.
Ikuti aturan yang sama seperti di atas, tetapi kali ini, fungsinya akan mengembalikan sebuah array yang memberitahu Anda dua baris yang telah dihapus.
Jadi, misalnya, jika saya menghapus baris 1 dan 5, nilai kembali harus [1,5], dan jika saya menghapus baris 3 dan 4, nilai pengembalian harus [3,4].
Sekali lagi, jika tidak ada baris yang dihapus, fungsi harus mengembalikan 0. Poin bonus jika Anda juga dapat menangani kasing yang dihapus satu baris, tetapi Anda tidak perlu melakukannya.
Bisakah Anda memanfaatkan fungsi pembantu? Ya, tetapi hanya jika Anda harus. Satu fungsi mandiri yang melakukan ini adalah yang ideal.
Seperti halnya tantangan terakhir, solusi terbanyak menang. Saya akan memilih pemenang dalam seminggu, atau lebih cepat jika tidak ada kiriman baru yang diterima dalam 24 jam.
sumber
Jawaban:
Perl
Ini benar-benar berfungsi untuk sejumlah baris yang dihapus (asalkan tidak semua baris, yaitu), dan dapat secara sepele diperluas ke lebih dari 5 baris. Tidak ada fungsi pembantu yang digunakan, dan bahkan hanya menggunakan satu pernyataan per baris. Itu bergantung pada fakta bahwa, dengan tidak adanya
return
pernyataan eksplisit , nilai kembalinya fungsi Perl adalah nilai dari pernyataan terakhir di dalamnya.Perhatikan bahwa (dalam konteks daftar) kode ini mengembalikan daftar kosong daripada angka 0 jika tidak ada baris yang dihapus. Ini bisa diperbaiki (misalnya dengan menambahkan "
@a ? @a : 0;
" ke baris terakhir), tetapi akan membuat kode lebih jelek. Dalam kasus apapun, di skalar konteks itu tidak mengembalikan jumlah baris dihapus, yang akan 0 jika tidak ada garis telah dihapus. ;-)sumber
Rubi
Mirip dengan versi Perl, tetapi di Ruby. Saya mengembalikan 0 jika tidak ada baris yang dihapus seperti yang diminta, tetapi saya setuju itu membuat kode lebih jelek dan tidak cukup masuk akal sebagai nilai pengembalian.
Jika array kosong dapat diterima sebagai nilai balik ketika tidak ada baris yang dihapus, kode ini terlihat seperti ini:
Kedua metode ini berfungsi untuk sejumlah baris yang dihapus antara 0 dan 5.
sumber
JavaScript, 152 karakter dip Golf
Golf:
Cukup berisi (tapi jelek):
Pada dasarnya mengeksploitasi fungsi
toString
dengan memberi nomor pada setiap baris. Perhatikan bahwa Anda benar-benar harus menghapus baris karena ini (berkomentar tidak akan berfungsi).Ini sebenarnya berfungsi untuk sejumlah baris yang dihapus ! Ini akan mengembalikan array dari baris yang dihapus, atau array kosong jika belum ada yang dihapus. (Saya bisa dengan mudah mengubah itu untuk mengembalikan nol (dengan mengganti
return ra
denganreturn ra || 0
), tapi saya suka solusi array kosong karena akan lebih berguna di dunia nyata.)Misalnya, menghapus baris pertama kembali
[1]
, dan menghapus semuanya tetapi baris pertama kembali[2,3,4,5]
. (Tentu saja, itu tidak berfungsi jika Anda menghapus semua baris;-)
)sumber
Rubi
Cara kerjanya: ide saya adalah: membuat array, dan pada setiap baris, hapus nilai tertentu. Jadi, pada baris pertama, sebenarnya saya memiliki array
[ 1, 2, 3, 4, 5]
, dengan elemen1
dihapus. Pada baris kedua, jikaa
sudah ditentukan, hapus elemen2
. Jika tidak, buat array baru dengan elemen2
dihapus. Lakukan hal yang sama untuk baris 3. Pada baris 4, Anda dapat yakin bahwa sudah ada array yang dibuat, jadi hapus saja elemen4
. Pada baris 5, pertama hapus elemen5
, dan jikaa
kemudian array kosong, kembali0
. Kalau tidak, kembalilaha
.sumber
Python
Mengembalikan 0 jika tidak ada garis yang dihapus, jika tidak mengembalikan garis yang dihapus. Anda dapat menghapus 1 hingga 5 baris, kecuali baris 0 dan 6 ;-).
sumber
JavaScript, mandiri, berfungsi untuk 0, 1, 2 baris yang dihapus (
607315186 karakter)→ demo langsung ←
Menyalahgunakan peningkatan variabel JS dan kebocoran global, seperti pada tantangan lainnya :)
dipanggil dengan array [1,2,3,4,5] sebagai parameter.
315 karakter
dipanggil dengan array kosong sebagai parameter.
versi non-golf
(juga berfungsi untuk 3 dan 4 baris dihapus):
dipanggil dengan array kosong sebagai parameter.
sumber
JavaScript:
biola
sumber
Javascript
Sebut saja yang Anda suka, tapi saya pikir itu cantik .
Memungkinkan Anda tahu garis mana yang dihapus (1 atau lebih), atau 0 jika tidak ada garis yang dihapus. Semua 5 baris dapat dihapus.
EDIT:
Karena saya perhatikan bahwa kode saya mungkin sebenarnya terdiri dari 6 baris, dan melanggar aturan, saya menyesuaikannya sebagai berikut:
Hal yang sama berlaku - itu akan mengembalikan array garis yang dihapus mulai dari 1- Semua atau 0 jika tidak ada.
sumber
function(){
dan}
(dan semua fungsi pembantu). Hitung jumlah garis.Gangguan umum
Ini berfungsi untuk menghilangkan 1-4 baris. Jika Anda menghapus semua baris, itu akan mengembalikan sama seperti jika Anda tidak menghapusnya.
NB: Memiliki tanda kurung pada barisnya sendiri dianggap gaya yang buruk, tetapi karena bahasa lain memiliki
end
dan}
saya menganggap itu diizinkan.sumber
Python
Ini bekerja untuk semua baris - tetapi hanya jika dua dihapus. Jika hanya satu baris yang dihapus maka itu akan mencetak baris dan baris yang dihapus 5. Jika terlalu banyak baris dihapus maka tidak akan mencetak apa pun.
Ini menggunakan fungsi pembantu karena kata kunci del tidak dapat digunakan sejalan dengan;; (sejauh yang saya tahu)
Pada dasarnya, setiap baris menghapus dirinya dalam array yang dideklarasikan dalam konstruktor, maka jika cukup baris telah dihapus, array dicetak.
Fungsi ini melewatkan spesifikasi dengan dua cara:
print
danreturn
dapat dipertukarkansumber
print ''
tidak menghasilkan karakter baris baru ekstra?Déjà Vu
Berfungsi untuk menghapus sejumlah baris (selama Anda meninggalkan setidaknya satu baris)
sumber
R
Saya memiliki versi lain dalam R yang menurut saya lebih baik (tetapi menggunakan fungsi pembantu):
Atau seseorang dapat menghindari penggunaan fungsi helper dengan mendefinisikannya sebagai argumen default (berfungsi secara identik tetapi kurang dapat dibaca - namun, itu tidak menggunakan fungsi helper yang "didefinisikan secara terpisah"):
Keduanya
reportRemovedLines()
danfunnyVersion()
bekerja dengan sejumlah baris yang dihapus - kecuali jika Anda menghapus semua baris (dalam kasus itu, mereka akan kembaliNULL
). Mereka benar-benar mengembalikan nomor baris, bukan hanya mencetaknya - seperti pada R, nilai ekspresi terakhir yang dievaluasi dalam suatu fungsi akan secara otomatis dikembalikan.Bagaimana cara kerjanya? Triknya adalah pada
trick
fungsi yang mengambil semua objek dari "lingkungan induknya" (yaitu, lingkungan fungsi yang memanggilnya), menempatkan nilai-nilai mereka bersama-sama dalam vektor, dan mengembalikan, yang nilai-nilai dari 1 hingga 5 tidak terwakili.sumber
JavaScript (136/166 karakter)
Versi yang lebih kecil dengan beberapa nilai dinyatakan di awal:
Versi mandiri (Anda tidak perlu melewatkan apa pun - argumen b ada sehingga saya dapat memeriksa apakah b didefinisikan dengan
||
)Ya, keduanya memiliki
return
pernyataan, tetapi itu hanya adil jika saya bersaing dengan bahasa dengan pengembalian implisit.sumber
R
Versi sederhana (tidak mudah karena Anda akan mendapatkan kesalahan jika Anda menghapus baris 5):
Dan versi yang sangat mudah:
Ini bekerja dengan sejumlah baris yang dihapus (kecuali jika Anda menghapus semua baris), dan dapat dengan mudah diperpanjang hingga lebih dari 5 baris. Menjalankannya "sebagaimana adanya" akan kembali
integer(0)
yang secara konseptual mirip dengan mengembalikan adil0
. Mengembalikan nilai 0 yang sebenarnya akan membuatnya lebih jelek dan lebih lama tetapi tidak akan rumit.Akhirnya, versi menggunakan sihir:
Fungsi pembantu:
Fungsi sebenarnya:
sumber
C ++
Cara menggunakan: panggil fungsi dengan i dan gunakan func2 untuk memahami apa yang dikatakan fungsi.
Jika Anda mengubah baris int arr [] = {0,0} ke int arr [] = {0,0,0,0,0} itu juga akan berfungsi untuk semua lima baris, itu juga handline satu garis menghapus case test secara otomatis, apa yang saya lakukan adalah hanya menggunakan bit variabel sebagai bendera untuk setiap baris ....
sumber
function
memiliki enam baris, bukan lima?