Memasukkan:
1
X
X
X
X XX XXXXXX X X X
X XX XXXXXX X X X
XXX X XX XXXXXX X X X
XXX X XX XXXXXX X X X
Keluaran:
X.
X..
X...
X.... XX. XXXXXX. X.X.X.
X..... XX.. XXXXXX.. X.X.X..
XXX. X......XX... XXXXXX... X.X.X...
XXX.. X......XX....XXXXXX.... X.X.X....
Memasukkan:
2
XX
XX
XX
XX
XX
XX XX
XX XX
XX XX
XX XX
Keluaran:
.XX
..XX
...XX
....XX
.....XX
..XX..XX
...XX..XX
....XX..XX
.....XX..XX
Spesifikasi:
- Anda harus menerima sebagai masukan
- Sebuah bendera yang menandakan apakah cahaya datang dari kiri atas atau kanan atas. Ini bisa menjadi
1
atau2
,-1
atau1
,0
atau65536
, atau apa pun yang nyaman bagi Anda, selama kedua flag adalah bilangan bulat. - Baris yang terdiri dari salah satu
X
atau, semua karakter dengan panjang yang sama (mis. Diisi dengan
)
- Semua
X
akan berada di baris terakhir atau diX
bawahnya (berarti tidak ada bangunan terapung)
- Semua
- Sebuah bendera yang menandakan apakah cahaya datang dari kiri atas atau kanan atas. Ini bisa menjadi
- Anda harus menampilkan baris (bangunan) dengan bayangan yang ditambahkan. Ini dilakukan dengan prosedur berikut:
- Jika cahaya datang dari kiri atas, gambarlah segitiga siku-siku
.
s dengan tinggi dan lebar yang sama dengan tinggi bangunan, mulai dari satu ruang melewati tepi kanan dan menuju ke kanan. - Kalau tidak, jika itu dari kanan atas, lakukan hal yang sama tetapi mulai dari satu ruang melewati tepi kiri dan menunjuk ke kiri.
- Ingat, jangan ubah
X
s dengan mengubahnya menjadi.
; biarkan mereka apa adanya. - Akan selalu ada "ruang" untuk bayangan Anda, yaitu jika ada bangunan setinggi 3 ruang di ujungnya akan ada setidaknya 3 ruang padding setelahnya.
- Jika cahaya datang dari kiri atas, gambarlah segitiga siku-siku
- Ini adalah kode-golf , jadi kode terpendek dalam byte akan menang!
{}
dan{-1*}
sebagai nilai flag?potato
danwhile(1){}
. Seperti dikutip dalam pertanyaan, "apa pun yang nyaman."Regex.Replace
mana saya tidak bisa mengatasi ... apakah saya memiliki dua masalah sekarang?Jawaban:
GolfScript, 67 karakter
1 / -1 untuk bayangan ke kanan / kiri. Jalankan contoh online :
sumber
Perl - 85
EDIT: Saya benar-benar lupa tentang
-p
bendera yang perlu dijalankan. Menambahkan 2 ke hitungan char.Bendera yang ditentukan pada baris pertama adalah
0
untuk bayangan ke kiri dan2
untuk bayangan ke kanan.sumber
Python 3 - 233
Ya, ternyata itu lebih lama dari yang diharapkan ...
1 untuk bayangan ke kanan, -1 untuk bayangan ke kiri.
EDIT: Tidak melihat sisi mana pun yang sesuai dalam aturan. Ehehe. ^^ '
sumber
JavaScript - 14
Bendera pada baris pertama adalah
for(p='';l=prompt();)console.log(p=l.replace(/ /g,function(a,b){return p[b+1]=='.'||p[b]=='.'||l[b+1]=='X'?'.':a}));
untuk bayangan yang menghadap ke kiri ataufor(p='';l=prompt();)console.log(p=l.replace(/ /g,function(a,b){return p[b-1]=='.'||p[b]=='.'||l[b-1]=='X'?'.':a}));
untuk bayangan ke kanan.Ini mungkin menyalahgunakan aturan "apa pun yang nyaman bagi Anda" untuk bendera: P
Edit: tanpa penyalahgunaan (127):
Bendera untuk ini adalah
1
atau-1
sumber
potato
...", kecualipotato
bilangan bulat. :-Pc=+prompt()
ataub+c
akan digabungkan sebagai string.for(c=p=+(P=prompt)(d='.');l=P();)console.log(p=l.replace(/ /g,function(a,b){return p[b]==d|p[b+=c]==d|l[b]=='X'?d:a}))
(demo)c
ke nomor dengan mengurangi sebagai gantinya.b-c
ataub-=c
dalam kode saya di atas. (demo)Python 2.7 - 229
Versi Tidak Serigala
sumber