У нас много горизонтальных осей для чисел, но я, честно говоря, думаю, что они довольно скучные. Ваша задача сегодня состоит в том, чтобы построить мне часть диагональной оси между двумя разными неотрицательными целыми числами, заданными в качестве входных данных.
Как построить диагональную ось?
Давайте рассмотрим пример с вводом
0, 5
. Наша ось должна выглядеть так:0 1 2 3 4 5
Тем не менее, наша ось должна выглядеть хорошо для чисел, которые также имеют больше цифр! Если вход является, например
0, 14
, новая ось должна быть:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Идея состоит в том, что первая цифра следующего числа на оси всегда должна располагаться точно после последней цифры предыдущего числа. Чтобы понять идею еще лучше, вот еще один пример с
997, 1004
:+997 998 999 1000 1001 1002 1003 1004
правила
Вы можете предположить, что ввод находится в порядке возрастания или убывания (вы можете выбрать между
5,3
и3,5
).Вы также можете предположить, что разница между двумя целыми числами меньше 100.
У вас может быть начальный перевод строки или последовательный пробел (в каждой строке). Трейлинг-пробелы / переводы строк тоже хороши.
Вы можете принимать входные данные и предоставлять выходные данные любым стандартным способом .
Это код-гольф , поэтому выигрывает самый короткий код в байтах на каждом языке!
Другие тестовые случаи
1, 10
:1 2 3 4 5 6 7 8 9 10
95, 103
:95 96 97 98 99 100 101 102 103
999999, 1000009
:999999 1000000 1000001 1000002 1000003 1000004 1000005 1000006 1000007 1000008 1000009
Ответы:
05AB1E ,
876 байтСпасибо Magic Octopus Urn за сохранение байта!
Это как-то работает, но, честно говоря, я понятия не имею, почему.
Код
Использует кодировку 05AB1E . Попробуйте онлайн!
объяснение
источник
.O = pop a,b push connected_overlap(b) (deprecated)
- О, я думаю?.O
он очень глючный и устарел уже больше года, поэтому я понятия не имею, что работает, а что нет. Я мог поклясться, что мне было нужноÎ
, но вдруг это уже не так (?). Благодарность! :)Î
было необходимо, чтобы уменьшить максимальное количество ведущих пробелов до 1.Python 2 , 43 байта
Использует вертикальную вкладку для создания эффекта лестницы. Способ
\v
визуализации зависит от консоли, поэтому он может работать не везде (например, TIO).источник
\x0b
в своем коде для сохранения байта?\\v
и заменил его на то,\x0B
что вместо него отображаетсяVT
символ для оценки, вы можете опубликовать обратимую hexdump (xxd
или что-то еще) или просто заявить, что: «\v
это буквальная вертикальная вкладка», я думаю, что это будет справедливо. Надеюсь, это поможет!Древесный уголь ,
98 байтПопробуйте онлайн!
Ссылка на подробную версию кода. Ввод в порядке возрастания.
источник
R
706961 байтФункция, которая принимает переменные начала и конца в качестве аргументов. Зацикливает последовательность и печатает каждый элемент с добавлением достаточного количества пробелов.
F
начинается какFALSE=0
, и во время каждой итерации к ней добавляется количество символов для этого значения.F
определяет количество напечатанных пробелов.Попробуйте онлайн!
-8 байт благодаря @Giuseppe
источник
scan()
два раза может быть уменьшено до 67 байтfor(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}
.F=0;for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}
(71 байт)nchar
.\n
на новую строку также работает, и это, очевидно, не стоит двух байт.cat
, но по какой-то причине я не мог придумать и понять это.C #,
908985 байтСохранено 1 байт благодаря @LiefdeWen.
Сохранено 4 байта благодаря @auhmaan.
Попробуйте онлайн!
Полная / Отформатированная версия:
источник
i<=e
кe>i
i
и повторно использовавs
вместо этогоPython 2 ,
5854 байтаПопробуйте онлайн!
источник
Mathematica, 59, байтов
вход
-3 байта @JungHwanMin
проблема с 0 исправлена (подробности см. В комментариях),
спасибо @ngenisis
источник
Spacings -> 0
если вы хотите, чтобы это было точно символьно.Grid[(DiagonalMatrix@Range[1+##]/. 0->""+1)-1,Spacings->0]&
это самый короткий путь, который я смог найти, чтобы решить эти проблемыЖеле , 9 байт
Попробуйте онлайн!
источник
Mathematica, 48 байтов
так как есть так много ответов, я подумал, что этот должен быть включен
вход
выход
источник
C
1661349582 байтаНовый ответ
Просто как функция, а не как целая программа.
Спасибо Фалькену за помощь в удалении 13 байт (и исправлении ошибки)!
Спасибо Стеф Хен за помощь в сбивании 12 байт!
Спасибо Zacharý за помощь сбить 1 байт!
Старые ответы
Избавился от int перед main и изменил const char * v [] на char ** v и избавился от return 0;
Это мой первый опыт игры в гольф, и я хотел попробовать что-то в C. Не уверен, правильно ли я отформатировал это, но я получал удовольствие, делая это!
объяснение
использование
источник
argc
иargv
в одну букву переменные.int s=0
цикл for, как вfor(int s=0;a<=b;a++)
.int i=s;while(i--)
вместоfor(int i=0;i<s;i++)
внутреннего цикла сэкономит два байта.C ++,
167165 байт-2 байта благодаря Zacharý
источник
int m=0,i=l,j
первыйfor
цикл, чтобы сохранить байт? 2. Можете ли вы перейтиr+=t;r+=10
наr+=t+10
? 3. Я бью кого-то, ура.r+=t+=10
но нетr+=t+10
, это дало мне ошибкуr+=t+=10
работает ли? Разве это не повлияетt.size()
?++i
вstd::to_string(i)
качестве ,std::to_string(i++)
чтобы сохранить один байт?APL (Dyalog) ,
2524 байта-1 спасибо Захари .
Предполагается, что
⎕IO←0
отсчет начинается с нуля. Принимает нижнюю границу в качестве левого аргумента и верхнюю границу в качестве правого аргумента.Попробуйте онлайн!
(
…)
Применить следующую неявную функцию между аргументами:-
вычтите верхнюю нижнюю из верхней границы1-
вычесть это из одного (то есть 1 + ∆)⊣+∘⍳
левая нижняя граница плюс целые 0 через это⍕¨
форматировать (stringify) каждый{
…}
Примените к нему следующую анонимность (обозначенную ⍵):≢¨
длина каждого (число)+\
накопленная сумма-
NEGATE⍵↑⍨¨
для каждого строкового числа возьмите столько символов с конца (пробелы с пробелами)↑
смешать список строк в символьную матрицуисточник
+-⍨
быть--
?Сетчатка ,
8178 байтПопробуйте онлайн! Принимает ввод как разделенный новой строкой список из двух целых чисел. Редактировать: 3 байта были сохранены путем кражи кода расширения диапазона из моего ответа на вопрос : разделяем ли мы основной кластер? Объяснение:
Преобразовать оба входа в унарный.
Хотя последние два элемента (a, b) списка отличаются более чем на 1, замените их на (a, a + 1, b). Это расширяет список из кортежа в диапазон.
Конвертировать обратно в десятичный в дубликате.
Преобразуйте дубликат копии в пробелы.
Суммируйте суммы пробелов от каждой строки до следующей.
источник
Pyth ,
1413 байтовПопробуйте онлайн!
источник
LOGO , 53 байта
Нет "Попробуй онлайн!" ссылка, потому что все онлайн переводчик LOGO не поддерживает список шаблонов.
Это список шаблонов (эквивалент лямбда-функции в других языках).
Использование:
(
apply
вызывает функцию)распечатает
Заметка:
Здесь используется черепаха
ycor
(Y-координата) для хранения количества пробелов, необходимых для ввода, поэтому:window
должен быть выполнен, еслиycor
становится слишком большим, чтобы черепаха соскочила с экрана. Описаниеwindow
команды: вif the turtle is asked to move past the boundary of the graphics window, it will move off screen.
отличие от настройки по умолчаниюwrap
, котораяif the turtle is asked to move past the boundary of the FMSLogo screen window, it will "wrap around" and reappear at the opposite edge of the window.
Объяснение:
источник
05AB1E , 8 байтов
Попробуйте онлайн!
-2 спасибо Аднану .
источник
vy
наʒ
иgF
на ,v
чтобы сохранить 2 байта.ʒ
трюк все еще будет использован ...JavaScript (ES8),
696762 байтаПринимает ввод в виде целых чисел в порядке возрастания с использованием синтаксиса каррирования. Возвращает массив строк.
Попытайся
источник
Japt , 12 байт
Принимает ввод в любом порядке и всегда возвращает числа в порядке возрастания в виде массива строк.
Попробуйте онлайн!с
-R
флагом, чтобы присоединить массив с символами новой строки.объяснение
Неявный ввод
U
иV
.Создать инклюзивный диапазон
[U, V]
и сопоставить каждое значение с ...Значения перед current (
¯Y
), объединенные в string (¬
) и заполненные пробелами (ç
).Плюс текущий номер. Результирующий массив неявно выводится.
источник
Python 2 ,
65 63 6261 байт-2 байта благодаря @Mr. Xcoder:
exec
не нужны брекеты-1 до свидания благодаря @ Zacharý:
print s*' '
какprint' '*s
Попробуйте онлайн!
источник
m,n=input();s=0;exec(n-m+1)*"print s*' '+`m`;s+=len(`m`);m+=1;"
достаточно.print s*' '
чтобыprint' '*s
сохранить один байт.JavaScript, 57 байт
источник
y=>g=(x,s='')=>y<x?s:s+'\n'+g(x+1,s.replace(/./g,' ')+x)
Вызов с выделкой с целыми числами наоборот:f(103)(95)
.x=>y=>g=(s='')=>y<x?s:s+'\n'+g(s.replace(/./g,' ')+x++)
вызов какf(x)(y)()
.Python 2,
6059 байт-1 байт, спасибо Mr.Xcoder за определение моего s = 0 как необязательной переменной в моей функции.
Попробуйте онлайн!
Я думаю, что это можно перенести в лямбда-версию, но я не знаю как. Я также думаю, что между пробелами и длиной текущего числа есть какое-то отображение, но об этом я тоже еще не разобрался. Поэтому я думаю, что еще есть возможности для улучшения.
Я создал диапазон от нижней границы
l
до верхней границы,u
печатая каждую строку с пробелом, умноженным на числоs
. Я увеличиваю множитель с длиной текущего числа.источник
Python 2,
787779 байтовПопробуйте онлайн!
f(A, B)
напечатает часть оси между A и B включительно.Первый раз отвечаю на вызов!
Использует и использует обратные метки Python 2 для подсчета количества пробелов, которые он должен добавить перед числом.
-1 байт благодаря Mr.Xcoder
+2 потому что я забыл
+1
источник
sum(len(`j`)) for
может статьsum(len(`j`)for
, -1 байтrange(a,b)
сrange(a,b+1)
, потому что Python имеет пол инклюзивные диапазонов.С (ССЗ) ,
4138 байт-3 байта благодаря ASCII-только
Работает на RedHat6, доступ через PuTTY
Попробуйте онлайн!
источник
more
на этом файлеV , 16 байтов
Попробуйте онлайн!
Это было бы намного проще, если бы я мог взять
start
end - start
но я думаю, что это слишком сильно меняет задачу.Это принимает начальный номер в качестве ввода в буфере и конечный номер в качестве аргумента. Фактически он создает лестницу из
start
в,start + end
а затем удаляет все после конечного числа.источник
MATL , 11 байт
Попробуйте онлайн!
объяснение
Это работает путем генерации строки для каждого числа и конкатенации ее с логически отрицательной копией предыдущей строки. Таким образом, char 0 добавляется 0 столько раз, сколько длина предыдущей строки. Char 0 отображается в виде пробела, а каждая строка отображается в отдельной строке
источник
Swift 4 , 115 байт
Я думаю, что никто бы не опубликовал решение Swift в любом случае ...
Попробуйте онлайн!
источник
Perl, 19 байт
Примечание:
\x0b
считается одним байтом.Наряду с другими, я думал, что использование движений курсора будет кратчайшим путем, это означает, что он не работает на TIO:
использование
источник
1..
там происходит, так как вам дают два целых числа.1..
я не до конца читал спецификацию, теперь это исправлено! Что касается тестирования в Интернете, поскольку вывод содержит вертикальную вкладку, он не отображается должным образом. Попытка узнать, смогу ли я найти средство визуализации, которое поддерживает управляющие символы ... Если нет, то это может быть мой новый проект!Japt ,
109 байтПроверьте это онлайн! Возвращает массив строк;
-R
Флаг включен, чтобы присоединиться к новым строкам для удобства просмотра.объяснение
Старая версия, 10 байт:
Проверьте это онлайн!
источник
D
133127126125121119 байтЖеле и APL были взяты.
Попробуйте онлайн!
Если вы согласны с результатами, зависящими от консоли (не соответствует тому же принципу, что и ответ Giacomos на C), вот один для
7271 байта:Как? (Только D конкретные приемы)
f(T)(T a,T b,T s=0)
Система шаблонов D может выводить типыfor(T j;j++<s;)
Целые по умолчанию0
.' '.write;a.writeln
D позволяет вам звонитьfun(arg)
какarg.fun
(одна из немногих вещей в гольф D имеет)a.text.length
То же, что и выше, и D также позволяет вам вызывать метод без параметров, как если бы это было свойство (text
это преобразование в строку)источник
Java 8, 79 байт
Попробуйте онлайн!
источник
(a,b)->
наb->a->
. (И вы можете сохранить еще три байта, перейдя на Java 10 и перейдяString
наvar
.) Попробуйте онлайн.