В этом испытании вам нужно смоделировать лягушку, прыгающую взад и вперед на лилиях. Пруд бесконечно большой, имеет ряд из бесконечного количества лилий, и лягушка может прыгать через столько лилий, сколько ему нравится.
Эта лягушка любит прыгать взад-вперед: прыгая вперед, он всегда прыгает назад и наоборот.
Вам передается список целых чисел, который представляет его прыжки. Вам необходимо вывести результат его прыжков.
Например, скажем, что вы прошли [2,3,6,8,2]
:
Наша лягушка начинает с того, что перепрыгивает 2 лилии вперед:
_2
Затем 3 лилии обратно:
3__2
Затем 6 лилий вперед:
3__2__6
8 назад:
8_3__2__6
Затем, наконец, 2 лилии вперед (обратите внимание, как 2 перезаписывает 3):
8_2__2__6
Чтобы быть более точным: ваш ввод представляет собой массив чисел S
, вы должны выводить S[K]
в позиции S[K] - S[K-1] + S[K-2] - S[K-3]...
.
- Если в определенном месте должно быть напечатано несколько номеров, печатайте только номер с самым высоким индексом.
- Вы должны использовать,
_
если определенное место пусто - Если число состоит из нескольких цифр, оно не занимает несколько мест. (Другими словами, местоположение может состоять из нескольких символов)
- Вы можете предположить, что ваш список не пуст и что все целые числа больше 0.
Тестовые случаи:
5 ____5
2,2 2_2
4,3,2,1 3124
5,3,2,1 _3125
2,3,6,8,2 8_2__2__6
10,3,12,4,1,12,16 ___12__3__10____41__1216
100,4,7,2,2 _______________________________________________________________________________________________4___1002_2
Это код-гольф , поэтому ответьте на него как можно меньше символов!
Ответы:
MATL ,
3534 байтаСпасибо @Emigna за сохранение 1 байта!
Попробуйте онлайн! Или проверьте все тестовые случаи .
Как это работает
Гольф ваш код, а не ваши объяснения!
Следующее использует ввод
[2,3,6,8,2]
в качестве примера. Чтобы увидеть промежуточные результаты в реальном коде, вы можете вставить%
(символ комментария), чтобы остановить программу в этой точке и увидеть содержимое стека. Например, это показывает стек после оператораYs
(накопленная сумма).источник
'0'
вместо' 0 '
, потому чтоXz
удаляет пробелы после'0'
в'10'
заменяется тоже. Вот почему я32
тоже добавляю инициал' 0'
работать так же хорошо?PHP,
10010199104 байтапринимает входные данные из аргументов командной строки; беги с
-nr
.сломать
источник
2,3,6,8,2
, где8
прыжки "назад" мимо "начала" лилий?JavaScript (ES6),
99107 байтРедактировать: поскольку операционная система пояснила, что единственным ограничением должна быть доступная память, она была обновлена, чтобы выделять именно необходимое пространство, а не полагаться на жестко заданный максимальный диапазон.
Как это работает
Эта функция работает в два прохода:
Во время первого прохода:
p
инициализируется в0
.x
переменной задана пустая строка, поэтому все попытки изменить ее просто игнорируются.m
иM
которые соответственно минимальные и максимальные значения достигнутыp
.f()
.Во время второго прохода:
p
инициализируется до-m
.x
устанавливается в массив размераM-m
, заполненный_
символами.x
.x
, которая является окончательным результатом.Контрольные примеры
Показать фрагмент кода
источник
[1100]
результате число печатается в позиции1002
вместо позиции1100
.R ,
1009796 байтПопробуйте онлайн!
Строка 1 находит все позиции, где прыгать. Сначала все переходы
x
умножаются на 1 или -1, а затем преобразуются в конечные позиции с использованием кумулятивного суммирования. Векторc(-1,1)
рециркулируется, если необходимо, однако, когда онx
имеет длину 1,x
вместо этого рециркулируется. Поэтому рассматриваются толькоseq(x^0)
(эквивалентныеseq_along(x)
) суммы. (Предупреждение генерируется, когда длинаx
не кратна 2, но это не влияет на результат)Линия 2 увеличивает прыжковые позиции так, чтобы все были по крайней мере 1.
Строки 3 и 4 создают вывод и распечатывают его.
-1 байт от Джузеппе
источник
seq(x^0)
!-p+1
может быть1-p
на один байт меньше.Javascript (ES6), 109 байт
комментарии:
источник
Perl 6 ,
6867 байтПопробуйте онлайн!
Как это работает
Сначала он определяет кумулятивные места прыжков:
Затем он превращает их в индексы массива на основе 0, вычитая минимальное число (но не более 1) из всех чисел:
Затем он создает массив с входными номерами, назначенными этим индексам:
Наконец, он объединяет массив в строку с подчеркиванием вместо неопределенных элементов:
источник
Желе ,
2824 байта-2 (и дополнительно разрешить еще -2) благодаря FrownyFrog (используйте функцию [post-challenge] префиксного приложения быстро,
Ƥ
)Попробуйте онлайн! Полная программа, для набора тестов, использующих те же функции, нажмите здесь .
Как?
Заметки:
Окончательная конкатенация новой строки
;⁷
предназначена для случаев, когда_
в выходных данных ничего не появляется, и в этом случае неявная печать будет отображать представление списка, например[3, 1, 2, 4]
, а не что-то вроде примера_3125
. Без всякой задней новой строки можно заменить;⁷
с ,;““
чтобы добавить список списков символов,[[''],['']]
(не близко”
не требуется , так как это последний символ программы).Неверная функция, Ṭ, дает список с
1
s по индексам во входных данных для одного натурального числа n, то есть n-10
s, за которым следует1
разрешить размещение входных чисел на правильном расстоянии слева путем умножения , Для отменыṚ
требуется, чтобы более поздние посещения лягушек были перезаписаны, а не более ранние , когда выполняется уменьшение с помощью илиo/
,.источник
1,-ṁ×µ+\
→UƤ_@/€
?Ƥ
не был особенностью в момент, когда это было написано, но да, это будет работать. ЛучшеUƤḅ€-
(так как преобразование из базы -1 похоже на умножение,...,1,-1,1,-1,1,-1,1
а затем суммирование).UƤḅ-
послеḅ
векторизации :) (я также использовал простой реверс,Ṛ
поскольку нам не нужна сложность upendU
)APL (Dyalog Unicode) ,
4530 байтов SBCSПопробуйте онлайн!
-\⍵
сканировать аргумент с чередованием-
и+
(⊢ - 1 ⌊ ⌊/)
из этого (⊢
) вычтите 1 или минимум (⌊/
), в зависимости от того, что меньше (⌊
)i←
назначить наi
⌈/ 1+
увеличить и взять максимум⍴∘'_'
произвести столько подчеркиваний⍵@i
поместите числа из аргумента (⍵
) в позицииi
∊⍕¨
отформатировать и сгладитьисточник
Рубин , 85 байт
Попробуйте онлайн!
Записывает позиции после каждого перехода, преобразует полученный массив в хэш, чтобы удалить дубликаты (сохраняя последнее значение в каждой дублированной позиции), а затем склеивает значения с необходимым количеством подчеркиваний.
источник
Python 2 ,
113110 байтПопробуйте онлайн!
источник