+/{13∊⍎,⍉3↑¯5↑⍉2↓cal⍵}¨⎕,¨⍳12
Experimente online!
⍳ 12
os inteiros de um a doze
⎕ ,¨
pegue a entrada numérica e preceda cada um dos doze números
{
… }¨
Em cada um dos pares, aplique a função…
cal⍵
obter um calendário para esse ano-mês
2 ↓
soltar duas linhas (legenda e dias)
⍉
transpor (para que possamos endereçar colunas em vez de linhas)
¯5 ↑
pegue os cinco últimos (dois dígitos para cada sexta-feira e sábado, mais um espaço)
3 ↑
pegue os dois primeiros (dois dígitos para sexta-feira mais um espaço)
⍉
transpor (para obtermos a ordem de leitura)
,
andar
⍎
executar como expressão APL (fornece uma lista das datas das sextas-feiras)
13 ∊
treze é um membro dessa lista?
+/
somar os 12 booleanos
Usando o algoritmo do @ Wrzlprmft , podemos fazê-lo sem bibliotecas de 53 bytes:
'21232211321211'⊃⍨14|2 3 ¯1+.×⊢,0≠.=400 100 4∘.|-∘0 1
-∘0 1
subtrair zero e um
400 100 4 ∘.|
tabela restante de divisão para os dois anos (transversalmente) dividida por esses números (abaixo)
0 ≠.=
"produto" interno com 0, mas usando ≠ e = em vez de +. ×
⊢ ,
preceder o ano do argumento não modificado
2 3 ¯1 +.×
produto interno com esses números
14 |
divisão restante quando dividido por catorze
'21232211321211' ⌷⍨
indexar nessa cadeia