Я подумал, что «арка» - лучший способ описать эту схему чисел:
1234567887654321
1234567 7654321
123456 654321
12345 54321
1234 4321
123 321
12 21
1 1
Формально определенная каждая строка состоит из цифр от 1 до 1 9-n
, (n-1)*2
пробелов и цифр 9-n
от 1 (где n
текущая строка).
Ваша задача - написать, используя кратчайший код, небольшой скрипт / программу, которая печатает вышеприведенный шаблон с учетом следующих ограничений:
- Вы не можете жестко закодировать весь шаблон. Вы можете жестко закодировать только одну строку шаблона.
- Ваша программа должна напечатать новую строку (любую комбинацию
\n
или\r
) в конце каждой строки.
На старт, внимание, марш!
code-golf
ascii-art
number
kolmogorov-complexity
Натан Осман
источник
источник
123456787654321
как она равна11111111^2
;-)11111111^2 == 123465787654321 != 1234567887654321
(обратите внимание на повторение8
)Ответы:
Python 2,
65555351Укорочено с использованием некоторых идей Угорена .
источник
s=s[1:]
за цикл иwhile s:
GolfScript (25 символов)
источник
APL (18)
Объяснение:
1↓⎕D
: строка цифр ("0123456789") минус первый элемент↑∘(1↓⎕D)¨⌽⍳8
: выберите первые [8..1] символы («12345678», «1234567» ...)↑
: форматирование в виде матрицы (заполнение неиспользуемых символов пробелами)k,⌽k←
: сохранениеk
и отображение сk
последующим вертикальным отражениемk
источник
Рубин:
6150 символовОбразец прогона:
источник
Befunge - 3 х 18 = 54
Я чувствовал, что должен был что-то сделать с befunge, прошло слишком много времени с тех пор, как я последний раз использовал это. Эта проблема показалась наиболее подходящей для языка.
Это ужасно медленно из-за цикла печати, который занимает около 8 действий на символ (стили подсчета отличаются).
источник
JavaScript, 71
источник
s="1234567887654321";for(i=10;--i;)console.log(s=s.split(i).join(" "))
для 70 символов, @SteveWorleyС, 83 символа
источник
Python 2,
7562Это не превзойдет ответ Волатильности, но вот другой подход, использующий изменяемые строки python (
bytearray
):редактировать
Я нашел более короткую версию, используя
str.replace
:источник
Perl, 41
плюс
-E
выключатель. Всего символов в командной строке: 50требуется как минимум perl5, версия 10.
источник
-E
является однобайтовым дополнением к программе.Mathematica
92 85 67 5451Метод № 1 : (54 символа) Создает массив, используя номер строки, столбец # и расстояние от левого-правого края.
Метод № 2 : (67 символов).
Метод № 3 : (85 символов) Выборочно заполнить каждую строку массива.
Начните со списка из 8 пробелов. Заменить позиции 1 и 16 на «1»; заменить "2" в положениях 2 и 15 и т. д.
Метод № 4 : (86 символов) Выборочно очищать каждую строку массива.
Метод № 5 : Использование строк (92 символа)
источник
()
, и заменить#1
на#
:Grid@Array[If[#2<9,#2,17-#2]/.x_/;x+#>9:>" "&,{8,16}]
Array
иногда можно создавать хорошие таблицы без необходимости добавлять итераторы.PHP, 68
(Вдохновленный ответом HamZa)
for($n=8;$n;$r[]=$n--)echo str_replace($r," ","1234567887654321\n");
Воспроизводит тот факт, что PHP str_replace может принять массив для поиска и строку для замены, он заменит каждый элемент в массиве с данной строкой. После каждой итерации текущий номер добавляется в массив поиска, удаляя его из следующего цикла.
Пример кода в действии: http://ideone.com/9wVr0X
источник
<pre>
теги. Когда интерпретируется как HTML-текст, пробелы свернуты и новые строки игнорируются, но если вы проверите источник, вы увидите иначе.Marbelous 165
псевдокод:
источник
Python 2.x -
73656361 символисточник
PHP, 76
источник
К, 28
,
Вы могли бы обобщить это для 36:
{-1_a,'|:'a:(#*m)$'m:{-1_x}\,/$1+!x}
источник
Javascript, 67 символов
Вдохновленный ответом steveworley (я бы прокомментировал, если бы мог):
Фрагмент кода
Наличие последней новой строки действительно следует правилам.
обновление: сократить 2 символа, удалив скобки (приоритет оператора) и 1, удалив ненужный пробел
Мне показалось, что это меня обманывает, потому что независимо от того, сколько разных способов я пытался сократить или упростить, не жестко кодируя сегмент кода, длина оставалась неизменной до тех пор, пока я не применил правило «Я думаю, что это количество», написанное ниже.
(Если печать считается тем, что возвращается при выполнении в консоли Chrome)
источник
Brainfuck: 542 байта
источник
Математика , 59
61 используя мои собственные идеи:
Или 59, заимствуя из ответа Давида:
источник
R: 52
источник
Хаскелл, 84
Отправная точка для улучшения
Скорее всего, часть будет заключаться в том, чтобы освободить эту
l++reverse l
точку зрения, что позволит нам избавиться отlet
заявления, но я смогу выяснитьap
, что требует импорта.источник
PostScript: 105 символов
Обработка строк не проста в PS, но может сделать относительно простой код:
Немного более длинная версия с 120 символами, но может генерировать различные числовые арки, заменяя 8 в начале второй строки любым числом в диапазоне от 1 до 9:
источник
GoRuby 2.1
36 символов
Ungolfed
источник
К 20
источник
TSQL, 148
Изменить: до 148 с предложением Манатворка и настроить ORDER BY.
Удобочитаемый:
Golfed:
Выход:
источник
1
вместо строки,'1'
где вы сразу же вcast
негоvarchar
. Это дает мне 149 символов:with t as(select 1n,cast(1as varchar(max))o union all select n+1,o+char(n+49)from t where n<8)select o+space(16-2*n)+reverse(o)from t order by o desc
.Хаскелл, 79
Это работает путем замены символов> n на
' '
, где символы n получены из "87654321" (что является хвостом строки для выполнения подстановки).источник
PHP: 61 символ (или 60 символов, если вы замените \ n реальной строкой ASCII)
(Вдохновленный ответами GigaWatt и HamZa)
http://ideone.com/FV1NXu
источник
PowerShell: 38
Гольф-код
Прохождение
8..1|%{
...}
передать целые числа от 8 до 1 в цикл ForEach-Object.-join(
...)
объединяет вывод вложенного кода в одну строку без разделителей.1..$_
выводит целые числа по возрастанию от 1 до текущего целого числа в цикле.+" "*(8-$_)
добавляет к выходу двойной пробел, умноженный на разницу между 8 и текущим целым числом.+$_..1
добавляет целые числа, убывающие от текущего целого числа до 1, к выводу.источник
Javascript с лямбдами, 147
Может быть проверено в Firefox.
источник
CJam, 22 символа
Не верный ответ (поскольку язык был разработан после вопроса), и не самый короткий, но здесь идет:
Попробуйте это онлайн здесь
источник
Луа, 62
источник