Основная задача
Ваша задача - распечатать целые числа в порядке убывания, начиная с 1, и увеличиваясь, пока вы продолжаете нажимать 1, до тех пор, пока не будет достигнут заданный ввод, а затем распечатывать остальные, пока не нажмете 1 снова. Пример с вводом 6
:
1
21
321
4321
54321
654321
Without newlines (valid output):
121321432154321654321
Примечание: это A004736 в OEIS. Кроме того, первый пример (с символами новой строки) является неверным выводом, как указано в правилах.
вход
Ваш код может принимать любые виды ввода (графический, STDIN) в виде целого числа или числа.
Выход
Ваш код должен выводить описанную выше последовательность, до тех пор, пока не будет достигнут вводимый номер, а затем завершить вывод, пока он снова не достигнет 1. Вывод может быть любым, поэтому числа, строки, целые числа или графический вывод. Требуется распечатать одно число (без перевода строки, если это строка). Ваш вывод может быть введен и выведен с таким количеством символов, как вам нужно (например []
).
Так как было некоторое недопонимание, вот шаблон регулярных выражений, с которым вы можете попробовать свои результаты.
^(\D*(\d)+\D*)$
правила
- Вывод должен быть полным числом, не разделенным ничем, даже переводом строк.
- Алгоритм должен проверять не первый экземпляр N, появляющийся каким-либо образом (например,
21
in121321
), а скорее первый экземпляр N как фактическое число. - Допускается один завершающий перевод строки.
- Обработка для отрицательного ввода - полностью ваш выбор, отрицательные числа - не случаи, которые вы должны проверить.
Контрольные примеры
Input: 6
Output: 121321432154321654321
Input: 1
Output: 1
Input: 26
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321222120191817161514131211109876543212322212019181716151413121110987654321242322212019181716151413121110987654321252423222120191817161514131211109876543212625242322212019181716151413121110987654321
Input: 0
Output: 0, Empty, or Error
Input: 21
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321
Спасибо @Emigna, я использовал его алгоритм для расчета этих тестов.
победитель
Победитель был выбран! Это был ответ ErikGolfer с впечатляющими 5 байтами! Поздравляем!
The output must be a full number ...
Вы имеете в виду всю последовательность или только разные подстроки (1, 2-1, 3-1 ...)? Ваш первый пример не соответствует этому утверждению.[1, 21, 321, 4321, 54321, 654321]
Как насчет этого?[1,2,1,3,2,1,4,3,2,1,5,4,3,2,1,6,5,4,3,2,1]
Или вы просто говорите о массивах с одним элементом, как[121321432154321654321]
?mickey321211mouse
. На самом деле у\D
частей нет причин быть тамОтветы:
Желе , 5 байт
Попробуйте онлайн!
Формула не моя.
Я подозреваю, что здесь происходит слишком много ...
[ПРИНЯТЬ ОТВЕТ] Я бы дал Деннису около 5 повторений, но это не Reputation Exchange. Деннис показал мне
VV
поведение. К моему удивлению, это короче, чем 05AB1E.источник
05AB1E , 6 байтов
Попробуйте онлайн!
объяснение
Пример ввода 4
источник
JavaScript (ES6), 37 байт
демонстрация
Показать фрагмент кода
Альтернативный метод для n <10, 34 байта (не конкурирующий)
В JavaScript строки неизменны. Следовательно, невозможно изменить содержимое N-го символа строки
s
, присвоив новое значениеs[N]
.Тем не менее, выражение
++s[N]
является допустимым и действительно оценивает, как и следовало ожидать, даже если строка остается неизменной. Например:И по расширению:
источник
V,
29282723191716 байтов8 байтов сохранено благодаря @DJMcMayhem
3 байта сохранены благодаря @ nmjcman101
Скрытые персонажи:
C-x
это Ctrl + x.Попробуйте онлайн! принимает ввод через аргументы командной строки
HexDump:
объяснение
Теперь это выглядит так:
продолжение ...
GIF (устаревший)
(для аргумента
6
)источник
òy$jpkgJ
À
, у вас не будет 0 в верхней части, поэтому вы можете удалить x. Затем, по-видимому, aò
закроет a,ñ
чтобы вы могли удалить второйñ
(это байт, который вы сохраняете). Ссылка, потому что это не имело смыслаC #,
726965 байтЕсли вывод может быть просто возвращен, а не записан на консоль
C #,
716864 байтаСпасибо @VisualMelon за сохранение большого количества байтов
Проверьте это здесь (шутливо, что онлайн-компилятор ломается на любое число выше 420)
источник
j=1
в цикл for и сохранить точку с запятой. Вы можете также объявитьj
вместе сi
, чтобы спастиint
.i++
Также может быть перемещен вj=i
уступке, экономя байт. Вы также должны быть в состоянии заменитьi<=n
с ,i<n
если вы сделаете этоj=++i
вместо того, чтобы начать иi
в0
.for(int i=0,j;i<n;)
;) Также нет необходимости{}
во внутреннем цикле for.Чистая Баш, 34
Два уровня расширения скобки. При вводе
6
первый уровень расширяется до{1..1} {2..1} {3..1} {4..1} {5..1} {6..1}
. Затем это расширяется до1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1
, который смешивается в одну строку сprintf %s
.eval
Требуются на обоих уровнях расширения - для первого уровня, чтобы$1
параметр расширялся первым, и для второго уровня, чтобы он расширялся после первого уровня.Попробуйте онлайн
источник
Perl, 21 байт
Используется
-E
без каких-либо дополнительных затрат.использование
источник
Pyth, 7 байт
Программа, которая принимает ввод целого числа и печатает результат.
Попробуйте онлайн!
Как это работает
источник
jk_hC.:S
это дольше, но хорошая работа!GeoGebra , 67 байт
Каждая строка вводится отдельно в строку ввода. Ввод берется из поля ввода.
Вот gif исполнения:
Как это работает
Ввод
1
неявно правопреемниковa
к1
, иInputBox
команда связывает поле ввода сa
. Затем для каждогоi
дюйма{1, 2, 3, ..., a}
, список{i, i-1, i-2, ..., 1}
создается с помощьюSequence
команды, и каждыйj
в этом списке преобразуется в строку , используяText
. Наконец,Join
объединяет все списки иSum
объединяет все элементы в один текстовый объект, который отображается.источник
Python 2, 51 байт
источник
Сетчатка ,
2622 байтаЧисло байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
объяснение
Преобразовать ввод в унарный.
В каждой позиции вставьте префикс до этой точки, а также перевод строки. Это создает унарный диапазон от
2
доn+1
, одно значение в строке.Замените каждый
1
на количество символов после него в той же строке. Это превращает что-то вроде11111
в43210
.Удалите все переводы строк и нули, предшествующие им.
источник
Язык GameMaker, 65 байт
источник
APL, 10 байт
Например:
Объяснение:
⍳
: получить числа от 1 до N.⍳¨∘
: для каждого из них получить числа от 1 до N.⌽∘
: перевернуть этот список⍕¨∘
: получить символьное представление каждого элемента (чтобы не выводить числа с пробелами между ними)∊
: сгладить результирующий массивисточник
∘
Это композиция функций, я дал объяснение в том порядке, в котором функции действительно выполняютсяPython 2,
7168 байтБьюсь об заклад, рекурсивное решение может быть короче, но мне трудно сформулировать это как единое целое.
Попробуйте онлайн
источник
На самом деле 8 байтов
Первый раз опубликовать ответ в самом деле, так что это, вероятно, может быть в гольф.
Как это работает
Попробуйте онлайн!
источник
R♂R♂RΣεj
представляет собой то же количество байтов, но может быть проще написать объяснение.Брахилог , 8 байт
Попробуйте онлайн!
объяснение
источник
Perl 6 , 22 байта
Лямбда, которая возвращает строку.
( Попробуйте онлайн. )
Объяснение:
1..$_
: Диапазон целых чисел ...(1 2 3 4)
[,] 1..$_
: Уменьшить ("сложить") через оператор запятой ...(1 2 3 4)
[\,] 1..$_
: С промежуточными результатами ( треугольное уменьшение ) ...((1) (1 2) (1 2 3) (1 2 3 4))
[\R,] 1..$_
: Применить обратный мета-оператор к запятой ...((1) (2 1) (3 2 1) (4 3 2 1))
[~] flat ...
: Удалить вложение списка и сложить оператор строки concat ...1213214321
источник
Haskell, 35 байт
Пример использования:
f 6
->"121321432154321654321"
.Для всех чисел
x
в1 ... x
спискеx,x-1, ... ,1
, превратить числа в строку и объединить их в одну строку. Опять же, объедините эти строки в одну строку.источник
C89, 54 байта
56 -2 = 54 благодаря ErikGolfer!
источник
(j=i++)
вместо(j=i)
и удалить последнийi++
(непроверенный).i,j;f(n){j=++i;while(j)printf("%d",j--);i-n?f(n):0;}
(52 байта)Python 3,
87928374 байтаКраткий ответ с использованием рекурсии:
Возможно, не самый короткий, но он сделан только с пониманием списка Python!
(Отредактировано, чтобы добавить функцию печати и удалить \ n)
(Отредактировано для удаления функции печати и изменения n + 1, k + 1 на n, k + 2)
источник
`i`
вместоstr(i)
. И вы можете использовать"".join(...)
вместо"".join([...])
, иrange(1,k,-1)
удалить[...][::-1]
.n>0
может бытьn
. И я имел в видуrange(n,0,-1)
. И использоватьn and f(n-1)+...)or""
.Pyth, 8 байт
объяснение
источник
05AB1E , 6 байтов
Попробуйте онлайн!
источник
Mathematica, 36 байт
Выдает кучу предупреждений, которые можно смело игнорировать.
объяснение
Используя вход
5
в качестве примера:Создает диапазон
{1, 2, 3, 4, 5}
.Range
является списком, поэтому мы можем дать ему список для любого из его аргументов, и он будет автоматически перебирать этот аргумент. Так что это дает нам несколько обращенных списков:Следующий:
Это объединяет вложенный список с пустой строкой. Поскольку вложенный список на самом деле не содержит никаких строк, он не может действительно соединять значения (именно там генерируются предупреждения), но
""<>
имеет побочный эффект сглаживания списка. Так что это дает намТеперь появилась прекрасная особенность Mathematica, которая
Map
не заботится о структуре, которую она отображает. Вы обычно применяете это к списку, но это работает с любой головой.f /@ h[a, b, c]
просто дает тебеh[f[a], f[b], f[c]]
. В нашем случае заголовокStringJoin
и значения являются целыми числами.Так что это просто превращает целые числа в строки. На этом этапе
StringJoin[...]
знает, что с ними делать, и объединяет их все в одну строку:источник
GolfScript , 14 байтов
Попробуйте онлайн!
Обычный метод конечно, но это GolfScript.
Пояснение к этому фрагменту кода VAST :
Обратите внимание, что вывод в виде одного числа. Скользящий
\n
.источник
R,
383344 байтаПринимает ввод в STDIN и выполняет цикл от 1 до n, создавая последовательность от i до 1 для каждого шага и печатая ее.
Редактировать: заменить
seq(i,1)
,i:1
сохранив 5 байтов и показывая, почему я не должен играть в гольф во время встреч.источник
101
если ввод0
.if((n=scan())>0)for(i in 1:n)cat(i:1,sep="")
делает трюк.if(n<-scan())
должно быть достаточно.MATL ,
1411 байтПопробуйте онлайн!
объяснение
источник
not split up by anything
не думайте, что второй разрешен.мозговой трах, 17 байтов
объяснение
Попробуйте онлайн!
источник
Python ,
635759 байтРекурсивное решение, которое работает как в Python 2, так и в 3. Это, вероятно, можно продолжить. Предложения по игре в гольф приветствуются! Попробуйте онлайн!
Изменить: -6 байт благодаря Джонатану Аллану. +2 байта, спасибо mbomb007 за указание на проблему с моим ответом.
Ungolfing
источник
map
для сохранения 6 байтов:lambda n:n and f(n-1)+"".join(map(str,range(n,0,-1)))or""
PHP,
353433 байтаСпас байт, потому что я ошибся, спасибо Титус! И другой!
Запустите из командной строки с
-r
.Довольно простой ответ, цикл от 1 до нашего ввода
n
, прикрепление числа к началу строки и распечатывание его.источник
while($i++<$argv[1])echo$s=$i.$s;
CJam, 13 байтов
переводчик
источник
ri{),:)W%}%