Menurut saya, tornado terlihat seperti ini:
########
#######
######
#####
####
###
##
#
Tornado ini dimulai dengan lebar n
, dan pada setiap baris berikutnya, karakter dihapus dari kiri atau kanan, tergantung pada input.
Memasukkan
Input akan berupa daftar semacam apa saja dari dua nilai unik (string dua karakter unik juga berfungsi), dan bilangan bulat positif opsional untuk menunjukkan lebar awal. Jika bilangan bulat opsional tidak diambil, maka lebar awal adalah 1 lebih besar dari panjang daftar. Biarkan lebar mulai menjadi n
.
Cara membuat tornado
Dalam contoh saya, saya memilih daftar saya untuk mengandung 1
s dan 0
s, meskipun Anda dapat memilih dua nilai konstanta berbeda, atau string dari dua karakter konstanta berbeda.
Baris pertama akan terdiri dari n
karakter non-spasi putih (Anda dapat memilih karakter yang konsisten; Saya memilih #
untuk contoh saya).
Kemudian, untuk setiap nomor dalam daftar, jika nomornya 0
, hapus karakter kiri dan buat baris baru; jika a 1
, hapus karakter yang tepat dan buat baris baru.
Jadi, tornado di atas adalah output untuk 8, [1, 0, 0, 0, 1, 0, 0]
.
Keluaran
Outputnya bisa berupa daftar string, daftar daftar karakter, atau string multiline. Trailing whitespace pada setiap baris diperbolehkan, dan baris tambahan trailing di akhir diperbolehkan.
Uji Kasus
Testcases ini termasuk lebar mulai dan daftar penggunaan 1, 0
.
5, [1,0,0,1]
#####
####
###
##
#
10, [1,0,0,1,0,1,0,0,1]
##########
#########
########
#######
######
#####
####
###
##
#
7, [1,1,1,1,1,1]
#######
######
#####
####
###
##
#
100,
[1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1]
Aturan
- Celah standar berlaku
- Kode terpendek dalam byte menang! kode-golf
- Latar belakang tidak harus berupa spasi (saya lupa menentukan ini sebelumnya).
- Bahasa Anda hanya perlu mendukung angka (lebar) yang dapat ditangani, tetapi jika penerjemah Anda ditulis ulang dengan ukuran angka yang lebih besar, maka secara teoritis ia harus bekerja.
Jawaban:
V ,
15, 12 byteCobalah online!
l
untuk kanan, (masuk akal, bukan?) dan>
untuk kiri.sumber
Python 2 ,
6659 byte-7 byte terima kasih kepada Arnold Palmer
Cobalah online!
0
untuk menghapus dari kanan,1
untuk menghapus dari kirisumber
len(z)+1
denganx
jika "bilangan bulat positif opsional" berarti Anda tidak harus menggunakannya. Kata-kata dari pertanyaan membuatnya terdengar seperti ini diizinkan karena ia mengatakan "Jika bilangan bulat opsional tidak diambil" versus "Jika bilangan bulat opsional tidak diberikan".vim,
8582 byte<ESC>
adalah 0x1B,<CR>
adalah0x0D
,<C-v>
adalah 0x16. Dan<ESC>OH
merupakan urutan multibyte yang mewakili kunci HOME.Input digunakan
a
sebagai nilai "hapus kiri" danb
sebagai "hapus kanan".Sayangnya, tidak ada tautan TIO. Saya tidak bisa membuatnya bekerja di bawah V. Uji dengan menyalin kode ke tornado.vim (mengganti
<ESC>
, dll dengan byte mereka yang sebenarnya) dan berjalan sebagai berikut:-3 byte karena saran Neil.
sumber
^
bukan␛OH
?^
pergi ke karakter non-kosong pertama.␛OH
pergi ke karakter pertama.0
aku tidak ...05AB1E ,
119 byte-2 byte terima kasih kepada Erik the Outgolfer
Hapus dari kiri:
1
Hapus dari kanan:
0
Cobalah online!
sumber
0×ηsηO
memiliki begitu banyak potensi tetapi saya tidak dapat menemukannya di bawah 11 byte.ðy×ì
denganyú
-2.Retina ,
3028 byteCobalah online! Hanya mengambil string 0s dan 1s dan menghitung lebar berdasarkan string. Penjelasan: Tahap pertama mengambil string input dan menduplikasinya sekali untuk setiap titik batas, menyisipkan
#
pada titik itu. Tahap kedua kemudian mengubah semua digit setelah#
ke lebih banyak#
, menciptakan segitiga. Stange ketiga kemudian menghapus semua yang tersisa dan mengubah nol menjadi spasi yang menghasilkan "goyangan" torndao.sumber
J, 32 byte
ungolfed
Cobalah online!
sumber
' #'#~0(,.#\.)@,+/\
, di mana input dibalik dari sampel karena tantangan memungkinkan Anda untuk memilih dua nilai yang berbeda.Perl, 43 byte
42 byte kode +1 untuk
-l
.Cobalah online!
sumber
R ,
8582 byte3 byte disimpan berkat Giuseppe
Cobalah online!
Penjelasan:
sumber
{}
dan menggunakan baris baru literal alih-alih'\n'
Haskell, 50 byte
Cobalah online!
Jika daftar input dapat berupa daftar nama fungsi, kita dapat menyimpan satu byte
Haskell, 49 byte
Contoh penggunaan:
h 5 [g,f,f,g]
.Cobalah online!
Bagaimana itu bekerja:
sumber
Python 2,
5857 bytesunting: disimpan 1 byte berkat xnor
Cobalah online!
1 untuk menghapus dari kiri, 0 untuk menghapus dari kanan.
sumber
s=" "*i+s[:-1]
dengan bertukar kiri dan kanan.R ,
116109102 byte-5 byte terima kasih kepada user2390246 (dan 2 lainnya saya simpan sendiri)
Dikalahkan oleh user2390246
Cobalah online!
Mengembalikan fungsi anonim yang mengambil
n
dan vektorl
dengan0
untuk menghapus dari kiri dan1
untuk menghapus dari kanan, dan mencetak hasilnya ke konsol dengan pemformatan kanan.sumber
#
s akan n-i +1: Cobalah secara online! Meskipun ada pendekatan yang sedikit lebih baik jika Anda hanya mencetak baris demi baris daripada membangun matriks: codegolf.stackexchange.com/a/133720/66252Japt ,
1413 byte-1 byte terima kasih kepada @ETH
Input adalah array, lalu ukuran. Nilai array adalah
""
atau" "
, yang masing-masing mewakili penghapusan dari kanan atau kiri. Menggunakan"
alih-alih#
dan kembali sebagai array string.Idenya di sini adalah untuk pertama-tama membuat array dari padding kiri untuk setiap baris, karenanya string input. Kemudian, setiap baris mendapatkan
"
s, menggunakan fakta bahwa jumlah"
s berkurang 1 setiap kali.Cobalah online!
Ini semua menggunakan
-R
bendera untuk memformat output dengan bergabung dengan baris baru.Penjelasan
Tersirat:
U
= array input,V
= jumlah input.Secara kumulatif mengurangi array input (
å
) dengan rangkaian string (+
). Ini menghasilkan array dari masing-masing nilai tengah reduksi. Kemudian, tambahkan (u
) string kosong (P
) ke array.Memetakan
£
setiap nilai untuk dirinya sendiri (X
) disatukan dengan ...Karakter kutipan (
Q
) diulang (p
)V--
(V´
) kali. Ini juga mengurangiV
setiap kali.sumber
YnV
keV´
++
atau--
di Japt.ArnoldC , 3132 byte
ArnoldC tidak memiliki rangkaian string, jadi ini membangun tornado dari
8
s dan menggunakan1
s untuk mengeluarkannya. ArnoldC juga hanya mendukung bilangan bulat 16-bit, sehingga meluap dengan input lebih dari 7 digit. (Jadi itu hanya akan membuat tornado mini)1
dibiarkan, digit lainnya benar (walaupun saya tidak akan merekomendasikan0
, karena Anda tidak dapat memulai dengan itu.)Memasukkan:
1221122
Keluaran:
Kode golf:
Cobalah online!
Kode tidak dikunci (5178 bytes):
sumber
Haskell ,
6764 byteInput dibalik:
0
berarti hapus ke kanan, dan1
hapus ke kiri:Cobalah online!
"Tidak Diundang"
sumber
Java (OpenJDK 8) ,
138133 byteCobalah online!
sumber
C,
6863 byteIni menggunakan spesifikasi lebar bidang dinamis dalam
printf()
string format. Fungsi ini dinamakan seperti ini:sumber
int s=0;
dan meletakkans;
sebelumf(w,i)
. Seperti ituJavaScript (ES6), 64 byte
Fungsi anonim mengambil parameter dalam sintaks currying (a) (b). Dalam b array, string kosong mewakili penghapusan dari kanan dan spasi mewakili penghapusan dari kiri.
Menggunakan 1 dan 0 seperti pada contoh skornya adalah 70
Uji
sumber
PowerShell , 53 byte
Cobalah online!
Mengambil input
$a
sebagai bilangan bulat opsional dan$b
sebagai array dari1
dan0
s. (Perhatikan bahwa array saya dari1
dan0
flip-flop dari tantangan.) Membangun garis awal#
dan membiarkannya pada pipa. Kemudian loop dari0
ke$a
. Setiap iterasi, kami menghasilkan jumlah ruang yang mungkin bertambah, diikuti oleh jumlah pra-pengurangan#
. Ya, ini akan memuntahkan baris baru yang kosong di bagian akhir, karena kami akan melanjutkan$a
jumlah item dalam daftar.Semua string individu ditinggalkan pada pipa dan output dengan pemisah baris baru di antara mereka secara implisit pada penyelesaian program.
sumber
C #, 181 byte
Cobalah online!
Versi Lengkap / Diformat:
sumber
Arang , 17 byte
Cobalah online! Tautan adalah ke versi kode verbose terdekat. Penjelasan:
Input pertama memberikan jumlah iterasi loop.
Karena indeks loop default ke indeks-nol, kami menambahkan satu di sini untuk mendapatkan jumlah
#
s yang benar.Mulai dari bagian bawah tornado dan bekerja menghemat satu byte, tetapi kemudian kita perlu membalikkan input kedua sehingga kita dapat mengindeks digit saat ini.
Jika digit saat ini adalah
1
, naikkan. Ini membuat baris sebelumnya memiliki ekstra#
di akhir.Jika digit saat ini adalah
0
, pindah ke atas dan ke kiri. Ini membuat baris sebelumnya memiliki ekstra#
di awal.sumber
C # , 159 byte
Penjelasan
Cobalah online!
sumber
PHP, 136 byte
Simpan dalam file php dan uji dengan
php file.php 8 '1,0,0,0,1,0,0'
. Keluaran:Sayangnya, menyiapkan input sudah setengah dari pekerjaan.
Versi lain (158 byte) menggunakan
str_repeat
alih-alihprintf
dan ...goto
dari semua hal:sumber