Katakanlah saya memiliki teks seperti ini (setiap kata pada satu baris, tanpa spasi)
Programming
Puzzles
&
Code
Golf
Itu tidak masuk akal! Ini benar-benar menentang hukum fisika.
Tantangan Anda adalah memperbaiki situasi yang mustahil ini dan menciutkan teks seperti ini:
P
Prog
&uzz
Coderam
Golflesming
Sehingga tidak ada ruang kosong di bawah karakter apa pun kecuali karakter mempertahankan urutan vertikal mereka.
Tujuannya adalah untuk memenuhi persyaratan tetapi menggunakan byte terkecil dari kode sumber yang mungkin.
Jawaban:
Pyth, 10 byte
Cobalah online di Pyth Compiler / Executor .
Ide
Kami dapat mencapai hasil yang diinginkan dengan menerapkan empat transformasi sederhana:
Membalik urutan baris:
Alihkan baris dan kolom:
Atas ini membenarkan, menciutkan kolom asli.
Alihkan baris dan kolom:
Membalik urutan baris:
Kode
sumber
Haskell, 62 byte
Saya sangat dewasa.
sumber
Python 2, 104 byte
Algoritma sekali jalan yang berulang. Kami melewati setiap baris secara berurutan, memperbarui daftar
l
jalur ke keluaran. Kata baru secara efektif mendorong dari bawah, menggeser semua huruf di atasnya satu spasi. Misalnya, dalam kasus ujisetelah kita selesai
Code
, kita punyadan kemudian menambahkan
Golf
hasil dalamyang bisa kita lihat sebagai kombinasi dua potong
di mana potongan pertama digeser oleh
golf
. Kami melakukan pemindahan ini dengan salah satuzip
dari daftar keluaran dengan elemen di ujung (sisi kiri) dan daftar keluaran didahului oleh garis kosong (sisi kanan), memotong setiap bagian pada panjang elemen baru.Tampaknya lebih alami untuk beralih ke belakang, membiarkan surat-surat baru jatuh dari atas, tetapi upaya saya ternyata lebih lama.
Sebagai perbandingan, inilah pendekatan
zip
/filter
, denganmap(None,*x)
digunakan untukiziplongest
(109 byte):sumber
CJam, 11 byte
Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
Gagasannya sama dengan jawaban Pyth saya .
sumber
JavaScript (ES6), 146
(2 baris baru di dalam string template signifikan dan dihitung)
Gagasan @Dennis diimplementasikan dalam JavaScript. Fungsi S panjang melakukan transposisi baris demi baris dan char oleh char, meninggalkan hasilnya dalam
t
array.Kurang bermain golf di dalam cuplikan (coba di Firefox)
sumber
S(t.reverse()),t.reverse().join
denganS(R=t.reverse()),R.join
.R, 223 byte
Ini adalah cara yang sangat panjang dan naif untuk melakukannya.
Tidak Disatukan:
Anda dapat mencobanya secara online .
sumber
Matlab / Oktaf, 99 byte
Contoh :
Tentukan string input dalam variabel, katakanlah
s
.10
adalah karakter umpan baris:Fungsi panggilan
f
dengan inputs
:Atau coba online (terima kasih kepada @beaker untuk bantuan dengan penerjemah Oktaf online)
sumber
JavaScript ES6, 119 byte
Ini dia ungolfed dan di ES5 dengan komentar yang menjelaskan cara kerjanya:
sumber
APL (Dyalog Extended) ,
1311 byte SBCS-2 dengan ekstensi saya ke Dyalog APL.
Fungsi diam-diam anonim, mengambil dan mengembalikan matriks karakter.
Cobalah online!
~
menghapus∘
satu' '
spasi⍤
dari1
baris (lit. 1D sub-array)⍢
sementara⍉
dialihkan⍢
sementara⊖
membaliksumber
R,
190178175 BytesMungkin masih ada ruang untuk bermain golf di sini. Mungkin beberapa operasi yang tidak perlu di sana
Tidak diikat dan dijelaskan
Uji Coba. Sangat menarik untuk dicatat bahwa karena cara pemindaian bekerja, seluruh kalimat dapat dimasukkan dengan spasi dan masih memberikan output seperti yang ditentukan.
sumber
STATA, 323 byte
Mengambil input dalam file yang disebut ab Only berfungsi hingga 24 karakter sekarang. Akan diperbarui nanti untuk membuatnya berfungsi dengan lebih banyak. Juga, tidak berfungsi di kompiler online. Membutuhkan kompiler yang tidak bebas.
Sunting: memindahkan diam-diam (untuk menekan output) ke loop itu sendiri dari setiap pernyataan dalam loop, menghemat 8 byte.
sumber
R, 171 byte
Dengan baris baru dan lekukan:
Pemakaian:
sumber
Jelly , 6 byte (tidak bersaing)
Cobalah online!
Bagaimana itu bekerja
Gagasannya sama dengan jawaban Pyth saya .
sumber
Turtlèd , 72 byte, tidak bersaing
Cukup yakin saya bisa mengubah pendekatan untuk menghemat byte, tetapi nanti.
: p Esolang non-golf mengalahkan ketukan reguler: p
Hal yang aneh tentang Turtlèd adalah awalnya dibuat setelah diskusi tentang ascii art langs, tetapi sebenarnya tampaknya yang terbaik dalam tantangan semacam ini
Turtlèd tidak dapat mengambil input baris baru tetapi untuk beberapa input, dan ini hanya membutuhkan satu input: akhiri setiap kata dengan spasi, termasuk yang terakhir.
Cobalah online!
Penjelasan:
sumber
Perl, 133 byte
Ini adalah salah satu tantangan yang berubah di kepala saya dari menjadi terlalu keras, menjadi mudah, menjadi kode lebih banyak daripada yang saya perkirakan ... Saya tidak terlalu senang dengan pendekatan, saya yakin ada cara yang jauh lebih baik untuk mengurangi
print pop@F...
bit mungkin menggunakan-n
atau hanya regex murni, tapi saya tidak bisa sampai di sana sekarang ... Awalnya saya menggunakansay
, tapi saya pikir saya harus skor yang lebih tinggi (use 5.01
) karena$'
.Pemakaian
Simpan sebagai
vertically-collapse-text.pl
.sumber
SmileBASIC, 90 byte
Menerapkan gravitasi ke semua teks di konsol. Saya tidak yakin apakah ini valid, atau apakah saya harus menggunakan array string.
sumber
Ruby,
9982 byteHampir disana...
Penjelasan percobaan:
Jalankan seperti ini:
sumber
K, 30
.
Penjelasan
x@\:!|/#:'x
meluas setiap string untuk membuat matriks char persegi.+
mentransposinya{(-#x)$x@&~^x}
akan menghapus spasi apa pun dari string dan kemudian pad string dengan panjang aslinyaTerapkan fungsi itu ke masing-masing string yang dialihkan, lalu balikkan output untuk mendapatkan hasilnya
sumber
{+{(-#x)$x@&~^x}'+(|/#:'x)$x}
untuk 29.pb - 310 byte
Benar-benar bencana. Saya hampir tidak ingat apa-apa tentang cara kerjanya.
Karena cara input pb bekerja (satu baris sekaligus), Anda harus menggunakan spasi alih-alih baris baru dalam input. Jika penerjemah bukan sampah dan Anda dapat memasukkan baris baru dalam input, satu-satunya perubahan akan menjadi
[B=32]
di awal menjadi[B=10]
.Saya sedang mengerjakan pembaruan ke pbi (interpreter) yang akan membersihkan visual jika Anda ingin menonton program berjalan. Masih membutuhkan banyak pekerjaan, tetapi sementara itu, Anda dapat menonton program ini di YouTube .
sumber
J, 17 byte
Solusi yang cukup menyenangkan.
Penjelasan:
Uji kasus dijelaskan
Uji kasus
sumber
;@;:&.(|:@|.)
untuk 13Sebenarnya , 13 byte
Ini menggunakan algoritma yang dijelaskan dalam jawaban Dennis 'Jelly . Input dan output adalah daftar string. Sayangnya, fungsi transpos builtin tidak bekerja dengan baik jika daftar atau string dalam tidak semua sama panjang, yang akan semacam mengalahkan titik runtuh secara vertikal di tempat pertama. Saran bermain golf diterima. Cobalah online!
Tidak melakukanolf
sumber
Racket 312 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber
JavaScript (ES6), 103 byte
Berpisah pada CR, peta luar memastikan kita mengulangi waktu yang cukup untuk memungkinkan "gravitasi" untuk menjatuhkan huruf sejauh mereka perlu turun.
Peta dalam terlebih dulu memeriksa apakah ada baris berikutnya, jika demikian, dan lebih pendek, letakkan overflow ke baris berikutnya. yaitu jika baris ke-1 memiliki "ABCD" dan baris ke-2 memiliki "FG", jatuhkan "CD" dari baris ke-1 sehingga baris ke-1 menjadi "AB" dan ke-2 menjadi "FGCD".
Ketika kita melakukan ini sebanyak yang ada garis, surat-surat turun sejauh yang seharusnya, meninggalkan kita dengan hasil yang diinginkan.
sumber
Japt , 8 byte
Cobalah online!
Bagaimana itu bekerja
Ada juga
z
yang memutar string 2D dengan kelipatan 90 derajat, tetapi entah bagaimana memotong string kapanheight > length
.sumber
05AB1E ,
109 byteCobalah online.
atau dengan alternatif mulai:
Cobalah online.
Pendekatan yang sama seperti @ Dennis ♦ Pyth menjawab .
-1 byte berkat @Emigna mengganti
ðõ:
denganðм
.Penjelasan:
Penjelasan alternatif:
sumber
R,
s8152 byteSaya mengambil sedikit kebebasan dalam menafsirkan pertanyaan dan berasumsi bahwa teks diwakili dalam matriks dengan satu karakter per sel, dengan demikian:
Jadi x menjadi:
Sekarang saya menggunakan
order
dan[
mengurutkan kolom sehingga NA datang pertama dan kemudian semua nilai lainnya:Menjadi lebih lama jika diperlukan bahwa output berupa kata-kata:
sumber
function(x)
perlu dimasukkan dalam jumlah byte.R,
196189170 byteVersi yang bisa dibaca manusia:
Bagaimana itu bekerja:
(Atau dengan kata lain, bagian "berlebihan" jatuh sampai semua yang bisa jatuh telah jatuh.)
Input: vektor karakter.
sumber
Julia 0,6 , 141 byte
Cobalah online!
Siaran dengan
g.([w], [d d])
memungkinkan saya untuk menghilangkan pernyataan peta dan menyelamatkan saya sekitar 7 byte.sumber