Groovy Golf için ipuçları


14

İlgilenilen dilde golf oynamak için ipuçları soran birçok soru gördüğüm için, en sevdiğim dili sormaya karar verdim: Groovy. İnsanlar Groovy ile golf oynamak için bazı ipuçları ve püf noktaları verebilir.


1
Bu çok popüler değil, değil mi :-(
Armand

@Alison: Bu sitedeki :( içinde Groovy için hiç Golf ipucu olmadığı için ben, Bad hissetmek
Ant'ın

2
Bizi başlatmak için herhangi bir ipucunuz var mı?
Armand

Yanıtlar:


5

Bu golf oyununda yeniyim, şu ana kadar aldım:

İşlevleri değil Kapakları kullanın:

def a (b) {baskı b}

daha uzun

a = {yazdırın}

Diziler ve listelerde negatif bir dizini size boyut için takma ad olarak kullanabilirsiniz () -

c = "abc"
d = ["a", "b", "c"]

iddia c [c.size () - 1] == c [-1]
iddia c [c.size () - 2] == c [-2]
iddia d [d.size () - 1] == d [-1]
assert d.last () == d [-1]

Forma operatörü toplamak için bir kısayoldur:

assert d * .size () == d.collect {it.size ()}

Sıralama için uzay gemisi operatörünü kullanın:

e = [54,5,12]
assert e.sort{a,b->a<=>b}==e.sort{a,b->a<b?-1:+1}
assert e.sort{a,b->a<=>b}==e.sort{a,b->if (a>b) {return(-1)} else {return(+1)}}

Dönüşümleri Düzenle:

assert "123" as int == "123".toInteger()

bir şey listelemek durumunda forma *.Xoperatörü genellikle olarak yazılabilir.X
cfrick

3

Groovy biraz ayrıntılı bir dil olduğundan, yöntem çağrılarını kısaltmak için Groovys MOP'yi kullanabilirsiniz.

Örneğin aşağıdaki kod parçası, dördüncü kullanımdan sonra ödeme yapar:

''.metaClass.r<<{i->(int)Math.random()*i}
''.r(12)

İpucu golf düzenlemesi:

0.metaClass.r<<{i->(int)Math.random()*i}
0.r(12)

Veya biliyorsunuz:

r={(int)Math.random()*it}
r(12)

2

grep kısa ve çeşitli problemler üzerinde çalışıyor

bir dizenin karakterlerini boşluk içeren ve öndeki öğeler olmadan bir liste olarak alın: 'ABC XYZ'.grep()döndürür[A, B, C, , X, Y, Z]

regexp içeren grep gerekirse büyük harfe dönüştürmekten daha kısadır: it.grep(~/(?i)$c/)yerineit.toUpperCase().grep(c)


1
'ABC XYZ'as Setbir karakter daha kısa ve aynı yerlerin çoğunda çalışıyor
Marty Neal

2

Nesne Listesinden Dizi Alma

Gibi nesnelerin bir listesi varsa:

def users = [[user:'A',id:1],[user:'B',id:2],[user:'C',id:3]]

Şunu kullanarak belirli bir özelliğe sahip bir ArrayList oluşturabilirsiniz:

def userIds = users*.id // [1, 2, 3] no explicit loops!

BONUS: Harika ... Raylarda!

Eh, içinde Grails Framework biz birçok değerleri almak gerekir çoklu özelliği olan seçme . Döngüler, düzleştirme ve diğer programlama daha tipik yapıları kullanabilirsiniz, ancak bazı satırları kaydedebilirsiniz. Şunun gibi bir seçiminiz varsa:

<select id="users" multiple="true" name="users">
    <option value="193">User A</option>
    <option value="378">User B</option>
    <option value="377">User C</option>
</select><%-- No Grails tags for now --%>

Ardından, kontrol cihazınızda basit bir şekilde yazabilirsiniz:

def aListOfUsers = User.getAll(params.list('userIds'))

1
Bu soru Grails golf ipuçlarını kabul eder mi? İtiraf ediyorum keskin nişancılardan korkuyorum ...
Victor F

2
Korkma, PCG son derece güzel insanlarla dolu :)
Beta Çürüğü
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.