Semua orang suka geometri. Jadi mengapa kita tidak mencoba dan membuat kode golf? Tantangan ini melibatkan mengambil huruf dan angka dan membuat bentuk tergantung padanya.
Input
Masukan akan dalam bentuk (shapeIdentifier)(size)(inverter)
.
Tapi apa itu shapeIdentifier, ukuran, dan inverter?
Pengidentifikasi bentuk adalah pengidentifikasi untuk jenis bentuk yang akan Anda buat dengan *
s. Berikut ini adalah pengidentifikasi bentuk:
s
- Kotakt
- Segitiga
Ukurannya akan berada di antara 1-20
, dan itu adalah ukuran gambar.
Inverter adalah apakah bentuknya akan terbalik, yang dilambangkan dengan a +
atau a -
. Perhatikan: s3-
== (sama dengan) s3+
karena kuadrat simetris. Namun t5-
,! = (Tidak sama) t5+
.
Trailing whitespace tidak apa-apa dalam output tetapi memimpin whitespace tidak.
Contoh Keluaran
Input: s3+
Output:
***
***
***
Input: t5+
Output:
*
***
*****
Input: t3-
Output:
***
*
Catatan khusus
Input segitiga akan selalu berupa angka ganjil, sehingga segitiga akan selalu berakhir dengan 1 *
di atas.
Ukuran segitiga adalah ukuran dasar jika inverter adalah
+
dan ukuran atas jika inverter-
.
sumber
Jawaban:
Pyth,
40363432 byte-1 byte oleh @isaacg
Titik koma di dalam lambda sekarang menjadi nilai global variabel lambda, sebuah fitur yang menyimpan satu byte.
Coba di sini .
Suite uji .
sumber
qez\+
dengan}\+z
, karena+
dapat hanya muncul di posisi terakhir.Pyth, 38 byte
Suite uji
Pada dasarnya sejelas mungkin. Saya berharap saya bisa menggabungkan beberapa logika untuk dua bentuk, tetapi saat ini terpisah.
sumber
JavaScript (ES6), 142
146 147Sunting 1 byte disimpan thx @ETHproductions Edit 2 byte sve thx @ user81655
Uji (jalankan di FireFox)
sumber
\d
->.
, karena dijamin tepat satu non-digit sebelum dan sesudahi.match(/.(.+)(.)/)
->i.match`.(.+)(.)`
Python 2, 106 byte
Outputnya adalah persegi panjang yang sempurna, dengan setiap baris diisi dengan spasi tambahan, yang saya anggap baik-baik saja berdasarkan komentar di OP.
Catatan: Saya masih belum yakin apakah
input
diizinkan menggunakan Python 2 untuk masalah seperti ini ...sumber
Japt,
6260555251 byteCobalah online!
Hal pertama yang perlu kita lakukan adalah mencari tahu seberapa besar bentuk kita perlu. Ini cukup sederhana:
Sekarang kita mengatur bentuk output:
Sekarang, kami telah menangani ukuran dan bentuk output. Yang tersisa hanyalah rotasi. Segitiga saat ini mengarah ke atas, jadi kita perlu membalik mereka jika karakter ketiga adalah
+
:Dan dengan output implisit, pekerjaan kami di sini selesai. :-)
sumber
Python 2,
235193167157 BytesMemperbarui:
Membuat beberapa pengoptimalan yang signifikan dengan menggunakan daftar pemahaman dan str.center (). Aku punya perasaan aku bisa melakukan lebih banyak lagi, akan melihat lagi nanti.
Perbarui 2
Disimpan 10 Bytes dengan saran dari Sherlock9. Terima kasih banyak! :)
Jawaban lama
Pendekatan cukup lurus ke depan. Menulis baris per baris dalam string yang saya output pada akhirnya. Segitiga selalu ditarik terbalik dan dibalik jika diperlukan. Fakta bahwa Anda dapat melipatgandakan string dengan Integer menyelamatkan saya banyak byte!
Saya akan mencoba untuk bermain golf yang sedikit lebih nanti, akan menghargai saran sementara itu, karena saya belum banyak berpengalaman dengan itu.
sunting: Menurunkannya dengan banyak bantuan di komentar dan mencuri perhitungan ukuran dari salah satu jawaban python lainnya. Saya pikir itulah yang paling bisa saya lakukan dengan algoritma ini.
sumber
wc
ini memberi saya hitungan byte 235. Apakah saya salah?raw_input
,input
menghemat 4 byte. Selanjutnya Anda tidak memerlukan tanda kurung di baris kedua, ini dan tidak menggunakan variabelx
sama sekali (menggunakanif"s"in d
) menghemat 9 byte lagi.[]
tanda kurung di setiapjoin
panggilan fungsi. Kedua,if d<"t"else
lebih pendek dan berfungsi karena"s3+"<"t"<"t3+"
dalam Python. Ketiga,else"\n".join
dan.center(x)for
. Tidak ada ruang. Itu tidak wajib. Keempat, diprint o[::-1]if"+"in d else o
mana saya mengatur kembali hal-hal untuk dua byte (satu ruang antara]
danif
dan yang lain antaraif
dan"+"
.JavaScript, 220 byte.
Jalankan dengan
f(input here)
Coba di sini!
Kuadrat memiliki garis baru, tetapi segitiga tidak. Penjelasan:
sumber
Python 2,
157132 byteUpaya pertama menyatakan bahwa
+/-
pada akhirnya adalah opsional, menyingkirkan itu izinkan saya mencukur banyakIdenya di sini adalah membuat daftar yang dapat dilemparkan ke dalam keluaran generik. Bagian tersulit adalah memisahkan panjang dari input.
sumber
x=int(d[1]if len(d)<4 else d[1:3])
dengan d menjadi string input. Thats 5 Bytes lebih pendek dari solusi Anda. Anda masih jauh di depan dari jawaban python saya, harus mencoba memahami apa yang Anda lakukan di sana dan mengalahkan Anda lain kali! :)x=int(d[1:-1])
jauh lebih pendek untuk itu, lihat saja di jawaban python lainnya.Retina ,
10285 byteHitungan byte mengasumsikan bahwa kode sumber dikodekan sebagai ISO 8859-1.
Cobalah online.
Saya akan mencoba golf ini lagi nanti.
sumber
\n
sebagai pengganti\r\n
. Base64 konten:XGQrCiQwJCo6wrYKXigoXHcpKyk6KDorKQokMSQyJDMkMsK2JDAKbWBzJHw6dAoKKWAoLispwrYtKFxEKikKLSQywrYkMQptYF4uCgpHYC4KVGB0czpgICo=
(salinan langsung dari Notepad ++). Cukup aneh, setiap solusi online memberi saya 85 byte ... Hum ...¶
. Mereka jelas merupakan byte tunggal di ISO 8859-1 (dengan nilai 182).Serius, 54 byte
Cobalah secara Online
@Mego: Lihat itu
#dXdXεj
? STRING SLICING ????sumber
ES6,
178172159 byteIni berhasil karena pengamatan menarik yang saya buat. Jika Anda mengulangi
n
spasi dann
tanda bintang, Anda mendapatkan (mis. Untukn=5
) ini:Sekarang, ambil substring dengan awal dan panjang yang sama:
Substring ini adalah persis string yang kita butuhkan
t5
.Sunting: Disimpan 6 byte berkat @ edc65.
Sunting: Disimpan 13 byte karena menyembunyikan
u+=v
argumen ketigasubstr
sehingga memungkinkan saya untuk menyederhanakan inisialisasi.sumber
t
kode penanganan ternyataw
danu
menjadi setara dan yang menyelamatkan saya cukup byte untuk membawa saya kembali ke 178![,b,c]=s.match
dan yang lebih barus<'t'
... harus menyimpan beberapa byte (hanya Firefox)s
memungkinkan saya untuk menggunakans<'t'
yang menyelamatkan saya 6 byte, terima kasih.MATL , 48 byte
Menggunakan versi saat ini (10.1.0) dari bahasa / kompiler.
Kode menerima karakter input dalam urutan apa pun: semua
s11+
,11s+
dan bahkan1+s1
akan menjadi string input yang valid.EDIT (30 Juli 2016): kode tertaut menggantikan
1L3$)
denganY)
agar sesuai dengan perubahan terbaru dalam bahasaCobalah online!
Penjelasan
sumber
C, 259 byte
ungolfed
Saran dan kritik sangat kami harapkan.
sumber
Ruby, 99
Menghitung kuadrat atau segitiga tinggi
n
dan lebar rata - ratan
dengan memperhatikan kemiringan sisi (sehingga lebar segitiga yang dihitung adalah 2n-1 di pangkalan, 1 di ujung.) Tetapi hanya mencetak baris yang tidak melebihin
karakter.ungolfed dalam program tes
sumber
Jolf, 37 byte, tidak bersaing
Saya menambahkan fungsi setelah tantangan ini diposting, jadi ini tidak dapat dipertimbangkan untuk diterima. Ini dikodekan dalam ISO-8859-7. Coba semua test case di sini .
Bagian 1: parsing string
Bagian 2: memperoleh hasilnya
Bagian 3: membalikkan hasilnya
sumber