Hitung mundur
Tujuan Anda untuk tantangan kode-golf ini adalah menghitung mundur dan sementara itu mendaur ulang angka. Biarkan saya jelaskan.
Pertama aplikasi Anda membaca angka, baik sebagai argumen program atau menggunakan stdin. Selanjutnya Anda hanya perlu menghitung mundur seperti ini:
10 9 8 7 6
(dalam urutan menurun )
Tapi tunggu, masih ada lagi!
Mendaur ulang
Ada situasi di mana kita dapat mencetak setiap angka, tetapi jangan daftar setiap angka, kita dapat melakukan daur ulang! Biarkan saya memberi contoh cepat:
Input: 110
Output: 11091081071061051041031021010099... etc
Recycled: 10 1
Kami sekarang masih mencantumkan semua angka, 110, 109, 108, tetapi kami telah mendaur ulang 0 dan 1 .
Contoh lain:
Input: 9900
Output: 9900989989897989698959894... etc
Recycled: 9 98
Tantangan kode-golf
- Baca angka (argumen atau stdin)
- Keluarkan hitungan mundur dalam urutan menurun sambil mendaur ulang semua angka yang mungkin (ke stdout atau file)
- Berhentilah saat Anda mencapai 1 ATAU saat Anda mendaur ulang 0 hingga 9 (apa pun yang terjadi lebih dulu)
Contoh sederhana (sampai 1 tercapai):
Input: 15
Output: 15141312110987654321
(Notice the 110 instead of 1110)
Contoh lebih lanjut (semua daur ulang):
Input: 110
Output: 110910810710610510410310210100998979695949392919089887868584838281807978776757473727170696867665646362616059585756554535251504948474645443424140393837363534332313029282726252423221
Recycled: 10 9 8 7 6 5 4 3 2
(We've recycled all 0-9)
Jawaban:
T-SQL -
291277267217199191166158153145142128117Setelah mendekati ini dengan cara baru, saya berhasil turun ke 145 (142 setelah beberapa tweak kecil), tidak terlalu buruk. Itu berarti saya mungkin bisa bersaing untuk mendapatkan perak atau perunggu. ^^
Ini tidak mencetak daftar, ia memilih hasilnya. Pertanyaannya tidak pernah memberikan spesifik tentang output, jadi ini harus baik-baik saja. Ini masih memiliki batas yang sama dari 100 pada input, sebagian karena saya menyalahgunakan fakta bahwa setiap istilah ke-11 di bawah 100 kehilangan karakter dan sebagian karena batas rekursi 100 default pada ekspresi tabel umum.
sumber
Python 143
147Indentasi tingkat pertama adalah spasi, level kedua adalah tab char.
sumber
p=o=''
params opsional ke fungsi; Anda dapat menggunakan*
untukand
din and r<1023
atau bahkan mungkinr<1023*n
;while x-1:
dapat mencukur ruang sebagaiwhile~-x
. Juga, mungkin lebih pendek untuk menggunakan satu set digit daripada topeng bit untuk menyimpan digit mana yang telah digunakan.Haskell,
154149147145128120119117 bytemenambahkan biaya pengecekan daur ulang banyak karakter ... huh
bermain golf sedikit dengan mengingat angka apa yang belum didaur ulang dan berhenti ketika daftar kosong. kemudian bermain sedikit lebih banyak dengan pindah ke rekursi eksplisit dan beberapa trik lagi.
contoh output:
sumber
Python 2:
119117Menandai ini sebagai komunitas wiki karena itu hanya versi yang lebih golf dari jawaban Will .
sumber
d=s,={''}
kerjanya?d=s,={''}
sama dengand={''}; s,={''}
.s,={''}
menggunakan pembongkaran urutan, fitur yang lebih umum digunakan dalam pernyataan sepertia, b = (b, a)
, tetapi Anda juga dapat menggunakannya untuk mengekstrak satu-satunya elemen dari urutan elemen tunggal.len(d)%11*n
, meskipun sepertinya itu bisa diperdebatkan dengan Anda menggunakan loop exec.set()
daripada set elemen tunggal{x}
. Jadi, flornquake menginisialisasi dengan anggota pengisi, dan memeriksa apakah ia memiliki semua sepuluh digit dengan melihat apakah ia memiliki sebelas elemen. Karena string kosong perlu diinisialisasi kes
, string ini dibuat untuk berfungsi sebagai anggota pengisi ini, menggabungkan inisialisasi ini untuk menghemat karakter.len(d)%11*n
Akan Ya, pasti menyenangkan. :)Ruby,
145139130 bytePendekatan yang mirip dengan Will, kecuali saya tidak menggunakan topeng bit, tetapi array set seperti digit yang tidak digunakan sebagai gantinya. Masukan melalui STDIN.
Ada versi alternatif yang digunakan
while
alih-alihtimes
tetapi apa pun yang saya coba, jumlah byte sama:sumber
CJam,
8077655754 KarakterMungkin sama sekali tidak dioptimalkan, tetapisetelah banyak optimasi dan debugging di sini adalah konversi langsung dari jawaban ES6 saya di CJam:Cobalah online di sini . Fungsi ini mengambil nomor sebagai STDIN dan menampilkan hitungan mundur daur ulang, berhenti di antara jika daur ulang selesai.
Saya akan mencoba untuk bermain golf lebih jauh.
Bagaimana itu bekerja:
Ide dasarnya adalah bahwa untuk setiap hitungan mundur C, periksa apakah digit H pertama sama dengan digit H terakhir dari string yang dihasilkan, di mana H beralih dari jumlah digit dalam C ke 0
sumber
JavaScript ES6,
149146 karakterSeperti verbose, banyak karakter, wow.
Jalankan di Konsol Web Firefox terbaru.
Setelah berjalan, itu menciptakan metode
C
yang dapat Anda gunakan sepertiUPDATE : Terkadang, plain old
return
lebih pendek dari penutupan fungsi panah :)sumber