Biner PostScript 50, 113 ASCII
Ini menggunakan output grafis. Hexdump program menggunakan token biner:
$ hexdump -C textRect_binary.ps
00000000 74 5b 30 20 39 5b 74 92 62 34 92 36 92 38 92 10 |t[0 9[t.b4.6.8..|
00000010 32 92 19 5d 7b 92 2c 7b 32 92 19 7d 92 83 92 3e |2..]{.,{2..}...>|
00000020 92 6e 7d 92 49 5d 39 20 39 92 6b 91 c7 39 92 8e |.n}.I]9 9.k..9..|
00000030 92 c3 |..|
00000032
Unduh untuk mencobanya . Menggunakan Ghostscript, teks yang akan di-render dapat dikirimkan ke program sebagai berikut:
gs -st=helloworld textRect_binary.ps
Output grafis terlihat seperti ini:
Kode yang sama menggunakan token ASCII terlihat seperti ini:
t[0 9[t length
4 div dup
ceiling
2 copy]{cvi{2 copy}repeat
exch neg}forall]9 9 moveto/Courier 9 selectfont
xyshow
Strategi ini digunakan xyshow
untuk menentukan di mana kita bergerak setelah menunjukkan setiap karakter sebelum menunjukkan karakter berikutnya. Kita mulai di sudut kiri bawah, bergerak searah jarum jam, yaitu pertama ke atas, lalu ke kanan, lalu ke bawah lalu ke kiri. Kami selalu memindahkan 9 unit, jadi pertama-tama kami memiliki gerakan relatif 0 9
, lalu 9 0
, lalu 0 -9
, kemudian -9 0
. Kita bisa mendapatkan dari sepasang angka-angka ini ke yang berikutnya dengan urutan exch neg
.
Kita perlu membangun array untuk xyshow
yang menyimpan pasangan angka ini, satu pasangan untuk setiap karakter. Ini berarti, jika kita memiliki helloworld
string sebagai contoh, yang memiliki 10 karakter, kita ingin naik dua kali, lalu ke kanan tiga kali, lalu ke bawah dua kali dan ke kiri tiga kali. Kami mendapatkan nilai-nilai ini (dua dan tiga) dengan membagi panjang string dengan 8, sekali membulatkan ke lantai, satu ke langit-langit.
Jadi, kami menyalin 0 9
dua kali, lalu beralih ke koordinat x / y relatif menggunakan exch neg
, salin tiga kali dan seterusnya.
Kode yang dikomentari ini menunjukkan apa yang terjadi pada stack:
t[0 9 % t [ 0 9
[t length % t [ 0 9 [ length
4 div dup % t [ 0 9 [ length/4 length/4
ceiling % t [ 0 9 [ length/4=height width
2 copy] % t [ 0 9 [height width height width]
{%forall % t [ 0 9 ... x y height_or_width
cvi % t [ 0 9 ... x y height_or_width_integer
{2 copy} % t [ 0 9 ... x y height_or_width_integer {2 copy}
repeat % t [ 0 9 ... x y .. x y
exch neg % t [ 0 9 ... x y .. y -x
}forall] % t [0 9 ... -9 0]
9 9 moveto/Courier 9 selectfont
xyshow
xyshow
? Senang memperkenalkan Anda dengan yang satu ini - beberapa waktu lalu Anda memperkenalkan sayakshow
, yang saya tidak benar-benar sadari ;-).Ruby
112100Saya baru di Ruby dan ini adalah kode golf pertama saya. Saya memanfaatkan implementasi perl memowe dan mencoba membuat versi Ruby dari itu. Ini adalah
112karakter 100 dan menganggap Anda menetapkan string ke x. Looking forward untuk melihat orang lain.Diedit untuk mengimplementasikan saran. Saya pikir ini 100 karakter sekarang. Terima kasih teman-teman!
sumber
x.length
denganx.size
(Menghemat 2 karakter)puts x[0..w=l/2-h=l/4]
.Perl (
124118109 + 3 = 112)Ini sebelumnya sangat mudah. Hitung semua opsi baris perintah masing-masing 1 karakter.
Contoh:
sumber
(@s-$h*2)/2 == @s/2-$h
(2)$w
dapat direpresentasikan sebagai$w=(@s=split//)/2-($h=int@s/4);
, sehingga menghemat dua titik koma$"
–save 1 char. (2)$w+$h == @s/2
–save 1 char. (3) Jika$w
lebih kecil satu, kita dapat menyederhanakan$"x($w-1)
. Untuk ini,$_
harus ditingkatkan 1. Menghemat seperti 3 karakter. (4) Titik koma terakhir adalah überflüssig, save 1 char. Ini mengarah ke fragmen kodesay@s[0..$w--];say$s[1-$_].$"x$w.$s[$w+$_]for+2..$h;say+reverse@s[@s/2..@s-$h]
(dengan beberapa+
untuk bersenang-senang, jadi tidak ada ruang tersisa).Brainfuck -
194187sumber
Mathematica
156 199344Sunting : Ini adalah penulisan ulang utama dari kode sebelumnya. Ini pada dasarnya bekerja sama, tetapi sekarang mengambil input dengan panjang <120 karakter dan secara otomatis ukuran persegi.
Itu masih bisa dip Golf sedikit tetapi tidak akan turun ke ukuran versi sebelumnya, dan buggier.
Contohnya
sumber
Perl + Regexes: 104 (101 + 3)
(menghitung kode + sakelar)
Ini adalah solusi menggunakan Regex yang bagus, dan sedikit Perl:
Ini hanya akan beroperasi dengan benar pada satu jalur input.
Terinspirasi oleh memowe, tetapi pada dasarnya tanpa array.
sumber
echo thisworksgreat | perl -plE'$w=($l=length)/2-($h=int$l/4);s/..{$w}\K.*/"\n".reverse$&/e;$"x=--$w;s/.\K(.*)(.)$/$"$2\n$1/while--$h'
PostScript (106)
Ini terinspirasi oleh solusi Mathematica dude .
Dengan Ghostscript panggil seperti ini
Ini menghasilkan output seperti.
Ini digunakan
kshow
untuk menunjukkan mesin terbang satu per satu. Setelah cukup mesin terbang untuk satu sisi telah ditunjukkan, semuanya diputar oleh -90 derajat sebelum melanjutkan dengan mesin terbang yang tersisa.Untuk mengetahui kapan cukup mesin terbang telah ditampilkan di samping, kami menambah penghitung dengan 4 setiap kali mesin terbang ditampilkan. Jika nilai counter modulo panjang string kurang dari 4, maka kita tahu kita harus memutar:
Kode sumber yang dikomentari dan dicabut:
sumber
Python 2.x: 137
Saya baru mengenal kode golf dan cukup yakin ini dapat ditingkatkan ...
Kode pengujian visual:
Sesuatu yang menarik: Solusi ini tergantung pada matematika bilangan bulat. Jika Anda hanya melakukan perhitungan secara simbolis, Anda akan menemukannya
h=(c-w-w)/2 => h=w-2
, tetapi jika Anda mengganti hasilnya, setiap hasil lainnya akan kehilangan dua karakter kiri bawah.sumber
K, 84
.
sumber
Scala (135)
Cuplikan berikut ini mengasumsikan yang
x
berisi string ke format, dan harus disisipkan dalam scala REPL:Jika Anda belum menginstal scala, Anda dapat dengan cepat memeriksanya menggunakan juru bahasa Scala online ini: http://www.simplyscala.com/ . Cukup tempel evaluasi akhiran teks berikut:
sumber
Python 3 (120)
Uji
memasukkan:
keluaran:
sumber
PHP (149)
Teks yang akan dicetak harus dalam variabel bernama
$x
.sumber
Python2.7 (99)
Sunting: Tampaknya melanggar aturan mencakup area maksimum di dalam.
sumber
JAVA - 320
Catatan : - Input diambil dari baris perintah
Input: - HelloWorld
Output: -
Input: - abcdefghijklmnopqrstuvwxyz
Output: -
sumber