Dies ist eine Fortsetzung von CodeGolf - Ignorieren Sie den Lärm Nr. 1, das einzige Problem ist, dass Barry die Dinge für uns noch schlimmer gemacht hat. Lass uns nachsehen, was passiert ist
Aktualisieren
Ich habe Code hinzugefügt, um zufällige Eingaben und erwartete Ausgaben zu erstellen, weil ich nicht so gut erklären kann, was ich will, und ich denke, dass Wörter manchmal irreführender sind als Code (ist das nicht immer so?)
Beschreibung
Eine andere Methode in der API von Dumb Corp gibt uns den aktuellen Preis an, den uns ein Anbieter für einen Artikel gibt, den optimalen Preis, mit dem wir maximale Verkäufe erzielen würden, und die Tendenz dieses Preises im Vergleich zu früheren Preisen als Zeichenfolge UP
oder DOWN
. Wir müssen uns entscheiden, ob wir den Artikel aus dem Shop entfernen oder warten sollen.
Eingang
80,90,UP
150,100,DOWN
65,65,UP
1618,1618,DOWN
840,1200,DOWN
54,12,UP
30,1,UP
Geben Sie für eine große Demo eines Eingabebeispiels mit erwarteter Ausgabe den folgenden Code (js) in die Browserkonsole ein und es sollte eine gültige zufällige Eingabe zum Testen ausgeben.
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);
Wie immer haben wir eine Variable G
als Eingabe. Wenn Ihre Sprache es Ihnen jedoch leichter macht, die Eingabe einfach zu lesen, ist das auch in Ordnung. Das Format ist konstant und folgt dem Formatint,int,string
Gewünschte Ausgabe
Sie sind der Kopf dieser Operation. Barry sollte diese Berechnung auf dem Server durchführen, aber wir können uns nicht auf ihn verlassen, wie Sie wissen sollten. Sie müssen ausgeben, WAIT
wenn die Tendenz zum optimalen Preis geht oder STOP
wenn die Tendenz zu Verlusten geht.
Mit anderen Worten, mit dem 80,90,UP
as-Input wissen wir, dass es ein Produkt mit einem aktuellen Preis von 80 und einem optimalen Preis von 90 gibt, mit der Tendenz zu steigen, also sollten wir es tun WAIT
. Auf der anderen Seite 840,1200,DOWN
bedeutet dies , dass der Produktpreis sinkt und unser optimaler Preis höher ist. Daher sollten wir Verluste durch Ausgabe stoppen STOP
.
Wenn die beiden Preise identisch sind, wird WAIT
unabhängig von der Tendenz ausgegeben .
Jedes Produkt in einer neuen Zeile, ein Wort pro Zeile:
WAIT
WAIT
WAIT
WAIT
STOP
STOP
STOP
Bitte geben Sie nach Möglichkeit eine Möglichkeit, um zu überprüfen, ob Ihr Code funktioniert, da wir nicht alle nur anhand der Syntax wissen können. Verwenden Sie wie immer so wenig Zeichen wie möglich und denken Sie daran, dass Sie nicht unbedingt mit anderen Sprachen konkurrieren, sondern mit Sprachen mit ähnlicher Syntax
Antworten:
CJam,
312927 ZeichenDies ist nur eine codierte Version des folgenden Codes (um die Bewertung nach Zeichen zu nutzen):
Führen Sie hier alle Testfälle aus.
Es könnte eine Möglichkeit geben, dies durch Codierung
STOP
und zu verkürzenWAIT
, aber mit dem Rest bin ich ziemlich zufrieden.Erläuterung
Der Code ist von einer Schleife umgeben, die jeweils eine Zeile liest, verarbeitet, dann eine neue Zeile drückt und die nächste Zeile liest ... Die Schleife wird beendet, sobald
r
eine leere Zeichenfolge zurückgegeben wird (dh nachdem alle Zeilen verarbeitet wurden). Das ist das bisschen:Bei der Verarbeitung jeder Zeile nutze ich die Tatsache, dass Großbuchstaben Variablen in CJam sind, damit ich einen Teil der Eingabe auswerten kann.
Der Haken ist also, dass
UP
wir die relativen Größen der Preise umkehren, so dass wir am Ende alle Fälle mit einer einzigen Ungleichung abdecken können.quelle
"㫅㍸ꕆ敟鸢Ꝓ約䢫솓儓隆뻨"2G#b128b:c~
Perl, 35
Teste mich .
quelle
Perl,
7773 BytesSo funktioniert das:
while(<>)
analysiert jede Zeile.@p=split","
teilt es durch jedes Komma. Es wird der Standard-Perl-Operator verwendet$_
(in dem die Zeile gespeichert ist).print (ternary)
legt fest, was gedruckt werden soll.$p[0]<$p[1]and$p[2]=~/D/
fragt, ob der aktuelle Preis niedriger ist als der von uns gewünschte Preis, und er sinkt (durch Überprüfen auf ein D.)(condition)?(if):(else)
ist der ternäre Operator.STOP
. Andernfalls wird es ausgegebenWAIT
.Ich gehe davon aus, dass die Eingabe keine nachgestellte Newline enthält - eine nachfolgende Newline erzeugt eine zusätzliche
WAIT
.Vielen Dank an Alex A., der mir geholfen hat, 4 Bytes zu sparen!
quelle
and
? Kannst du&
oder so etwas benutzen ?&&
verhalte mich aber seltsam. Ich habe versucht, es zu benutzen, und es stand, dass es ein "unübertroffenes<>
" gab.print
und einfach so etwas tunprint((condition)?"STOP":"WAIT")."\n"
?C 85
Teste mich .
quelle
R
95,108R und Streicher, nicht wirklich Freunde :)
Die Eingabe ist der Zeichenvektor
G
und ändert dann jede Zeichenfolge in eineif
Anweisung, die ausgewertet wird.Bearbeiten Hat meine Interpretation der Regeln durcheinander gebracht. Fix kostet ein paar Zeichen.
quelle
Rubin - 89 Zeichen
RubyFiddle
Mit Hilfe von zu Bluetorange!
quelle
=
jetzt hinzugefügt, danke :)=
denen ich wusste, dass dies auch eine Möglichkeit ist ... Zeit zum Beheben!1618,1618,DOWN
?a.split.map{..}
Ausdrucken 3WAIT
oderSTOP
für jede Eingabezeile. Wolltest du etw tun? wieb,c,d=a.split(?,)
? Auch!b[3][2]
ist kürzer alsb[3]=='UP'
, aber ich denke, dass es sein sollteb[2]
? Das Vergleichen von Strings mit>=
erfordert natürlich Aufmerksamkeit"9">="77"
. Das Standardtrennzeichen für Eingabezeilen ist\n
, sodass Sie essplit
ohne Argumente verwenden können.?\n
ist kürzer als'\n'
.Python 3,
898482 BytesErläuterung:
quelle
Matlab,
10090 BytesNicht so klein wie ich möchte - besonders die Konvertierung von Booleschen zu Strings ist sehr lang. Ich habe versucht, ein paar Bytes durch Umschalten auf Octave zu sparen, aber anscheinend wird% c für Textscan in Octave noch nicht unterstützt.
Persönlich finde ich es schön, dass diese Lösung die einzige ist, die bisher keinen Split verwendet :)
EDIT: Ursprünglich gelöst die Gleichstellungssituation viel zu komplex.
quelle
a=
Bit vor demxor
Funktionsaufruf verpasst . Selbst dann erzeugt es nicht die richtige Ausgabe.Javascript ECMAScript 6, 112b
Nur in ECMAScript 6-kompatiblen Browsern
Erläuterung
Es nutzt die Tatsache, dass wenn wir fragen, ob 0 wahr ist, es falsch zurückgibt, so dass wir 1 für
UP
, -1 für sagen könnenDOWN
. Dann multiplizieren wir dies mit der Differenz zwischen dem aktuellen Preis und dem optimalen Preis, damit beide für den Teil größer als 0 funktionierenWenn die Bedingung erfüllt ist, geben Sie zurück
STOP
, andernfalls (einschließlich gleicher Werte)WAIT
Benötigt weiteres Golfen
quelle
Javascript ( ES6 ),
828079 BytesBearbeiten: -2 mit der @ JuanCortés-Multiplikationsmethode
Bearbeiten: -1 mit einem Trick, um die Multiplikationsmethode zu reduzieren
Kommentiert:
Snippet-Demo:
Versionsgeschichte:
quelle
C-91 Bytes
Weil C irgendwo da sein muss
Sieht jetzt der @ nutki-Version sehr ähnlich, obwohl es unterschiedlich ist, herauszufinden, ob "STOP" oder "WAIT" ausgegeben werden soll.
Ungolfed-
Golf-
Das Alte
Ich werde weiterhin versuchen, es zu reduzieren
quelle
char c[4]
stattchar *c=""
(was auch kürzer ist).char c[5]
(1 Platz für das\0
am Ende)?Python 3 -
10810610297BIn Arbeit...
quelle