Saya pikir "lengkungan" adalah cara terbaik untuk menggambarkan pola angka ini:
1234567887654321
1234567 7654321
123456 654321
12345 54321
1234 4321
123 321
12 21
1 1
Didefinisikan secara formal, setiap baris terdiri dari angka 1 hingga 9-n
, (n-1)*2
spasi, dan angka 9-n
sampai 1 (di mana n
garis saat ini).
Tugas Anda adalah menulis, menggunakan kode sesingkat mungkin, skrip / program kecil yang mencetak pola di atas dengan batasan sebagai berikut:
- Anda tidak boleh membuat hardcode seluruh pola. Anda hanya dapat membuat hardcode satu baris dari pola paling banyak.
- Program Anda harus mencetak baris baru (kombinasi dari
\n
atau\r
) di akhir setiap baris.
Siap ... siap .... siap!
code-golf
ascii-art
number
kolmogorov-complexity
Nathan Osman
sumber
sumber
123456787654321
sama dengan11111111^2
;-)11111111^2 == 123465787654321 != 1234567887654321
(perhatikan yang diulang8
)Jawaban:
Python 2,
65555351Dipersingkat menggunakan beberapa ide ugoren .
sumber
s=s[1:]
per loop danwhile s:
GolfScript (25 karakter)
sumber
APL (18)
Penjelasan:
1↓⎕D
: string digit ("0123456789") minus elemen pertamanya↑∘(1↓⎕D)¨⌽⍳8
: pilih karakter [8..1] pertama ('12345678', '1234567' ...)↑
: format sebagai matriks (mengisi karakter yang tidak digunakan dengan kosong)k,⌽k←
: simpan dik
, dan tampilank
diikuti oleh mirroring vertikalk
sumber
Ruby:
6150 karakterContoh dijalankan:
sumber
Jalanan - 3 x 18 = 54
Saya merasa harus melakukan sesuatu dengan befunge, sudah terlalu lama sejak saya menggunakannya terakhir kali. Masalah ini terasa paling tepat untuk bahasa.
Sangat lambat karena loop cetak yang membutuhkan sekitar 8 tindakan per karakter (gaya penghitungan berbeda).
sumber
JavaScript, 71
sumber
s="1234567887654321";for(i=10;--i;)console.log(s=s.split(i).join(" "))
untuk 70 karakter, @SteveWorleyC, 83 karakter
sumber
Python 2,
7562Itu tidak akan mengalahkan jawaban Volatilitas, tapi inilah pendekatan lain menggunakan string python yang dapat berubah (
bytearray
):Edit
Saya menemukan versi yang lebih pendek, menggunakan
str.replace
:sumber
Perl, 41
ditambah
-E
saklar. Total karakter pada baris perintah: 50membutuhkan setidaknya perl5, versi 10.
sumber
-E
adalah penambahan satu byte pada program.Mathematica
92 85 67 5451Metode # 1 : (54 karakter) Membuat array menggunakan baris #, col #, dan jarak dari tepi kiri-kanan.
Metode # 2 : (67 karakter) Pad rentang yang selalu memperpendek.
Metode # 3 : (85 karakter) Selektif mengisi setiap baris array.
Mulailah dengan daftar 8 karakter spasi. Ganti posisi 1 dan 16 dengan "1"; ganti "2" di posisi 2 dan 15, dll.
Metode # 4 : (86 karakter) Selektif mengosongkan setiap baris array.
Metode # 5 : Menggunakan string (92 karakter)
sumber
()
, dan ganti#1
dengan#
:Grid@Array[If[#2<9,#2,17-#2]/.x_/;x+#>9:>" "&,{8,16}]
Array
terkadang dapat membuat tabel yang bagus tanpa harus menambahkan iterator.PHP, 68
(Terinspirasi oleh jawaban Hamza)
for($n=8;$n;$r[]=$n--)echo str_replace($r," ","1234567887654321\n");
Dimainkan pada kenyataan bahwa str_replace PHP dapat menerima array untuk pencarian dan string untuk diganti, itu akan mengganti setiap item dalam array dengan string yang diberikan. Setelah setiap iterasi, angka saat ini ditambahkan ke array pencarian, menghapusnya dari loop berikutnya.
Contoh kode dalam aksi: http://ideone.com/9wVr0X
sumber
<pre>
tag. Ketika ditafsirkan sebagai teks html, spasi diciutkan dan baris baru diabaikan, tetapi jika Anda memeriksa sumbernya, Anda akan melihat sebaliknya.Marbelous 165
Kodesemu:
sumber
Python 2.x -
73656361 karaktersumber
PHP, 76
sumber
K, 28
.
Anda dapat menggeneralisasi untuk 36:
{-1_a,'|:'a:(#*m)$'m:{-1_x}\,/$1+!x}
sumber
Javascript, 67 karakter
Terlambat oleh jawaban steveworley (saya akan berkomentar jika saya bisa):
Cuplikan kode
Kehadiran baris baru terakhir memang mengikuti aturan.
perbarui: potong 2 karakter dengan menghapus tanda kurung (prioritas operator) dan 1 dengan menghapus ruang yang tidak dibutuhkan
Sepertinya itu mengganggu saya, karena tidak peduli berapa banyak cara berbeda saya mencoba untuk mempersingkat atau menyederhanakan dengan menghapus hardcoding segmen kode, panjangnya tetap sama sampai saya membiarkan aturan "Saya pikir ini penting" yang tertulis di bawah ini berlaku.
(Jika pencetakan dianggap sebagai apa yang muncul kembali ketika ini dijalankan di konsol chrome)
sumber
Brainfuck: 542 Bytes
sumber
Mathematica , 59
61 menggunakan ide saya sendiri:
Atau 59, meminjam dari jawaban David:
sumber
R: 52
sumber
Haskell, 84
Titik awal bagi seseorang untuk meningkat:
Kemungkinan besar bagiannya adalah untuk membuat
l++reverse l
titik bebas, membiarkan kita menyingkirkanlet
pernyataan, tapi aku akan menemukan ituap
, yang membutuhkan impor.sumber
PostScript: 105 karakter
Penanganan string tidak mudah dalam PS tetapi dapat membuat kode yang relatif sederhana:
Versi yang sedikit lebih panjang di 120 karakter tetapi dapat menghasilkan lengkungan angka yang berbeda dengan mengganti 8 di awal baris kedua dengan angka apa pun di kisaran 1 hingga 9:
sumber
GoRuby 2.1
36 karakter
Tidak disatukan
sumber
K 20
sumber
TSQL, 148
Sunting: turun ke 148 dengan saran manatwork dan mengubah ke ORDER BY.
Dapat dibaca:
Golf:
Keluaran:
sumber
1
alih-alih string di'1'
mana Anda langsungcast
memasukkannyavarchar
. Ini memberi saya 149 karakter:with t as(select 1n,cast(1as varchar(max))o union all select n+1,o+char(n+49)from t where n<8)select o+space(16-2*n)+reverse(o)from t order by o desc
.Haskell, 79
Ini berfungsi dengan mengganti karakter> n dengan
' '
, di mana karakter n bersumber dari "87654321" (yang merupakan ekor dari string untuk melakukan substitusi aktif).sumber
PHP: 61 karakter (atau 60 karakter jika Anda mengganti \ n dengan baris ASCII yang sebenarnya)
(Terinspirasi oleh jawaban GigaWatt dan HamZa)
http://ideone.com/FV1NXu
sumber
PowerShell: 38
Kode golf
Panduan
8..1|%{
...}
integer pipa dari 8 ke 1 ke dalam loop ForEach-Object.-join(
...)
bergabung dengan output dari kode bersarang menjadi string tunggal tanpa pembatas.1..$_
output bilangan bulat naik dari 1 ke bilangan bulat saat ini dalam loop.+" "*(8-$_)
menambahkan spasi ganda, dikalikan dengan perbedaan antara 8 dan integer saat ini, ke output.+$_..1
menambahkan integer, turun dari integer saat ini ke 1, ke output.sumber
Javascript dengan lambdas, 147
Dapat diperiksa di Firefox.
sumber
CJam, 22 karakter
Bukan jawaban yang valid (karena bahasa dikembangkan setelah pertanyaan), dan juga bukan yang terpendek, tetapi begini:
Cobalah online di sini
sumber
Lua, 62
sumber