Tantangan
Pernah melihat judul-judul trailer film (yaitu Mars, Interstellar, dll) di mana mereka memiliki celah besar di antara surat-surat perlahan menyebar?
Tantangannya adalah untuk menciptakan kembali efek ini mengingat string, pengali celah dan arah, dengan memasukkan jumlah ruang yang tepat di antara huruf.
Contoh
Input : 'INTERSTELLAR', Pengganda celah: 1.0, Arah: Meningkatkan Ke Dalam
Output: I N T E R S T E L L A R
Jaraknya adalah: [1, 2, 3, ..., 3, 2, 1]; mengganti spasi dengan '.' untuk lebih menunjukkan jarak:
I.N..T...E....R.....S......T.....E....L...L..A.R
Input : 'INTERSTELLAR', Pengganda celah: 0,5, Arah: Meningkatkan Ke Dalam
Output: IN T E R S T E L L AR
Spasi dikalikan 0,5, oleh karena itu kita mendapatkan [0, 1, 1, 2, ... 2, 1, 1, 0] dari pembagian integer; menggunakan '.':
IN.T.E..R..S...T..E..L.L.AR
Input : 'CODEGOLF', Pengganda celah: 2.0, Arah: Menambah Ke Luar
Output: C O D E G O L F
Spasi dikalikan dengan 2, meningkat ke luar, oleh karena itu kita mendapatkan [8,6,4,2,4,6,8]; ganti dengan '.':
C........O......D....E..G....O......L........F
Input : 'CODEGOLF', Pengganda celah: 0,4, Arah: Menambah Ke Luar
Output: C O DEGO L F
Spasi dikalikan dengan 0,4, meningkat ke luar, oleh karena itu kita mendapatkan [1,1,0,0,0,1,1]]; ganti dengan '.':
C.O.DEGO.L.F
Aturan
- Membawa 3 input: string, pengali celah dan arah
- Jika string input panjangnya ganjil (bahkan dalam # kesenjangan) misalnya 'HELLO', jarak bagian dalam paling banyak 2 celah harus sama
H E L L O
- Pengganda arah dan celah dapat diuraikan seperti yang Anda inginkan, misalnya Anda dapat menggunakan -2 sebagai 'meningkatkan ke dalam dengan pengganda 2', 1 sebagai 'meningkatkan ke luar dengan pengganda 1', dll.
- Hanya diperlukan untuk menggunakan spasi, namun itu adalah bonus jika pengisian karakter dapat disesuaikan.
Animasi Referensi
Bersenang-senang bermain golf!
Increasing
ke1 => Inward, 0 => Outward
atau sebaliknya.C..O....D......E........G......O....L..F
Jawaban:
JavaScript (ES6),
86828180 byteInput diharapkan dalam sintaks currying
f(s)(r)
, dengan:s
= stringr
= rasio + arah: pelampung negatif untuk ke dalam atau pelampung positif untuk ke luarsumber
05AB1E , 33 byte
Menggunakan pengodean CP-1252 .
Pengganda kesenjangan dianggap negatif ketika meningkat di luar.
Cobalah online!
sumber
APL, 40 byte
Ini mengambil string sebagai argumen kanannya, rasio sebagai argumen kiri dan arahnya sebagai operan kiri (0 untuk ke dalam dan 1 untuk ke luar).
Penjelasan:
⍳⍴1↓⍵
: dapatkan daftar angka dari 1 hingga N-1, dengan N adalah panjang string(⌽⌊+)
: membalikkan daftar, dan di setiap posisi, dapatkan jumlah terendah dari kedua daftar (ini memberikan ukuran kesenjangan jika meningkat ke dalam)(1+⌈/-+)⍣⍺⍺
: kurangi setiap angka dalam daftar dari angka tertinggi dalam daftar, dan tambahkan 1. Lakukan ini⍺⍺
kali. (Jika⍺⍺=0
, tidak ada yang akan terjadi, dan jika⍺⍺=1
, ini akan memberikan ukuran celah jika meningkat ke arah luar.)-⌊⍺×
: kalikan setiap celah dengan⍺
, bulatkan ke bawah, dan negasikan.∊1,⍨1,¨
: tambahkan 1 di depan setiap celah, dan 1 di bagian paling akhir daftar.0~⍨
: hapus sembarang angka nol.⍵\⍨
: gunakan daftar yang dihasilkan untuk memperluas⍵
. Expand (\
) bekerja dengan cara berikut: untuk setiap angka positif, karakter saat ini direplikasi berkali-kali, dan untuk setiap angka negatif, bahwa banyak spasi dimasukkan, dengan peringatan itu0
dan¯1
melakukan hal yang sama, itulah sebabnya semua nol harus dihapus lebih awal.sumber
MATL , 31 byte
Inputnya adalah: string;
0
atau1
untuk peningkatan ke dalam atau ke luar; pengganda.Cobalah online!
Penjelasan
Pertimbangkan masukan
'INTERSTELLAR'
,1
,0.5
sebagai contoh.sumber
Racket 348 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber
PHP, 129 Bytes
12 Bytes disimpan oleh @Titus Terima Kasih
string = $ argv [1], rasio = $ argv [2], arah = $ argv [3] ke dalam = 0, Luar = 1
sumber
str_pad
harus menyimpan 4 byte. Coba++$i>$l?$l-$i/2:$i/2
dan$t[$i++]/2
bukannya peningkatan dalam kondisi pasca lingkaran; itu harus menyelamatkan 9. Mengapa0^
?0^3.12
menghasilkan3
yang diperlukan$i=0
tidak perlu.++$i>
masih menyimpan lebih dari satu byte$i++>=
. Dan Anda dapat menyimpan satu byte lagi dengan memindahkan kenaikan itu ke kondisi awal:++$i<2*$l=...
alih-alih$i+1<2*$l=...
, menukar cabang true dan false dari terner luar,$i
bukan++$i
dan$t[$i/2-.5]
bukannya$t[$i++/2]
.1
dan ke luar sebagai2
, akan memungkinkan Anda untuk menyimpan 3 byte lainnya:($l>>1)
bukannya(0^$l/2+1)
; tapi saya belum menguji semua ini.