Входные данные:
Мы берем два входа:
- Вход
b
с двумя различными значениями:Left
иRight
. † - И положительное целое число
n
.
Выход:
Основываясь на вводе влево / вправо, мы выводим одну из следующих двух последовательностей в диапазоне 1-n
(в последовательностях ниже отображаются первые 125 элементов):
Left:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966, 967, 1016, 1017, 1022, 1023, 31744, 31745, 31750, 31751, 31800, 31801, 31806, 31807, 32704, 32705, 32710, 32711, 32760, 32761, 32766, 32767, 2064384, 2064385, 2064390, 2064391, 2064440, 2064441, 2064446, 2064447, 2065344, 2065345, 2065350, 2065351, 2065400, 2065401, 2065406, 2065407, 2096128, 2096129, 2096134, 2096135, 2096184, 2096185, 2096190, 2096191, 2097088, 2097089, 2097094, 2097095, 2097144, 2097145, 2097150, 2097151, 266338304, 266338305, 266338310, 266338311, 266338360, 266338361, 266338366, 266338367, 266339264, 266339265, 266339270, 266339271, 266339320, 266339321, 266339326, 266339327, 266370048, 266370049, 266370054, 266370055, 266370104, 266370105, 266370110, 266370111, 266371008, 266371009, 266371014, 266371015, 266371064, 266371065, 266371070, 266371071, 268402688, 268402689, 268402694, 268402695, 268402744, 268402745, 268402750, 268402751, 268403648, 268403649, 268403654, 268403655, 268403704, 268403705, 268403710, 268403711, 268434432, 268434433, 268434438, 268434439, 268434488, 268434489, 268434494, 268434495, 268435392, 268435393, 268435398, 268435399, 268435448, 268435449
Right:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624, 639, 896, 911, 1008, 1023, 16384, 16415, 16864, 16895, 19968, 19999, 20448, 20479, 28672, 28703, 29152, 29183, 32256, 32287, 32736, 32767, 1048576, 1048639, 1050560, 1050623, 1079296, 1079359, 1081280, 1081343, 1277952, 1278015, 1279936, 1279999, 1308672, 1308735, 1310656, 1310719, 1835008, 1835071, 1836992, 1837055, 1865728, 1865791, 1867712, 1867775, 2064384, 2064447, 2066368, 2066431, 2095104, 2095167, 2097088, 2097151, 134217728, 134217855, 134225792, 134225919, 134471680, 134471807, 134479744, 134479871, 138149888, 138150015, 138157952, 138158079, 138403840, 138403967, 138411904, 138412031, 163577856, 163577983, 163585920, 163586047, 163831808, 163831935, 163839872, 163839999, 167510016, 167510143, 167518080, 167518207, 167763968, 167764095, 167772032, 167772159, 234881024, 234881151, 234889088, 234889215, 235134976, 235135103, 235143040, 235143167, 238813184, 238813311, 238821248, 238821375, 239067136, 239067263, 239075200, 239075327, 264241152, 264241279, 264249216, 264249343, 264495104, 264495231, 264503168, 264503295, 268173312, 268173439, 268181376, 268181503, 268427264, 268427391
Как генерируются эти последовательности, спросите вы?
Последовательность по умолчанию от 1 до n=10
будет:
As integer:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
As binary:
1 10 11 100 101 110 111 1000 1001 1010
Когда мы растянемся влево, двоичный код станет таким:
1, 110, 111, 111000, 111001, 111110, 111111, 1111000000, 1111000001, 1111000110
Почему? Последний бит используется один раз; одиночный последний используется дважды; второй последний используется три раза; и т.п.
So `1010` will become (spaces added as clarification): `1111 000 11 0`
И эти новые растянутые слева двоичные строки конвертируются обратно в целые числа:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966
Что касается растянутого вправо, первый бит используется один раз; второй дважды; третий трижды; и т. д. Как это:
As binary:
1, 100, 111, 100000, 100111, 111000, 111111, 1000000000, 1000001111, 1001110000
As integer:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624
Правила соревнований:
- † Вы можете принять любые два различных значения, но указать, какое из них вы используете. Так что может быть
1/0
,true/false
,null/undefined
,"left"/"right"
и т.д. n
всегда больше 0.- Вы должны поддерживать максимальный вывод, по крайней мере, целое число по умолчанию вашего языка (которое является 32-битным для большинства языков).
- Выходной формат гибкий. Может быть распечатан или возвращен как массив / список. Может быть с пробелом, запятой, пробелом и т. Д. В качестве разделителя. Ваш звонок. (Опять же, пожалуйста, укажите, что вы использовали.)
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
n < 128
так, чтобы результаты соответствовали 32-битным целым числам?Ответы:
Желе , 9 байт
Попробуйте онлайн!
-1
для левого,1
для правого.источник
Python 2 ,
10296 байт-1 для левого, 1 для правого
Попробуйте онлайн!
источник
05AB1E ,
1413 байтСохранено 1 байт благодаря Эрику Аутгольферу
1
для левого.0
(или что-нибудь еще) за право.Попробуйте онлайн!
объяснение
источник
ε
для -1:LbεIiRƶRëƶ}JC
ë
. Вif
этом случаеШелуха , 13 байт
Это много пунктирных букв ...
Берет сначала
b
(0
слева и1
справа), потомn
. Попробуйте онлайн!объяснение
источник
b
непосредственно ḣ или ṫ, сэкономив вам три байта :)b
и мое решение было бы простоI
...Japt ,
191817 байт0
для «левого»,1
для «правого». (Это может фактически принять любые ложные или правдивые значения вместо этих 2.)Проверь это
объяснение
Неявный ввод целых чисел
U
&V
.Создайте массив целых чисел от 1 до
U
включительно.Пройдите каждый через функцию.
Преобразовать текущее целое число в двоичную строку
Сопоставьте строку, передавая каждый символ через функцию, где
E
текущий индекс иF
полная строка.Повторите текущий символ
©
логическое И (&&
) иª
логическое ИЛИ||
, поэтому здесь мы проверяем,V
верно ли (ненулевое) или нет.Если
V
это правда, тоX
получит повторениеY+1
раз.Если
V
это фальси, тоX
повторяется,Y
вычитается из (n
) длины (l
)Z
раз.Преобразовать обратно в основание 10 целое число.
Неявно выводить результирующий массив.
источник
Gaia , 15 байт
Использует
-1
для левого и1
правого.Попробуйте онлайн!
объяснение
источник
Протон , 79 байт
0
слева,1
справа.Попробуйте онлайн!
Ungolfed
источник
C # (.NET Core) ,
192187 + 23 байта-5 байт благодаря TheLethalCoder
Количество байтов также включает в себя:
Попробуйте онлайн!
Вход:
left
естьtrue
,right
естьfalse
Объяснение:
источник
using System.Linq;
корочеnamespace System.Linq{}
, или я что-то здесь упускаю? Давным-давно я программировал в .NET tbh ..Math
иConvert
оба из них находятся вSystem
пространстве имен, поэтомуnamespace System.Linq
самый короткий путь - это позволяет использоватьSystem
иSystem.Linq
классы, и классы.Дьялог АПЛ, 23 байта
left is
1
right is0
(передается как левый аргумент функции)⍳
генератор индекса{
...}¨
применить функцию в фигурных скобках к каждому элементу справаb←2⊥⍣¯1⊢⍵
b кодируется в двоичном виде (с использованием инверсии декодирования, чтобы получить минимальное количество битов, которое требуется представить⍵
в базе 2)⍳≢b
создать индексы для вектора b (≢b
длина b)⌽⍣⍺
обратное⍺
время (здесь используется условно для левого или правого отрезка)b/⍨
b реплицируется (реплицирует биты согласно (обратному) индексу)2⊥
декодировать с базы 2Попробуй APL онлайн
источник
JavaScript (ES6), 131 байт
Это значительно дольше, чем ответ Шэгги , но я хотел попробовать чисто побитовый подход.
Из-за 32-битного ограничения битовых операций JS это работает только для n <128 .
Принимает ввод в синтаксисе карри
(n)(r)
, где r ложно для левого / истинно для правого.Отформатировано и прокомментировано
демонстрация
Показать фрагмент кода
источник
JavaScript (ES6), 113 байт
О, это слишком долго! Вот что происходит, когда вы проводите день за написанием «настоящего» JavaScript, детишки; Вы забыли, как правильно играть в гольф!
Использует любые истинные или ложные значения для того
b
,false
чтобы быть «левым» иtrue
«правым».Попытайся
источник
Желе , 11 байт
Попробуйте онлайн!
Аргумент № 1:
n
Аргумент № 2:
1
слева,0
справа.источник
Сетчатка , 111 байт
Попробуйте онлайн! Берет номер и либо
L
либоR
в виде суффикса (либо в отдельной строке). Объяснение:Преобразовать из десятичной в одинарную и считать от 1 до
n
.Конвертировать из одинарного в двоичное.
Оберните каждый бит
R
иL
символы в соответствии с его положением в строке.Замените соответствующие
R
илиL
символы соответствующими соседними цифрами.Удалить оставшиеся символы и преобразовать из двоичного в десятичное.
источник
1
доn
. Не толькоn
номер.JavaScript (ES6),
130127 байт3 байта, спасибо Кевину
Я уверен, что не знаю достаточно ES6 для этого сайта, но я пытался! Перебирайте каждое число и просматривайте каждое двоичное представление для этого числа, повторяя каждый символ столько раз, сколько необходимо.
источник
d=>n=>
), как и два других ответа JS ES6. Кроме того, я думаю, что вы можете сохранить еще 2 байта, изменивk=-1,l=b.length;while(++k<l)s+=b[k].repeat(d?k+1:l-k);
наk=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l+~k);
(начинаяk=0
с-1
, аl-k-1
затем сокращается до необходимогоl+~k
). Кроме того, круглые скобки вокруг(i).toString(2)
обязательных?+~k
Кажется , что это должно работать, но я не могу понять это, продолжает получать с ума. Спасибо за другие советы!l+~k
это неправильно, так как это не так,l-k-1
ноl-k+1
.. мой плохой. Вы можете все еще гольф один байт, начинаяk
с нуля , хотя:k=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l-k+1);
.Рубин, 98 байт
источник
a{r ?a:a.reverse}
Нужно ли место на троице ??
,r?
было бы интерпретировано как имя метода.Java 8, 136 байт
Лямбда (карри) от
Boolean
потребителяInteger
. Логический параметр указывает, следует ли растягивать влево (значенияtrue
,false
). Вывод выводится на стандартный вывод, разделенный символом новой строки, с последующим символом новой строки.Неуправляемая лямбда
Попробуйте онлайн
рамки
Потому что они накапливаются в
int
s, выходы ограничены 31 битом. В результате входы ограничены 7 битами, поэтому максимальный вход, поддерживаемый программой, составляет 127.объяснение
Это решение создает каждое растянутое число, используя побитовые операции. Внешний цикл выполняет итерации
i
по числам, подлежащим растяжению, от 1 до n , и печатает растянутое значение после каждой итерации.Внутренний
while
цикл увеличиваетсяs
до количества бит вi
, а последующийfor
повторяетсяc
по каждой позиции бита. В этом циклеd
отсчитывает количество повторений текущего бита, которое зависит от входаl
. На каждом шагеo
смещается влево, а соответствующий битi
маскируется и OR отображается в.источник