Não restrito a nenhuma linguagem de programação.
O que estou dizendo é que você passa 1 para ele e retorna segunda-feira, 7 corresponde ao domingo e assim por diante.
Eu consegui uma declaração de 146 bytes em Java para fazer o mesmo.
return (n<1?"invalid":(n<2?"monday":(n<3?"tuesday":(n<4?"wednesday":(n<5?"thursday":(n<6?"friday":(n<7?"saturday":(n<8?"sunday":"invalid"))))))));
Seu programa deve:
- palavras completas de saída (STDOUT)
- não trava se a entrada for menor que 1 ou maior que 7
invalid
se a entrada for inválida? A questão não afirma isso, mas o exemplo sugere isso.Respostas:
Ruby, 69 ou 38 bytes
Aqui está uma maneira simples de melhorar seu código (escrito em Ruby, mas funciona da mesma forma em Java):
n
como um índice.day
.Você pode torná-lo ainda mais curto se importar os nomes dos dias da semana de uma biblioteca, como Ruby:
Note que agora eu não diminuir
n
, mas sim levá-la módulo 7 para mapear7
a0
. Isso ocorre porqueDAYNAMES
começa no domingo.fonte
Bash: 47 bytes
Ainda não há entrada no bash? Estou desapontado ...
Ele usa os dias da semana atual e simplesmente substitui o último dígito (11 a 17 de agosto de 2014 - 11 é segunda-feira, 12 é terça-feira etc.).
fonte
date -d $1sept +%A
também funciona (embora apenas este ano; reduz bytes para 6 * 9). O GNUdate
é realmente flexível nesse assunto, então deve haver possibilidades adicionais.date
vez de Bash, seriam meros14-08-1$1
- 9 bytes!Marbelous
192191185181Código de saída diferente de zero se a entrada for inválida
Uso:
fonte
Javascript,
9588 bytes7 em binário é 0111, o que significa que você pode cortar alguns caracteres com uma operação bit a bit em vez de
x>0&&x<8
.Editar: Removida a
s
matriz com a ajuda de edc65 .fonte
x=prompt();alert("Invalid 0Mon0Tue0Wednes0Thurs0Fri0Satur0Sun".split(0)[x&~7?0:x]+"day")
C # - 26 bytes
Espera que o dia seja armazenado dentro
n
.Não falha, conforme o esperado.
Desenvolvido por LINQPad ™
Agradecimentos especiais a bmarks e Stephan Schinkel pela economia de bytes e flexão de regras, respectivamente
fonte
C #, 95 bytes
Em C #, você pode fazer algo assim:
fonte
i<1
e pode salvar 2 bytes usando em|
vez de||
(sem curto-circuito) e removendo os colchetes em torno da condição. É também mais curto para criar e dividir uma string, portanto," mon tues wednes thurs fri satur sun".Split()[i]
do que para criar uma matriz de string deste tamanho (note o espaço no início da string, o que economiza subtraindo 1 a partir de i)BrainFuck estendido : 104
Ungolfed (Idiomatic)
fonte
T-SQL 36
Assume que a variável está armazenada em @. Se for uma entrada inválida (@> 7 ou @ <1), não seleciona nada.
Editar: Aparentemente, uma data pode ser um número. Removidos 5 caracteres com isso.
Editar 2: com base na primeira edição. Como é um int, não preciso usar DATEADD (); Eu posso usar adição normal em seu lugar.
fonte
Javascript 93 :(
fonte
q
for-5
?Lua - 57 bytes
Lua possui os.date () em sua biblioteca padrão e tem formatação. Portanto, você pode passar um tempo (neste caso "9e4 * (n + 3)") e pedir para retornar o formato "% A", que é o nome dos dias da semana. Além disso, muito útil em Lua é "a e b ou c". Se a for verdadeiro (no código a for "n> 0 e n <8"), ele retornará b, se a for falso (ou nulo), retornará c.
fonte
%A
é necessárioMathematica
1916 bytesComo observou o Dr. Rebmu, 1º de janeiro de 1 dC é um bom ponto de partida. (Presumivelmente) caiu na segunda-feira.
fonte
Bash -
2119Supondo que a entrada esteja na variável
D
:HTML + PHP - 26
Seja
$d
um texto de entradaO registro de data e hora 86400 * 3 é o primeiro domingo desde o início do mundo UNIX.
Você pode testá-lo executando:
fonte
Perl, 60 bytes
Algo assim:
Se você quiser retornar uma mensagem e estiver preocupado com índices negativos, use esta (mais 8 caracteres):
fonte
Lua
13411911510098Basicamente, o mesmo pensamento que MartinButtner tinha, exceto cerca de
4,54,11,71,4 vezes mais. Supõe quen
é armazenado como uma variável em outro lugar.fonte
n
ser armazenado em uma variável, como no snippet do OP.Python (84)
Suponho que seja uma solução interessante. É preciso ter uma ideia de outro respondere que li em algum lugar (não consigo encontrá-lo, eu sei que ele estava neste site, portanto, se alguém souber, sinta-se à vontade para me dizer.) A string foi gerada com o seguinte programa J:
Tomando algumas dicas sutis desta resposta:
fonte
Bash
7448 + mensagem de erroUma abordagem diferente, pois todas as outras respostas se concentram em armazenar as strings de alguma forma.
fonte
sh
resposta POSIX . Embash
você pode usar a avaliação aritmética.read x;((0<x&&x<8))&&date -d2007010$x +%A||echo out of range
é mais curto.||echo out of range
. Considerando que a solução aceita não segue as regras (imprimir em stdout) ... Mas se você deseja seguir o exemplo do OP, pode usar eminvalid
vez deout of range
.Perl, 54
De STDIN a STDOUT, nenhuma função de data, nenhuma falha.
fonte
PHP (56 bytes)
fonte
Clojure - 99 caracteres
Puro e simples, apesar das minhas melhores tentativas (iniciantes):
fonte
JS: 58
Supondo que n já esteja armazenado como uma variável.
Como uma função ES6 (mesmas premissas): 67
Isso apenas imprime "dia" para 0 e volta para n> 7
fonte
day
para8
e começa novamente a partirMonday
de9
.Rebmu : 21 caracteres
Para correr:
Números inválidos retornarão "nenhum".
Para aqueles que não estão familiarizados com o Rebmu, ele usa transições de caso para remover a necessidade de espaçamento - dentro dos limites do que é legalmente analisável. Em vez de usar um InitialCapsToBreak, ele usa CASEtransitionsTObreak, porque isso permite que um significado diferente seja atribuído a uma execução inicial de maiúsculas, se a execução inicial inicial for minúscula.
Portanto, é equivalente ao programa Rebol
pick system/locale/days a
. (Rebmu por convenção nomeia seu parâmetro de script como "a").Salva um caractere sobre
system/locale/days/(a)
:-)fonte
Haskell - 62
Envolve;
0
é domingo,8
é segunda e assim por diante.Se a impressão em stdout for necessária ( 68 bytes , a saída estará entre aspas duplas):
fonte
LiveScript - 49
Retorna
undefinedday
se a entrada for inválida. ;)Se a impressão em stdout for necessária ( 60 bytes ):
fonte
Befunge-93 (
206202)Este foi divertido de escrever. Tenho certeza de que isso pode ser feito de uma maneira melhor, mas… funciona! =) Pode ser experimentado aqui .
Teria sido ainda mais curto se
#
pulasse sobre cordas inteiras, em vez de apenas na célula individual.A idéia básica por trás disso: obtenha o número e continue diminuindo. Sempre que o diminuímos, o cursor se move para a direita, gira e é enviado um nível abaixo. Quando chegarmos ao zero, mova para a esquerda e pressione o nome da (primeira parte do) dia. A partir de então, o cursor se moverá diretamente para a parte inferior, onde a string é impressa e o "dia" é acrescentado.
Você pode ver como ele funciona usando o recurso "Etapa" no link para o intérprete online.
Edit: eu consegui raspar dois bytes, fazendo em
>:#,_
vez de>,,,,,,
, o que é mais bonito também.fonte
MATLAB: 33
MATLAB: 71
Haskell: 75
Haskell: 97
Python 3.4.1: 81
fonte
(0<n<8)
é mais curto então(n in range(8))
.split()
também dividir stringJava 8 -
6964 caracteresAqui está uma expressão no Java 8, incluindo a importação. Agora melhorado (graças a Tomáš Dvořák ):
Simplesmente imprime
MONDAY
para valores falsos dei
fonte
Python - 87
Eu não estou vendo amor suficiente pelo dict's .get () Este espera
a
ser o númerofonte
day
sua lista e adicionando+"day"
no final do seu código."mon,tues,...".split(",")
Python, 95 bytes
fonte
%
formatação, criando a lista a partir de um string usandosplit()
e removendo espaços em branco desnecessários."mon tues wednes thurs fri satur sun".split()[n-1]+"day"if 0<n<8else"invalid"
Python 2,
848364Supondo que n já esteja armazenado como uma variável.
fonte
Cobra - 43
fonte