Anda tidak tahu apa - apa Hal-hal yang saya lakukan untuk " Chaos is a ladder " adalah kalimat yang mengesankan dari serial televisi Game of Thrones .
Tujuan dari tantangan ini adalah untuk membangun tangga dari kekacauan, dalam seni ASCII.
Tantangan
Memasukkan
- Lebar tangga,
W >= 3
(integer) - Tinggi langkah,
H >= 2
(bilangan bulat) - Jumlah anak tangga,
N >= 2
(bilangan bulat).
Keluaran
Tangga dengan anak tangga horizontal dan rel vertikal , semuanya memiliki 1 karakter. Lebar tangga ( W
) termasuk dua rel, dan tinggi langkah ( H
) termasuk anak tangga yang sesuai.
Semua anak tangga, termasuk yang paling atas dan yang paling bawah, akan memiliki sepotong rel vertikal yang panjangnya H-1
langsung di atas dan di bawah. Contohnya akan membuat ini lebih jelas.
Tangga akan dibuat dari karakter ASCII yang dapat dicetak dan bukan spasi , yaitu rentang inklusif dari !
(titik kode 33
) ke ~
(titik kode 126
). Karakter aktual akan dipilih secara acak . Mengingat input, masing-masing pilihan karakter acak harus memiliki probabilitas nol. Selain itu, distribusi probabilitas bersifat arbitrer.
Ruang putih terkemuka atau trailing , baik horisontal maupun vertikal, diizinkan.
Contoh
Diberikan W=5, H=3, N=2
, satu output yang mungkin adalah sebagai berikut.
x :
g h
q$UO{
t T
6 <
bUZXP
8 T
5 g
Perhatikan bahwa tinggi total adalah H*(N+1)-1
, karena ada N
anak tangga dan N+1
bagian vertikal.
Aturan tambahan
Sarana input dan format fleksibel seperti biasa. Misalnya, Anda dapat memasukkan tiga angka dalam urutan apa pun, atau larik yang memuatnya.
Output dapat melalui STDOUT atau argumen yang dikembalikan oleh suatu fungsi. Dalam hal ini mungkin string dengan baris baru, array karakter 2D, atau array string.
Program atau fungsi dapat disediakan.
Celah standar dilarang.
Kode terpendek dalam byte menang.
Uji kasus
Untuk setiap W, H, N
output yang mungkin ditampilkan.
W=5, H=3, N=2:
\ ~
: K
ke:[E
5 u
0 _
8Fr.D
# r
7 X
W=3, H=2, N=2:
$ X
Mb)
0 ]
(T}
j 9
W=12, H=4, N=5:
d Y
P `
5 3
p$t$Ow7~kcNX
D x
` O
* H
LB|QX1'.[:[F
p p
x (
2 ^
ic%KL^z:KI"^
C p
( 7
7 h
TSj^E!tI&TN8
| [
< >
= Q
ffl`^,tBHk?~
O +
p e
n j
W=20, H=5, N=3:
G %
o y
% 3
- 7
U'F?Vml&rVch7{).fLDF
o }
U I
h y
a g
;W.58bl'.iHm\8v?bIn&
, U
N S
4 c
5 r
F3(R|<BP}C'$=}xK$F]^
' h
h u
x $
6 5
Jawaban:
Jelly ,
24 2322 byteSebuah program penuh mengambil tiga argumen
W
,H
,N
dan mencetak hasilnya.Cobalah online!
Bagaimana?
Membangun topeng array 2d dari satu anak tangga dan bagian vertikal di bawahnya, mengulanginya
N+1
berkali-kali dan menghapus anak tangga teratas kemudian menempatkan karakter atau spasi acak tergantung pada nilai topeng.sumber
Pengoperasian Bahasa skrip Flashpoint ,
643624 byteSangat panjang karena tidak ada cara untuk membuat karakter dari kode karakter.
Telepon dengan:
Keluaran:
Tangga ekstra kacau karena font tidak monospace.
Belum dibuka:
sumber
"\n"
bekerja,"\xa3"
untuk mendapatkan sesuatu seperti£
tidak berhasil? jika Anda dapat menggunakan unicode escapes, Anda mungkin dapat memotong array milik Anda.\n
adalah satu-satunya jalan keluar yang dikenali. (Dan""
kutipan di dalam untuk mewakili satu"
)05AB1E , 29 byte
Masukan diambil dalam urutan
N, H, W
Cobalah online!
Penjelasan
sumber
C, 95 byte
sumber
R ,
1381291119893 byte-13 byte berkat Neal Fultz!
-1 byte terima kasih kepada Robin Ryder
Cobalah online!
Fungsi anonim; mengembalikan hasilnya sebagai matriks.
Berkat pertanyaan Word Grids , saya telah memikirkan matriks jauh lebih banyak dari biasanya. Saya mengamati bahwa anak tangga berada pada baris matriks yang merupakan kelipatan dari tinggi langkah
H
(R adalah 1-diindeks), dan bahwa rel adalah kolom pertama dan terakhir,1
danW
. Jadi saya membuat matriks karakter ASCII acak, dan mengganti huruf-huruf yang tidak cocok dengan kriteria tersebut dengan spasi, dan mengembalikan matriks. TIO link mencetaknya dengan baik.Neal Fultz menyarankan pengindeksan yang berbeda untuk karakter spasi
[-H*(1:N),3:W-1]
,, yang menggantikan semua karakter kecuali untuk yang ada dalam baris kelipatan dariH
:-H*(1:N)
dan tidak di tepi,3:W-1
<==>2:(W-1)
.R , 121 byte
Cobalah online!
Peningkatan atas pendekatan berbasis matriks asli yang saya mulai dengan; itu algoritma yang sama tetapi
for
loop lebih pendek daripada membangun dan mencetak matriks (tetapi tidak jika saya tidak mencetaknya!)sumber
m[-H*(1:N),3:W-1]=" "
tampaknya sedikit lebih pendek - Anda selalu dapat mengganti pengujianrow
dancol
dengan irisan 2-d.sample(33:126,...)
dengan32+sample(94,...)
.Perl 5 , 81 byte
80 byte kode +1 untuk
-p
.Cobalah online!
sumber
Arang ,
3432 byteCobalah online! Mengambil input dalam urutan N, H, W. Verbose (
Plus(InputNumber(), 1)
saat ini rusak pada TIO). Penjelasan:Peta lebih dari jangkauan
1..H*(N+1)
. Ini berarti bahwa anak tangga muncul ketikai
kelipatanH
.Bergabunglah dengan hasil:
pemetaan rentang implisit
0..W
:jika kolom tidak
0
atauW-1
baris bukan kelipatanH
maka output spasi;jika tidak, ambil variabel karakter ASCII yang telah ditentukan, balikkan (menempatkan spasi di tempat ke-94), dan cetak karakter acak dari apa yang sekarang menjadi 94. (Karena
Slice
payah.)Bergabunglah menggunakan string kosong. Hasil akhir dicetak secara implisit.
sumber
NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«
? Yah, saya membagi dua dan melakukana0a6316
merusaknya.Map
mana ia digunakannot is_command
saat itu berartiis_command
. Jadi, Anda seharusnya menulisNθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴
jika bukan karena bug itu.C (gcc) ,
141131114109107 byteHarus bisa bermain golf ini sedikit ...
Cobalah online!
sumber
i=1
dalam deklarasi global?Perl 6 ,
7673 byteCobalah online!
Mengambil (h, n, w) sebagai argumen. Mengembalikan daftar string.
Penjelasan:
sumber
xx
dan++$
bukannyamap
. Mungkin Anda dapat menemukan tempat untuk bermain golf dengan byte apa pun?PowerShell ,
132124 byteCobalah online!
Kami membangun tangga terdiri dari hanya
#
pertama ( misalnya ), maka loop|%{...}
melalui masing-masing karakter danif
itu-eq
ual untuk35
, kita tarik keluar baruRandom
karakter dari kisaran yang tepat. Kalau tidak, kita output (yaitu, spasi atau baris baru).sumber
JavaScript (ES6),
117115 byteFungsi rekursif membangun karakter keluaran dengan karakter.
"Lihat Ma, tidak ada umpan garis literal!"
Demo
Tampilkan cuplikan kode
sumber
String.fromCharCode
, karena saya tidak bisa dengan jujur mengatakan saya akan mendapatkan itu sendiri setelah melihat ini. Beri tahu saya jika Anda merasa milik saya sekarang terlalu mirip dengan milik Anda.Python 2 , 142 byte
Cobalah online!
Bytes yang disimpan berkat ovs!
sumber
1
di depan> _>Pyth, 33 byte
Cobalah online: Demonstrasi
sumber
Python 2 , 114 byte
Cobalah online!
sumber
SOGL V0.12 ,
3231 byteCoba Di Sini!
Input dalam urutan N, W, H.
Penjelasan:
18 byte tanpa karakter acak: /
sumber
Java 8,
203188168133132130128126 byteCobalah online!
sumber
W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->0;c=i%H<1|j>W-2|j<2?(char)(Math.random()*94+33):32)System.out.print(c);}}
W-1
, loop dalam harus melakukan iterasi tambahan (>=0
+1 byte).W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->=0;c=i%H*j<1|j>W-2?(char)(Math.random()*94+33):32)System.out.print(c);}}
;++i<H*N+H;
: -2 byte.Haskell ,
226220211190 byteCobalah online!
Disimpan 9 byte berkat Laikoni
Disimpan 21 byte berkat wchargin
Harus golf (
b$(s w)<$[2..h]
danb$((s w)<$[2..h])++[r w]
). Saya tidak merasa nyaman dengan IO dan golf.sumber
t w h n= ...
:(w#h)n= ...
.pure
bisa digunakan sebagai gantireturn
. Anda dapat meletakkan tanda kurung di sekitar(d ' ')<$
dan(s w)<$
.c=randomRIO('!','~')
, yang juga memungkinkan Anda sebarisd=return
. Juga,mapM id
satu byte lebih pendek darisequence
.JavaScript (ES6), 144 byte
Buat tangga
#
karakter lalu ganti masing-masing dengan karakter ASCII acak.Cuplikan Tes
Tampilkan cuplikan kode
sumber
String.fromCharCode
danMath.random
dalam satu solusi - mengapa JavaScript membenci kami ?! Datang dengan ini untuk 137 byte, yang sangat mirip dengan Anda, hanya tanpa array. Saya bertanya-tanya sekarang apakah solusi rekursif mungkin masih lebih pendek; akan menyelidiki nanti.JavaScript (ES6),
129117 byteSayangnya, ketika saya sedang dalam proses bermain golf ini, Arnauld mengalahkan saya ke solusi yang sama tetapi lebih pendek . Dengan menggabungkan 2 solusi kami, ini bisa menjadi 113 byte
Termasuk baris baru yang tertinggal.
Cobalah
sumber
Japt
-R
,42414037342825 byteMengambil input dalam urutan
H,W,N
.Cobalah
sumber
QBIC , 76 byte
Penjelasan
Contoh dijalankan
sumber
MATL ,
6350 byte-13 byte berkat Luis Mendo
Cobalah online!
Saya masih baru bermain golf di MATL (dan saya tidak terlalu bagus di MATLAB dalam hal ini), jadi saya tahu ini mungkin tidak mendekati optimal. Kiatnya diterima. Mengambil input secara berurutan
N,H,W
.Kita mulai:
Kami sekarang memiliki matriks char acak.
Sekarang ada juga matriks logis untuk rel.
Sekarang kita memiliki 3 matriks di stack:
Jadi kami melakukan yang berikut:
sumber
X"
secara3$
default.6Y2
mungkin berguna bukan13:106
...20+
.~~
adalahg
.J3G&Ol5LZ(
dapat digunakan sebagai ganti1F3G2-Y"h1hJT3$X"
X"
. Pada tip terakhir,5L
adalah[1 0]
tetapi saya tidak yakin bagaimana itu digunakan bersama denganZ(
- Saya mendapatkan bahwa itu menugaskan1
ke kolom pertama dan terakhir tetapi saya tidak mendapatkan bagaimana5LZ(
melakukannya. Saya mungkin akan mem-ping Anda di MATL CHATL beberapa waktu kemudian tentang ini jadi jangan khawatir tentang itu untuk saat ini.0
sama dengan "end".Z(
ditugaskan ke kolom. Tentu saja, silakan ping saya di chat!Powershell, 102 byte
Skrip uji yang kurang golf:
Keluaran:
sumber
Ruby , 71 byte
EDIT: Ups Saya pikir ini adalah tantangan baru karena hasil edit baru-baru ini untuk memperbaiki kesalahan ketik. Saya masih meninggalkan ini karena belum ada jawaban Ruby untuk itu.
Cobalah online!
sumber