Tulis sebuah program atau fungsi yang mengambil bilangan bulat positif (melalui stdin, baris perintah, atau fungsi arg) dan mencetak atau mengembalikan string yang banyak dari segitiga kecil ini digabungkan menjadi satu, bergantian ke arah mana mereka menunjuk:
/\
/__\
Segitiga tunggal ini adalah output jika inputnya adalah 1
.
Jika inputnya adalah 2
, outputnya adalah
____
/\ /
/__\/
Jika inputnya adalah 3
, outputnya adalah
____
/\ /\
/__\/__\
Jika inputnya adalah 4
, outputnya adalah
________
/\ /\ /
/__\/__\/
Dan seterusnya. Program Anda harus mendukung input hingga 2 16 - 1 = 65535.
Detail
- Segitiga paling kiri selalu menunjuk ke atas.
- Mungkin ada spasi tambahan tetapi mungkin tidak ada ruang utama yang tidak perlu.
- Mungkin ada trailing newline opsional.
- Perhatikan bahwa untuk
1
output panjangnya dua baris tetapi sebaliknya tiga. Ini wajib diisi. - Pengajuan terpendek dalam byte menang.
SQL,
182175173187 byteBukan berarti ini akan menjadi yang terpendek, tetapi masih lucu untuk mencoba meminimalkan sql;) lol Saya melakukan ini di Oracle 11, namun, ini harus SQL dasar. Seperti yang ditunjukkan, saya tidak menerapkan ketika input = 1 aturan - hanya menampilkan 2 baris. tidak bisa memikirkan cara yang lebih baik untuk melakukannya, namun, saya memang menyimpan beberapa byte dengan memodifikasi logika v;) menambahkan 2 sebelumnya menghemat beberapa byte dengan tidak harus mengulanginya nanti [/ edit]
[edit1] menghapus beberapa spasi yang tidak perlu [/ edit1] [edit2] mengubah && i menjadi adil & i. Ini mengurangi 2 karakter, tetapi memaksa pengguna untuk memasukkan # segitiga sebanyak dua kali ...: PI menyadari "kebiasaan pengkodean yang baik" menggunakan && saya biayanya menjadi 2 byte !! Menyeramkan!! [/ edit2]
Penjelasan (catatan: Saya menggunakan && 1 dalam penjelasan ini sehingga hanya meminta sekali, & 1 di atas menghemat ruang kode, tetapi meminta beberapa kali;))
Keluaran
sumber
from
? Jika demikian, itu akan menghemat satu byte.Python 2,
8988878583 bernama / 81 tidak disebutkan namanya(Terima kasih kepada @orlp untuk satu byte, dan @xnor untuk tiga byte lainnya)
Ini adalah fungsi yang mengambil int
n
dan mengembalikan segitiga sebagai string menggunakan pendekatan baris-demi-baris.misalnya
print f(10)
memberiUntuk baris pertama, alih-alih
(n>1)*
kita gunakan1%n*
, karena1%n
0 jikan == 1
dan 1 jikan > 1
.sumber
" /\\ "
menjadi" /\ "
."\n".join()
3 item, meskipun daftar tersebut digunakan untuk menghapus elemen pertama secara kondisional. Mungkin sesuatu sepertib*(x+"\n")+y+"\n"+z
lebih pendek?JavaScript (ES6), 101
109Terlalu lama
Penjelasan
Menggunakan panah gemuk untuk definisi fungsi. Apalagi tidak ada
{}
blok: fungsi tubuh adalah ekspresi tunggal yang merupakan nilai balik.f=(a,b,c)=>expr
setara denganDi dalam satu ekspresi Anda tidak dapat menggunakan pernyataan seperti
if
atauvar
, tetapi?:
baik digunakan daripadaif else
w
adalah parameter kedua (tidak digunakan) untuk fungsiz
Kita dapat menulis ulang
f
fungsi sebagaiTes di Firefox / konsol FireBug
Keluaran
sumber
w
n=>(n>1?' '+'____'.repeat(n/2)+'\n':'')+' /\\ '.repeat(n).slice(0,n*2+2-n%2)+'\n'+'/__\\'.repeat(n).slice(0,n*2+1+n%2)
untuk 119 (sengaja tidak menggunakan string template dll untuk mencocokkan jawaban Anda).CJam,
555351 byteSaya mencoba porting jawaban Python saya dan ternyata lebih pendek daripada CJams lainnya.
Permalink .
sumber
Haskell
155153139131 BytesSaya menemukan pendekatan yang sedikit berbeda yang ternyata lebih pendek dari metode asli saya. Upaya awal saya terpelihara di bawah ini. Seperti sebelumnya, tips golf sangat dihargai.
Terima kasih kepada Nimi untuk tips golfnya.
Percobaan Sebelumnya
197179 Bytessumber
(mod n 2)==0
adalaheven n
atau lebih baik menggunakanodd n
dan swapthen
danelse
bagian.concat.take(div n 2).repeat
adalahtake(4*div n 2).cycle
karena semua elemen daftar adalah panjang 4. nama pendek Tetapkan ke fungsi dengan nama yang panjang, misalnyaz=zipWith
- penggunaan kemudianz
. Anda dapat menendang beberapa ruang...repeat""else[...
.foldr z["","",""]
adalahfoldr1 z
, karena daftar untuk dilipat tidak pernah kosong. Alih-alihall(==' ')
Anda dapat menggunakan==" "
(<- dua spasi di antara), karena digunakan untuk menghapus baris kosong jika n = 1 dan di sini baris pertama" "
. Definisi pertamat
dapat ditulis dalam satu baris:t n|odd...
.CJam,
7368636260 byteIni pasti membutuhkan golf ...
Uji di sini.
Penjelasan
sumber
Julia, 115 byte
Ini menciptakan fungsi tanpa nama yang menerima integer dan mencetak segitiga. Untuk menyebutnya, berikan nama, mis
f=n->(...)
.Penjelasan + tidak dikumpulkan:
Contoh output:
Saya sangat kecewa bahwa ini sangat lama. Saya yakin ada banyak peluang bermain golf tetapi mereka tidak jelas bagi saya saat ini. Beri tahu saya jika Anda memiliki saran atau ingin penjelasan lebih lanjut!
sumber
CJam,
68 6260 byteSejauh yang saya bisa lihat, ini adalah pendekatan yang sama sekali berbeda dari solusi CJam lainnya. Ini bisa bermain golf banyak.
Cobalah online di sini
sumber
C # 190
Tidak disatukan
sumber
while
loop, daripada menggunakanfor
loop. Dalam hal ini Anda dapat menyimpan 2 byte dengan memasukkan definisim
dalam inisialisasi loop, danb=!b
dalam hal terakhir apa pun namanya. Anda juga dapat melakukan penghematan dengan menggantistring
danbool
denganvar
. Anda juga tidak memerlukan "()" di sekitarn>1
klausa, dan dalams+=
klausa Anda dapat menggunakan hubungan arus pendek&
bukan&&
karena tidak ada efek samping atau referensi yang salah. Akhirnya,1>0
lebih pendek daritrue
;)C #,
257183 byteSunting: Berkat tips dariVisualMelon, disimpan 74 byte.
Saya tahu itu jauh dari bahasa terbaik untuk bermain golf, tapi saya lebih tertarik untuk belajar tentang berbagai nuansa C #, daripada memenangkan kompetisi. Ini pada dasarnya adalah port dari jawaban Pyth ini .
Saya berpikir untuk loop bisa bermain golf lebih jauh, tapi saya tidak yakin bagaimana, mengingat pernyataan tersier tertanam di dalamnya.
Contoh (1, 2, 3, 10):
Tidak Disatukan:
sumber
s+=
adalah teman Anda. Memang, Anda untuk loop dapat dibuat sedikit lebih kompak. Kegembiraan / kengerian operator++
dan--
berarti Anda dapat melakukan sebagian besar pekerjaan dalam pemeriksaan bersyaratfor(i=0;i++<=t;)
(ini memeriksa jikai
kurang dari atau sama dengant
kemudian menambahnya). Anda sebaiknya mendefinisikanint i
loop for di luar, dan menggunakannya kembali, dan karena Anda dapat menjamin bahwai
tidak akan pernah negatif,i%2==0
dapat ditukar dengani%2<1
. Dengan perubahan ini, skor sub 200byte mudah dicapai.Enumerable
biasanya memerlukanusing System.Linq
arahan, dan saya pikir itu umumnya dimaksudkan bahwa klausa tersebut disertakan. Namun , dalam hal ini, satu-satunya LINQ yang dapat diganti denganvar s=" "+string.Join("____",new string[1+t/2])+n;
yang tidak mengandung LINQ, dan lebih pendek dari kode saat ini;) Ia menggabungkan banyak string nol bersama dengan apa yang benar-benar kita pedulikan, "____" (1 + t / 2 menjadi karena kita membutuhkan string nol lain agar sesuai dengan "____" sebelum). Variabeln
dinyatakan sebagai "\ r \ n".Console.Write
bukannyaConsole.WriteLine
Jawa, 185
Penjelasan
sumber
C # -
151146141138Terinspirasi oleh jawaban @ bacchusbeale
Tidak disatukan
sumber
new String
itu baru bagi saya! Anda sepertinya melewatkant=""
versi golf Anda, meskipun hal yang lebih baik untuk dilakukan adalah menginisialisasit
sebagai "\ n". Anda dapat menyimpan beberapa byte dengan menambahkan ket
mana Anda flipb
, menyimpan "{}" pada untuk loop:t+=(b=!b)?"/":"__\\"
.t
sebelumnyas
dan menambahkant
ke string daripada"\n"
;)Pergi,
156144Tidak Disatukan:
Satu-satunya trik nyata di sini (dan bahkan bukan yang baik) adalah menggunakan 3 akumulator sehingga saya dapat memadatkan solusinya menjadi 1 loop.
Kode dapat dijalankan di sini: http://play.golang.org/p/urEO1kIjKv
sumber
c += `__\`
sebagai gantiif i<n{c+="_"}
> <> (Ikan) ,
215183156 bytesSunting: Notepad ++ memberi saya 5 byte tambahan karena CR, jadi dimodifikasi hitung sesuai
Sedikit lebih golf, tetapi ini adalah program ikan pertama saya sejauh ini> _ <Persyaratan untuk tidak memiliki baris pertama kosong untuk 1 segitiga dua kali lipat ukuran program.
Dapat menguji di http://fishlanguage.com/ (Int pada tumpukan awal untuk panjang)
Penjelasan:
sumber
perl
109108106Saya pikir ini tidak masalah untuk golf pertama saya, saya menggunakan bagian Vynce untuk baris pertama, dengan sisa kode saya untuk melewati masalah baris baru dengan 1 segitiga.
Sekarang untuk melihat apakah saya dapat mempersingkatnya :)
Sunting : Whitespace
Sunting 2 : diganti
"\n"
dengan$/
sumber
C89, 150
Versi ungolfed:
Hasil:
Tumpukan meluap jika saya masukkan
65535
(tetapi tidak jika Anda mengkompilasi dengan-O3
!), Tetapi secara teoritis itu akan bekerja ;-)sunting: program sekarang memenuhi persyaratan bahwa hanya dua baris yang harus di-output jika
1
dilewatkan ke program sunting 2: gunakanint*
alih-alihchar*
sumber
main
seolah-main(c,v)**v;
olah itu berhasil.c
ataun
sebagai variabel global, jadi Anda tidak harus meneruskan parameter itu ker()
. Saya tidak berpikir jawaban Anda sesuai denganNote that for 1 the output is two lines long but otherwise it's three. This is required.
error: expected declaration specifiers before ‘*’ token main(c,v)**v;{
n
atauc
yang lebih pendek.int**
?C ++ stdlib, 194 byte
Program uji:
sumber
Bash,
166127125119105 byteDalam suatu fungsi:
Dengan beberapa presentasi:
Dapat merender (jika Anda telah menginstal figlet ):
Simpan 2 karakter jika input dari variabel, bukan
$1
: 103Ke dalam loop:
Akan membuat (kira-kira) sama:
sumber
Arang , 27 byte (tidak bersaing)
Nonkompetisi karena bahasa yang ada setelah tantangan.
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Buat daftar bit bolak panjang
n
dan loop di atasnya.Gambar
____
tanpa menggerakkan kursor.Pada segitiga pertama dan setiap segitiga lainnya, gambar
/
sisi kiri .Gambar
\
sisi tanpa menggerakkan kursor.Pada segitiga kedua dan setiap lainnya, gambar
\
sisi kiri lagi untuk menggerakkan kursor.Pada segitiga kedua dan setiap segitiga lainnya, gambar
/
sisi kanan , tanpa menggerakkan kursor.sumber
PowerShell ,
11695 byteTerima kasih banyak kepada Mazzy dan ASCII-Only untuk menghemat 21 byte
Cobalah online!
Tidak mengizinkan baris kosong untuk n = 1 memakan seperti
1410 byte. Solusi inicukup mati otaksekarang jauh lebih pintar dengan jumlah minimal kode berulang. Pembulatan Bankir masih iblis yang sebenarnya.sumber
C, 368 Bytes
Ini lebih jika Anda menghitung
#include
pernyataan, tetapi dikompilasi di gcc, meskipun dengan peringatan, tanpa mereka. Saya tahu ini bukan yang terpendek sejauh ini, tapi saya masih suka saya melakukannya di C.sumber
#define p(c)printf(c)
lebih pendek dari fungsi Anda. Anda dapat menghilangkan jenis kembali pada fungsi (mereka default keint
). Anda juga dapat mendefinisikan fungsi denganC89
gaya seperti inimain(c,v)char**v;{}
. Itu adalah kependekan dariint main(int c, char** v){}
Perl (sederhana)
131125120pass pertama yang cukup mudah:
oh siapa yang butuh int eksplisit?
sumber
Prolog, 126 byte
Ajak suka
$3
.Lebih mudah dibaca:
Contoh:
sumber
C #: 1 baris LINQ, 198 byte
sumber
Retina , 88 byte (tidak bersaing)
Nonkompetisi karena bahasa yang ada setelah tantangan.
Cobalah online! Penjelasan:
Ganti input dengan sepasang segitiga.
Lipat gandakan segitiga dengan input asli.
Bagilah segitiga dengan 2.
Hapus segitiga setengah-kiri.
Hapus baris pertama jika sekarang kosong.
sumber
Perl 6 , 83 byte
Cobalah online!
Blok kode anonim yang mengambil nomor dan mengembalikan string.
sumber
C (gcc) ,
117115 byte-2 Terima kasih untuk ceilingcat.
Semua tanda kurung menyarankan sesuatu yang kurang kikuk pasti mungkin.
Cobalah online!
sumber
05AB1E , 37 byte
Cobalah online atau verifikasi 10 output pertama .
Penjelasan:
sumber
Java 11, 122 byte
Cobalah online.
Penjelasan:
sumber