Dengan kehancuran besar ekonomi universal, permintaan akan planet-planet yang dibuat sesuai pesanan juga jatuh. Orang Magrathean harus menjaga pemasukan yang lebih stabil juga dari kelas pelanggan yang lebih luas. Oleh karena itu, mereka menciptakan rantai gunung milik sendiri (atau malapetaka pendek) untuk orang-orang dengan anggaran lebih kecil yang tidak mampu membeli planet yang lengkap.
Gunung-gunung yang membangun sesuai dengan rencana pelanggan (alias string digit dan titik) dan dikirimkan menggunakan ascii-seni (yang terdiri dari ,
/
, \
, ^
dan v
).
Tugas
Tulis program lengkap yang mengambil input (string tunggal) baik dari STDIN atau sebagai argumen dan output ke STDOUT. Teka-teki ini adalah kode-golf jadi tolong tunjukkan beberapa usaha bermain golf.
Memasukkan
Sederetan titik dan angka menyediakan dasar untuk rantai gunung. Setiap string tepat selama diperlukan untuk mendukung pegunungan dan setiap puncak diberikan oleh digit, bukan titik, yang menunjukkan ketinggian puncak.
Keluaran
Versi rantai gunung ascii.
- Setiap digit pada input mewakili tepat satu puncak (
^
) tepat pada ketinggian yang ditunjukkan oleh digit (yaitu 9 adalah ketinggian tertinggi). - Tidak boleh ada puncak tambahan dalam output (yaitu di tempat-tempat di mana ada titik di input).
- Pegunungan berbentuk segitiga, yaitu lereng dibuat menggunakan
/
dan\
karakter. - Berlalu di mana dua gunung tumpang tindih dibentuk menggunakan karakter
v
. - Tidak ada baris baru atau garis kosong yang berlebihan.
- Garis padding dengan spasi tambahan adalah opsional.
Anda dapat berasumsi bahwa input yang diberikan valid, artinya selalu ada solusi sesuai dengan aturan (mis. Input 13..
tidak akan menghasilkan konfigurasi yang valid dan dapat diabaikan). Terlebih lagi, di setiap sisi ada banyak titik sehingga gunung tidak boleh dipangkas.
Contohnya
Baris pertama menunjukkan input, semua baris lainnya merupakan output yang diinginkan. (Sebenarnya pegunungan terlihat jauh lebih baik di konsol saya daripada di sini.)
1
^
11
^^
1.2.
^
^/ \
.2.3..
^
^/ \
/ \
.2..3..
^
^ / \
/ v \
...4...3...3..
^
/ \ ^ ^
/ \/ \ / \
/ v \
1
, apakah\n\n\n\n\n\n\n\n^
diizinkan?Jawaban:
Javascript:
272268233232201192189188178180 karakterTerima kasih kepada @Sam untuk menguranginya dari 268 menjadi 233 karakter, dan untuk @manatwork untuk 1 karakter lainnya. @VadimR untuk menunjukkan bug.
Versi yang teridentifikasi dengan benar dan agak tidak bercampur dengan komentar:
Seperti yang Anda catat dari kode, ini berfungsi sebagai otomat seluler, di mana setiap sel memeriksa nomor dalam input, mencari sendiri dan kedua tetangganya untuk memutuskan apa iterasi berikutnya. Pada setiap saat sel mungkin
^
,/
,\
,v
atau. Input yang disediakan dalam kasus uji menghasilkan output yang diharapkan.
Perhatikan bahwa menggunakan
alert
kotak itu menyebalkan, karena biasanya tidak memiliki font monospace. Anda dapat menyalin & menempelkan teks darialert
kotak ke tempat lain untuk apresiasi yang lebih baik dari output, atau Anda dapat mengganti baris terakhiralert
denganconsole.log
, tetapi karena ini adalah kode-golf,alert
lebih pendek.Selanjutnya, itu tidak memvalidasi apa pun dalam input. Ini hanya menganggap karakter yang tidak dikenal sebagai spasi dengan cara yang sama dengan yang dilakukannya
.
(sebenarnya.
adalah karakter yang tidak dikenal juga).sumber
prompt()
parameter .delete r; delete s; delete q; delete p; delete t; delete i; delete d;
untuk memastikan bahwa itu tidak terpolusi.q.trim()?q+'\n':''
bisa jadiq.trim()&&q+'\n'
, hemat dua. Juga,i<p.length
bisa sajap[i]
.Rubi,
208201189Tantangan yang sangat menyenangkan! Inilah solusi Ruby alternatif.
Sebagai bonus, berikut ini adalah implementasi Ruby dari algoritma "seluler otomat" Victor yang sangat pintar, dengan karakter 162:
Contoh output:
sumber
$/
untuk baris baru.C # - 588 karakter - tidak sebagus Ray 321!
Contoh output:
Atau yang lebih kompleks lagi ...
Teka-teki brilian ... tidak semudah kelihatannya ... menyukainya!
sumber
3
di sana. Jika Anda berbicara tentang yang pertama, itu bagian dari lereng.APL, 65 byte
⍉⌽↑⌽¨h↑¨'^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h←¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a←11|⎕d⍳⍞]
⍞
simbol ini mengembalikan input mentah (tidak dievaluasi) sebagai larik karakter.Memecahkan secara interaktif, dalam sesi APL:
sumber
Ruby, 390 karakter
Wah, ini rumit.
Saya akhirnya harus menambahkan string baru untuk setiap karakter, menggunakan variabel
s
yang berarti "lewati karakter berikutnya" yang diperlukan untuk memproses^
dan\
.Output ini persis output sampel yang diberikan untuk semua kasus uji.
Bagan apa arti variabel:
Saya yakin saya bisa bermain golf lebih banyak, tetapi saya harus pergi sekarang. Harus ditingkatkan nanti!
sumber
.2.2.
dan tidak bisa melihat mengapa itu tidak berhasil.Jawa,
377407Sunting: @ Viktor menunjukkan bahwa ini perlu menjadi program yang lengkap, jadi saya menambahkan beberapa lusin karakter agar dapat dikompilasi dan dijalankan. Cukup lewati "pesanan pembelian" sebagai param pertama ketika menjalankan program, seperti:
java M ..3.4..6..4.3..
Saya pikir ini mirip semangat dengan jawaban lain, pada dasarnya hanya melintasi "tatanan gunung" berulang kali untuk setiap ketinggian yang mungkin, dan membangun gunung dari puncak ke bawah. Dengan begitu saya hanya harus berurusan dengan empat kondisi jika tidak membangun puncak - baik kemiringan ke atas '/', kemiringan ke bawah '\, sambungan' v ', atau kosong' '. Saya dapat menemukan yang sederhana dengan melihat tiga ruang yang berpusat "di atas" posisi saya saat ini dalam bangunan top-down saya.
Perhatikan bahwa seperti kiriman lainnya, saya memperlakukan apa pun selain angka yang setara dengan '.' di input, untuk singkatnya.
Versi golf:
Bentuk yang dapat dibaca manusia (dan tanpa beberapa transmogrifikasi yang setara untuk mencapai bentuk golf):
Nikmati.
Contoh output:
sumber
class X{public static void main(String[]z){
.Perl 6,
264 224 216 206 200 194124 byteTerima kasih kepada @JoKing karena tampil sebagai solusi ///. Ini golf sedikit lebih jauh setelah memperbaiki tr /// bug di Perl 6.
Solusi asli saya dengan subt:
Tidak Disatukan:
Keluaran:
sumber
s///
dantr///
. Saya pikir yang terakhir dapat digunakantr
sebagai penggantis
tapi saya tidak bisa memikirkan untuk menerjemahkan backslash. Mungkin yang pertama jugaPerl,
254 218212Sunting: sebenarnya ini adalah perbaikan bug untuk bekerja dengan
..3..4...6...5....1
contoh ProgrammerDan , tetapi, dalam prosesnya, beberapa byte tidak aktif. Dan tes online: https://ideone.com/P4XpMUsumber
C # -
321319Tidak dikumpulkan dan berkomentar:
Contoh:
Saya pikir ini menghasilkan ruang ekstra sebelum setiap baris.
sumber
CJam,
128117112106104 byteCJam sedikit lebih muda dari tantangan ini sehingga jawaban ini tidak bersaing. Ini adalah tantangan yang sangat bagus! Dari sedikit yang saya tahu tentang J dan APL, saya pikir penyerahan pada mereka akan sangat singkat.
Ini adalah contoh uji, yang menurut saya berisi semua kemungkinan kombinasi lereng, puncak dan palung:
yang menghasilkan
Uji di sini.
Saya akan menambahkan penjelasan untuk kode nanti.
sumber
Python,
297234218-63 bytes berkat Jo King
-16 bytes dengan
r=s.replace
bukannya lambdaMengambil input dari STDIN. Tidak disatukan, disederhanakan:
sumber
s.replace
metode ini sendiri, tetapi tidak berhasil. Anda hanya melakukan penggantian pada string asli karena string tidak dapat diubahPowershell,
148145 byteIni tantangan yang bagus!
Skrip uji yang kurang golf:
Keluaran:
sumber
Pip
-l
, 100 byte(Bahasa lebih baru dari pertanyaan, tetapi mungkin tidak akan mengalahkan pengajuan APL. Meskipun saya berharap itu akan menjadi jauh lebih pendek.)
Mengambil input melalui argumen baris perintah. Cobalah online!
sumber