Diberikan string apa pun, cetak dalam bentuk segitiga di mana teks berjalan naik dan turun di sepanjang setiap diagonal. Misalnya, input dari "Hello World"
output harus:
d
l
r d
o l
W r d
o l
o W r d
l o l
l o W r d
e l o l
H l o W r d
e l o l
l o W r d
l o l
o W r d
o l
W r d
o l
r d
l
d
Ruang antara setiap karakter dalam satu baris harus minimal 1, untuk mempertahankan format yang tepat.
code-golf
string
ascii-art
code-golf
string
abstract-algebra
code-golf
ascii-art
binary
fractal
code-golf
array-manipulation
sorting
permutations
code-golf
code-generation
code-golf
sequence
binary
code-golf
date
code-golf
array-manipulation
restricted-source
decision-problem
primes
code-golf
multi-threading
code-golf
array-manipulation
code-challenge
decision-problem
natural-language
test-battery
code-golf
array-manipulation
code-golf
array-manipulation
code-golf
code-golf
graph-theory
machiavelli
sumber
sumber
H l o W r d
adalah baris tengah yang valid? Bertanya karena dalam contoh Anda setiap baris memiliki 3 spasi antara setiap karakter.Jawaban:
Arang ,
107 byteCobalah online!Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:Pertama kali saya menggunakanUE
perintah.sumber
UE
...UE
..05AB1E ,
1087 byteTerima kasih kepada Emigna untuk menghemat 2 byte!
Menggunakan penyandian 05AB1E . Cobalah online!
sumber
¶«
. (juga memverifikasi validitas dengan OP)â
dalamðâ
bukanSð«
!Python 2 , 75 byte
Cobalah online!
Ruud menyimpan 3 byte.
sumber
C,
86787370 karakterCobalah online!
Penjelasan
Implementasi naif: dua siklus, isi dari atas ke bawah, kiri ke kanan (99 byte):
Di sini, menempatkan () hanya mencetak \ n ke output. Mari kita gabungkan deklarasi variabel dan gabungkan j ++ dengan sesuatu (94 byte):
Baik. Variabel j memiliki kisaran 0 ... 2n; biarkan di dalam -n ... n, ini membuat matematika lebih sederhana. Perhatikan bahwa ekspresi boolean di sebelah kanan && selalu bernilai 0 atau 1. Ini berarti kita dapat mengganti && dengan &. 91 byte:
Dan sekarang kami menyadari bahwa kami mencetak ruang ekstra. Dan ya, kita tidak perlu printf () untuk mencetak hanya satu simbol. 86 byte:
Bahkan lebih baik. Perhatikan bahwa kondisi i * i> = j * j sama dengan i> = abs (j), tetapi lebih pendek. Mari kita memindahkan put () ke dalam untuk ekspresi kenaikan loop. Dan coba tebak? Sebenarnya, kita tidak perlu kawat gigi di sekitar i + j. 78 byte:
Tahukah Anda bahwa putchar () mengembalikan karakter yang telah dicetak? Mari kita gunakan XOR untuk menguji angka untuk kesetaraan. Mari ganti ruang dengan kode ASCII-nya, 32. Ingat kode karakter end-of-line adalah 13. Dan akhirnya: tahukah Anda bahwa GCC / Dentang memang mendukung https://en.wikipedia.org/wiki/Elvis_operator ? 73 byte:
Akhirnya, coba tebak? Kami tidak membutuhkan dua untuk loop. Kita bisa mengganti yang jelek ~ i + j hanya dengan ij. 70 byte:
Pekerjaan masa depan: mengubah arah loop? Ini mungkin menghemat beberapa byte, jika dilakukan dengan benar.
sumber
SOGL V0.12 ,
13109 byteIni menggunakan fitur yang baru saja saya tambahkan , tetapi sudah didokumentasikan beberapa waktu lalu.
Coba di sini!
Dalam tautan
,
itu ditambahkan karena ini mengharapkan input pada stack dan{
ditambahkan karena jika tidak,
akan dieksekusi setiap kali dalam loopsumber
Haskell , 73 byte
Cobalah online!
sumber
Gaia , 16 byte
Cobalah online!
Penjelasan
sumber
Python 2 ,
8683 byte-3 Terima kasih kepada officialaimm
Cobalah online!
sumber
Jelly , 15 byte
Cobalah online!
sumber
Oktaf,
59635857 byteCobalah online!
sumber
99
: ide bagus :-)Java, 292 byte (maaf)
sumber
boolean a=1<0,o=L%2>0;
.. 2. Jika Anda tidak perlui
, menggunakan loop ini:for(i=0;i++<n;)
. 3. Anda dapat menyingkirkano
:j%2<L%2
laluj%2>L%2
. 4. Menggunakand
sebagai flip membutuhkan begitu banyak karakter: lakukan sajaj<(x<0?-x:x)
. 5. Anda memiliki lebih banyak variabel daripada yang dibutuhkan. 6. Anda tidak perlu program lengkap: lambda atau metode sudah cukup. - Jika Anda ingin contoh Java golf, periksa jawaban saya .Haskell , 81 byte
Cobalah online!
sumber
Java (OpenJDK 8) , 116 byte
Cobalah online!
Penjelasan
sumber
C ++, 135 byte
Oke, ini foto saya dengan C ++:
Cobalah Online (ideone)!
sumber
Haskell ,
140137 byteCobalah online!
Disimpan 3 byte byte ke Challenger5
Saya tidak berpikir itu optimal ...
f
menghasilkan salah satu garis (m
= 0 atau 1 adalah modulo dari nomor baris,n
adalah jumlah baris)g
interkalasi baris "ganjil" dan "genap", dan tambahkan ke cermin hasil itu sendiri.sumber
f
sebagai fungsi infix (seperti pada(m#n)s=...
) daripada fungsi awalan.Pyth , 25 byte
Coba di sini.
sumber
Jelly , 18 byte
Cobalah online!
sumber
Mathematica 105 Bytes
Mungkin saya bisa mengurangi satu atau dua byte lagi, tetapi jumlah karakter di atas berurusan dengan string di Mathematica membuat tantangan sederhana seperti ini tidak kompetitif.
sumber
J, 54 byte
Cobalah online!(perhatikan bahwa output pada TIO memiliki baris baru dan tiga spasi, tapi itu bukan dari pemanggilan fungsi - itu mungkin hanya apa yang dilakukan penerjemah J secara otomatis).
Saya pikir ide umum untuk menyelesaikan ini benar, tetapi ada hal-hal kecil yang mungkin saya lakukan secara kurang optimal yang menambah bytecount.
Varian sebelumnya
55 byte
56 byte
Penjelasan
Ini akan dibagi menjadi beberapa fungsi. Juga, saya tidak teliti dengan bagian terakhir dari penjelasan, jadi beri tahu saya jika Anda ingin penjelasan yang lebih baik untuk bagian tertentu dan saya dapat mengeditnya.
dup
menduplikasi setiap karakter sebanyak indeksnya (ditambah satu) dalam stringspace
menyisipkan spasi antara masing-masing karakterpad
mengisi karakter dengan jumlah ruang yang tepattrans
transposes matriks yang dihasilkanContoh panggilan:
Dup
Hasilnya dikotak untuk mencegah J dari mengisi ujungnya dengan spasi (karena panjangnya tidak merata).
Contoh panggilan:
Ruang
Contoh panggilan:
Bantalan
Pada dasarnya, pad elemen pertama dengan panjang - 1 spasi, yang kedua dengan panjang - 2, dll. Ini juga menghilangkan tinju.
Contoh panggilan:
Mengubah urutan
Ini hanya fungsi built-in
|:
yang mengambil transpose dari sebuah matriks.sumber
|:@(-@i.@-@#|."0 1((,@,.~' '#~#)@$"0~1+i.@#))
. itu pasti bisa bermain golf lebih lanjut. bagian ini-@i.@-@#
adalah beberapa buah tergantung rendah, kemungkinan besarf=. <some tacit expression>
kemudian5!:2 <'f'
memberikan visualisasi kotak dan5!:4 <'f'
memberikan visualisasi pohon. dalam kasus saya, coba jalankan$"0~1+i.@#
dengan beberapa string terlebih dahulu, kemudian jalankan semuanya ke kanan|."0 1
, lalu pahami itu|."0 1
dan semuanya ke kiri, simpan transpos akhir, hanya melakukan rotasi yang diperlukan.#
bantuan di sini, 26 byte dengan|:@((-#)|."_1(1j1##)"0)~#\
JavaScript (ECMAScript 6), 161 byte
Cobalah online!
sumber
Perl 5 , 86 + 2 (-F) = 88 byte
Menggunakan saran @ Dom dan beberapa tweak saya sendiri untuk menurunkan jumlah byte.
Cobalah online!
sumber
-aF
untuk memasukkan semua huruf@F
dan beberapa tweak kecil (-F
dihitung sebagai 3 karena perlu spasi setelah): Cobalah online!perl -e'code...'
danperl -eF 'code...'
. Juga-a
tidak perlu saat menggunakan-F
, sehingga byte itu dapat dipotong.-F
menerima argumen, tapi kami tidak ingin menyampaikannya (-F
memungkinkan kami untuk mengontrol apa yang-a
dibagi, tidak ada argumen, membagi masing-masing karakter dengan sendirinya) sehingga perbedaan antaraperl -ae '...'
danperl -aF -e '...'
. Secara default-a
terpecah/\s+/
. Semoga itu membantu memperjelas!$#F
! Selalu lupakan itu!q / kdb +, 55 byte
Larutan:
Contoh:
Penjelasan:
MELAKUKAN. versi takung adalah 66 byte:
Bonus:
Untuk mendapatkan hasil yang sama dengan contoh (74 byte):
sumber