Tugas Anda adalah membuat program atau fungsi yang menghasilkan ritsleting dengan panjang 10 baris. Setiap garis ritsleting diwakili oleh dua garis --
:
--
--
--
--
--
--
--
--
--
--
Program / fungsi akan mengambil persentase (dapat dibagi 10) sebagai input, dan output akan menjadi ritsleting "terbuka ritsleting" (dipisahkan garis) dari persentase dengan persentase, mengungkapkan 1-diindeks, level terendah diulang 2 kali, dengan semua level sebelumnya diulang 4, 6, 8, ... dll. kali, sambil menjaga bagian bawah ritsleting terpusat.
Contohnya
>>10%
-11-
--
--
--
--
--
--
--
--
--
>>50%
-1111111111-
-22222222-
-333333-
-4444-
-55-
--
--
--
--
--
>>100%
-11111111111111111111-
-222222222222222222-
-3333333333333333-
-44444444444444-
-555555555555-
-6666666666-
-77777777-
-888888-
-9999-
-10-
Input (persentase) dapat diformat sesuka Anda (50%, .5, 50, 5 [nol tersirat], dll.), Dan akan selalu berada dalam kisaran 0 hingga 100 dan habis dibagi 10. Jarak dalam contoh harus dipertahankan dalam output Anda.
0%
? Apakah kami diizinkan mengambil input dibagi 10? misalnya bukannya50%
, dapatkan5
?5
?Jawaban:
Python 2 -
184151146 BytesNomor terakhir agak kacau dengan saya. Saya mungkin bisa menghapus pernyataan if kedua jika saya melihatnya nanti.
EDIT: Thx to mbomb007 untuk menghapus 3 byte. Terima kasih kepada charredgrass untuk kiat pemformatan untuk membantu menghapus banyak dan banyak byte! :-D Terima kasih kepada TheBikingViking untuk membantu dengan dua byte lagi!
sumber
i>9
sebagai gantii==10
dan hapus spasi dirange(1, 11)
.p=" "*(i-1);print"%s-%s-"%(p,str(i)*2*n);n-=1
.(i-1)
di baris terakhir dengan~-i
. Ini mengambil keuntungan dari prioritas operator dan fakta bahwa sedikit membalik diikuti oleh negasi sama dengan mengurangi1
.range(1,11)
lalu(i-1)
?Python 2, 74 byte
Disimpan dua byte dengan
exec
-mengulangi loop, terima kasih kepada Dennis.EDIT: Saya mengambil pendekatan yang sedikit berbeda dan menyimpan dua byte lagi.
sumber
'-'+`x+1`*(n-x<<1-x/9)+'-'
diexec
lingkaran dengan'-%s-'%`x+1`*(n-x<<1-x/9)
.`x+1`*(n-x<<1-x/9)
.PowerShell v2 +,
130120116110 byteSunting 1 - Dipotong 10 byte dengan menghilangkan
$x
variabel dan sedikit mengulangi bagaimana string diformulasikan.Sunting 2 - Memotong 4 byte lainnya dengan mengulangi bagaimana input terjadi dan dengan mengulangi bagaimana
$i
dihitung setiap loop.Sunting 3 - Disimpan 6 byte oleh OP yang memungkinkan input sebagai
0..10
, jadi tidak perlu dibagi 10.Sangat sulit!
Mengambil input sebagai
1
,5
, dll, disimpan dalam$n
. Setel$i
variabel pembantu (salah satu waktu yang sangat jarang yang perlu diinisialisasi variabel ke0
dalam PowerShell), dan kemudian mulai loop dari10
ke1
.Setiap iterasi, kami mengatur mulai string kami dengan jumlah ruang yang sama dengan
$i
, diikuti oleh pseudo-ternary(... , ...)[]
. Di dalam pseudo-ternary, kami memilih string-
dengan jumlah digit (lebih tinggi$n-10+$_
atau0
, dikalikan dengan 2), atau string-10
- pemilihan didasarkan pada apakah kita berada pada iterasi ke-10 dan input kami adalah100
. Kami menggabungkannya dengan final-
. String yang dihasilkan ditempatkan ke pipa.Akhirnya, kami bertambah
$i
, dan ini benar-benar rumit. Kami akhirnya menggunakan trik binary-cast-to-int untuk hanya meningkatkan$i
sampai mencapai$n
, dan kemudian menjaganya pada nilai yang sama setelahnya. Ini memastikan kami telah mencapai "akhir" dari lekukan ritsleting pada tingkat yang sesuai.Setelah loop selesai, string yang dihasilkan semuanya diakumulasikan pada pipeline dan outputnya implisit.
Contohnya
sumber
Pyth,
3734 byteSuite uji.
sumber
Python,
9584 byteSaya tidak menyadari lambda legal, terima kasih @R Green Eggs dan Iron Man
sumber
join
dapat mengambil generator secara langsung.lambda p:'\n'.join(' '*min(p,l)+'-'+(2-(l==9))*(p-l)*str(l+1)+'-'for l in range(10))
(84 bytes)MATL ,
484135 byteCobalah online!
sumber
Ruby, 74 byte
Menggunakan format tersirat-nol yang ditentukan dalam pertanyaan, demikian
40%
jugaf[4]
jika fungsi anonim ditugaskanf
. Jika diperlukan persentase penuh, +6 byte untukn/=10;
Cobalah online!
sumber
Python 3,
98, 90, 87, 85 byte.Membawa jumlah yang sudah dibagi 10. Saya mungkin bisa menghapus beberapa parens, tapi ini cukup tertutup untuk golf sepenuhnya.
sumber
Haskell, 83 byte
sumber
++"-"
?Javascript es7, 105 byte
telepon dengan
sumber
The program/function ...
- bukan cuplikan\n
dengan baris baru yang sebenarnya, Anda dapat menyimpan satu byte.Python 2.7,
11310877 byten = input ()untuk rentang x (0,10):
v = str (x + 1) * (nx) 2
jika x n> 89: v = '10 '
print' '* min (x, n) + '-' + v + '-'
Pertama kali bermain golf. Akan terus berjalan, cobalah untuk mendapatkannya <100.
Asumsikan input adalah 1-10.
Sunting: Menggunakan beberapa trik dari jawaban @LeakyNun (terima kasih), kemudian mengatasinya sedikit lebih jauh dan mendapatkan ... pada dasarnya jawaban yang sama: / Tidak tahu tentang konversi string `int`, dan 2 - boolean biarkan saya singkirkan pernyataan if, yang membiarkan saya menyingkirkan seluruh variabel v. Sangat keren.
Versi saya:
sumber
n=input(); for x in range(0,10):print' '*min(x,n)+'-'+('10'if x*n>89 else str(x+1)*(n-x)*2)+'-'
Python 2, 81 byte
Ide itu!
sumber
Python 2.7,
110999591 byte:Program lengkap yang mengambil input oleh integer dalam rentang inklusif
[1,10]
, di mana10
sarana100%
dan1
sarana10%
. Mungkin bisa bermain golf lebih sedikit.Cobalah secara Online! (Ideone)
sumber
PHP 5.3,
9291 byteregister_globals=1
danshort_open_tags=1
(danerror_reporting=0
)panggilan cli dengan
php-cgi -f <filename> n=<number>
<scriptpath>?n=<number>
: prepend<pre>
?:
dengan?1:
(+1)$n
dengan($n=$_GET[n])
(+11)ungolfed sebagai fungsi (PHP apa pun> = 4.0.1)
test suite
Sekarang ini baru bagi saya: PHP mengalahkan JavaScript.
Pendekatan ini golf ke min, saya pikir.
sumber
STR_PAD_BOTH
Apa ini, K&R C? Apakah kita#define
juga menggunakan PHP? :-)Julia, 73 byte
Julia pertama menjawab! Kiat dihargai.
Cobalah online!
sumber
Perl, 122 byte
sumber
Gangguan Umum (Lispworks), 314 byte
tidak dicetak:
Pemakaian:
sumber
APL, 46 byte
Argumen harus diberikan sebagai persentase dibagi dengan 10 (yaitu: bilangan bulat sederhana, dalam kisaran [0,10]).
sumber