Golf golf golcüsü


25

Çocukken, " golf " kart oyununu çok oynardım . Meydan okumanız, kabul etmeyi seçmeniz halinde bir golf elinin puanını hesaplamaktır. Bu kart oyununda 1 9000'den fazla varyasyon olduğundan, oynadığımı hatırladığım kurallara uyacağız.

Oyunun kuralları)

  • 6 kartla bir raund bitiyorsun ve mümkün olduğunca az puan istiyorsun.

  • Joker kullanılmaz.

  • Aslar ve 2'ler sırasıyla -1 ve -2 puandır.

  • Vale ve Krallar 0 puan değerindedir.

  • 3 ile 10 arasındaki kartlar yüz değerindedir. Ancak, bunları eşleştirdiğinizde iptal edilir. Örneğin, 5, 5 puan değerindedir, ancak iki 5, sıfır değerindedir. Üç 5, 5 puan değerindedir (ilk 2 eşleştirildiğinden beri, 3'üncü değildir.) Ve dört 5, 0 değerindedir (2 çift yaptıktan sonra).

  • Queens 15 puan değerinde. Queens iptal edilemez, örneğin 2 kraliçe 30 puan değerindedir.

Kurallar (meydan okuma)

Giriş, bir tam sayı dizisi veya 6 ayrı tam sayı olacaktır. Hangisini tercih edersen. 1, bir ası, 2-10 2-10'u ve Jack, Queen ve King, 11, 12 ve 13'ü temsil eder. Çıktı, elin yukarıdaki kurallara göre skorudur. Tüm girişlerin geçerli olduğunu, örneğin 4 kezden fazla sayı görünmediğini ve tüm sayıların aralık içinde olduğunu güvenli bir şekilde kabul edebilirsiniz [1, 13]. Giriş ve çıkış herhangi bir makul formatta olabilir.

Test IO:

[11, 10, 3, 1, 2, 2]    --> 8
[4, 5, 5, 3, 8, 7]      --> 22
[2, 2, 2, 2, 1, 1]      --> -10 (The lowest score possible)
[12, 12, 12, 12, 10, 9] --> 79 (The highest score possible)
[9, 9, 9, 9, 11, 1]     --> -1
[8, 8, 8, 8, 11, 13]    --> 0
[10, 9, 3, 7, 12, 2]    --> 42
[1, 2, 3, 4, 5, 6]      --> 15
[10, 9, 2, 3, 4, 1]     --> 23
[10, 3, 12, 3, 7, 12]   --> 47

Bayt cinsinden en kısa cevap kazanır!


1 gerçekten değil, ama çok fazla varyasyon var.

Yanıtlar:


3

Pyth, 28 27 25 bayt

s+*L%/Qd2}3Tm?<d3_d*15q12

Çevrimiçi deneyin. Test odası.

açıklama

  • İlk olarak, Pyth bazı değişkenleri otomatik olarak ekler. Kod şimdi s+*L%/Qd2}3Tm?<d3_d*15q12dQ.
  • }3TListeyi oluşturur [3, 4, 5, 6, 7, 8, 9, 10].
  • Bu listedeki her sayıyı ( *L) giriş ( /Qd), modulo 2 ( %2) içindeki sayının sayısına çarpın . Sonuç, eşleştirilmiş sayılar için 0, eşleşmemiş sayılar için ise sayının kendisidir.
  • Giriş numaraları üzerinden harita ( mQ):
    • Sayı 3 ( ?<d3) ' den küçükse , ( ) olumsuzlayın _d.
    • Aksi takdirde 12 ( q12d) olup olmadığını kontrol edin ve boole değerini 15 ( *15) ile çarpın . Sonuç kraliçeler için 15, başka bir şey için 0'dır.
  • Listeleri birleştirin ( +). Sonuçta ortaya çıkan liste şimdi eşleştirilmemiş sayıların (ilk kısım) ve özel kartların A, 2, Q (ikinci kısım) puanlarını ve bazı ekstra sıfırları içeriyor.
  • Son olarak, sonucun ( s) toplamını alın .

Alternatif 25 baytlık çözüm

-+s*L%/Qd2}3T*15/Q12s<#3Q

Bu, birincisine benzer şekilde çalışır, ancak kraliçeleri ayrı ayrı sayar ve as ve ikileri bir filtre ile yok eder.


11

Python 2, 72 70 bayt

f=lambda x,*T:[x*(-1)**T.count(x),~x%2*15,-x][(x-3)/8]+(T>()and f(*T))

Bir noktada Python'un bir 0**0 == 0kere olsun tedavi etmesini diledim (-condition)**num. Gibi ara f(11, 10, 3, 1, 2, 2).

Önceki 72 bayt sürümü:

