Inspirado por Tivemos um teste de unidade uma vez que só falhou aos domingos , escreva um programa ou função que não faça nada além de gerar um erro quando for domingo e saia normalmente em qualquer outro dia.
Regras:
- Não é possível usar entrada ou mostrar saída através dos métodos usuais de E / S , exceto para imprimir em STDERR ou equivalente no seu idioma. Você pode imprimir em STDOUT se for um subproduto do seu erro.
- Uma função pode retornar um valor fora dos domingos, desde que não imprima nada
- Seu programa pode usar um domingo de qualquer fuso horário ou do fuso horário local, desde que consistente.
- Um erro é algo que faz com que o programa seja encerrado de maneira anormal , como um erro de divisão por zero ou usando uma variável não inicializada. Isso significa que, se algum código fosse adicionado após a parte que comete erros, ele não seria executado no domingo.
- Você também pode usar instruções que criam manualmente um erro, equivalente ao do Python
raise
. - Isso inclui erros de tempo de execução, erros de sintaxe e erros durante a compilação (boa sorte com isso!)
- Você também pode usar instruções que criam manualmente um erro, equivalente ao do Python
- Em um erro, deve haver algum sinal que o distinga de não ter erro
- Isso é código-golfe , então o número de bytes mais curto em cada idioma vence!
Vou ter que esperar até domingo para verificar as respostas;)
code-golf
date
error-message
Brincadeira
fonte
fonte
print "error"
um erro? O parágrafo adicionado realmente não esclarece nada.Respostas:
Bash + coreutils,
1514 bytesExperimente online!
fonte
PHP 7, 12 bytes
No PHP 7, lança uma exceção do tipo
DivisionByZero
aos domingos. O mesmo acontece se for interpretado usando HHVM .No PHP 5, ele exibe um aviso (ativado
stderr
) aos domingos:Em qualquer versão do PHP, ele não exibe nada nos outros dias da semana.
Execute usando a CLI:
ou experimente online!
Mais dois bytes pode ser espremido por stripping as aspas (
1%date(w);
), mas isso provoca um aviso (que pode ser suprimida por configurado corretamenteerror_reporting = E_ALL & ~E_NOTICE
nophp.ini
).fonte
1%date("w");echo "Alive!"
, ele vai parar em PHP7 + e HHVM, mas não em todas as outras versões desde PHP 4.PHP, 15 bytes
Assume as configurações padrão .
Saída aos domingos
Experimente online!
fonte
||\n
vez de?:\n
.Java 8,
694334 bytes-26 bytes graças a @ OlivierGrégoire .
-9 bytes graças a @Neil .
Explicação:
Experimente aqui.
v->{...}
( parâmetro não utilizadoVoid
null
) é um byte menor que()->{...}
(sem parâmetro).new java.util.Date().getDay()
retornará 0-6 para domingo e sábado; portanto,1/...
ocorrerá umjava.lang.ArithmeticException: / by zero
erro se o valor for 0, o que acontece apenas aos domingos.fonte
v->{int i=1/new java.util.Date().getDay();}
(43 bytes).java.util.Date()
tem um método para obter o dia da semana .. E ainda é 0 no domingo ... Não sei bem como eu perdi isso. : SPython 3 , 33 bytes
Experimente online!
Python 3 , 50 bytes
Experimente online!
Economizou ~ 3 bytes graças a Rod .
fonte
"Su"in time.ctime()>q
(eu estava editando com este)?"Su"in time.ctime()
verifica se o dia atual é domingo. Se isso é falso, a>q
peça não é avaliada e tudo sai sem problemas. Mas se isso for verdade, a segunda parte da desigualdade é avaliada e, comoq
não está definida, isso geraria aNameError
.("Su" in time.ctime()) and (time.ctime() > q)
.Pitão ,
87 bytesExperimente online!
Explicação
fonte
1.0
não é gerada pelo erro ). O OP disse explicitamente que eles não permitem isso. Você pode corrigir isso, antecedendo um único espaço ao seu código, emboraHaskell + Data.Dates , 55 bytes
Experimente online!
Isso usa o fato de que o domingo é o último dia da semana.
dateWeekDay
retorna o dia da semana como umWeekDay
tipo, que é simplesmente definido comoWeekDay
é uma instância deEnum
, portanto, podemos usarsucc
epred
obter o sucessor ou predecessor de um dia da semana, por exemplo,succ Monday
rendimentosTuesday
.No entanto,
Sunday
é a última entrada da enumeração, portanto, a chamadasucc Sunday
resulta no seguinte erro:Edit 1: Obrigado a nimi por -3 bytes!
Edite 2: -11 bytes agora que as funções são permitidas.
Programa completo:
8881746966 bytesExperimente online!
pure
é necessário para elevar o resultado deWeekDay
volta à Mônada IO. No entanto, Haskell vê que o valor não é produzido de forma alguma pelo programa; por mais preguiçoso que seja, a expressão não é avaliada; portanto, mesmo aos domingos, o programa não falha. Isso é por que$!
é necessário, o que força a avaliação, mesmo que Haskell normalmente não avalie a expressão.Abordagem anterior com
Data.Time
:127124 bytesExperimente online! Estas são algumas importações impressionantes. Mude
d<7
para, por exemplo,d/=5
para testar a falha na sexta-feira. Falha com a seguinte excepção:Non-exhaustive patterns in function c
.fonte
main=pure$!succ.dateWeekDay<$>getCurrentDateTime
. E, como funções são permitidas, você pode soltar omain=
.No using input or showing output through the usual IO methods
regra. Até onde eu vejo, o uso de uma função resultaria em uma saída para não-domingos, mesmo que esteja envolvida em uma ação de E / S.05AB1E ,
4544 bytesComo o 05AB1E não foi incorporado para obter o dia da semana, usei a Regra de Zeller para calculá-lo.
Imprime uma nova linha para stderr no caso de um domingo (observável na exibição de depuração no TIO)
Experimente online!
Explicação
A fórmula geral utilizado é
DoW = d + [(13*(m+1))/5] + y + [y/4] + [c/4] - 2*c
Onde
DoW=day of week
,d=day
,m=month
,y=last 2 digits of year
,c=century
e e expressão entre parêntesis ([]
) é arredondado para baixo.Cada mês usado na fórmula corresponde a um número, onde
Jan=13,Feb=14,Mar=3,...,Dec=12
Como temos o mês atual no formato mais comum
Jan=1,...,Dec=12
, convertemos o mês usando a fórmulam = (m0 + 11) % 14 + 1
Como um biproduto de março sendo o primeiro mês, janeiro e fevereiro pertencem ao ano anterior, o cálculo para determinação
y
se tornay = (year - (m0 < 3)) % 100
O valor final
DoW
que obtemos é um int onde0=Sat,1=Sun,...,6=Fri
.Agora, podemos lançar explicitamente um erro se o resultado for verdadeiro.
fonte
JavaScript, 23 bytes
Programa completo.
A variável
k
não deve ser definida.JavaScript, 20 bytes por Rick Hitchcock
JavaScript, 19 bytes por apsillers
fonte
_=>
; sem ele, esse é um trecho que não é permitido por padrão. 2) Isso saifalse
todos os dias quando não deve produzir nada./Su/.test(Date())&&k
por 20 bytes.new Date
versão 25 bytes(new Date/864e5%7|0)-3||p
match
:Date().match`Su`&&k
VBA / VBScript,
2220 bytesEconomizou 2 bytes graças a Taylor Scott.
Isso deve ser executado na janela imediata.
Weekday()
retorna 1 (domingo) a 7 (sábado), criando um erro de divisão por zero no domingo. Caso contrário, nenhuma saída.fonte
?1/(Weekday(Now)-1)
Now
é válido sem o()
VBA, mas não posso usar a impressão porque acho que toda saída é proibida, a menos que ocorra um erro.No using input or showing output through the usual IO methods, except to print to STDERR
. Ainda assim, salvou 2 bytes.Ruby, 15 bytes
wday
retornará 0 no domingo, causando um erro ZeroDivisionError: dividido por 0. Por exemplo:1/Time.new(2018,1,7).wday
.fonte
Perl 5 , 13 bytes
Experimente online!
Ported @ biketire's answerj
removeu 3 bytes com o lembrete de @ mik
fonte
gmtime
ao invés delocaltime
também se reunirá com as regras, e é de 3 bytes mais curtojq, 42 caracteres
(Opção de linha de comando com código de 39 caracteres + 3 caracteres)
Apenas tentando uma abordagem diferente aqui: analise o número do dia da semana (0..6) como o número do dia do mês (1..31).
Exemplo de execução:
Observe que jq lida apenas com datas UTC.
Experimente online!
fonte
C,
35, 3427 bytes-7 bytes com agradecimentos a @MartinEnder e @Dennis
Experimente online!
fonte
VBA 18 bytes
Isso depende da função integrada que
date()
retorna um número de dia que resta 1 se dividido por 7, portanto, pode ser específico do sistema operacional e / ou da CPU.Ele é executado na janela Imediata do projeto VBA.
fonte
R ,
31 bytes30 bytesExperimente online!
Nenhuma saída fora dos domingos,
Error: object 'a' not found
aos domingos.format(Sys.Date(),'%u')
foi a maneira mais curta que consegui encontrar para o dia da semana; ele gera um número de classe de personagem para o dia da semana, com 7 para os domingos. Podemos comparar com um numérico 7 e, se verdadeiro, tentar usar um objeto indefinido.Guardou um byte graças a Giuseppe!
fonte
>6
é um byte mais curto.Ocaml, 46 bytes
e no ocaml REPL, podemos obter melhores resultados removendo oe
let
final:()
:que é 41 bytes (incluindo 1 byte para o retorno de carro).
fonte
SAS, 36 bytes
fonte
TI-Basic 84+, 23 bytes
Precisa de comandos de data e hora, que são 84+ e superiores.
fonte
MATL , 12 bytes
O erro produzido aos domingos é:
Em execução na oitava:
Rodando no Matlab:
Para inverter o comportamento (erro em qualquer dia, exceto aos domingos), adicione
~
depois>
.Experimente Online!
Explicação
Isso explora o fato de que
a indexação em uma matriz vazia com o índice lógico
false
é válida (e o resultado é uma matriz vazia, que não produz saída); enquanto quea indexação com
true
causa um erro porque a matriz não possui uma primeira entrada.Código comentado:
fonte
Q, 20 bytes
.zd retorna a data atual. mod faz o módulo da data atual, que retorna um int. Se a data for domingo, .zd mod 7 retornará 1. Se 1 = 1 (no domingo) e o erro for gerado usando o operador 'Para brevidade, o erro é apenas o caractere e.
fonte
C # (.NET Core) ,
555448 bytesExperimente online!
Guardado 1 byte graças a Shaggy
Guardado 5 bytes graças a Emigna
Guardado 1 byte graças a Kevin Cruijssen
Sorte que domingo é indexado 0 em enum ou então ele precisaria ser
(System.DayOfWeek)7
fonte
using System
gratuitamente em C #? Se sim, acho que você poderia fazer()=>{var k=1/(int)DateTime.Now.DayOfWeek;}
por 42 . Caso contrário, 49 com o explícitoSystem.
()=>{var k=1/(int)System.DateTime.Now.DayOfWeek;}
é mais curto. E você pode salvar mais um byte usando um parâmetro não utilizado vazia em vez de nenhum parâmetro (ou seja,v->{...}
em vez de()->{...}
)()=>1/(int)System.DateTime.Now.DayOfWeek
. Experimente aqui .Groovy , 16 bytes
Experimente online!
fonte
C,
6855 bytesAgradecemos ao @Ken YN por salvar 13 bytes!
Experimente online!
fonte
d
para obtern/=gmtime(&n)->tm_wday;
para 54 bytes (mas não tenho certeza se eu gosto de todos estes avisos do compilador ...)R , 40 bytes
Experimente online!
weekdays
retorna o dia da semana da data, com um argumento opcionalabbreviate
, que reduzSunday
paraSun
, salvando um único byte.stopifnot
lança um erro se, para cada argumento, nãoall
sãoTRUE
, e gera um erro com uma mensagem indicando o primeiro elemento que não éTRUE
, por isso, o erro éError: "Sun" is not TRUE
fonte
APL (Dyalog) , 23 bytes
Experimente online!
fonte
Gema , 40 caracteres
Tinha que especificar uma mensagem de erro, então escolha uma pequena: "S".
Exemplo de execução:
fonte
Funky , 21 bytes
os.date"%w"
retorna o dia da semana atual no formato 0-6, onde 0 é domingo. Obter a lógica disso não é verdade apenas quando o dia da semana é 0, então domingo. Então apenas um básicoif(a){error()}
garantirá que este programa apenas erros no domingoExperimente online!
fonte
Perl 6 ,
2921 bytesTente
Tente
fonte
Julia 0,5 , 28 bytes
Experimente online!
Isso não funciona com 0,6, mas com 0,4.
fonte