Tulis program atau fungsi untuk menghasilkan output berikut dalam urutan yang benar.
EDIT: Simbol-simbol itu tidak matematika! Angka-angka hanya mewakili data unik dan +
dan -
bisa menjadi dua simbol sembarang.
Ambil input bilangan bulat non-negatif n. Baris pertama selalu -
, bahkan untuk n = 0.
- Jika baris saat ini
-
, baris berikutnya adalah1+2+ ... (n-1)+n-
- n = 4:
-
=>1+2+3+4-
- n = 4:
- Jika bilangan bulat terakhir sama dengan n, hapus semua bilangan bulat dari ujung yang segera diikuti oleh
-
, lalu ubah yang terakhir+
menjadi-
- n = 4:
1-2+3-4-
=>1-2-
- EDIT: Ketika string penuh (semua bilangan bulat dari 1 ke n disertakan), hapus semua bilangan bulat dari ujung yang diikuti oleh
-
, hingga Anda mencapai bilangan bulat diikuti oleh a+
. Biarkan bilangan bulat itu tetapi ubah berikut+
ke a-
- Dengan menggunakan contoh yang sama seperti di atas (yang tidak mengikuti
-
), hapus4-
, hapus3-
, ubah2+
menjadi2-
.1-
tidak berubah sejak kami berhenti2
. Hasil:1-2-
- n = 4:
- Jika bilangan bulat terakhir kurang dari n, tambahkan bilangan bulat yang tersisa dengan
+
masing-masing setelah bilangan bulat , kecuali bilangan bulat terakhir yang harusnya-
ditambahkan- n = 4:
1+2-
=>1+2-3+4-
- EDIT: Jika string saat ini tidak penuh (tidak mengandung semua bilangan bulat dari 1 ke n), tambahkan setiap bilangan bulat yang belum termasuk dalam urutan naik hingga n-1 dengan
+
setelah masing-masing, dan kemudian tambahkan bilangan bulat terakhir n diikuti oleh a-
- Jika baris saat ini adalah
1-
, tambahkan2+
, tambahkan3+
yang n-1 jika n = 4. Kemudian tambahkan4-
. Hasil:1-2+3+4-
- n = 4:
- Jika baris saat ini berisi semua bilangan bulat dan masing-masing diikuti segera oleh a
-
, keluar dari kode- n = 4:
1-2-3-4-
=> END
- n = 4:
Tidak boleh ada spasi di depan atau di belakang garis apa pun. Harus ada jeda baris di antara setiap baris. Mungkin ada atau tidak ada jeda baris pada baris terakhir.
EDIT: Anda harus menguji kode Anda hingga setidaknya n = 10 (lebih dari 1000 baris output jadi saya tidak bisa memasukkannya di sini). Angka apa pun yang tidak menyebabkan kode Anda kehabisan sumber daya harus (akhirnya!) Menghasilkan output yang benar tetapi Anda tidak harus menunggu sampai alam semesta berakhir!
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
Input n = 0:
-
Input n = 1:
-
1-
Input n = 2:
-
1+2-
1-
1-2-
Input n = 4:
-
1+2+3+4-
1+2+3-
1+2+3-4-
1+2-
1+2-3+4-
1+2-3-
1+2-3-4-
1-
1-2+3+4-
1-2+3-
1-2+3-4-
1-2-
1-2-3+4-
1-2-3-
1-2-3-4-
s*=<condition>
Python 2 ,
136141133 byteCobalah online!
Yang pertama
-
(tidak) secara mengejutkan menambahkan beberapa byte ke kode.sumber
-
baris.Python 2 ,
150164159154146118 byte115112 byteCobalah online!
Edit: Ups! Ini harus bekerja untuk angka yang lebih besar dari 4 juga ... kemudian chip pergi ... sampai saya menyadari saya terlalu memikirkannya dan menyelamatkan 28 byte ... dan kemudian 6 lebih melalui golf kecil.
sumber
Pyth, 23 byte
Demonstrasi
Dasar dari program ini adalah memperhatikan bahwa selain dari awal
-
, urutan plus dan minus sesuai dengan urutan standar kombinasi+
dan-
dengan penggantian, dengan semua trailing+
dihapus.Penjelasan:
sumber
Python 2 , 73 byte
Cobalah online!
sumber
Haskell , 70 byte
Cobalah online!
sumber
Python 3 , 305 byte
Cobalah online!
sumber
<tab><space>
ketika<space><space>
akan menjadi # byte yang sama? Saya kira mungkin jika Anda melakukan indentasi kecil dengan<space>
dan yang lebih besar dengan<tab>
itu akan menghemat byte ...q[-1]
untukq[0]
. BTW: mencampur tab dan spasi tidak berfungsi dalam Python 3, jadi kode saat ini menghasilkan kesalahan.