Tantangan
Tugas Anda adalah membuat program yang mengambil input string apa pun, dan mengeluarkan input dalam format kuadrat. String kosong harus mengembalikan string kosong.
Contohnya
Diberikan input:
golf
Program Anda harus menampilkan:
golf
o l
l o
flog
Memasukkan:
123
Keluaran:
123
2 2
321
Memasukkan:
a
Keluaran:
a
Memasukkan:
Hello, world!
Output (perhatikan ruang antara, dan w - gap bukan hanya baris baru):
Hello, world!
e d
l l
l r
o o
, w
w ,
o o
r l
l l
d e
!dlrow ,olleH
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat di setiap bahasa menang.
code-golf
string
code-golf
number
sequence
combinatorics
code-golf
tips
javascript
code-golf
kolmogorov-complexity
fibonacci
restricted-time
code-golf
ascii-art
code-golf
string
text-processing
code-golf
sequence
set-partitions
code-golf
kolmogorov-complexity
natural-language
code-golf
string
code-golf
math
code-challenge
restricted-source
code-golf
code-golf
number
base-conversion
cops-and-robbers
encryption
code-challenge
quine
optimized-output
king-of-the-hill
python
SpookyGengar
sumber
sumber
Jawaban:
Arang ,
75 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 2 byte berkat @CarlosAlejo. Penjelasan:
(Beberapa arah ke perintah Reflect dijalankan secara berurutan daripada secara bersamaan.)
sumber
θ‖B↙↘
. Cobalah online!ReflectOverlap
alih-alihReflectButterfly
menghindari membalik karakter. :-)MATL ,
201611 byteCobalah di MATL online!
EDIT: Kode berfungsi pada rilis 20.2.1, yang ada sebelum tantangan. Tautan menggunakan rilis itu. (Dalam 20.2.2 kodenya akan lebih pendek, tetapi ini mengungguli tantangan).
Penjelasan
sumber
Jelly ,
29 2217 byteCharcoal
akanmengalahkan + d skor ini ...Tautan monadik yang mengambil dan mengembalikan daftar karakter; atau program lengkap mencetak hasilnya.
Cobalah online!
Bagaimana?
sumber
'Hello'
, "Spooky""123"
,, dll. (Python digunakan untuk menginterpretasikan input).C, 109 byte
Cobalah online!
Trik yang patut diperhatikan:
Alih-alih menghabiskan byte
strlen
, kita cukup mengambil panjang string sekaligus mencetak baris pertama:Ini berfungsi karena
printf
mengembalikan jumlah byte yang ditulis.Untuk garis tengah, kita perlu mengulang string tetapi mengecualikan karakter pertama dan terakhir. Ini dicapai dengan kondisi
(yang lebih pendek dari
(++s)[1]
), yang melompati karakter pertama karena++
ada dalam kondisi dan melompati yang terakhir dengan berhenti ketika karakter melewati karakter saat ini'\0'
(daripada berhenti di'\0'
).Dalam tubuh loop pertama,
kita mencetak karakter saat ini, kemudian karakter "cermin" yang sesuai (melacak
j
, yang masuk ke negatif, menghasilkan situasi aneh pengindeksan ke dalam string dengan angka negatif) berlapis panjangi
dengan spasi (di manai
ada dengan nyamanstrlen(s) - 1
).Pencetakan terbalik pada baris terakhir cukup mudah; satu-satunya trik adalah
*s*~i--
, yang merupakan cara terpendek untuk mendapatkani+2
iterasi dari loop body (yang tidak bergantung padai
; semuai
digunakan adalah untuk menghitung). Bagian funky*s*
memastikan loop tidak berjalan jika*s
ada'\0'
, yang terjadi pada input panjang-1.sumber
Oktaf, 40 byte
Cobalah online!
Ini adalah jawaban saya tetapi diposting setelah @Luis MATL menjawab
sumber
Haskell ,
8478 byteCobalah online! Penggunaan:
f "test"
. Mengembalikan daftar garis.Sunting: -6 bytes berkat dianne!
sumber
reverse
;r=reverse;f s@(_:x)|_:y<-r x=s:[a:(y>>" ")++[b]|(a,b)<-zip x y]++[r s];f s=[s]
adalah 78 bytePython 2 ,
89818886 byteCobalah online!
sumber
R , 113 byte
Cobalah online!
sumber
05AB1E ,
17161519 byteCobalah online!
Penjelasan
Contoh dengan
input = golf
Perbaikan untuk input 1 huruf cukup mahal.
Saya merasa pendekatan yang berbeda mungkin lebih baik sekarang.
sumber
Python 2 ,
9988 byte-4 byte terima kasih kepada musicman523.
Cobalah online!
Mengembalikan daftar string.
sumber
s
dans[::-1]
kejoin
Mathematica, 128 byte
sumber
C, 96 byte
Versi bonus (122 byte):
sumber
Swift 3 ,
215199 byteCobalah online
sumber
Python 3, 88 byte
sumber
l+1 and
bisa ditulis ulangl+1and
untuk menghemat satu byte.0or
, di mana python gagal mengurai karena0o
merupakan awalan oktal.JavaScript (ES8),
108112 byteKurang golphed
Terima kasih kepada Justin Mariner karena telah menghemat banyak byte, yang kemudian digunakan untuk menambahkan nol atau cek karakter tunggal yang diperlukan untuk mematuhi tantangan. Anda mendapatkan itu :-(
sumber
`+s[i+1].padEnd(s.length-1)+v,s)+`
dan menggunakanr.join``
.String.prototype.padStart
dan menandai literal templat. Saya membutuhkan itu untuk membantu menjaga penambahan panjang cek ke minimum :-)(n=s.length-1)?(r=<...>+r.join``:s
dan menggunakanpadEnd(n)
. Jika panjangnya1
,length-1
is0
(false).padEnd
adalah ES2017.PHP , 118 byte
Cobalah online!
sumber
APL , 58 byte
Dengan
⎕IO←0
.Cobalah online!
Bagaimana?
c←≢⍵
- panjang talir←⍳
- jarako←∘.⌈⍨
- produk luar dengan minimumo⌊⌽⊖
- meminimalkan dengan sendirinya berbalik 180 o×
- kalikan denganx←∘....⍨r
- produk luar kisaran dengan((c-1)=⍺⌈⍵)∨0=⍺⌊⍵
- bingkai matriksx+
- tambahkan bingkai(' ',⍵)[...]
- dapatkan dengan indeks dari string yang disatukan ke luar angkasasumber
⍉⊖⍉⊖
menjadi⌽⊖
?JavaScript (ES2017), 87 byte
Versi ES6: 93 byte
Kurang golf
sumber
padEnd
adalah ES2017.l+~i
, ini menghindari harus mengurangi 1 dua kali sebagai gantinya Anda bisa mengurangi 2 sekali.l-~-i
s=>[...s].reverse(l=s.length).map((c,i,z)=>i?l+~i?s[i]+' '.repeat(l-2)+c:z.join``:s).join`\n`
tetapis=>[...s].reverse(l=s.length-2).map((c,i,z)=>i?i+~l?s[i]+' '.repeat(l)+c:z.join``:s).join`\n`
juga bekerja.Java, 191 byte
sumber
(s)
bisa adils
. Loop dengan garis tunggal di dalamnya dapat melepas kawat keritingnya. Anda bisa kembali daripada mencetak jika itu akan menghemat byte. Anda menggunakanint i
di kedua loop, saya tidak tahu apakah mereka berada di lingkup yang berbeda tetapi layak ditunjukkan. Menginisialisasi variabel suka bersama biasanya menyimpan byte.for(int i=0;i<l;i++){o.print(s.charAt(l-1-i));}
->for(int i=0;i<l;){o.print(s.charAt(l-1-i++));}
. Anda tidak perlu trailing semi colon.C # (.NET Core) ,
179161 byte-18 byte terima kasih kepada TheLethalCoder
Cobalah online!
Saya tidak yakin tentang aturan, apakah ini diperlukan untuk menghitung byte atau tidak:Seseorang tolong perbaiki saya tentang ini.Tidak Disatukan:
sumber
using
jumlah byte Anda. Karena Anda menggunakan LinqToCharArray()
bisa sajaToArray()
, apakah Anda benar-benar membutuhkannya sebelumnyaReverse()
? Karena Anda menggunakan,String
Anda harus memenuhi syarat sepenuhnya atau memasukkan penggunaan, namun, ini dapat dengan mudah diperbaiki dengan mengubahnya jugastring
. Theif
mungkin lebih pendek sebagai terner sepertis+=l>1?if code:"";
. Anda dapat menghapusi++
dari loop dan mempostingnya did[i++]
.i
denganl
sukaint l=s.Length-1,i=1;
. Dan saya pikir itu mungkin saja!Retina , 106 byte
Cobalah online! Penjelasan:
Jika setidaknya ada dua karakter, duplikat input.
Membalik duplikat.
Ubah string menjadi segitiga. Segitiga atas dimulai dengan input dan menghapus karakter pertama setiap kali, sedangkan segitiga bawah dimulai dengan huruf pertama dari input terbalik dan menambahkan karakter setiap kali.
Gabungkan segitiga bersama-sama, tumpang tindih sehingga karakter terakhir membentuk
/
diagonal.Ubah semua karakter menjadi spasi, jika setidaknya ada satu karakter dari ujung di setiap sisi.
Hapus semua baris kosong yang tersisa.
sumber
Python 3, 85 byte
Menggunakan input untuk baris paling atas :)
sumber
Lua , 104 byte
Cobalah online!
sumber
p
sekali ...Python 3, 106 byte
Versi fungsional ...
sumber
Python 2 , 100 byte
Cobalah online!
sumber
Mathematica,
13891 byteAnda dapat mencobanya secara online dengan menempelkan yang berikut di Wolfram Cloud Sandbox dan mengklik "evaluasi sel" atau menekan Shift + Enter atau Numpad Enter:
sumber