Пусть этот вызов послужит ( еще одной ) данью Стэну Ли, скончавшемуся в возрасте 95 лет.
Стэн Ли оставил нам неоценимое наследие и своеобразное ключевое слово: Эксельсиор . Итак, вот небольшая проблема, основанная на том, что он сказал, что это означало :
Наконец, что означает «Эксельсиор»? «Вверх и вперед, к великой славе!» Это то, чего я желаю вам, когда я заканчиваю твит! Excelsior!
Вызов
Учитывая последовательность неотрицательных целых чисел, выведите строку, Excelsior!
каждый раз, когда целое число больше предыдущего.
правила
- Входные данные будут массивом неотрицательных целых чисел.
- Вывод будет состоять из строк со словом
Excelsior
(регистр имеет значение), за которым следует столько же,!
сколько длина текущего прогона все больших чисел. Вы также можете вернуть массив строк. - Форматы ввода и вывода являются гибкими в соответствии с правилами сайта, поэтому не стесняйтесь адаптировать их к вашим языковым форматам. Вы также можете добавить пробелы в конце строк или даже дополнительные новые строки после или перед текстом, если вам нужно.
Примеры
Input Output
-----------------------------------
[3,2,1,0,5] Excelsior! // Excelsior because 5 > 0
[1,2,3,4,5] Excelsior! // Excelsior because 2 > 1
Excelsior!! // Excelsior because 3 > 2 (run length: 2)
Excelsior!!! // Excelsior because 4 > 3 (run length: 3)
Excelsior!!!! // Excelsior because 5 > 4 (run length: 4)
[] <Nothing>
[42] <Nothing>
[1,2,1,3,4,1,5] Excelsior! // Excelsior because 2 > 1
Excelsior! // Excelsior because 3 > 1
Excelsior!! // Excelsior because 4 > 3 (run length: 2)
Excelsior! // Excelsior because 5 > 1
[3,3,3,3,4,3] Excelsior! // Excelsior because 4 > 3
Это код-гольф , поэтому может выиграть самый короткий код для каждого языка!
Ответы:
JavaScript (ES6),
5854 байтаПопробуйте онлайн!
комментарии
Почему повторное использование [] для сохранения предыдущего значения безопасно
Есть три возможных случая:
.map()
a < (a = c)
. Итак, мы тестируемNaN
во время первого тестаa < (a = c)
. Следовательно, результат ложный, и выполняется инициализацияисточник
Python 2 ,
8483817068 байтПопробуйте онлайн!
-2 байта, только благодаря ASCII
источник
05AB1E ,
262423 байта-2 байта благодаря @Kroppeb .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжимать строки, не являющуюся частью словаря? ), Чтобы понять, почему
.•1Š¥èò²•
это так"excelsior"
.источник
0Kg
сO
?Perl 6 ,
60 5857 байт-1 байт благодаря nwellnhof
Попробуйте онлайн!
Блок анонимного кода, который возвращает список Excelsiors!
источник
Java-8
118113 байтЛегко читать:
источник
n->{var e="";for(int i=0;i<n.length-1;System.out.print(""==e?e:"Excelsior"+e+"\n"))e=n[i++]<n[i]?e+="!":"";}
. Попробуйте онлайн ( 108 байт ). (Java 10+)n->{for(int e=0,i=0;i<n.length-1;)if(n[i++]<n[i])System.out.println("Excelsior"+"!".repeat(e++));else e=0;}
( 107 байт )++e
вместо того,e++
чтобы был хотя бы один!
для печати.e=...?e+"!":
вместоe=...?e+="!":
.R 86 байт
Половина этого ответа @ Джузеппе. RIP Стэн Ли.
Попробуйте онлайн!
источник
05AB1E ,
2019 байтовПопробуйте онлайн!
объяснение
источник
C (gcc / clang),
1069997 байтСпасибо гастропнеру за игру в гольф 2 байта.
Попробуйте это онлайн здесь .
Ungolfed:
источник
Japt
-R
,2522 байтаПопытайся
3 байта сохранены благодаря Камилу
источник
-R
Флаг на самом деле не нужно, задача говорит , что вы можете вывести массив строк.slice
мой первый проход, но отклонил его, когда оно получилось слишком долго. Возвращаясь к этому сейчас, с вашей подсказкой, я полагаю, я должен был придерживаться этого, потому что я тоже снизил до 22.Common Lisp, 111 байт
Попробуйте онлайн!
источник
Java 8, 106 байт
Попробуйте онлайн!
(эти переназначения
s
... yikes)источник
(s="")+s
(s="")
n->{String s="",z=s;for(int i=0;i<n.length-1;)z+=n[i++]>=n[i]?s="":"Excelsior"+(s+="!")+"\n";return z;}
( 103 байта ) Переместить вs=""
запасные байты.Stax , 17 байт
Запустите и отладьте его
источник
R 111 байтов
Попробуйте онлайн!
Гораздо лучше R дань можно найти здесь - я был слишком зациклен на
sequence
иrle
.источник
Желе , 16 байт
Монадическая ссылка, выдающая список списков символов.
Попробуйте онлайн!(нижний колонтитул соединяется с новыми строками)
Как?
источник
Perl 5
-n
, 41 байтПопробуйте онлайн!
Принимает свой вклад в отдельных строках.
источник
Japt , 22 байта
Попробуйте онлайн!
Пояснение с упрощенным примером:
источник
Powershell, 69 байт
Менее гольф тестовый скрипт:
Выход:
источник
PowerShell ,
8785 байтПопробуйте онлайн!
Вероятно, там прячется реструктуризация, скорее всего, в случае если-либо, но в целом все в порядке. Использует трюк "Неинстанцированная переменная по умолчанию 0" для создания индекса и
!
.источник
Сетчатка , 55 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Преобразовать в одинарный.
Обрабатывать перекрывающиеся совпадения справа налево (хотя совпадения затем отображаются слева направо). Это означает, что мы можем сопоставить каждое число в серии, и совпадение распространяется на начало цикла. Каждое совпадение дополнительно ограничено тем, что каждое дополнительное совпадающее число должно быть меньше, чем ранее сопоставленное дополнительное число, или первое число, если дополнительные числа еще не сопоставлены.
Для каждого совпадения выведите
Excelsior
количество дополнительных чисел в прогоне по желанию.источник
Pyth, 32 байта
Попробуйте онлайн здесь или проверьте все тестовые примеры сразу здесь .
источник
Желе , 18 байт
Попробуйте онлайн!
Выход предварительно проверен на TIO.
источник
Луа ,
888783829695113 байтовСпасибо @Kevin Cruijssen за обновление, придерживающееся духа оригинального вопроса.
Попробуйте онлайн!
источник
C ++ 14 (g ++),
123118 байтК счастью,
std::string
есть конструктор, который повторяетchar
. Попробуйте онлайн здесь .Спасибо гастропнеру за сохранение 5 байтов.
Ungolfed:
источник
C # (.NET Core) ,
115107105 байтовПопробуйте онлайн!
-8 байт: изменено
b
на строку, содержащую "!" Из счетчика int-2 байта: установлено
b+="!"
как встроенная функция (спасибо Заку Фарагеру )Использует делегат Action для ввода данных и не требует возврата.
Ungolfed:
источник
b+="!"
строку встроенной в Excelsior.if(a[i]>a[i-1])Console.WriteLine("Excelsior"+(b+="!"));
Попробуйте онлайн!PHP ,
117109 байтПопробуйте онлайн!
источник
J, 50 байт
Попробуйте онлайн!
ungolfed
источник
Java, 113 байт
источник
VBA, 114 байт
источник
a
. Тем не менее, если вы определите функцию как функцию,subroutine
которая принимает входные данные как вариант массива ожидаемого типа, то вы можете превратить свой подход в правильное решение. Гольф-версия этого подхода будет выглядеть такsub f(x)
For i=0To UBound(x)-1
If x(i+1)>x(i)Then s=s+"!":Debug.?"Excelsior"s:Else s=""
Next
End Sub
, где разрывы между блоками кода представляют новые строкиPython 3, 87 байт
Или 97 со следующим:
Это предполагает, что входные данные будут в формате:
источник
Japt , 25 байт
Попробуйте онлайн!
источник