Menggunakan karakter Unicode paling sedikit, tulis fungsi yang menerima tiga parameter:
- Jumlah total domino
n
domino yang terkena dampak- Gulingkan arah domino yang terkena dampak (
0
atauL
untuk kiri,1
atauR
untuk kanan)
Setelah domino dijatuhkan, itu juga harus menggulingkan domino yang tersisa di arah yang sama.
Anda harus menampilkan domino dengan |
mewakili domino berdiri dan \
dan /
mewakili domino terguling masing-masing ke kiri dan kanan.
Contohnya
10, 5, 1
harus kembali ||||//////
6, 3, 0
harus kembali\\\|||
if(third_parameter)
alih-alihif(third_paramter=='l')
Jawaban:
Ruby, 38 (46) karakter
Fungsi ini mengambil arah sebagai bilangan bulat (
1
untuk kanan,0
untuk kiri). Fungsi yang mengambil string lebih panjang 8 karakter:Contoh penggunaan:
sumber
Haskell, 70
dengan asumsi ada jenis Direction , yang memiliki konstruktor R dan L .
sumber
J -
3226 charJ tidak bisa menangani lebih dari dua argumen tanpa menggunakan daftar, dan tidak bisa menangani daftar yang tidak homogen tanpa tinju. Jadi memiliki input sebagai daftar tiga bilangan bulat sangat ideal. Urutan parameter adalah kebalikan dari yang standar: 0 untuk kiri atau 1 untuk kanan, lalu posisi, lalu jumlah total domino. Alasan untuk ini adalah karena J akhirnya akan melewati mereka dari kanan ke kiri.
Inilah yang terjadi.
F`G/
diterapkan ke daftarx,y,z
akan dievaluasix F (y G z)
.y G z
mengkonstruksikan kedua kemungkinan cara domino bisa jatuh, dan kemudianF
menggunakanx
untuk memilih yang mana dari keduanya untuk digunakan.Di bawah ini adalah bolak-balik dengan J REPL yang menjelaskan bagaimana fungsi dibangun bersama-sama: garis indentasi adalah input ke REPL, dan respons rata dengan margin kiri. Ingat bahwa J mengevaluasi dengan ketat dari kanan ke kiri kecuali ada paren:
Dengan mengorbankan beberapa karakter, kita dapat membuat urutan urutan standar: tambahkan saja
@|.
ke akhir fungsi:Mengadaptasi ini agar bekerja dengan argumen string untuk arah akan jauh lebih mahal.
sumber
/
dan juga cara Anda membangun dua output dan memilih yang diinginkan. Saya rasa saya merasa seperti ini tidak memiliki pengakuan yang layak.PowerShell, 66
Mungkin ide yang sama yang dimiliki setiap orang.
sumber
Golfscript (44
53)Program Golfscript pertama saya. Butuh waktu lebih lama dari yang seharusnya dan mungkin bisa dilakukan dengan cara yang lebih cerdas dan lebih ringkas (saya yakin seseorang akan membuktikannya :)):
Input sampel adalah
10 5 0
.Tidak Disatukan:
sumber
d
menjadi0
/1
bukannya'l'
/'r'
yang memberi Anda beberapa kode lebih pendek. Kalau tidak, jika Anda menyimpand'l'=
dalam variabel oyu dapat menggunakannya sebagai ganti perbandingan kedua dengand
. Dalam istilahx i j
Anda dapat menyimpan kedua spasi putih jika Anda menggunakan nama variabel non-alfanumeriki
.'l'
/'r'
karena pada saat itu saya belum melihat bahwa kita bebas menggunakan bilangan bulat. Trik non-alfanumerik adalah licin, terima kasih! Mungkin saya akan memperbarui jawabannya nanti.GolfScript,
2823 karakterArgumen di atas tumpukan, coba online :
sumber
Python - 45
52Ini membutuhkan
1
kanan dan0
kiri.Inilah versi yang mengambil
r
danl
dengan benar, di 58 :Beberapa contoh penggunaan ...
sumber
JS (ES6) -
7974726562terima kasih kepada @nderscore!
Param 3 adalah boolean (0: kiri / 1: kanan)
sumber
d=(a,b,c)=>"\\"[r="repeat"](!c&&a-b+1)+"|"[r](--b)+"/"[r](c&&a-b)
[r='repeat'][r]
15 karakter..repeat.repeat
14 karakterPython2 / 3 - 54
Yang terakhir ditambahkan pada aturan itu cukup bagus (0/1 bukannya 'l' / 'r'). Made mine sebenarnya lebih kecil dari solusi python yang ada. 0 kiri, 1 kanan
sumber
Haskell , 42 byte
Cobalah online!
Mengambil input seperti
(%) n k b
untukn
kartu domino,k
'th domino terguling, arahb
.Menemukan karakter pada setiap posisi
c
mulai dari1
untukn
dengan menggunakan ekspresi aritmatika untuk menghitung indeks karakter 0, 1, atau 2.Uji kasus diambil dari sini .
Haskell , 44 byte
Cobalah online!
Strategi yang menarik yang ternyata sedikit lebih lama. Menghasilkan string
"\\|/"<*[1..n]
dengann
salinan berturut - turut dari setiap simbol, lalu mengambil sepotongn
karakter yang berdekatan dengan posisi awal yang ditentukan secara hitung.sumber
Python 2.7,
68 65 61 5958 karakterGunakan
d=1
untuk kiri dand=0
kananCatatan: Terima kasih kepada @TheRare untuk bermain golf lebih lanjut.
sumber
d and'\\'...or'/'...
?('\\'...,'/'...)[d]
f=lambda a,p,d:('|'*(p-1)+'/'*(a-p+1),'\\'*p+'|'*(a-p))[d]
Also, I don't think your code works when falling left.
Bisakah Anda memberikan test case untuk membuktikan?Javascript, 46 karakter
Sepertinya curang melakukan 0 = l dan 1 = r tetapi ada. Menyusutnya dengan rekursi kecil.
sunting: melewatkan karakter yang jelas
sumber
JavaScript (ES6) 61
63Sunting Itu buggy - malu pada saya.
Tidak begitu berbeda dengan @xem, tetapi menemukannya sendiri dan lebih pendek. Parameter d adalah 0/1 untuk kiri / kanan
Tes di konsol Firefox
Keluaran
sumber
--p
?Perl,
6765 KarakterTetapkan tiga params pertama (total, posisi, arah sebagai bilangan bulat [0 kiri, 1 kanan]). Ekstra masuk ke eter. Kurangi 1 dari posisi jika kita mengarah ke kanan sehingga domino di posisi X dibalik juga.
sumber
$p--if$d
dengan$p-=$d
kehilangan dua karakter :)Haskell , 57 byte
4 byte disimpan berkat tip ini
Cobalah online!
Haskell ,
69616058 byteCobalah online!
Bukan jawaban yang sangat rumit tetapi mengalahkan jawaban Haskell yang ada.
sumber
R ,
75686157 byteFungsi anonim. Saya akan mengirim penjelasan yang lebih lengkap jika ada minat.
Cobalah online!
sumber
Haskell , 51 byte
a
= jumlah domino,b
= indeks berbasis 1 dari yang disentuh,c
= arah (0
kiri dan1
kanan).Cobalah online!
sumber
(a#b)c= ...
.PHP - 64
Lingkaran sederhana, dan menggemakan karakter.
Menghasilkan
Notice: Undefined variable: i
, inilah versi lain yang menghilangkan kesalahan (65 karakter):Dan versi tanpa kesalahan (69 karakter):
Fungsi lain di PHP:
sprintf
/printf
bantalanpadding via
str_pad
/str_repeat
functionsmenggunakan keduanya
printf
danstr_repeat
fungsisumber
Scala 75 karakter
sumber
CJam - 20
Kode utama ada di baris kedua, baris pertama hanya untuk mendapatkan parameter dari input standar (jika tidak, Anda perlu memasukkan parameter dalam kode).
Cobalah di http://cjam.aditsu.net/
Contoh:
Penjelasan:
:X
menyimpan parameter terakhir (arah 0/1) dalam variabel X-
mengurangi X dari posisi knock-over, memperoleh panjang urutan karakter pertama (sebut saja L)_
membuat salinan L"\|"X=
mendapatkan karakter untuk menggunakan karakter pertama:\
untuk X = 0 dan|
untuk X = 1*
mengulangi bahwa karakter L kalio
mencetak string, menghapusnya dari tumpukan-
mengurangi L dari jumlah domino, memperoleh panjang urutan karakter kedua (sebut saja R)"|/"X=
membuat karakter untuk gunakan berikutnya:|
untuk X = 0 dan/
untuk X = 1*
mengulangi karakter R kalisumber
Gangguan umum
Ini tidak akan menang dalam kode golf, tetapi ini menyoroti arahan format justifikasi Common Lisp:
Hitungnya tidak buruk:
n
adalah jumlah total domino;p
adalah posisi domino yang dijatuhkan pertama;d
adalah salah satu0
atau1
, mewakili kiri dan kanan (sebagaimana diizinkan dalam komentar), dan digunakan sebagai indeks kex
;x
adalah string\
,|
dan/
. String format menggunakan dua arahan justifikasi (bersarang), yang masing-masing memungkinkan untuk karakter padding. Demikian:sumber
PHP, 89 Karakter
Hanya karena saya suka PHP.
EDIT: Kode berikut melakukan hal yang sama.
sumber
($i+1>$p)
. 2) Menulis ulang ekspresi ternary Anda untuk$d?($i+1<$p?'|':'/'):$i+1>$p?'|':'\\'
menyimpan 3 byte lagi. Atau cukup hapus==0
dan balikkan petunjuk arah. 3) Dengan$i++<$a
Anda dapat menghapus$i++
dari kondisi pos dan menggunakan$i
bukannya$i+1
(-6 byte). 4)$i=0
tidak perlu; tetapi Anda harus menekan pemberitahuan (opsi--n
) jika Anda menghapusnya (-4 byte).J ,
23 2119 byteCobalah online!
Input adalah daftar bilangan bulat dalam urutan standar.
sumber
05AB1E , 19 byte
Saya masih merasa agak lama, tetapi berhasil .. Dan lebih baik daripada solusi 23 byte awal yang saya miliki dengan konstruksi if-else, yang dengan cepat saya jatuhkan ..
Urutan input sama seperti pada tantangan: total panjang, indeks,
1
/0
untuk kiri / kanan masing-masing.Cobalah secara online atau verifikasi kedua kasus uji .
Penjelasan:
sumber
C ++ 181
sumber
return 0
dari secara eksplisitmain
.C(n)>>k>>p
akan disingkat daripadaC(n)C(k)C(p)
bukan? Dan jika define untuk P () dapat memperkuat argumen, bukankah itu menyimpan karakter untuk semua kutipan? Dan ketika Anda membandingkan p dengan 'l' dan 'r': 0 dan 1 akan lebih pendek - khususnya> 0 bukannya == 'r' dan <1 bukannya == 'l' (dengan asumsi Anda ok menggunakan angka alih-alih r / l - jika tidak <'r' masih lebih pendek dari == 'l' dan> 'l' masih lebih pendek dari == 'r')PHP -
105,97, 96Contoh hasil:
sumber
Javascript,
8185 karakterPertama kali mencoba codegolf, sangat menyenangkan terima kasih :)
sumber
JavaScript - 85 karakter
1 = Kiri, 0 = Kanan
sumber
Clojure, 81 karakter
sumber
vb.net (~ 75c)
sumber