Untuk latihan golf, saya telah melakukan tugas di kelas Intro to Python pacar saya. Saya menemukan bahwa untuk tugas ini, ada beberapa strategi yang mendekati jumlah karakter, dan saya yakin orang-orang di sini dapat menemukan cara yang lebih baik. Walaupun saya paling tertarik dengan cara-cara melakukan ini dengan Python, saya ingin tahu yang paling golf yang bisa didapat oleh program ini, oleh karena itu ini adalah kode golf dan jawaban terpendek yang menang.
Aturan:
Tugas diuraikan di bawah ini. Pengguna harus diminta untuk memasukkan dua kali, meskipun petunjuknya tidak harus mengatakan apa-apa, dan bisa dalam urutan yang berbeda.
Celah standar berlaku.
Tugas 3: Panah
Tulis program yang meminta pengguna untuk sejumlah kolom, dan mereka mencetak pola seperti yang terlihat di bawah ini. Anda dapat mengasumsikan bahwa pengguna akan memberikan angka positif. Program Anda harus menangani panah kiri dan kanan. Berikut adalah beberapa contoh runnings:
How many columns? 3
Direction? (l)eft or (r)ight: r
*
*
*
*
*
How many columns? 5
Direction? (l)eft or (r)ight: l
*
*
*
*
*
*
*
*
*
Jawaban:
Pyth, 23 byte
Mungkin atau mungkin tidak valid, berdasarkan jawaban atas komentar ini . Apapun, saya menemukan ini rapi, dan, jika tidak valid, jawaban Pyth lainnya juga tidak valid. ;)Yah, ini valid , karena saya rupanya merindukan yang jelas-jelas jelas. : /EDIT: SAYA MENANG !!!! YESS !!!! Pertama kalinya! : D
Demo langsung.
sumber
m+*\ d\*Q
bukannya enumerate thingy itu. Menghemat 2 byte.Pyth, 27
Cobalah online
Ide dasar di sini adalah untuk membangun satu string yang, misalnya 5, terlihat seperti ini:
Dan kemudian balikkan jika kita mendapatkan
l
input kita. Lalu kami mengambil semua kecualiinput-1
baris terakhir dari string ini dan mencetaknya.sumber
Python 2,
8179 byteMungkin masih bisa golf, tapi kita akan lihat :)
sumber
l
danr
. Saya tidak menyadari inputnya sudaheval
di lingkungan yang sama dengan kode.Pyth,
302827 byteCobalah online.
Rupanya saya saat ini terikat dengan FryAmTheEggman dengan pendekatan yang sama sekali berbeda. (Saya pikir orang itu cerdik.)
Contoh
Penjelasan
sumber
PowerShell,
9185102 Bytes$c
. Kami mengurangi satu karena setiap kolom juga memiliki*
dan kami hanya tertarik pada berapa banyak ruang yang diperlukan.1
, cetak*
dan keluar - sisa skrip tidak membuat perbedaan. +-eq
untukl
, kemudian membuat array berdasarkan pengindeksan ke dalam array yang dihasilkan secara dinamis berdasarkan pada nilai$c
. Sihir. Pada dasarnya, ini adalah berapa banyak ruang per baris yang kita butuhkan.5 r
koleksi ini akan tahan(0,1,2,3,4,3,2,1,0)
.%
loop Foreach-Object , di mana kita menghasilkan string sejumlah X ruang, lalu*
Contoh penggunaan:
Edit - hapus variabel
$e
dengan mem- pipkan koleksi langsungEdit2 - dengan benar menyumbang 1 kolom, sekarang
+ Jika masih wajib untuk mengambil input untuk arah panah 1-kolom (saya berpendapat tidak), kita dapat menukar posisi
Read-Host
dan kehilangan beberapa byte lagi dengan memperkenalkan kembali$d
variabel, untuk 106 :sumber
TI-BASIC,
756557545047 BytesTerima kasih kepada @ThomasKwa untuk perhitungan byte yang benar dan bermain golf 10 byte .
Diuji pada TI-84 + Edisi Perak saya.
Penyerahan TI-BASIC pertama, saran bermain golf disambut (saya belum tahu banyak trik). Jika nama memainkan faktor dalam memori yang ditunjukkan, yang ini adalah 3 karakter, bukan 1 (saya melihat hitungan byte pada kalkulator saya sendiri). Program ini dibatasi oleh
output
pembatasan fungsi (saya pikir untuk panah dengan panjang 4), tapi saya mungkin bisa beralih ketext
, yang menampilkan grafis jika itu terlalu rendah dari panjang.Perhatikan bahwa ini juga tidak menghapus layar atau menghentikannya.
Saya benar-benar merasa bahwa persamaan yang saya gunakan dapat lebih banyak bermain golf. Rasanya juga salah untuk mengecualikan tanda kutip akhir.
sumber
Ans
gratis, karena Anda tidak menggunakannya untuk input danOutput(
tidak memodifikasiAns
. Gunakan itu, dan singkirkan variabelA
. Anda dapat menetapkan menggunakan-2(Str1="R
; tidak perlu untuk bersyarat.-2
. Lakukan sajaStr1="R
untuk baris kedua. Itu membuat baris keempatOutput(I,(1-2Ans)abs(I-L)+AL+1,"*
, yang memberi Anda 4 byte lebih. Tapi tunggu, ada ungkapan untuk(1-2Ans)
- itucos(πAns)
, yang menghemat satu byte, ditambah satu lagi karena kita mendapatkan kurung buka secara gratis!Python 2, 89 byte
Bekerja hampir identik dengan jawaban Pyth saya, hanya menghitung jumlah spasi yang benar dengan cepat.
sumber
PowerShell,
104 10297 byteNB. jika Anda ingin menjalankannya lagi, buka PowerShell baru, atau
rv o
untuk mengatur ulang keadaan variabel.Dibandingkan dengan betapa singkatnya yang lain, ini menyakitkan. [Sakitnya kurang di 97 daripada di 122]. Dua bagian untuk itu, tak satu pun dari mereka yang sangat mengejutkan; membaca sejumlah kolom, menggunakan array-index-ternary-operator-subtitusi untuk mendapatkan offset, dan berjalan melalui fungsi gelombang mulai dari offset (dan tweak agar tidak jatuh saat melakukan
mod 0
).(Dan aduh saya menghabiskan waktu lama pada fungsi gelombang itu, tidak dapat menemukan kesalahpahaman saya, dan mengetik semua itu-bukan-LISP-, orangtua yang jujur).
sumber
Python 2,
9889 byteSedikit lebih panjang.
Pemakaian
sumber
NameError: name 'l' is not defined
,NameError: name 'd' is not defined
.i
dand
sama sekali, hanya menggunakanrange(P())
danif P()=='l'
...)f=[...][::2*('r'>input())-1]
sebenarnyaPerl, 85 byte
Pemakaian:
sumber
simplearrows2.pl
sepertinya tidak bagus! : PPHP, 156 Bytes
Membuat dua array, seperti ini:
kemudian menggunakan gabungan array
$s+$t
atau$t+$s
untuk menggabungkannya danarray_splice
untuk menghapus elemen di tengah. Akhirnya keluaran menggunakan<?=join()
sumber
Python 2,
111109104 byteSolusi yang cukup sederhana. Saya yakin bisa bermain golf lebih banyak. Bagi mereka yang tidak tahu,
~x+n
sama dengann-1-x
.Cobalah online
Sunting : Ini golf ke baris terakhir:
sumber
Matlab,
10910596 byteTerima kasih kepada @beaker karena telah menyelamatkan saya 9 byte .
sumber
x=x*10+32;
Ruby, 118 byte
2.times{
- dua kali, tentu saja ...l,d=gets.split;
- dapatkan inputl=l.to_i;
- ubah panjang menjadi bilangan bulata=(d=="r"?(0..l-1):(l-1).downto(0)).to_a;
- buat array dari rentang 0 hingga panjang(a+a[0..-2].reverse).each{|x| puts "#{' '*x}*"}
- iterate, berubah menjadi string untuk membuat panahBukan golf terbaik yang pernah ada, tapi, hei.
sumber
PowerShell,
9894 BytesJika saya bisa menemukan cara untuk meletakkan Read-Host untuk arah di dalam foreach-object loop tetapi hanya meminta untuk itu sekali saya mungkin dapat menyimpan beberapa byte.
Edit: 94 byte. Alih-alih menguji untuk kiri, tes untuk kanan (menyederhanakan loop).
98 byte asli:
sumber
$_
variabel - Hobbit rumit. Sangat pintar, dan saya belajar sesuatu hari ini.> <> , 60 byte
2 byte terbuang pada intinya, sungguh menjengkelkan!
Karena cara kerja input di> <>, tidak mungkin untuk 'menunggu' untuk input -
i
perintah memeriksa apakah karakter input tersedia di STDIN. Jika ada, itu mendorong nilai ASCII dari karakter itu, dan mendorong -1 jika tidak.Ini berarti bahwa, untuk menggunakan program ini, jumlah dan arah harus sudah siap di STDIN, misalnya
3r
untuk panah ukuran 3 yang menunjuk ke kanan. Saya tidak yakin apakah itu mendiskualifikasi entri ini, beri tahu saya pendapat Anda: o)Saya juga akan menulis deskripsi jika ada yang mau.
sumber
:
10?)PHP, 154 byte
Ini terlihat sangat berulang, tetapi melakukan yang diinginkan:
Berjalan dari baris perintah seperti:
sumber
Python, 88 Bytes
Diedit
sumber