Ceci est une suite de CodeGolf - Ignorez le bruit # 1, le seul problème étant que Barry a encore aggravé les choses pour nous. Voyons ce qui se passe
Mise à jour
J'ai ajouté du code pour créer une entrée aléatoire et une sortie attendue parce que je ne suis pas très bon pour expliquer ce que je veux, et je suppose que parfois les mots sont plus trompeurs que le code (n'est-ce pas toujours?)
La description
Une autre méthode de l' API de Dumb Corp nous donne le prix actuel qu'un fournisseur nous donne pour un article, le prix optimal avec lequel nous ferions des ventes maximales et la tendance de ce prix par rapport aux prix précédents sous forme de chaîne UP
ou DOWN
. Nous devons décider si nous devons retirer l'article de la boutique ou attendre.
Contribution
80,90,UP
150,100,DOWN
65,65,UP
1618,1618,DOWN
840,1200,DOWN
54,12,UP
30,1,UP
Pour un énorme exemple de démonstration d'entrée avec la sortie attendue, mettez le code suivant (js) dans la console de votre navigateur et il devrait sortir une entrée aléatoire valide pour le test.
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);
Comme toujours, nous aurons une variable G
comme entrée, mais si votre langue vous facilite la lecture de l'entrée, c'est bien aussi. Le format est constant et suit le formatint,int,string
Sortie désirée
Vous êtes le cerveau de cette opération, Barry devrait faire ce calcul sur le serveur, mais nous ne pouvons pas compter sur lui comme vous devez le savoir. Vous devez produire WAIT
si la tendance est au prix optimal ou STOP
si la tendance est à la perte.
En d'autres termes, avec l' 80,90,UP
entrée as, nous savons qu'il existe un produit avec un prix actuel de 80 et un prix optimal de 90 avec une tendance à la hausse, nous devrions donc WAIT
. D'un autre côté, cela 840,1200,DOWN
signifie que le prix du produit baisse et que notre prix optimal est plus élevé, nous devons donc arrêter les pertes en produisant STOP
.
Si les deux prix sont identiques, production WAIT
quelle que soit la tendance.
Chaque produit dans une nouvelle ligne, un seul mot par ligne:
WAIT
WAIT
WAIT
WAIT
STOP
STOP
STOP
S'il vous plaît, si possible, fournissez un moyen de vérifier que votre code fonctionne car nous ne pouvons pas tous le savoir simplement en regardant la syntaxe. Comme toujours, utilisez le moins de caractères possible et rappelez-vous que vous n'êtes pas nécessairement en concurrence avec d'autres langues, votre concurrence avec des langues avec une syntaxe similaire
Réponses:
CJam,
312927 caractèresCeci est juste une version codée du code suivant (afin d'utiliser la notation par caractères):
Exécutez tous les cas de test ici.
Il pourrait y avoir un moyen de raccourcir cela en encodant
STOP
etWAIT
, mais je suis assez content du reste.Explication
Le code est entouré d'une boucle qui lit en ligne à la fois, le traite, puis pousse une nouvelle ligne et lit la ligne suivante ... La boucle se termine une fois
r
renvoie une chaîne vide (c'est-à-dire après que toutes les lignes ont été traitées). Voilà ce morceau:Quant au traitement de chaque ligne, j'utilise le fait que les lettres majuscules sont des variables dans CJam, donc je peux évaluer une partie de l'entrée.
Donc, le hic, c'est que pour
UP
nous inversons les tailles relatives des prix, afin que nous puissions couvrir tous les cas avec une seule inégalité à la fin.la source
"㫅㍸ꕆ敟鸢Ꝓ約䢫솓儓隆뻨"2G#b128b:c~
Perl, 35
Testez- moi .
la source
Perl,
7773 octetsVoici comment ça fonctionne:
while(<>)
analyse chaque ligne.@p=split","
le divise par chaque virgule. Il utilise l'opérateur Perl par défaut$_
(qui est l'endroit où la ligne est stockée).print (ternary)
détermine ce qu'il faut imprimer.$p[0]<$p[1]and$p[2]=~/D/
demande si le prix actuel est inférieur au prix que nous voulons, et il baisse (en vérifiant un D.)(condition)?(if):(else)
est l'opérateur ternaire.STOP
. Sinon, il sortiraWAIT
.Je suppose qu'il n'y a pas de nouvelle ligne de fin sur l'entrée - une nouvelle ligne de fin produit un extra
WAIT
.Merci à Alex A. de m'avoir aidé à économiser 4 octets!
la source
and
? Pouvez-vous utiliser&
ou quelque chose?&&
se comporte étrangement. J'ai essayé de l'utiliser, et il a dit qu'il y avait un "inégalé<>
".print
et simplement faire quelque chose comme çaprint((condition)?"STOP":"WAIT")."\n"
?C, 85
Testez- moi .
la source
R,
95108R et cordes, pas vraiment amis :)
L'entrée est le vecteur de caractères,
G
puis change chaque chaîne en uneif
instruction qui est évaluée.Edit Foiré mon interprétation des règles. Le correctif coûte quelques caractères.
la source
Rubis - 89 caractères
RubyFiddle
Avec l'aide de à bluetorange!
la source
=
maintenant merci :)=
ce que je savais également être une possibilité ... Il est temps de corriger!1618,1618,DOWN
?a.split.map{..}
impressions 3WAIT
ouSTOP
pour chaque ligne d'entrée. Vouliez-vous faire quelque chose? commeb,c,d=a.split(?,)
? Aussi,!b[3][2]
est plus court queb[3]=='UP'
, mais je pense que ça devrait êtreb[2]
? La comparaison des chaînes avec>=
requiert de l'attention, comme"9">="77"
c'est vrai. Le séparateur de ligne d'entrée par défaut est\n
, vous pouvez donc l'utilisersplit
sans arguments.?\n
est plus court que'\n'
.Python 3,
898482 octetsExplication:
la source
Matlab,
10090 octetsPas aussi petit que je le souhaiterais - en particulier la conversion du booléen en chaînes est très longue. J'ai essayé de raser quelques octets en passant à Octave, mais apparemment% c n'est pas encore pris en charge pour textoscan dans Octave.
Personnellement, je pense que c'est bien que cette solution soit la seule à ce jour qui n'utilise pas le split :)
EDIT: à l'origine résolu la situation d'égalité beaucoup trop complexe.
la source
a=
bit avant l'xor
appel de fonction. Bien que même alors, il ne produise pas réellement la sortie correcte.Javascript ECMAScript 6, 112b
Uniquement sur les navigateurs compatibles ECMAScript 6
Explication
Il utilise le fait que si nous demandons si 0 est vrai, il retournera faux, donc nous pouvons dire 1 pour
UP
, -1 pourDOWN
. Ensuite , on multiplie que par la différence de prix actuel et le prix optimal pour faire les deux d'entre eux travaillent pour la plus grande que 0 partieSi la condition est remplie, retournez
STOP
, sinon (y compris des valeurs égales) retournezWAIT
A besoin de plus de golf
la source
Javascript ( ES6 ),
828079 octetsEdit: -2 en utilisant la méthode de multiplication @ JuanCortés
Edit: -1 en utilisant une astuce pour réduire la méthode de multiplication
Commenté:
Démo d'extrait:
Historique des révisions:
la source
C- 91 octets
Parce que C doit être là quelque part
Cela ressemble maintenant beaucoup à la version @nutki, bien qu'il soit différent de déterminer si sortir "STOP" ou "WAIT".
Ungolfed-
Golfé-
Le vieux
Je continuerai d'essayer de le réduire
la source
char c[4]
place dechar *c=""
(qui est également plus court).char c[5]
(1 espace pour le\0
à la fin)?Python 3 -
108106102 10297BTravail en cours ...
la source