Dalam bahasa gaya Lisp, daftar biasanya didefinisikan seperti ini:
(list 1 2 3)
Untuk keperluan tantangan ini, semua daftar hanya akan berisi bilangan bulat positif atau daftar lainnya. Kami juga akan meninggalkan list
kata kunci di awal, sehingga daftar sekarang akan terlihat seperti ini:
(1 2 3)
Kita bisa mendapatkan elemen pertama dari daftar dengan menggunakan car
. Sebagai contoh:
(car (1 2 3))
==> 1
Dan kita bisa mendapatkan daftar asli dengan elemen pertama dihapus dengan cdr
:
(cdr (1 2 3))
==> (2 3)
Penting: cdr
akan selalu mengembalikan daftar, meskipun daftar itu memiliki satu elemen:
(cdr (1 2))
==> (2)
(car (cdr (1 2)))
==> 2
Daftar juga dapat berada di dalam daftar lain:
(cdr (1 2 3 (4 5 6)))
==> (2 3 (4 5 6))
Tulis program yang mengembalikan kode yang menggunakan car
dan cdr
untuk mengembalikan integer tertentu dalam daftar. Dalam kode yang dikembalikan oleh program Anda, Anda dapat mengasumsikan bahwa daftar tersebut disimpan l
, bilangan bulat target ada di l
suatu tempat, dan bahwa semua bilangan bulat itu unik.
Contoh:
Memasukkan: (6 1 3) 3
Keluaran: (car (cdr (cdr l)))
Memasukkan: (4 5 (1 2 (7) 9 (10 8 14))) 8
Keluaran: (car (cdr (car (cdr (cdr (cdr (cdr (car (cdr (cdr l))))))))))
Memasukkan: (1 12 1992) 1
Keluaran: (car l)
sumber
(1 2 3) 16
kita kembali()
?(1 2 3) 16
ini tidak akan pernah muncul.Jawaban:
CJam, 59
Cobalah online
Penjelasan:
sumber
Common Lisp, 99
Solusi 99 byte berikut adalah versi CL dari jawaban Scheme yang bagus .
Saya awalnya mencoba memanfaatkan
position
danposition-if
, tetapi ternyata tidak sekompak yang saya inginkan (209 byte):Diperluas
Contoh
Daftar ini dikutip, tetapi jika Anda benar-benar ingin, saya bisa menggunakan makro. Nilai yang dikembalikan adalah [1] :
Untuk tes, saya biasa membuat formulir lambda
l
dengan variabel:Menyebut ini dengan daftar asli mengembalikan 14.
[1]
(caddar (cddddr (caddr l)))
akan menyenangkan jugasumber
Retina ,
170142125115114878483757370696867 byteYa,
kurang dari 50%lebih dari 100 byte dari upaya pertama saya. :)Untuk menjalankan kode dari satu file, gunakan
-s
bendera.Saya masih tidak yakin ini optimal ... Saya tidak akan punya banyak waktu selama beberapa hari ke depan, saya akan menambahkan penjelasan pada akhirnya.
sumber
Pyth, 62 byte
Cobalah online: Demonstrasi atau Test Suite
Penjelasan:
Bit pertama
JvXz"() ,][")
menggantikan karakter"() "
dengan karakter"[],"
di string input, yang berakhir dengan representasi daftar gaya-Python. Saya mengevaluasi dan menyimpannya diJ
.Lalu aku mengurangi string
G = "l"
denganu...\l
. Saya menerapkan fungsi dalam...
berulang kaliG
, hingga nilaiG
tidak berubah lagi dan kemudian mencetakG
.Fungsi dalam melakukan hal berikut: Jika
J
sudah sama dengan nomor input, daripada jangan modifikasiG
(?qJQG
). Kalau tidak, saya akan meratakan daftarJ[:1]
dan memeriksa apakah nomor input dalam daftar itu dan menyimpannya ke variabelK
(K}Quu+GHNY<J1)
). Perhatikan bahwa Pyth tidak memiliki operator yang rata, jadi ini membutuhkan beberapa byte. JikaK
benar, maka saya memperbarui J denganJ[0]
, jika tidak denganJ[1:]
(=J?KhJtJ
). Dan kemudian saya gantiG
dengan"(cdr G)"
dan menggantid
yanga
, jikaK
benar (++XWK"(cdr "\d\aG\)
).sumber
Skema (R5RS), 102 byte
sumber
PHP - 177 byte
Saya telah menambahkan beberapa baris baru untuk keterbacaan:
Ini adalah versi yang tidak disunat:
sumber
Haskell,
190188 bytel "(4 5 (1 2 (7) 9 (10 8 14)))" 8
mengevaluasi ke
"(car (cdr (car (cdr (cdr (cdr (cdr (car (cdr (cdr l))))))))))"
sumber
(
danc
berfungsic
menjadi string:c(h:s)="(c"++h:...
h
menjadi Char!Common Lisp,
168155 byteBeberapa hal rekursi bodoh, mungkin bisa sedikit lebih pendek:
Cukup dicetak:
sumber