Напишите программу или функцию, которая принимает положительное целое число N и выводит первые N чисел этого усиливающего зигзагообразного шаблона, используя только необходимые строки:
26
25 27 .
10 24 28 .
9 11 23 29 .
2 8 12 22 30 44
1 3 7 13 21 31 43
4 6 14 20 32 42
5 15 19 33 41
16 18 34 40
17 35 39
36 38
37
Итак, если N это 1
выход
1
Если N 2
, выход
2
1
Если N это 3
выход
2
1 3
Если N это 4
выход
2
1 3
4
Если N это 10
выход
10
9
2 8
1 3 7
4 6
5
Если N это 19
выход
10
9 11
2 8 12
1 3 7 13
4 6 14
5 15 19
16 18
17
и так далее.
Заметки
Каждый пик или впадина зигзага достигает своей точки еще на одну линию от линии,
1
на которой он находится, чем предыдущий пик или впадина.N не ограничивается
44
. Зигзаг растет по той же схеме, и большее N должно поддерживаться.Числа с несколькими цифрами должны «касаться» только по углам, как показано на рисунке. Убедитесь, что это работает, когда N
100
и выше.В выводе не должно быть пустых (или только пробеловых) строк, кроме одной необязательной завершающей строки.
Любая строка может иметь любое количество пробелов.
счет
Самый короткий код в байтах побеждает. Tiebreaker - более ранний ответ.
Ответы:
Желе ,
413729 байтПопробуйте онлайн!
Как это работает
источник
PHP,
211177164163 байтаПрогнозировать пики
$n
и динамически увеличивать массив в любом направлении, используя($x, $y)
выходной курсор.Числа выровнены с,
str_pad()
и окончательный результат -implode()
из этого массива строк ($g
).Проверьте это онлайн!
Обновление: убрал 34 байта, избавившись от ненужного array_pad (). Update2: следовал совету @ insertusername здесь, чтобы сократить его немного больше. Update3: следовал совету @ Lynn, чтобы сохранить еще один байт с ~ õ, что навязывает использование кодировки LATIN-1. (недоступно в онлайн-эмуляторе PHP, поэтому не включено там)
источник
$arr = [];
, вы можете обратиться к$arr[anything]
. В некоторых случаях будут выводиться уведомления, но они здесь игнорируются. Обратите внимание, что подобные вещи, вероятно, не очень помогут вам в изучении языка. Ваш комментарий заставил меня понять, что я могу сделать его короче, хотя, как я изначально думал, мне нужно дополнить мой массив, но я этого не делаю. :)for($x=0,$d=-1,$h=$n=2,$y=$a=1;$a<=$argv[1];$y+=$d){$g[$y]=str_pad($g[$y],$x).$a;$x+=strlen($a);if($a++==$n){$h+=2;$n+=$h-1;$d*=-1;}}ksort($g);echo implode("⏎",$g);
(замените ⏎ фактическим символом новой строки.)~õ
представляет собой два байта альтернатива для"⏎"
.Pyth,
6053524642393836343231 байт39: Это теперь на одном уровне с исправленной ошибкой версией Jelly , и я опередил конкурирующую версию Dennis!
38: я переиграл Денниса!
36: Я снова переиграл Денниса!
34: Даже ниже, чем его исправленная ошибка!
31: 32 -> 31 благодаря Денису.
Попробуйте онлайн!
Как это работает
источник
MATLAB, 148 байт
Обратите внимание, что в Octave отсутствуют пробелы, так как MATLAB печатает символ с индексом
0
как пробел, а октава просто пропускает этот символ.Объяснение:
источник
Haskell,
144142 байтаПример использования:
Как это работает:
Редактировать: Спасибо @Lynn за два байта!
источник
JavaScript (ES6), 213 байт
Где
\n
представляет буквальный символ новой строки. Объяснение:Чтобы сократить,
pow(-1,ceil(sqrt(i)))
я переписываю его так, как будтоsqrt(i-1)&1||-1
это не работает,i=0
чтобы исправить, что я добавляю 1, но это затем переворачивает знак результата, поэтому я в итоге и получаюn-=
.источник
Python 2, 137 байт
Посмотреть вывод на ideone .
источник