Tugas Anda adalah mengambil string input karakter ascii dan output string sebagai serangkaian kata-kata vertikal yang dipisahkan oleh spasi. Contohnya ditunjukkan di bawah ini:
Diberikan string:
Hello, World! My name is Foo.
output harus:
H W M n i F
e o y a s o
l r m o
l l e .
o d
, !
10 poin bonus akan diberikan jika program Anda dengan benar menangani string yang perlu mengelilingi terminal, yang akan kita atur pada 80 karakter.
50 poin jika program Anda juga dapat melakukan yang sebaliknya!
code-golf
string
printable-ascii
Foo Barrigno
sumber
sumber
Jawaban:
J, 15
Pemakaian:
sumber
Javascript -
228172145126Golf kode pertama saya :)
sumber
"Input ?"
tidak terlalu memengaruhi perilaku program, juga menghapusnya.length
bukan meminta dua kali, beberapa kawat gigi tanpa titik, beberapa titik koma yang tidak perlu.A=prompt().split(" "),B="";for(y=0;y<(l=A.length);y++){for(i=0;i<l;i++)if(A[i][y])B+=A[i][y];else B+="_";B+="\n"}alert(B)
. (Dalam Standar JavaScript untuk pertanyaan meta IO , pendapat yang paling banyak disepakati adalah bahwa mengandalkan output implisit REPL tidak boleh dianggap benar.)if(A[i][y]){B+=A[i][y];}else{B+=" ";}
=>B+=(x=A[i][y])?x:" "
APL, 22
Penjelasan
Contoh
sumber
Ruby,
9187Hore, aku mengalahkan Perl! : D
Ruby, 150 - 50 bonus = 100
Itu hanya mendeteksi untuk baris baru, dan menerapkan penanganan khusus jika terdeteksi.
Jalankan seperti
sumber
Javascript
184149123Dengan contoh string yang ditentukan:
Anda dapat menyalin pernyataan kedua ke konsol browser Anda.
Tidak dijinakkan:
JsFiddle Link: http://jsfiddle.net/FzMvK/
Posting golf kode pertama saya: P
sumber
float:right
terbalik?Perl - 92
97Melakukan pekerjaan dengan cara yang sangat mudah.
sumber
while
seperti yang digunakan di sini juga pengubah pernyataan.do{}while()
loop?do
sendiri tidak ada yang lain, hanya satu blok. Ituwhile
adalah hal yang terpisah.K, 33
Contoh input dan output:
sumber
"
seharusnya ada di sana?{-1@" "/:',:''x@'/:!max@#:'x:" "\:x;}
(37 karakter), yang akan menghasilkan output tanpa"
Python:
Satu baris kode untuk memproses sengatan:
sumber
Python 2.7,
108103Saya yakin ini bisa bermain golf lebih banyak, tapi inilah solusi awal dengan python.
Perbaikan:
sumber
i=m
danF #, 187
sumber
Ruby, 63
Algoritma ini sangat mudah; hanya bermain golf. Kode panjangnya 61 byte, ditambah 2 byte untuk
-na
opsi yang perlu dikerjakan. Dariruby -h
:Contoh dijalankan:
sumber
Python 2.7 -
137112 byteOrang lain sudah melakukannya dengan lebih baik, tetapi saya mungkin akan membuang ini. Menambahkan spasi ke setiap kata dalam input hingga panjangnya sama dengan yang terlama (untuk menghindari kesalahan indeks untuk bagian selanjutnya), lalu mencetakc
huruf ke-1 dari setiap kata sambilc
beralih dari 0 ke panjang setiap string.Saya datang dengan cara yang jauh lebih baik untuk melakukan ini dan memotong 25 byte. Daripada menambahkan string dengan spasi untuk menghindari kesalahan indeks, saya menangani kesalahan secara langsung! Setiap kali ada yang cetak, saya mencetak satu ruang di tempatnya dengan
try:print w[c],
,except:print' ',
. Saya juga ingat bahwa saya tidak perlu spasi antara pernyataan cetak dan string literal, yang menghemat satu byte.Perhatikan bahwa Python 2 memungkinkan Anda untuk mencampur tab dan spasi dan menganggapnya tingkat indentasi terpisah. Interpreter Markdown SE menggantikan karakter tab dengan empat spasi, tetapi setiap baris program ini kecuali yang pertama memiliki indentasi tepat satu byte.
Memformat cukup mudah, karena
print 'something',
mencetak'something '
daripada'something\n'
. Saya melakukan itu untuk setiap karakter, dan menggunakanprint
pernyataan kosong untuk mendapatkan baris baru di mana saya membutuhkannya.sumber
C,
1111109590 byteSolusi ini menggunakan kode kontrol VT-100 untuk memindahkan kursor pada terminal
yang
^[
urutan adalah sebuah tempat untuk karakter ASCII ESC tunggal, yang tidak dapat ditampilkan di sini.^[7
menyimpan posisi pointer saat ini^[8
mengembalikan posisi kursor ke posisi yang disimpan^[[2C
bergerak 2 langkah ke kanan^[[B
bergerak 1 langkah ke bawahmengedit 1: the
^[[D
(1 langkah kiri) VT-100 kode telah digantikan oleh backspace (ditampilkan sebagai^H
di sini, tapi hanya satu ASCII char); juga lupa instruksi "dipisahkan oleh spasi", sekarang diperbaikiedit 2:
7 karakter disimpan dengan menggunakan
for
loop sebagai gantiwhile
, dan32
bukannya' '
:8 chars lebih disimpan dengan memanggil satu kurang
printf
:?:
operator ternary sekarang digunakan dalamprintf
parameteredit 3:
Singkirkan variabel lokal
s
, bekerja secara langsung denganargv
aliasv
. Ini benar-benar mengerikan. Tapi menyelamatkan 4 karakter. Juga diganti==
dengan^
dan karena itu mengganti?:
operan, untuk menyimpan 1 karakter lagi.Pemakaian
Versi tidak golf (versi pertama)
Versi tidak golf (versi terakhir)
sumber
Saya menjawab pertanyaan ini sejak lama. Sebenarnya itu adalah salah satu kontribusi pertama saya ke situs. Saya baru-baru menemukan itu lagi dan agak malu. 112 byte ?! Tidak bisa diterima Jadi saya mencoba lagi:
Python 3 - 92 byte
Dalam 109 hari sejak saya memposting jawaban pertama itu, saya suka berpikir saya telah menempuh jalan panjang. Bahkan sesuatu seperti menggunakan Python 3 lebih dari 2,7 1 tidak akan terpikir oleh saya. Dengan kode ini golf di bawah 100 byte, jiwaku akhirnya bisa beristirahat dan aku bisa melanjutkan ke akhirat.
Penjelasan
Ini mendapat garis dari
stdin
dan membuat daftar dengan membaginya di karakter spasi putih. Satu-satunya spasi yang mungkin ada di input adalah spasi, jadi baris ini mendapatkan daftar kata.Mari kita ambil baris kedua dari dalam ke luar:
map
mengambil fungsi dan iterable sebagai argumen. Itu berlaku fungsi untuk setiap elemen iterable, dan mengembalikan iterable baru dari hasilnya. Di sini, saya membuat iterable dengan panjang setiap kata input.max
mendapatkan nilai maksimum dari iterable. Ini memberi kita kata terlama dalam input.Pemahaman daftar mirip dengan
map
. Itu melakukan sesuatu untuk setiap elemen iterable, dan mengembalikan daftar hasilnya. Untuk setiap kata dalam input, saya melakukanthat_word.ljust(
beberapa kode)
.ljust
kependekan dari "just justify". Dibutuhkan integer sebagai argumen dan menambahkan spasi ke string sampai sepanjang.Ini trik yang rapi. Dalam konteks ini,
*
berarti "unzip iterable sebagai argumen berganda". Dengan cara ini,zip
dapat digunakan untuk merefleksikan matriks (misalnyazip(*[(1,2),(3,4)])
->[(1,3),(2,4)]
). Satu-satunya batasan adalah bahwa semua baris dalam matriks harus memiliki panjang yang sama, atau elemen dari semua baris tetapi yang terpendek terpotong agar sesuai.Kita sudah tahu apa
map
artinya. Satu-satunya hal baru di sini adalahjoin
, yang mengambil iterable dari string dan menjadikannya string tunggal menggunakan pembatas yang melekat padanya. Misalnya,'a'.join(['I', 'can', 'play', 'the', 'saxophone'])
2 menjadiIacanaplayatheasaxophone
.Ini
join
membutuhkan banyak string dan memisahkannya dengan baris baru. Yang tersisa hanyalahprint
untukstdout
dan kita selesai!Semua bersama Sekarang:
Temukan panjang kata terlama dari input, tambahkan spasi ke setiap kata sampai panjangnya sama, transpos dengan
zip(*
3 trik, gunakanjoin
untuk memisahkan setiap karakter dalam satu baris dengan spasi,join
lagi untuk memisahkan setiap baris dengan baris baru, dan cetak! Tidak buruk untuk satu-satunya jalur non-input-handling dalam program 92 byte.1. Karakter tambahan yang dihabiskan di
print()
dalam tanda kurung tidak sebanding dengan 4 karakter yang saya jatuhkan dariraw_input()
->input()
.2. Saya tidak bisa memainkan saksofon.
3
)
.. Sama-sama.sumber
print("\n".join(...))
menjadi*map(print,...),
. Cobalah online!05AB1E , skor
8-20-21 (3029 byte - 50 bonus):Cobalah online (input satu baris reguler).
Cobalah secara online (input multi-line terbalik).
Penjelasan:
Jawaban 8 byte asli:
Cobalah online.
Penjelasan:
sumber
Mathematica 49
Jelas Mathematica bukan yang terbaik untuk ini:
sumber
Javascript, 141
Sampel
sumber
GolfScript [41 byte]
Bagaimana itu bekerja:
Anda dapat melihat demo online di sini .
PS: Ini adalah kode GolfScript pertama saya, jadi jangan menilai saya dengan ketat;)
sumber
R, 116
sumber
Bash + coreutils, 54
Keluaran:
sumber
$()
konstruk sekarang merupakan metode umum untuk substitusi perintah.APL: 18
Penjelasan:
a ← '', beri spasi di depan string dan tetapkan ke a
'' = temukan spasi, hasilkan boolean
1 ↓ ¨a⊂⍨ buat substring mulai dari mana boolean memiliki 1's dan drop elemen pertama masing-masing (jadi ruang)
⍉ ↑ Buat matriks dari substring yang dihasilkan, dan balikkan sepanjang diagonal
sumber
R , 81 byte
Simpan satu byte dengan menyimpan baris baru sebagai
e
, yang dapat digunakan di keduascan
panggilan, panggilan perbandingan dancat
.Cobalah online!
sumber
K (oK) , 26 byte
Larutan:
Cobalah online!
Penjelasan:
sumber
Python 2.7 -
119106Ambil 1 - 166. Pembalikan daftar diperlukan untuk membuat pop bekerja sesuai urutan yang saya inginkan, tetapi ini tampak sia-sia. Dan ketika saya mencoba menggabungkan menjadi satu pemahaman untuk bersenang-senang, pop mengacaukan segalanya.
Ambil 2 - 119. Jadi saya mengubah ke pengindeksan daftar sederhana. Meski begitu, sepertinya masih kikuk, terutama lapisan ruang dan garis baru.
Ambil 3 - terima kasih ke @grc
sumber
[len(l)for l in w]
dapat disingkat menjadimap(len,w)
,.split(' ')
ke.split()
, dan.join([...])
ke.join(...)
.v.pop(0)
untuk mem-pop elemen pertama dan bukan terakhir?Python 3, 124
sumber
Haskell, 112
Golf:
Dijelaskan:
Contoh:
sumber
JavaScript, 139 (156 dengan output console.log)
Saya pikir ini golf seperti yang saya bisa dapatkan. Saya baru saja membagi, menemukan kata terbesar dan mengubah sesuai, menambahkan spasi jika karakter tidak ada dalam kata-kata yang lebih pendek. Lebih dari jawaban JavaScript yang dikirimkan sebelumnya, tetapi jawaban itu sepertinya tidak berfungsi?
sumber
Japt
-R
, 5 byteCobalah
Penjelasan
sumber
Pyth, 8 byte
Cobalah online!
Cukup mudah. Mengambil input yang dilampirkan dalam tanda kutip, yaitu
"Hello World"
sumber
C
memotong sepanjang entri terpendek, jadi ini tidak berfungsi . Inilah perbaikan cepat yang juga 8 byte.APL (NARS), 79 karakter, 158 byte
uji:
Fungsi lama memiliki keluaran tidak sempurna:
sumber