Seni Membentuk Kata
Diberikan matriks biner, dan string huruf, ganti semua 1 dalam matriks dari kiri, ke kanan dengan huruf-huruf string. Setelah huruf-huruf telah dibentuk menjadi bentuk matriks, cetak matriksnya, ganti 0 dengan spasi. Mungkin lebih mudah untuk hanya memberikan satu atau dua contoh.
Kasus: Kasus dasar ...
Masukan satu:
[0,0,1,0,0]
[0,1,0,1,0]
[1,0,0,0,1]
[0,1,0,1,0]
[0,0,1,0,0]
"PPCGPPCG"
Output Satu:
P
P C
G P
P C
G
Kasus: Jika string input lebih panjang dari jumlah ...
Input Dua:
[1,0,0]
[0,1,0]
[1,0,1]
lambda
Output Dua:
l
a
m b
Kasus: Jika string input lebih pendek dari jumlah ...
Input Tiga:
[1,1,1]
[1,0,1]
[1,1,1]
PPCG
Output Tiga:
PPC
G P
PCG
Asumsi yang Tersedia
- Anda dapat menganggap string input tidak pernah kosong.
- Anda mungkin menganggap matriks tidak akan pernah kosong.
- Anda mungkin tidak berasumsi bahwa matriks biner tidak akan pernah menjadi nol semua.
Aturan
- Jika string lebih pendek dari jumlah, ulangi string; semua harus diganti.
- Jika string lebih panjang dari jumlah, hanya gunakan apa yang dibutuhkan.
- Anda dapat menggunakan Benar / Salah menggantikan bilangan bulat / bit untuk input.
- Ruang tambahan DIBUTUHKAN, semua nol harus diganti dengan spasi.
- Satu baris baru dapat diterima.
- Ini adalah kode-golf, kemenangan jumlah byte terendah.
Jawaban:
MATL , 11 byte
Input adalah matriks numerik (dengan
;
pemisah baris) dan string.Cobalah online! Atau verifikasi kasus uji: 1 , 2 , 3 .
sumber
Vim,
4442 byteDisimpan 2 byte berkat @DjMcMoylex !
Di sini,
^M
ini adalah baris baru secara literal, dan^V
itulahCTRL-VMengambil input dalam format ini:
Penafian: Jika string lebih panjang dari ~ 40 karakter, komputer Anda mungkin kehabisan ram.
Penjelasan:
Inilah gif saya "menjalankan" program ":
sumber
{
di tempatgg
untuk mengambil beberapa off.Retina ,
4133 byteCobalah online!
String input diberikan pada baris pertama input, diikuti oleh matriks. Karena Retina tidak memiliki konsep daftar (atau benar-benar apa pun kecuali string), tidak ada pemisah dalam matriks biner kecuali untuk umpan baris untuk memisahkan baris.
Penjelasan
Mengubah nol menjadi spasi.
Ganti berulang kali
1
dengan karakter pertama dari string input sambil juga memutar karakter itu ke akhir string input. Ini menangani kasus di mana ada lebih1
dari karakter dalam string input.Buang baris pertama, yaitu string input.
sumber
(.)(.*)
- Teehee ...JavaScript ES6,
67535049 byteDisimpan 3 byte berkat @ETHproduksi Tersimpan 1 lagi berkat @Neil
Kode lama sebelum saya tahu bahwa matriks string adalah format input yang valid:
Tampilkan cuplikan kode
sumber
c=>' '[c]||b[i++%b.length]
, tapi sayangnya itu satu byte lagi ...(a,b,i)=>a.replace(/\d/g,c=>+c?b[++i]||b[i=0]:' ')
i
adalahundefined
, begitu++i
kembaliNaN
. Karenab
tidak memilikiNaN
properti,b[++i]
pengembalianundefined
, dan||
operator menjalankan argumen sisi kanannya, mengaturi
ke0
dan mengembalikan karakter pertamab
.\d
? Tentunya.
sudah cukup, karena Anda hanya perlu berurusan dengan0
s dan1
s (.
tidak cocok dengan baris baru).Perl, 40 byte
36 byte kode +
-i -p
bendera.(perhatikan ruang terakhir dan tidak adanya baris baru final).
Untuk menjalankannya, tulis string input setelah
-i
flag, dan berikan matriks dalam input:Jika Perl Anda agak tua, Anda mungkin perlu menambahkan titik koma akhir (setelah spasi).
sumber
Python 2,
11471 byteTernyata saya menciptakan kembali roda, ganti ganda sederhana pada string multiline bekerja dengan sangat baik. String memiliki manfaat tambahan untuk dapat menghitung nol secara langsung daripada harus melakukan yang benar-benar jelek
s*len(L)*len(L[0])
untuk daftar bersarangSolusi lama:
Pertama kita mengonversi semuanya + 32 dengan
chr
(semua nol menjadi spasi), lalu kita ganti semua!
dengan{}
untuk mengizinkan penggunaanformat
fungsi.JikaJika saya memutuskan untuk menipu dan menggunakanNULL
bisa dihitung sebagai spasi.NULL
alih-alih ruang, saya dapat melewati penambahan 32 untuk menghemat 12 byte. (print
ditampilkan'\x00'
sebagai spasi)sumber
.replace('\x00',' ')
pada akhirnya menambahkan 20 byteAPL, 18 byte
Ini adalah fungsi yang mengambil matriks boolean sebagai argumen kiri dan string sebagai argumen kanannya.
Penjelasan:
APL memiliki built-in yang melakukan sesuatu seperti ini,
\
(perluas). Namun, ini hanya berfungsi pada vektor, dan itu mengharuskan setiap karakter untuk benar-benar digunakan.X←,⍺
: ratakan matriks dan simpan hasilnya dalam X.⍵⍴⍨+/X
: membentuk kembali vektor karakter sehingga memiliki jumlah elemen yang diperlukan (ini juga menangani pemanjangan string dengan mengulangi karakter jika perlu).X\
: ambil salah satu karakter untuk masing-masing1
dan satu ruang untuk masing-masing0
dalamX
.(⍴⍺)⍴
: membentuk kembali hasilnya sehingga memiliki bentuk matriks asli.sumber
PHP,
11091978882818075 bytedisimpan 6 byte berkat @ user59178
Jalankan dengan
-r
. Mengharapkan matriks sebagai string multiline dalam argumen pertama, string dalam argumen kedua.sumber
foreach(str_split($argv[1])as$c)echo$c<1?$c?:" ":($s=$argv[2])[$k++%strlen($s)];
Saya menukar urutan dua terner dan dengan demikian menjatuhkan tanda kurung dari yang kedua dengan menggunakan<1
daripada>0
for(;""!=$c=$argv[1][$i++];)
bukanforeach(...)
PowerShell v2 +, 70 byte
Mengambil input kata sebagai
$a
dan matriks sebagai array-of-array sebagai$b
(lihat contoh di bawah). Loop melalui$b
, kemudian loop melalui elemen setiap baris$_|%{...}
. Loop dalam adalah kondisiif
/else
, di mana kita baik output$a[$n++]
dan mengambil mod-sama dengan panjang string, atau output spasi' '
. Itu-join
disatukan kembali menjadi string. Masing-masing string dibiarkan pada pipa, dan output implisit dengan baris baru antara terjadi melaluiWrite-Output
pada saat penyelesaian program.sumber
Groovy, 63
sumber
Python 3, 104 (atau 83) Bytes
Ada opsi yang lebih pendek (83 Bytes), tetapi akan gagal jika string lebih dari 999 kali lebih pendek dari yang dibutuhkan:
sumber
next
daftar. Jika Anda melakukannyas=iter(list(s)*999)
(89 byte)s.pop(0)
. Sepertinya saya menyalin versi yang salah, memperbaikinya.s[i++%s.length()]
adalah metodologi yang baik, meskipun saya tidak tahu python.i++
PythonPyth, 12 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber
ES6, 78 byte
Saya mencoba
sumber
Common Lisp, 152 byte
Pemakaian:
Fungsi ini loop melalui setiap elemen dari setiap baris grid. The
format
kontrol String baik mencetak spasi jika elemen adalah 0 atau mengkonsumsi argumen karakter jika elemen adalah 1. Sebuah baris baru akan dicetak setelah setiap baris dari grid. Jika string terlalu pendek, itu terulang dari awal; jika terlalu lama, hanya bagian yang sesuai akan dikeluarkan.sumber
Pip , 18 byte
17 byte kode, +1 untuk
-l
bendera.Mengambil array sebagai argumen baris perintah pertama seperti ini:
100 010 101
(perlu dikutip dalam shells) dan string sebagai argumen baris perintah kedua. Cobalah online!Penjelasan
sumber
Java,
237233 BytesSunting: disimpan 4 Bytes berkat Mukul Kumar
Golf:
Tidak Disatukan:
Pengujian:
sumber
Pyke, 12 byte
Coba di sini!
Menghasilkan matriks karakter
Atau 9 byte, tidak kompetitif.
Coba di sini!
Bahkan lebih tidak kompetitif, 8 byte
Coba di sini!
print_grid
sekarang menyelaraskan string kosong dengan benardeep_for
sekarang tipe tebak pada tipuan dari tipe yang berbeda dengan kebenaran
sumber
Java, 122 byte
sumber
Mathematica, 76 byte
Fungsi tanpa nama dari dua argumen, yang pertama (
#
) adalah arrayTrue
s danFalse
s, dan yang kedua (s
) adalah daftar karakter. Fungsi pembantudidefinisikan, yang menempatkan gerakan karakter pertama
s
hingga akhir dan kemudian mengembalikan karakter yang baru saja dipindahkan. Memanggilf
beberapa kali akan mengembalikan karakters
secara berurutan.Fungsi utamanya adalah
yang memanggil
f
setiapTrue
nilai dalam array input dan mengembalikan spasi pada setiap input yang salah. ({2}
MengisahkanMap
untuk bekerja pada elemen daftar komponen array, daripada daftar itu sendiri.)60 byte itu mengembalikan array karakter
s
dan spasi. Bungkusnyamenempatkan baris baru di antara masing-masing daftar larik itu dan kemudian menggabungkan semuanya.
sumber
C ++, 61 byte
sumber