Motivasi : Terkadang Anda perlu tahu di mana Anda berada dalam sebuah tali. Anda ingin dapat melihat bagian mana pun dari string dan tahu persis di mana Anda berada, sejauh mungkin.
Tantangan : menulis sebuah program untuk menghasilkan string pita pengukur panjang tertentu. Sebuah pita ukuran tali diri menjelaskan nya panjang-jadi-jauh sesering mungkin sepanjang itu panjang sendiri.
Aturan :
- Program Anda harus mengambil satu parameter bilangan bulat positif, untuk panjang total string pita pengukur
- Untuk setiap string angka yang berdekatan dalam output, digit ini harus secara akurat melaporkan panjang output sejauh ini - inklusif !
- Panjang diukur dari awal string ke akhir setiap angka
- Nomor panjang sebanyak mungkin harus dimasukkan dalam string
- Hindari ambiguitas. Pemisah / pembatas dapat digunakan untuk menghindari angka yang disandingkan, yaitu
12
kata dua belas bukan satu, dua. - String harus selalu secara akurat melaporkan panjang totalnya di ujungnya, tanpa pemisah tambahan
- Anda mungkin perlu beberapa pemisah untuk menjaga panjangnya tetap akurat, mis. Inilah contoh pita pengukur panjang 4:
1--4
Contoh non preskriptif / lengkap:
- pita pengukur string panjang 1:
1
- pita pengukur panjang 2:
-2
- pita pengukur panjang 3:
1-3
- pita pengukur tali panjang 4:
1--4
atau-2-4
(keduanya panjang laporan sesering mungkin, yaitu dua kali, dan akhiri dengan panjang total yang benar) - pita pengukur panjang 10:
1-3-5-7-10
- pita ukuran string dengan panjang 11:
1-3-5-7--11
atau1-3-5--8-11
atau1-3--6-8-11
atau1--4-6-8-11
atau-2-4-6-8-11
(semua memiliki banyak nomor panjang mungkin, dan finish dengan total panjang string)
-
, dan Anda perlu memiliki tanda panjang sebanyak mungkin di string?0
.Jawaban:
Python,
50484746 bytePenjelasan
Solusi lambda rekursif yang cukup sederhana
Kasing dasar kami adalah 1 dan 0 yang dicakup oleh
"1"*x
jika tidak, kami mendapatkan string-x
dengan`-x`
dan menambahkan hasil memanggil fungsi padalen(`-x`)
less.sumber
-x
?Mathematica,
6757 byteTerima kasih kepada Martin Ender untuk membuang 10 byte!
Fungsi tanpa nama mengambil argumen integer nonnegatif dan mengembalikan string. Cukup banyak algoritma rekursif yang jelas: pastikan string berakhir dengan nomor input yang didahului oleh
"-"
, dan kemudian panggil fungsi lagi menggunakan#0
.Tapi ada kesenangan golf yang bisa didapat dalam mengimplementasikan algoritma.
""["1"][[#]]
menunjukkan#
argumen th ekspresi""["1"]
: argumen 0 adalah kepala""
dan argumen 1 terlihat"1"
, yang menyediakan dasar kasus rekursi. Jika#
melebihi 1, maka""["1"][[#]]
melempar pesan kesalahan dan tetap sebagai fungsi yang tidak dievaluasi. Tapi kemudian/._@__:>
adalah aturan yang mengambil fungsi yang tidak dievaluasi dan mengubahnya menjadi ekspresi yang muncul berikutnya, yang merupakan panggilan rekursif ke fungsi asli.Pengajuan asli:
sumber
""["1"][[#]]/._@__:>#0[#-1-IntegerLength@#]<>ToString@-#&
menyimpan satu byte dengan menghindariIf
dan banyak byte dengan menghindariIntegerString
dan"-"<>
._@__
adalah sihir jahatJavaScript (ES6), 49 byte
sumber
f
Pyth, 23 byte
Secara terang-terangan mencuri solusi rekursif dari jawaban Wheat wizard . Juga, saya percaya ini tidak golf dengan benar.
Coba di sini!
sumber
Perl 6 , 43 byte
Penjelasan:
Jadi misalnya untuk input 10, ia menghasilkan urutan
(-10, -7, -5, -3, -1)
, dan dari string itu-1-3-5-7-10
, dan dari string terakhir1-3-5-7-10
.Cobalah online .
sumber