+/{13∊⍎,⍉3↑¯5↑⍉2↓cal⍵}¨⎕,¨⍳12
Provalo online!
⍳ 12 gli interi da uno a dodici
⎕ ,¨ accetta input numerici e antepone a ciascuno dei dodici numeri
{... }¨ su ciascuna delle coppie, applica la funzione ...
cal⍵ ottenere un calendario per quell'anno-mese
2 ↓ rilasciare due righe (didascalia e giorni)
⍉ trasporre (in modo che possiamo indirizzare le colonne anziché le righe)
¯5 ↑ prendi le ultime cinque (due cifre per ciascuno di venerdì e sabato più uno spazio)
3 ↑ prendi le prime due (due cifre per venerdì più uno spazio)
⍉ trasporre (quindi otteniamo l'ordine di lettura)
, sfilacciarsi
⍎ eseguire come espressione APL (fornisce un elenco delle date del venerdì)
13 ∊ tredici è un membro di quella lista?
+/ sommare i 12 booleani
Usando l'algoritmo di @ Wrzlprmft , possiamo farlo senza librerie per 53 byte:
'21232211321211'⊃⍨14|2 3 ¯1+.×⊢,0≠.=400 100 4∘.|-∘0 1
-∘0 1 sottrarre zero e uno
400 100 4 ∘.| tabella restante divisione per i due anni (attraverso) divisa per questi numeri (giù)
0 ≠.= "prodotto" interno con 0, ma usando ≠ e = invece di +. ×
⊢ , anteponi l'anno dell'argomento non modificato
2 3 ¯1 +.× prodotto interno con questi numeri
14 | resto della divisione quando diviso per quattordici
'21232211321211' ⌷⍨ indice in questa stringa