EDIT Saya memodifikasi kata-kata aturan untuk membuat beberapa hal yang implisit lebih eksplisit. Saya juga menambahkan beberapa penekanan untuk menjernihkan beberapa poin kebingungan yang tampak, dan secara eksplisit menentukan opsi untuk membuat program mandiri alih-alih fungsi.
Tujuannya di sini adalah untuk membuat suatu fungsi yang mengambil file teks (atau string) dan memindahkannya sehingga garis menjadi kolom dan sebaliknya.
Contoh:
Saya seorang teks. Ubah posisi saya. Bisakah kamu melakukannya?
Hasil dalam:
ITC ra aan M N sy apo ou ts eed xo tm .ei .t ?
Aturan:
- Anda boleh berasumsi bahwa satu-satunya karakter spasi putih yang digunakan adalah
" "
dan"\n"
dan tidak ada spasi spasi tambahan pada baris apa pun. - Anda dapat berasumsi bahwa file tersebut adalah ASCII. Penanda garis akhir mana yang ingin Anda gunakan terserah Anda (CRLF atau LF). Ini harus bekerja dengan benar pada contoh, tetapi juga harus bekerja pada setiap masukan yang memenuhi asumsi di atas.
- Anda mungkin harus memasukkan spasi (seperti pada contoh) di mana tidak ada untuk menjaga kolom tetap di garis.
- Hasil Anda tidak boleh memiliki spasi spasi di garis mana pun .
- Karakter baris baru terakhir (untuk baris terakhir) adalah opsional.
- Ini harus berupa fungsi atau program yang lengkap. Jika fungsi Anda menerima string, maka itu harus mengembalikan hasilnya sebagai string. Jika menerima nama file, maka Anda mengembalikan nama file tempat Anda menyimpan hasilnya. Anda juga diperbolehkan untuk menulis program lengkap yang menerima input dari STDIN dan mengeluarkan hasil yang benar ke STDOUT; jika Anda melakukan ini, Anda tidak boleh mengeluarkan apa pun ke STDERR.
- Prosedur terpendek menang, tetapi saya akan membatalkan jawaban yang saya suka.
Berdasarkan aturan, output pada contoh adalah panjang 53 atau 52 byte (untuk LF baris baru) tergantung pada apakah baris baru akhir disertakan atau tidak.
Catatan: Ini bukan persyaratan khusus, tetapi jika fungsi Anda, ketika dijalankan dua kali berturut-turut tidak identik dengan aslinya (baris baru terakhir mungkin berbeda, dan setiap baris kosong di akhir file akan dihapus), maka Anda mungkin melanggar salah satu aturan.
Jawaban:
Japt , 6 byte
Coba
jalankan dua kali - mengembalikan string asli
Penjelasan
Transposkan input
Peta di setiap baris
Potong benar
sumber
J (
3140)Ini adalah fungsi yang mengambil string, dan mengembalikan string (yaitu vektor karakter dengan linefeeds dimasukkan di tempat yang tepat, dan bukan matriks.)
Sunting: tidak ada spasi spasi di garis mana pun.
Uji:
sumber
?\n
.cut
ataudlb
secara default dan menulis sendiri membutuhkan banyak karakter bahkan dalam APL.Ruby 111
Golf:
Tidak Terkumpul:
Ruby memiliki fungsi susunan transpose, jadi ini hanya melapisi garis keluar, mengubahnya menjadi susunan karakter, menggunakan fungsi susunan # Arahan Ruby, lalu mengubah susunan karakter kembali menjadi garis.
Golf itu hanya menggunakan pengidentifikasi satu karakter, menghapus spasi, menggunakan sementara untuk text.lines, dan menempatkan perhitungan untuk inline max_length (tidak ada poin untuk efisiensi).
sumber
"\n"
dengan?\n
..to_a
itu berlebihan. Anda dapat memperoleh 5 karakter lainnya di sana.R, 171
Contoh penggunaan:
Ruang kosong trailing dihapus.
sumber
Python 2.7 (
97799490)EDIT: Kehilangan persyaratan fungsi;
Saya cukup yakin ini akan ditingkatkan sejak saya semacam pemula di sini, tetapi untuk memulai dengan;
Kode menggunakan sederhana
split
untuk membagi string menjadi vektor baris. Ini kemudian menggunakanmap
dengan nilai fungsi sebagaiNone
(fungsi kesatuan) dan operator percikan untuk mengubah dan pad vektor (fungsi yang mirip denganzip_longest
di Python3)Sisa kode hanya memetakan
None
ruang, memotong dan menyusun kembali matriks ke string tunggal lagi.sumber
map
. Saya terus mencari tempat untuk menggunakan itu ... dan Anda baru saja mengalahkan saya untuk itu. ;)Bash + coreutils + sed, 83
fold
danpaste
melakukan pekerjaan penting. Sisanya hanya memformat.Menerima input dari stdin dan output ke stdout:
sumber
C (278 byte)
Sunting: Ini benar-benar melanggar aturan, karena mengambil nama file sebagai argumen tetapi menulis ke stdout. Saya akan mengeditnya nanti untuk menulis ke file dan kemudian mencetak nama file ke stdout.
Ini adalah golf kode pertama saya, jadi ampun. Beberapa C. Lama, masukkan input
test.txt
dan biarkan berjalan!clang transpose.c -o transpose && ./transpose test.txt
Dengan menggunakan nama variabel pendek, menghapus pemformatan gratis, dan memungkinkan file menangani bocor, dan menonaktifkan semua peringatan ini dikurangi menjadi 278 byte. (Karena ini menggunakan impor implisit, mungkin tidak terhubung dengan benar pada semua sistem. Bekerja pada mesin saya!)
sumber
int
untuk mempersingkat beberapa deklarasi Anda, atau apakah itu ilegal sekarang?A,B,D,I,J,*F
sebagai variabel global, untuk menghindariint
kata kunci. Demikian pula, Anda dapat menghapusint
darimain
deklarasi, danC
argumen. InC
,int
opsional di banyak tempat.AutoHotkey 210
Uji
sumber
Ruby: 88 karakter
(Diposting karena lebih pendek daripada solusi Ruby lainnya. Tidak memeriksa apakah kode saya memperkenalkan sesuatu yang baru dibandingkan dengan itu. Jika Anda sudah memposting solusi Ruby dan Anda merasa ini sebagian besar merupakan salinan Anda, silakan komentar dan saya akan membatalkan jawaban saya. )
Contoh dijalankan:
sumber
Bash, 124 byte
Bunyinya input standar dan tulis output standar. Cobalah:
Bagaimana itu bekerja:
split
masukan ke dalam satu baris (file dalam direktori sementara$D
)grep
(file * +)paste
(kolom yang dipisahkan TAB)sed
Edit:
;rm -r $D
(terima kasih Tim)+
alih-alih_
sebagai suffix dan disingkat${F}_
menjadi$F+
L
dari file hasil splitsumber
rm
bit dari jumlah karakter Anda.Ruby - 144 karakter
Inilah upaya pertama saya, bermain golf:
Untuk output, jalankan di
puts f text
manatext
string multi-line mematuhi aturan di atas. Versi ungolfed di bawah:Untuk solusi yang serupa, tetapi pada akhirnya lebih baik di Ruby, lihat kode Wayne Conrad di atas.
sumber
transpose
jawaban Anda sebelum saya menulis jawaban saya. Rasanya tidak terlalu halal bagi saya untuk menulis ulang jawaban Anda, hanya sedikit lebih baik. :(transpose
, mungkin solusi Ruby yang lebih baik tidak akan muncul. Salah satu hal yang paling saya sukai tentang pemrograman adalah kemauan untuk berkolaborasi dan menyerbu ide-ide. Sampai kita bertemu lagi, Tuan yang baik hati. Tepuk tangan!PHP 194
Non-golf:
Ini adalah upaya golf pertama saya, jadi harap baik hati! Juga, tips / saran akan sangat dihargai!
sumber
"
sekitar"trim"
. php akan memberikan peringatan, tetapi berfungsi dengan baik.@
untuk menekan peringatan.MATHEMATICA 117 chars
sumber
f
! .. tksPerl (92 + 1)
membaca stdin dan menulis ke stdout. menambahkan 1 pada skor untuk
say
sumber
CJam,
3225 byteCJam lebih baru dari tantangan ini, jadi jawaban ini tidak memenuhi syarat untuk diterima.
Sangat disingkat oleh user23013.
Uji di sini.
sumber
Javascript, 103
Kurang golf
Uji
sumber
Retina , 40 byte
Cobalah online!
Berdasarkan program ini yang saya buat untuk mengubah ukuran persegi panjang, yang menggunakan saran Leo untuk mentransposisi persegi panjang dengan ukuran yang diketahui.
Sunting: Golf lebih banyak dan tidak lagi memiliki spasi tambahan pada garis.
sumber
Perl 5 , 25 byte
Perhatikan bahwa ini menggunakan urutan pelarian ANSI dan karena itu tidak berfungsi pada TIO, namun Anda dapat melihatnya beraksi di sini .
Penjelasan
Kode ini pertama-tama mengubah nilai pemisah daftar (
$"
) menjadi tab vertikal, diikuti oleh urutan pelarian ANSI untuk 'mundur 1 kolom' (\x1b[1D
), kemudian kami menetapkan variabel yang dicetak secara implisit$_
menjadi string yang dimulai dengan urutan keluar ANSI untuk 'mulai mencetak pada kolom baris 1$.
(di mana$.
baris teks saat ini)' (\x1b1;$.H
) dan menginterpolasi daftar@F
(yang merupakan daftar semua karakter pada baris itu, diisi oleh autosplit (-a
) dengan pola split kosong (-F
)) yang menempatkan konten$"
di antara setiap item, memindahkan kursor secara vertikal ke bawah alih-alih melanjutkan output setelah karakter sebelumnya.Cobalah online!
sumber
C ++ (243 karakter)
Inilah fungsi yang mengambil dan mengembalikan string.
Saya bisa mencukur beberapa lusin karakter, tetapi memutuskan untuk menyimpannya sebagai kode yang tidak bodoh (berjalan cepat, berbunyi oke). Mungkin saya hanya memutuskan untuk melakukan itu karena ini adalah golf kode pertama saya ... Saya belum cukup hardcore :)
Dengan pemformatan:
sumber
using namespace std;
.using namespace std;
harus ditambahkan ke jumlah karakter.Python 2.7 - 115 karakter :
oneliner:
dan dalam pencetakan yang lebih bersih:
dalam 115 karakter:
sumber
\n
dianggaplen
sebagai satu karakter, tetapi dua :)\n
adalah satu. Jadi saya katakan seseorang baik-baik saja.len("\n")
akan menampilkan 1, meskipun tentu saja 2 karakter terpisah dalam kode sumber. Menyimpan sumber ke file akan membuatls
tampilan 116. Hanya mengatakan itulen
bukan cara terbaik untuk mengukur ukuran kode karena karakter melarikan diri sedang diproses sebelum mengukur :)GolfScript, 51 karakter
Ini adalah upaya pertama; Saya kira itu bisa diperbaiki. Sebagian besar kode adalah untuk memenuhi persyaratan penghapusan ruang padding dan trailing - tanpa mereka, hanya
n%zip n*
akan cukup.Ps. Pengikut 46-karakter akan melakukan pekerjaan untuk input sampel yang diberikan, tetapi akan macet jika ada kolom input yang seluruhnya terdiri dari spasi:
Saya berasumsi itu cukup untuk mendiskualifikasi, bahkan jika tantangannya tidak secara eksplisit mengatakannya.
sumber
Skema / Raket 113
Teks:
Tanpa garis baru dan spasi ekstra putih:
Versi ramah pengguna
sumber
Haskell
Itu sangat singkat, saya perlu menambahkan ruang putih ...
sumber
I am a text..?
Transpose met
Can you do i
.Python
89103 karakterSaya merasa kotor.
90104 karakter untuk versi kekuatan industri. : ^)sumber
Mathematica, 95 karakter
sumber
K, 56
Ini harus memenuhi spesifikasi sekarang.
Menerima string, mengembalikan string.
.
sumber
{`/:x@'/:!max@#:'x:`\:x}
untuk 26.Groovy, 98 karakter
on line
ungolfed:
sumber
Pyth , 11 byte
Cobalah online!
Mengambil input sebagai string, menampilkan daftar daftar
Pyth , 25 byte
Mengambil input sebagai string, menghasilkan string.
Cobalah online!
sumber
J,
2826 BytesDisimpan 2 byte berkat frownyfrog
Mengambil string, mengembalikan string. Saya tidak yakin jika ada versi pendek dari 'cutopen'
fungsikata kerja yang bisa saya gunakan.Ada juga yang lebih pendek
Tapi saya tidak yakin itu termasuk dalam pedoman OP, karena mengembalikan array karakter.
Bagaimana itu bekerja:
Versi lain berfungsi sama, tetapi tidak mengonversi array yang dialihkan ke string yang diformat dengan benar.
Contoh:
sumber
cutLF
.0|:>@cutLF
Lua ,
203189 byteCobalah online!
Saya melihat solusi Lua lain di sini, tapi saya rasa tidak ada masalah dengan memposting 2 solusi pada bahasa yang sama. Jika ada, beri tahu saya :)
sumber