Это продолжение CodeGolf - не обращайте внимания на шум # 1, единственная проблема в том, что Барри сделал для нас еще хуже. Посмотрим, что случилось
Обновить
Я добавил код для создания случайного ввода и ожидаемого вывода, потому что я не очень хорош для объяснения того, что я хочу, и я предполагаю, что иногда слова вводят в заблуждение больше, чем код (не так ли?)
Описание
Другой метод в API Dumb Corp дает нам текущую цену, которую провайдер дает нам за товар, оптимальную цену, с которой мы будем делать максимальные продажи, и тенденцию этой цены по сравнению с предыдущими ценами в виде строки UP
или DOWN
. Нам нужно решить, следует ли нам удалить товар из магазина или подождать.
вход
80,90,UP
150,100,DOWN
65,65,UP
1618,1618,DOWN
840,1200,DOWN
54,12,UP
30,1,UP
Для огромного демонстрационного примера ввода с ожидаемым выводом поместите следующий код (js) в консоль браузера, и он должен вывести правильный случайный ввод для тестирования.
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);
Как всегда, в G
качестве входных данных у нас будет переменная , однако, если ваш язык облегчает вам простое чтение входных данных, это тоже хорошо. Формат постоянен, и следуйте форматуint,int,string
Желаемый вывод
Вы мозги этой операции, Барри должен делать эти вычисления на сервере, но мы не можем рассчитывать на него, как вы должны знать. Вам нужно выводить, WAIT
если тенденция к оптимальной цене или STOP
если тенденция к проигрышам.
Другими словами, с учетом 80,90,UP
входных данных мы знаем, что существует продукт с текущей ценой 80 и оптимальной ценой 90 с тенденцией к росту, поэтому мы должны это сделать WAIT
. С другой стороны, 840,1200,DOWN
означает, что цена продукта снижается, а наша оптимальная цена выше, поэтому мы должны остановить потери, выпуская STOP
.
Если две цены идентичны, выведите WAIT
независимо от тенденции.
Каждый продукт в новой строке, одно слово в строке:
WAIT
WAIT
WAIT
WAIT
STOP
STOP
STOP
Пожалуйста, по возможности, предоставьте способ проверки того, что ваш код работает, так как мы не можем все знать, просто посмотрев на синтаксис. Как всегда, используйте как можно меньше символов и помните, что вы не обязательно конкурируете с другими языками, вы конкурируете с языками с похожим синтаксисом
Ответы:
CJam,
312927 символовЭто всего лишь кодированная версия следующего кода (чтобы использовать оценку по символам):
Запустите все тесты здесь.
Может быть способ сократить это кодировкой
STOP
иWAIT
, но я вполне доволен остальным.объяснение
Код окружен циклом, который одновременно читает строку, обрабатывает ее, затем нажимает на новую строку и читает следующую строку ... Цикл завершается, как только
r
возвращается пустая строка (т. Е. После обработки всех строк). Вот это немного:Что касается обработки каждой строки, я использую тот факт, что заглавные буквы являются переменными в CJam, так что я могу оценить некоторые входные данные.
Итак, подвох заключается в том, что
UP
мы инвертируем относительные размеры цен, чтобы в конце мы могли охватить все случаи одним неравенством.источник
"㫅㍸ꕆ敟鸢Ꝓ約䢫솓儓隆뻨"2G#b128b:c~
Perl, 35
Проверь меня .
источник
Perl,
7773 байтаВот как это работает:
while(<>)
разбирает каждую строку.@p=split","
разбивает его каждой запятой. Он использует оператор Perl по умолчанию$_
(где хранится строка).print (ternary)
определяет, что печатать.$p[0]<$p[1]and$p[2]=~/D/
спрашивает, является ли текущая цена меньше, чем цена, которую мы хотим, и она понижается (проверяя на D.)(condition)?(if):(else)
является троичным оператором.STOP
. В противном случае, это будет выводитьWAIT
.Я предполагаю, что на входе нет завершающего символа новой строки - завершающий символ новой строки создает дополнительный
WAIT
.Спасибо Алексею Александровичу за помощь в экономии 4 байта!
источник
and
? Вы можете использовать&
или что-то?&&
ведет себя странно. Я попытался использовать это, и это сказало, что было "непревзойденным<>
".print
и просто сделать что-то вродеprint((condition)?"STOP":"WAIT")."\n"
?С, 85
Проверь меня .
источник
R
95108R и струны, не совсем друзья :)
Ввод - это символьный вектор,
G
затем каждая строка превращается вif
оператор, который оценивается.Редактировать Перепутал мою интерпретацию правил. Исправлена стоимость нескольких персонажей.
источник
Рубин - 89 символов
RubyFiddle
С помощью от bluetorange!
источник
=
благодарность теперь :)=
что, как я знал, тоже было возможно ... Время исправить!1618,1618,DOWN
?a.split.map{..}
отпечатков 3WAIT
илиSTOP
для каждой строки ввода. Вы хотели сделать что-нибудь? какb,c,d=a.split(?,)
? Тоже!b[3][2]
корочеb[3]=='UP'
, но я думаю, что так и должно бытьb[2]
? Сравнение строк>=
требует внимания, как"9">="77"
это верно. Разделитель строки ввода по умолчанию - это то\n
, что вы можете использоватьsplit
без аргументов.?\n
короче чем'\n'
.Python 3,
898482 байтаОбъяснение:
источник
Matlab,
10090 байтНе так мало, как хотелось бы - особенно преобразование из логического в строки очень длинное. Я попытался сбрить несколько байтов, переключившись на Octave, но, очевидно,% c не поддерживается для текстов, которые еще могут быть в Octave.
Лично я думаю, что приятно, что это пока единственное решение, которое не использует сплит :)
РЕДАКТИРОВАТЬ: первоначально решил ситуацию равных слишком сложным.
источник
a=
бит доxor
вызова функции. Хотя даже тогда это на самом деле не дает правильного результата.Javascript ECMAScript 6, 112b
Только в браузерах, совместимых с ECMAScript 6
объяснение
Он использует тот факт, что если мы спросим, является ли 0 истинным, он вернет ложное, поэтому мы можем сказать 1 для
UP
, -1 дляDOWN
. Затем мы умножаем на разницу текущей цены и оптимальные цены , чтобы оба они работают на более чем 0 частиЕсли условие выполнено, вернуть
STOP
, в противном случае (включая равные значения) вернутьWAIT
Требуется дальнейшая игра в гольф
источник
Javascript ( ES6 ),
828079 байтовРедактировать: -2, используя метод умножения @ JuanCortés
Изменить: -1, используя трюк, чтобы уменьшить метод умножения
комментарии:
Демонстрационный фрагмент:
Лист регистраций изменений:
источник
C- 91 байт
Потому что C должен быть где-то там
Теперь выглядит очень похоже на версию @nutki, хотя решить, выводить ли «STOP» или «WAIT», не так.
Ungolfed-
Golfed-
Старый
Я буду продолжать пытаться сократить это
источник
char c[4]
вместоchar *c=""
(что тоже короче).char c[5]
(1 пробел\0
в конце)?Питон 3 -
10810610297BРабота в процессе...
источник