O seu programa / função, etc. terá 2 entradas. O primeiro será uma lista de quem veio à minha festa e quando. Exemplo:
Kevin 13:02
Ruby 5
Sam 3
Lisa 6
Bob 12
O que isso significa? Isso significa que Kevin chegou à minha festa primeiro (às 13:02, horário de 24 horas), depois Ruby 5 minutos depois, Sam 3 minutos depois, Lisa 6 minutos depois e Bob 12 minutos depois.
A segunda entrada será quando minha festa começar. Exemplo:
13:15
(24 horas). Sua saída deve ser a lista de pessoas que estavam atrasadas. (Qualquer pessoa exatamente dentro do prazo é boa.) Exemplos de cálculos (apenas por exemplo, não os produzem)
Kevin 13:02
Ruby 13:07
Sam 13:10
Lisa 13:16
Bob 13:28
Lisa e Bob chegaram depois 13:15
, portanto este programa deve imprimir "Lisa, Bob".
Pressupostos de entrada
- A entrada 1 sempre será um nome (regex
[A-Z][a-z]*
), depois um espaço, depois um horário de 24 horas no formuláriohours:minutes
na primeira linha, depois um nome, um espaço e um número inteiro positivo (número de minutos depois) nas próximas linhas . Sempre haverá pelo menos 1 linha. - Se desejar, você pode inserir a entrada 1 com qualquer outro caractere, em vez de uma quebra de linha.
- A entrada 2 estará no formato
hours:minutes
. - Você pode considerar suas entradas como uma sequência separada por qualquer caractere, se desejar. Isso é opcional.
- Não se preocupe com a passagem do dia. Minhas festas nunca para depois
23:59
.
Regras de saída
- A saída pode ser um valor de retorno de função ou uma sequência ecoada em STDIN, um arquivo etc. Você deve retornar uma sequência ou uma matriz / lista.
- Se você retornar uma sequência, deve ser cada pessoa que se atrasou (o pedido não importa), separada por qualquer delimitador não alfanumérico.
- Se você retornar uma matriz / lista, deve ser uma lista de todos os que estavam atrasados.
(regex [A-Z][a-z]*
)" Isso sugere que os nomes podem estar vazios?23:59
?Respostas:
MATL , 31 bytes
A primeira entrada usa espaço em vez de quebra de linha (permitida pelo desafio).
A saída usa quebra de linha como separador.
Experimente online!
Explicação
fonte
JavaScript (ES6),
9897 bytesGuardado 1 byte graças a Neil
Leva a lista de convidados
l
e o tempo da festah
para currying sintaxe(l)(h)
. Espera uma quebra de linha à direita na lista. Retorna uma lista de nomes separados por espaço, comoLisa Bob
.Formatado e comentado
Demo
fonte
(.*) (.*)\n
funciona?(.*)
corresponderia a toda a linha.PHP,
118 98 9591 bytesrecebe entrada dos argumentos da linha de comando (você pode interpretar isso como linhas separadas por espaços, se desejar); imprime nomes sem um delimitador. Execute
-r
ou teste on-line .editar 1: economizou 20 bytes com impressão direta
editar 2: economizou 3 bytes removendo o delimitador
editar 3: economizou 4 bytes explorando que números inteiros simples não são datas válidas para
strtotime
demolir
fonte
c, 178 bytes
Experimente online
fonte
JavaScript ES6, 185 bytes
Experimente online!
fonte
f('Kevin 13:02\nRuby 5\nSam 3...
PowerShell ,
215196180 bytesExperimente online!
Aproximadamente 1/3 disso é análise de entrada, portanto, não tenho certeza quanto mais posso jogar.
Toma de entrada
$a
como uma cadeia delimitada por vírgulas de nomes e horários / minutos, e$b
comohh:mm
como uma string. Primeiro,-split
$a
em,
, armazenar o primeiro resultado em$x
eo restante em$a
, com uma re-conversão explícita de$a
como umarray
(para que o loop mais tarde funciona corretamente). Nós a inicializar o nosso hashtable$z
, set$i
e$j
estar$x
-split
no espaço em branco, e definir$z[$i]
a ser odate
de$j
(armazenado em$y
para uso posterior).Depois, percorremos o restante
$a
. A cada iteração, fazemos a mesma coisa --split
a string no espaço em branco, define o$z
índice apropriado para ser muito mais minutos além do local em que estamos atualmente. Isso usa um truque de nome de propriedade reduzido para salvar alguns bytes, usando em|% *es $j
vez de.AddMinutes($j)
.Finalmente, nós
.GetEnumerator()
(novamente usando o truque) de nossa hashtable eWhere-Object
selecionamos essas entradas com umvalue
que é-g
reatert
han$b
(ou seja, eles estão atrasados para a festa). Em seguida, selecionamos apenas os.Name
s. A saída é como uma matriz implícita, na qual o padrãoWrite-Output
insere novas linhas.Economizei muito graças ao briantist por me lembrar que [array] é uma coisa. E muito mais por dica de nome de propriedade encurtado.
fonte
$x,[array]$a=$a-split','
?[array]
é um elenco válido. Haha Muito golfe, eu acho.GetEnumerator
eAddMinutes
são bons candidatos para a%
sintaxe do métodoPython 2 ,
140.148,144 bytesExperimente online!
Formato de entrada:
fonte
'Kevin 13:47;Ruby 5;Sam 3;Lisa 6;Bob 12;14:00'
não imprime nada, mesmo que Lisa e Bob ainda estejam atrasados.Bash,
135124115 bytesExperimente online!
fonte
CJam,
66545854514946 bytesA entrada 1 é fornecida por STDIN, a entrada 2 é fornecida como uma sequência na pilha. A saída é uma matriz na pilha. O separador para a entrada 1 é um espaço, por exemplo
Kevin 13:02 Ruby 5 Sam 3 Lisa 6 Bob 12
.Rastreio de pilha:
Explicação:
K
converte entre um horáriohh:mm
e um número que representa quantos minutos são desde a meia-noite.[782 5 3 6 12]
.[782 787 790 796 808]
, o que indica os horários em que todos chegaram.fonte
JavaScript,
285283 bytesLeva a lista de convidados
i
e o tempo da festap
para currying sintaxe(i)(p)
. Retorna uma lista de nomes separados por vírgula, comoLisa,Bob
.Eu sei que é muito longo e atualmente em último lugar por uma margem justa, mas é o que eu poderia fazer.
fonte
C # ,
269267 bytesGolfe
Ungolfed
Ungolfed legible
Código completo
Lançamentos
- 2 bytes
- Graças a VisualMelon269 bytes
- Solução inicial.Notas
fonte
using D=System.DateTime;
diretiva (não se esqueça de substituir osvar
!). Você realmente deve fornecer tipos para os parâmetros lambda para tornar esse código completamente inequívoco (ou seja(string l,string f)
). Eu também acho que há um pequeno erro, você precisa emh>s
vez deh>=s
(economia de 1 byte!) Conforme "(Qualquer pessoa exatamente na hora certa está bem.)". Você pode fazerh.Ticks<1
? Você pode encontrar um valor nuloDateTime
mais barato do que usarDateTime.Min
, mas não verifiquei todas as implicações aqui. Com a cláusula using,==D.Min
deve funcionar também.h>s
Eu vou fazer isso.h.Ticks<1
e este também.usings
e, com lambdas, não consigo encontrar nada dizendo isso explicitamente na meta, mas essa pergunta sugere fortemente que isso é permitido. Existe um consenso razoável de que tipos explícitos de parâmetros devem ser necessários (devo acrescentar que sou totalmente a favor). A propósito, os Mods estão lá para manter as coisas civis da perspectiva da SE, não para impor as próprias regras do PPCG.usings
, principalmente porque acho que isso exigiria um código completo; portanto, estou dizendo que duvido que possa executar uma função como solução - talvez adicionando dois blocos, um para seusing
outro para o função lambda? Sobre o consenso, acho que adicionando a faltaFunc<...> f = ...;
iria resolvê-lo, embora deva ser especificado o nome completoSystem.Func<...> f = ...;
string s
com a sintaxe C # 7 (6? Não me lembro)) se preferir não misturar lambdas e usos.CJam ,
4341 bytesExperimente online!
Explicação
fonte
Lua,
211206 bytesO primeiro codegolf do ano para mim ainda deve ser jogável.
Editar: salvou 5 bytes usando uma abreviação de
string.match
Explicações
se você quiser experimentar esse código, poderá usar o seguinte snippet
fonte
Java,
346304284275 bytesLive detalhado
fonte
String[] n,
eString[] a
?Integer.parseInt(n)
pornew Short(n)
. E com base nos comentários do desafio,LisaBob
também é uma saída válida, para que você possa alterar oprintln
paraprint
.Lote, 163 bytes
Recebe entrada em STDIN. Primeira linha é o horário de início da festa e, em seguida, a lista de convidados. Usa o truque de @ Arnauld para converter o hh: mm em minutos.
A entrada preferida do lote para isso seria como uma série de parâmetros de linha de comando (começando com a hora da festa, depois cada convidado e hora como argumentos separados). Isso levaria apenas 129 bytes:
fonte
Groovy, 121 bytes
fonte
PowerShell,
170160 bytesExperimente online!
fonte