f=lambda x,*T:[~x%2*15,x*(-1)**(x<3or T.count(x))][x<11]+(T>()and f(*T))

5

> <> , 63 57 56 + 2 = 65 59 58 bayt

Giriş numaralarının program başlangıcında yığında olması bekleniyor, bu nedenle -vbayrak için +2 bayt . Çevrimiçi deneyin!

</!?lp6$+1g6:
3\0
?\::6g2%*{+}1+:b=
;\~16g-26g2*-c6gf*+n

Kod alanındaki kullanılmayan tüm değerler başlatıldıkça 0, değeri alarak [value,6], onu artırarak ve kod alanına geri koyarak , her bir değerin kaç tanesinde bulunduğunu hesaplamak için kullanılabilir . Toplam daha sonra şöyle hesaplanır:

T = 0 + {for x in 3 to 10, x*([x,6]%2)} - [1,6] - 2*[2,6] + 15*[12,6]

Düzenleme: girişi yeniden yapılandırarak ve hesaplama adımlarını değiştirerek 6 bayt golf oynadı. Önceki versiyon:

:6g1+$6pl0=?\
/-*2g62-g610/
c ;n$\
6:b=?/>::6g2%*{+}1+!
\gf*+3/

Düzenleme 2: Sp3000 sayesinde 1 bayt kaydedildi


0=?Birkaç kez kullandığınızı ya da benzerlerini gördüm - ?!bunun yerine kullanabilir misiniz ?
Sp3000

@ Sp3000 Ack, elbette haklısınız. Teşekkürler, şunu ekleyeceğim
Sok

5

MATL , 27 26 bayt

3:10=s2\7M*G12=15*Gt3<*_vs

Girdi bir sütun dizisidir, yani değerler noktalı virgüllerle ayrılır.

Çevrimiçi deneyin! veya tüm test durumları doğrulamak (bu tüm girdileri almak için bir döngü ekler ve cümledeki Gtarafından 1$0Gson girişini zorlamaya).

açıklama

3:10=    % Take input implicitly. Compare with range [3 4 ... 10], with broadcast
s        % Sum of each column: how may threes, fours, ... tens there are
2\       % Modulo 2
7M       % Push [3 4 ... 10] again
*        % Element-wise multiply (the sum of this array is the score of 3...10)
G        % Push input again
12=      % Compare with 12, element-wise
15*      % Multiply by 15 (this is the score of 12)
G        % Push input again
t3<      % Duplicate. True for entries 1 or 2
*_       % Multiply and negate (the sum of this array is the score of 1, 2)
v        % Concatenate all stack concents into a vertical array
s        % Sum of array. Implicitly display

4

Pyth - 37 36 35

Bu çok büyük görünüyor ama FGITW.

J<#h;K-QS2++*15/K12sm*d%/Jd2{J_s@S2

Test Takımı .


2
“Bu çok büyük görünüyor, ama FGITW.” Yani önce golf?
kedi,

Ben kendi bitirmişti kadar bu görmedim, ama kullandıkları hariç neredeyse özdeş Jve Ktamamen gereksiz görünüyor ve aynı zamanda golf yapabilirsiniz +_için -:;) ben 31 aldım+*15/Q12-sm*d%/Qd2{>#2<#11Qs@S2
FryAmTheEggman

1
@FryAmTheEggman 24:+*15/Q12-s*R%/Qd2}3Ts@S2
Jakube

3

JavaScript (ES6), 63 bayt

a=>a.map(e=>r+=e<3?-e:e>10?e-12?0:15:(m[e]^=1)?e:-e,r=0,m=[])|r

Ya da istersen,

a=>a.map(e=>r-=e<3?e:e>10?e-12?0:-15:(m[e]^=1)?-e:e,r=0,m=[])|r


0

Perl 5.10.0 + -n, 115 64 60 56 bayt

$p+=$_-12?$_>2?$_<11?++$l[$_]%2?$_:-$_:0:-$_:15}{say$p

Çevrimiçi deneyin!

Açıklama:

-nÇevresine döngü ekleme :

# Used variables:
# $_: input (auto)
# $p: points
# $l[n]: number of occurences of n (for 3-10)
while (<>) { # for every input
    $p += $_ - 12 ? # if the input is not 12 (queen) ...
        $_ > 2 ? # then: if it's > 2 (not ace or 2) ...
            $_ < 11 ? # then: if < 11 (3-10) ...
                ++$l[$_] % 2 ? # then: if it's an odd occurence (1st, 3rd, 5th, ...)
                    $_ # add it
                    : -$_ # else subtract it
            : 0 # no points for other stuff (J, K)
        : -$_ # negative points for ace and 2
    : 15 # 15 points for queen
}
{ # after input:
    say $p # output points
}
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.