Dalam tantangan ini, Anda perlu mensimulasikan katak melompat-lompat di atas bantalan lily. Kolamnya sangat besar, memiliki garis bantalan bunga bakung yang tak terhingga jumlahnya, dan katak dapat melompat sebanyak mungkin pada bantalan bunga bakung.
Katak ini suka melompat-lompat: setelah melompat ke depan, ia selalu melompat mundur , dan sebaliknya.
Anda melewati daftar bilangan bulat, yang mewakili lompatannya. Anda perlu menampilkan hasil lompatannya.
Misalnya, Anda lulus [2,3,6,8,2]
:
Katak kami mulai dengan melompat 2 bantalan lily ke depan:
_2
Kemudian 3 bantalan lily kembali:
3__2
Kemudian 6 bantalan lily ke depan:
3__2__6
8 kembali:
8_3__2__6
Lalu akhirnya, 2 lily bantalan ke depan (perhatikan bagaimana 2 menimpa 3):
8_2__2__6
Agar lebih eksplisit: Input Anda adalah array angka S
, Anda perlu menampilkan S[K]
pada posisi S[K] - S[K-1] + S[K-2] - S[K-3]...
.
- Jika beberapa nomor harus dicetak di lokasi tertentu, cetak hanya satu dengan indeks tertinggi.
- Anda harus menggunakan
_
jika lokasi tertentu kosong - Jika suatu angka memiliki beberapa digit, maka ia tidak mengambil banyak lokasi. (Dengan kata lain, lokasi dapat terdiri dari beberapa karakter)
- Anda dapat mengasumsikan bahwa daftar Anda tidak kosong, dan bahwa semua bilangan bulat lebih besar dari 0.
Kasus uji:
5 ____5
2,2 2_2
4,3,2,1 3124
5,3,2,1 _3125
2,3,6,8,2 8_2__2__6
10,3,12,4,1,12,16 ___12__3__10____41__1216
100,4,7,2,2 _______________________________________________________________________________________________4___1002_2
Ini adalah kode-golf , jadi jawablah sesedikit mungkin dalam karakter!
Jawaban:
MATL ,
3534 byteTerima kasih kepada @Emigna untuk menghemat 1 byte!
Cobalah online! Atau verifikasi semua kasus uji .
Bagaimana itu bekerja
Golf kode Anda, bukan penjelasan Anda!
Berikut ini menggunakan input
[2,3,6,8,2]
sebagai contoh. Untuk melihat hasil antara dalam kode aktual, Anda mungkin ingin menyisipkan%
(simbol komentar) untuk menghentikan program pada saat itu dan melihat isi tumpukan. Sebagai contoh, ini menunjukkan stack after statementYs
(jumlah kumulatif).sumber
'0'
alih-alih' 0 '
, karenaXz
menghapus spasi setelah'0'
di'10'
akan diganti juga. Itu sebabnya saya menambahkan inisial32
juga' 0'
bekerja dengan baik?PHP,
10010199104 bytemengambil input dari argumen baris perintah; jalankan bersama
-nr
.kerusakan
sumber
2,3,6,8,2
, di mana8
lompatan "mundur" melewati "awal" bantalan bunga bakung?JavaScript (ES6),
99107 byteSunting: Karena OP mengklarifikasi bahwa satu-satunya batasan adalah memori yang tersedia, ini diperbarui untuk mengalokasikan ruang yang dibutuhkan secara tepat alih-alih mengandalkan rentang maksimum yang di-hardcoded.
Bagaimana itu bekerja
Fungsi ini berfungsi dalam dua lintasan:
Selama operan pertama:
p
diinisialisasi ke0
.x
variabel diatur ke string kosong, sehingga semua upaya untuk memodifikasinya hanya diabaikan.m
danM
masing-masing nilai minimum dan maksimum yang dicapai olehp
.f()
.Selama umpan kedua:
p
diinisialisasi ke-m
.x
diatur ke array ukuranM-m
, diisi dengan_
karakter.x
.x
, yang merupakan hasil akhir.Uji kasus
Tampilkan cuplikan kode
sumber
[1100]
menghasilkan angka yang dicetak pada posisi1002
alih-alih posisi1100
.R ,
1009796 byteCobalah online!
Baris 1 menemukan semua posisi tempat melompat. Pertama, semua lompatan
x
dikalikan dengan 1 atau −1 dan kemudian ditransformasikan ke posisi akhir menggunakan penjumlahan kumulatif. Vektorc(-1,1)
didaur ulang jika perlu, namun ketikax
panjang 1,x
sebaliknya didaur ulang. Karenanya hanya jumlahseq(x^0)
(setara denganseq_along(x)
) yang dipertimbangkan. (Peringatan dihasilkan ketika panjangnyax
bukan kelipatan dari 2 tetapi itu tidak mempengaruhi hasil)Baris 2 meningkatkan posisi melompat sehingga semuanya setidaknya 1.
Baris 3 dan 4 membuat output dan mencetaknya.
Byte1 byte dari Giuseppe
sumber
seq(x^0)
!-p+1
bisa kurang1-p
dari satu byte.Javascript (ES6), 109 byte
Berkomentar:
sumber
Perl 6 ,
6867 byteCobalah online!
Bagaimana itu bekerja
Pertama menentukan lokasi lompatan kumulatif:
Kemudian mengubahnya menjadi indeks array berbasis 0 dengan mengurangi angka minimum (tetapi paling banyak 1) dari semua angka:
Kemudian ia menciptakan array dengan nomor input yang ditetapkan untuk indeks tersebut:
Akhirnya menggabungkan array ke string, dengan garis bawah menggantikan elemen yang tidak ditentukan:
sumber
Jelly ,
2824 byte-2 (dan selanjutnya mengizinkan -2 lainnya) berkat FrownyFrog (gunakan fungsi [pasca-tantangan] dari aplikasi awalan cepat,
Ƥ
)Cobalah online! Program lengkap, untuk test suite menggunakan fungsi yang sama, klik di sini .
Bagaimana?
Catatan:
Rangkuman terakhir dari baris baru,
;⁷
adalah untuk kasus-kasus ketika tidak ada yang_
muncul dalam output, dalam hal ini cetakan tersirat akan menampilkan representasi daftar, misalnya[3, 1, 2, 4]
, daripada sesuatu seperti contoh_3125
,. Karena tidak ada baris baru yang dapat diganti;⁷
dengan seseorang;““
untuk menambahkan daftar daftar karakter,[[''],['']]
(tidak”
diperlukan penutupan karena merupakan karakter terakhir dari suatu program).Fungsi tidak benar, Ṭ, memberikan daftar dengan
1
s pada indeks dalam inputnya, untuk bilangan alami tunggal, n yaitu n-10
s diikuti dengan1
memungkinkan nomor input ditempatkan pada jarak yang benar dari kiri dengan penggandaan . Pembalikan,Ṛ
, diwajibkan untuk memiliki kemudian katak-kunjungan menimpa daripada sebelumnya yang ketika pengurangan dengan atau,o/
, dilakukan.sumber
1,-ṁ×µ+\
→UƤ_@/€
?Ƥ
bukan fitur pada titik ini ditulis, tetapi ya itu akan berhasil. Lebih baik adalahUƤḅ€-
(karena konversi dari basis -1 seperti mengalikan dengan...,1,-1,1,-1,1,-1,1
dan kemudian menjumlahkan).UƤḅ-
sejakḅ
vektorisasi :) (Saya juga menggunakan reverseṚ
,, karena kita tidak perlu kompleksitas upend,U
)APL (Dyalog Unicode) ,
4530 byte SBCSCobalah online!
-\⍵
memindai argumen dengan bolak-balik-
dan+
(⊢ - 1 ⌊ ⌊/)
dari itu (⊢
) kurangi 1 atau minimum (⌊/
), mana yang lebih kecil (⌊
)i←
ditugaskan kepadai
⌈/ 1+
kenaikan dan ambil yang maksimal⍴∘'_'
menghasilkan banyak garis bawah⍵@i
letakkan angka-angka dari argumen (⍵
) pada posisii
∊⍕¨
format masing-masing dan ratakansumber
Ruby , 85 byte
Cobalah online!
Merekam posisi setelah setiap lompatan, mengubah array yang dihasilkan menjadi hash untuk menghapus duplikat (mempertahankan nilai terakhir di setiap posisi yang digandakan), dan kemudian menempelkan nilai-nilai dengan jumlah garis bawah yang diperlukan.
sumber
Python 2 ,
113110 byteCobalah online!
sumber