Este é um acompanhamento do CodeGolf - Ignore o barulho # 1, o único problema é que Barry tornou as coisas ainda piores para nós. Vamos ver o que aconteceu
Atualizar
Eu adicionei código para criar entrada aleatória e saída esperada porque não sou tão bom em explicar o que quero, e acho que às vezes as palavras são mais enganosas que o código (isso nem sempre é?)
Descrição
Outro método na API da Dumb Corp nos fornece o preço atual que um fornecedor está nos oferecendo por um item, o preço ideal com o qual estaríamos realizando vendas máximas e a tendência desse preço em comparação aos preços anteriores como uma string UP
ou DOWN
. Precisamos decidir se devemos remover o item da loja ou esperar.
Entrada
80,90,UP
150,100,DOWN
65,65,UP
1618,1618,DOWN
840,1200,DOWN
54,12,UP
30,1,UP
Para uma demonstração de exemplo de entrada enorme com saída esperada, coloque o seguinte código (js) no console do navegador e ele deve gerar uma entrada aleatória válida para teste.
var output = "";
var result = "";
for(i=10;i--;){
var currentPrice = Math.floor(Math.random() * 10000) + 1;
var optimalPrice = Math.floor(Math.random() * 10000) + 1;
var tendency = Math.round(Math.random())?"UP":"DOWN";
var tresult = "WAIT\n";
if((currentPrice > optimalPrice && tendency == "UP") ||
(currentPrice < optimalPrice && tendency == "DOWN")){
tresult = "STOP\n";
}
output +=currentPrice+","+optimalPrice+","+tendency+"\n";
result +=tresult;
}
console.log(output);
console.log(result);
Como sempre, teremos uma variável G
como nossa entrada; no entanto, se o seu idioma facilitar a leitura da entrada, tudo bem. O formato é constante e segue o formatoint,int,string
Saída desejada
Você é o cérebro desta operação, Barry deveria estar fazendo esse cálculo no servidor, mas não podemos contar com ele como você deve saber. Você precisa produzir WAIT
se a tendência é para o preço ideal ou STOP
se a tendência é para perder.
Em outras palavras, com a 80,90,UP
entrada como, sabemos que existe um produto com preço atual de 80 e preço ideal de 90 com tendência a subir, por isso devemos WAIT
. Por outro lado, 840,1200,DOWN
significa que o preço do produto está caindo e nosso preço ideal é mais alto; portanto, devemos parar as perdas produzindo STOP
.
Se os dois preços forem idênticos, a produção será WAIT
independente da tendência.
Cada produto em uma nova linha, uma palavra por linha:
WAIT
WAIT
WAIT
WAIT
STOP
STOP
STOP
Sempre que possível, forneça uma maneira de verificar se seu código está funcionando, pois nem todos podemos saber apenas olhando a sintaxe. Como sempre, use o mínimo de caracteres possível e lembre-se de que você não está competindo necessariamente com outros idiomas, mas sim com idiomas com sintaxe semelhante.
Respostas:
CJam,
312927 caracteresEsta é apenas uma versão codificada do código a seguir (para fazer uso da pontuação por caracteres):
Execute todos os casos de teste aqui.
Pode haver uma maneira de reduzir isso codificando
STOP
eWAIT
, mas estou muito feliz com o resto.Explicação
O código é cercado por um loop que lê on-line de cada vez, processa-o, envia uma nova linha e lê a próxima linha ... O loop termina quando
r
retorna uma string vazia (ou seja, depois que todas as linhas foram processadas). É esse pedaço:Quanto ao processamento de cada linha, estou fazendo uso do fato de que letras maiúsculas são variáveis no CJam, para avaliar algumas das entradas.
Portanto, o problema é que
UP
, invertemos os tamanhos relativos dos preços, para que possamos cobrir todos os casos com uma única desigualdade no final.fonte
"㫅㍸ꕆ敟鸢Ꝓ約䢫솓儓隆뻨"2G#b128b:c~
Perl, 35
Me teste .
fonte
Perl,
7773 bytesVeja como funciona:
while(<>)
analisa todas as linhas.@p=split","
divide por cada vírgula. Está usando o operador Perl padrão$_
(que é onde a linha está armazenada).print (ternary)
determina o que imprimir.$p[0]<$p[1]and$p[2]=~/D/
pergunta se o preço atual é menor que o preço desejado e está diminuindo (verificando um D.)(condition)?(if):(else)
é o operador ternário.STOP
. Caso contrário, será exibidoWAIT
.Estou assumindo que não há nova linha final na entrada - uma nova linha final produz um extra
WAIT
.Obrigado a Alex A. por me ajudar a economizar 4 bytes!
fonte
and
? Você pode usar&
ou algo assim?&&
comporta de maneira estranha. Eu tentei usá-lo, e ele disse que havia um "incomparável<>
".print
e fazer algo assimprint((condition)?"STOP":"WAIT")."\n"
?C, 85
Me teste .
fonte
R,
95108R e cordas, não realmente amigos :)
Input é o vetor de caracteres e
G
depois muda cada string em umaif
instrução que é avaliada.Editar Desarrumei minha interpretação das regras. A correção custou alguns caracteres.
fonte
Ruby - 89 Chars
RubyFiddle
Com ajuda de para bluetorange!
fonte
=
agora obrigado :)=
que eu sabia que também era uma possibilidade ... Hora de corrigir!1618,1618,DOWN
?a.split.map{..}
impressões 3WAIT
ouSTOP
para cada linha de entrada. Você queria fazer sth. gostab,c,d=a.split(?,)
? Além disso,!b[3][2]
é mais curto queb[3]=='UP'
, mas acho que deveria serb[2]
? Comparando strings com>=
requer atenção, como"9">="77"
é verdade. O separador de linha de entrada padrão é\n
, portanto, você pode usarsplit
sem argumentos.?\n
é mais curto que'\n'
.Python 3,
898482 bytesExplicação:
fonte
Matlab,
10090 bytesNão é tão pequeno quanto eu gostaria - especialmente a conversão de booleano para strings é muito longa. Tentei cortar alguns bytes alternando para o Octave, mas aparentemente o% c ainda não é suportado para textos no Octave.
Pessoalmente, acho bom que esta solução seja a única até agora que não use split :)
EDIT: originalmente resolveu a situação igual a muito complexa.
fonte
a=
bit antes daxor
chamada da função. Embora, mesmo assim, não produza a saída correta.Javascript ECMAScript 6, 112b
Somente em navegadores compatíveis com ECMAScript 6
Explicação
Ele faz uso do fato de que, se perguntarmos se 0 é verdadeiro, ele retornará falso, para que possamos dizer 1 para
UP
, -1 paraDOWN
. Em seguida, multiplicamos isso pela diferença de preço atual e preço ideal para fazê-los funcionar por mais de 0 parteSe a condição for atendida, retorne
STOP
, caso contrário (incluindo valores iguais) retorneWAIT
Precisa de mais golfe
fonte
Javascript ( ES6 ),
828079 bytesEdit: -2 usando o método de multiplicação @ JuanCortés
Edit: -1 usando um truque para reduzir o método de multiplicação
Comentado:
Demonstração de trechos:
Histórico de Revisão:
fonte
C- 91 bytes
Porque C tem que estar lá em algum lugar
Agora parece muito semelhante à versão @nutki, embora seja difícil diferenciar a saída "STOP" ou "WAIT".
Ungolfed-
Golfed-
O antigo
Vou continuar tentando reduzi-lo
fonte
char c[4]
vez dechar *c=""
(que também é mais curto).char c[5]
(1 espaço para\0
o final)?Python 3 -
10810610297BTrabalho em progresso...
fonte