Ваша задача - создать программу или функцию, которая генерирует молнию длиной 10 строк. Каждая строка молнии представлена двумя штрихами --
:
--
--
--
--
--
--
--
--
--
--
Программа / функция будет брать процент (делится на 10) в качестве входных данных, а на выходе будет молния, «расстегнутая» (разделенные тире) сверху, в процентах, показывая 1-индексированный, самый низкий уровень, повторенный 2 раза, с все предыдущие уровни повторяются 4, 6, 8 и т. д. раз, сохраняя при этом основание молнии по центру.
Примеры
>>10%
-11-
--
--
--
--
--
--
--
--
--
>>50%
-1111111111-
-22222222-
-333333-
-4444-
-55-
--
--
--
--
--
>>100%
-11111111111111111111-
-222222222222222222-
-3333333333333333-
-44444444444444-
-555555555555-
-6666666666-
-77777777-
-888888-
-9999-
-10-
Ввод (в процентах) можно отформатировать по своему усмотрению (50%, .5, 50, 5 [подразумевается ноль] и т. Д.), И он всегда будет в диапазоне от 0 до 100 и делится на 10. Интервал в примеры должны быть сохранены в вашем выводе.
0%
? Разрешено ли нам принимать входные данные, разделенные на 10? например, вместо того50%
, чтобы получить5
?5
?Ответы:
Python 2 -
184151146 байтПоследнее число вроде меня немного запутало. Я мог бы удалить второе утверждение if, если посмотрю на него позже.
РЕДАКТИРОВАТЬ: Thx в mbomb007 для удаления 3 байтов. Спасибо charredgrass за советы по форматированию, которые помогут удалить много-много байтов! :-D Спасибо TheBikingViking за помощь еще с двумя байтами!
источник
i>9
вместоi==10
и удалите пространство вrange(1, 11)
.p=" "*(i-1);print"%s-%s-"%(p,str(i)*2*n);n-=1
.(i-1)
в последней строке на~-i
. Это использует преимущество приоритета оператора и тот факт, что переворот, за которым следует отрицание, аналогичен вычитанию1
.range(1,11)
и тогда(i-1)
?Python 2, 74 байта
exec
Благодаря Деннису удалось сэкономить два байта, увеличив цикл.РЕДАКТИРОВАТЬ: я выбрал немного другой подход и сохранил еще два байта.
источник
'-'+`x+1`*(n-x<<1-x/9)+'-'
вexec
цикле на'-%s-'%`x+1`*(n-x<<1-x/9)
.`x+1`*(n-x<<1-x/9)
.PowerShell v2 +,
130120116110 байтРедактировать 1 - Гольф 10 байтов, исключая
$x
переменную и слегка переделывая, как формулируется строка.Редактировать 2 - Гольф еще 4 байта, переделав, как происходит ввод и повторив, как
$i
рассчитывается каждый цикл.Редактировать 3 - Сохранено 6 байтов с помощью OP, что позволяет вводить как
0..10
, так что нет необходимости делить на 10.Удивительно сложно!
Принимает данные как
1
,5
и т.д., сохраненные в$n
. Устанавливает вспомогательную$i
переменную (один из очень редких случаев, когда переменная должна быть инициализирована0
в PowerShell), а затем запускает цикл из10
в1
.На каждой итерации мы устанавливаем начало нашей строки с количеством пробелов, равным
$i
, за которым следует псевдо-троичный(... , ...)[]
. Внутри псевдо-троичного мы выбираем строку-
с числом цифр (большее из$n-10+$_
или0
, умноженное на 2) или строку-10
- выбор основан на том, находимся ли мы на 10-й итерации, и наш ввод был100
, Мы объединяем это с финалом-
. Эта результирующая строка помещается в конвейер.Наконец, мы увеличиваем
$i
, и это было действительно сложно. Мы использовали трюк двоичного приведения-к-целому, чтобы только увеличивать его$i
до тех пор, пока он не достигнет$n
, а затем сохранить его на том же значении. Это гарантирует, что мы достигли «конца» отступа молнии на соответствующем уровне.После завершения цикла все результирующие строки накапливаются в конвейере и вывод неявен.
Примеры
источник
Pyth,
3734 байтаТестирование.
источник
Python,
9584 байтаЯ не знал, что лямбды были законны, спасибо @Dr Green Eggs и Iron Man
источник
join
можете взять генератор напрямую.lambda p:'\n'.join(' '*min(p,l)+'-'+(2-(l==9))*(p-l)*str(l+1)+'-'for l in range(10))
(84 байта)MATL ,
484135 байтПопробуйте онлайн!
источник
Рубин, 74 байта
Использует формат подразумеваемого нуля, указанный в вопросе, так же,
40%
какf[4]
если анонимная функция назначенаf
. Если необходим полный процент, +6 байт дляn/=10;
Попробуйте онлайн!
источник
Python 3,
98, 90, 87, 85 байтов.Принимает число, уже разделенное на 10. Я, вероятно, могу удалить некоторые из паренов, но это довольно близко к полному гольфу.
источник
Haskell, 83 байта
источник
++"-"
?Javascript es7, 105 байт
позвонить с
источник
The program/function ...
- не фрагмент\n
фактический символ новой строки, вы можете сохранить байт.Python 2.7,
11310877 байтn = input ()для x в диапазоне (0,10):
v = str (x + 1) * (nx) 2,
если x n> 89: v = '10 '
print' '* min (x, n) + '-' + v + '-'
Первый раз играл в гольф. Собираюсь продолжать, попробуйте получить его <100.
Предполагается, что ввод 1-10.
Редактировать: Использовал некоторые трюки из ответа @LeakyNun (спасибо), затем хрустнул его немного дальше и получил ... в основном тот же ответ: / Не знал о преобразовании строки `int`, и 2 - boolean, позвольте мне избавиться от оператора if, который позволяет мне избавиться от всей переменной v. Очень круто.
Моя версия:
источник
n=input(); for x in range(0,10):print' '*min(x,n)+'-'+('10'if x*n>89 else str(x+1)*(n-x)*2)+'-'
Python 2, 81 байт
Идео это!
источник
Python 2.7,
11099,95,91 байт:Полная программа, которая принимает входные данные целым числом в включающем диапазоне
[1,10]
, где10
означает100%
и1
означает10%
. Вероятно, можно играть в гольф немного больше.Попробуйте онлайн! (Ideone)
источник
PHP 5.3,
9291 байтregister_globals=1
иshort_open_tags=1
(иerror_reporting=0
)вызов в кли с
php-cgi -f <filename> n=<number>
<scriptpath>?n=<number>
: prepend<pre>
?:
на?1:
(+1)$n
на($n=$_GET[n])
(+11)разгрузить как функцию (любой PHP> = 4.0.1)
тестирование
Теперь для меня это ново: PHP превосходит JavaScript.
Я думаю, что этот подход очень важен.
источник
STR_PAD_BOTH
Что это, K & R C? У нас#define
тоже есть вещи в PHP? :-)Юлия, 73 байта
Первый Юля ответь! Советы приветствуются.
Попробуйте онлайн!
источник
Perl, 122 байта
источник
Common Lisp (Lispworks), 314 байт
ungolded:
Использование:
источник
APL, 46 байт
Аргумент должен быть задан в виде процента, деленного на 10 (то есть: простое целое число в диапазоне [0,10]).
источник