Ваша собственная инструкция "для"
Предполагая, что у вас есть следующий вход: a, b, c, d
Ввод может быть в одну строку с использованием любого формата «a / b / c / d» или «a, b, c, d» и т. Д.
Вы также можете иметь 4 входа.
Вы должны кодировать следующее поведение (псевдокод здесь):
var i = <a>
while (i <b> <c>)
print i
i = i + <d>
print "\n"
Вот несколько тестов:
input : 1,<,10,1
output :
1
2
3
4
5
6
7
8
9
Еще :
input : 20,>,10,1
output :
20
21
22
23
24
25
26
27
...
infinite loop / program crashes
a
является целым числом , начальное значениеi
.b
это строка или символ , это не может быть что-то еще, компаратор, используемый в конечном состоянииfor
цикла.b
может и должен быть одной из следующих строк:- ">" - "<"
c
является целым числом , числом, используемым в конечном состоянииfor
цикла.d
представляет собой целое число , которое добавляется к I в каждом цикле.
Это код-гольф, самый короткий ответ выигрывает!
print "\n"
, но есть , но я использую предупреждение javascript для каждой строки. Будет ли это приемлемым, или мне придется вместо этого использовать console.log, чтобы сделать ответ дольше?alert("23\n24\n25");
сработало бы, тогда как не сработалоalert("23"); alert("24"); alert(25);
быОтветы:
JavaScript (ES6),
444356 байтСохранено 1 байт благодаря ETHproductions
Edit: исправлено для соответствия требованиям вывода
Тест
Показать фрагмент кода
источник
eval
чтобы сохранить байт:(a,b,c,d)=>{for(;eval(a+b+c);a+=d)alert(a)}
Javascript (ES6),
474248 байтХотел сделать версию for, но кто-то был быстрее, так что вот рекурсивная версия.
Вы должны добавить
f=
раньше и назвать его какf(b,c,d)(a)
.Большое спасибо Арно за потрясающий гольф.
alert
изменено наconsole.log
из-за выходной спецификацииисточник
Чистая Баш, 35
Я предполагаю, что все в порядке, просто чтобы включить параметры в стандартный цикл for:
Попробуйте онлайн .
источник
Желе , 12 байт
Попробуйте онлайн!
У Jelly есть много способов кратко выполнять итерации, создавать диапазоны и т. Д. Однако точно отразить поведение C ++ довольно сложно, поскольку в особых случаях, таких как приращение равно 0, цикл заканчивается до его начала (из-за неравенства в обратном направлении). ), и приращение идет в неправильном направлении (что означает, что условие выхода цикла не может быть выполнено естественным образом). Таким образом, это решение в основном является прямым переводом C ++, хотя это делает его более низкоуровневым, чем обычно программа Jelly. К счастью, C ++ имеет неопределенное поведение при переполнении целых чисел со знаком (вопрос использует
int
), что означает, что программа может сделать что-нибудь в этом случае, и, следовательно, нет необходимости пытаться имитировать поведение переполнения.объяснение
Сбой программы - самый краткий способ отключить неявный вывод Jelly (в противном случае он вывел бы конечное значение счетчика); он генерирует кучу сообщений об ошибках на stderr, но мы обычно считаем, что это разрешено.
Между прочим, счетчик цикла инициализируется текущим значением до запуска цикла. Поскольку цикл появляется в начале программы, это будет первый ввод.
источник
t
чтобыḊ
не иметь сбоев. Результатом удаления является пустой список, для которого неявная печать Jelly ничего не дает.Python 2 , 50 байт
Попробуйте онлайн!
источник
R, 63 байта
источник
Java, 58 байт
источник
i
? Не могли бы вы пропустить часть инициализации и просто использоватьa
? Кроме того, использование значения ASCII '>' (62) сохраняет байт.b>61
05AB1E ,
2220 байтПопробуйте онлайн!
объяснение
источник
SmileBASIC, 53 байта
Объяснение:
Это использует тот факт, что так
X<Y
же, как-X>-Y
источник
READ
оператор, сохраняя 1 байт.С накоплением , 34 байта
Попробуйте онлайн! (Включено тестирование.) Эта функция ожидает, что стек будет выглядеть так:
Например:
объяснение
источник
C ++, 80
К сожалению, это
C++
не такC
. Был немного смущен вопросом.источник
using namespace std
бесплатно).i
нужно начинатьa
, не0
? Вы можете просто использоватьa
иi
вообще пропустить и использовать значение ASCII '>'.for(;b==62?a>c:a<c;a+=d)
f(1,'<'3,1);
for(b-=61;b*a>b*c;a+=d)
работает на один байт; но так жеfor(;b-62?a<c:a>c;a+=d)
.C
5251 байт-1 байт благодаря H Уолтерсу
Попробуйте онлайн!
источник
b&2
вместоb^60
другого байта.Python 3, 52 байта
repl.it
источник
Пип , 14 байт
Принимает четыре аргумента командной строки. Поддерживает отрицательные числа и числа с плавающей запятой и операторы сравнения
< > = <= >= !=
. Попробуйте онлайн!источник
Желе , 8 байт
Это диадическая ссылка, которая принимает a, b, c в качестве левого аргумента и d качестве правого. Выход может быть бесконечным и переходит в STDOUT.
Попробуйте онлайн!
Как это работает
источник
F
чтобы сгладить массив.Python 2 , 45 байт
Попробуйте онлайн!
Очень буквальная реализация спецификации. Принимает шаблон кода, подставляет во входные данные форматирование строки и выполняет его.
источник
Простой TeX, 88 байт
Команда
\for
предоставляет запрошенную функцию. Сохранить это какfor.tex
а затем запустите и введите значения переменных в командной строке:pdftex '\input for \for 1 < 5 1 \bye'
Значения переменных должны быть разделены пробелами.источник
Python 3, 61 байт
Один лайнер:
источник
\t
его пробелом.Haskell ,
6664 байтаПопробуйте онлайн! Использование:
источник
Bash (+ Unix Tools), 29 байт
Golfed
Тест
источник
Рубин,
4341 байтЕсли вместо строки
b
можно принять символ Ruby вместо строки, вы получите 38 байтов :Попробуйте любое решение онлайн!
источник
Обыкновенный Лисп,
8280797364 байтаТест
-9 байт благодаря PrzemysławP.
источник
(defmacro f(a b c d)<insert backqoute here>(do((i,a(+ i,d)))((not(,b i,c)))(print i)))
Использование:(f 1 < 10 1)
PHP,
6965 байтЗапустите с '-r'; предоставить аргументы командной строки в качестве входных данных.
Для
одного байта большебольше 4 байта, я могу взять каждый оператор:Да, злой Эвал. Знаете ли вы, что он может что-то вернуть?
Сокращение структуры
[,$i,$b,$c,$d]=$argv;
сократит еще 4 байта;но PHP 7.1 откладывает вызов.
источник
list
сохраняет 4 байта плюс 4 байта с коротким синтаксисомlist()
.Perl 6 , 44 байта
Как это работает
Если можно вернуть (потенциально бесконечную) последовательность чисел в качестве значения типа
Seq
, вместо.say for
вывода чисел на стандартный вывод, часть можно удалить, уменьшив ее до 35 байт.источник
Clojure,
6663 байта-3 байта с учетом
loop
. Я "злоупотребляю" параметром init, чтобы действовать как работающий аккумулятор.Рекурсивное решение (с TCO). Смотрите комментарии в коде pregolfed. Я попробовал рекурсивное решение без TCO, и оно оказалось 67 байтами.
Я хотел бы видеть этот удар в Clojure! Я думаю, что это самое маленькое, что я могу получить.
источник
#(when(({">">"<"<}%2)% %3)(println %)(recur(+ % %4)%2 %3 %4))
будет 61 байт, сочетая вашwhen
с моим({">">"<"<}%2)
.Groovy, 51 байт
Это безымянное закрытие. Попробуйте онлайн!
Внимание - Если вы хотите проверить это с помощью
groovy console
, убедитесь, что вы уничтожили весь процесс, когда ввод вызывает бесконечный цикл. Я заметил это после того, как он потребил ~ 5 гигабайт оперативной памяти.источник
QBIC ,
5140 байтИ через три минуты после публикации я понял, что могу упростить логику терминатора ...
источник
Пакет, 94 байта
Если бы не поведение второго параметра, это можно сделать за 53 байта:
Это просто ничего не делает, если шаг имеет неправильный знак. Дополнительный тест заключается в том, что
for
цикл Batch позволяет переменной цикла равняться конечному значению.источник
Clojure, 66 байт
Это могло быть 55 байтов, поскольку
<
и>
являются функциями в Clojure:источник
<
вместо"<"
, за исключением Clojure.TI-Basic,
4134 байтаисточник
Prompt
,Str2
,Str3
,While
,expr(
,Disp
,->
, ИEnd
все символы однобайтные. Я считаю 29 байтов.Str2
,Str3
, иexpr(
все два байта маркеры. Чтобы увидеть список однобайтовых токенов, посмотрите tibasicdev.wikidot.com/one-byte-tokens