Конкатенация с n + 1


44

Введение

Последовательность OEIS A127421 - это последовательность чисел, десятичное разложение которых представляет собой конкатенацию 2 последовательных возрастающих неотрицательных чисел. Проще говоря, каждое число в последовательности формируется путем объединения n с n + 1 для некоторого неотрицательного целочисленного значения n . Первые несколько терминов:

1, 12, 23, 34, 45, 56, 67, 78, 89, 910, 1011, 1112, 1213, 1314, 1415, 1516, 1617, 1718, 1819, 1920, 2021, 2122, 2223, 2324, 2425, 2526, 2627, 2728, 2829, 2930, 3031, 3132, 3233, 3334, 3435, 3536, 3637, 3738, 3839, 3940, 4041, 4142, 4243, 4344, 4445, 4546,…

Вызов

Учитывая одно положительное целое число n , выведите первые n записей последовательности OEIS A127421 в порядке возрастания.

  • Ввод и вывод могут быть в любом приемлемом формате . Строки или числа хороши для вывода.
  • Ведущие нули не допускаются.
  • Допускается либо полная программа, либо функция.
  • Для целей этой задачи n будет положительным и меньше 100.
  • Стандартные лазейки по умолчанию запрещены.
  • Этот вопрос относится к коду гольфа, поэтому побеждает меньшее количество байт.
  • Вот некоторые примеры ввода и вывода:

    1 => 1
    2 => 1, 12
    3 => 1, 12, 23
    10 => 1, 12, 23, 34, 45, 56, 67, 78, 89, 910
    

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать. Удачи.

PS Это мой первый вызов, так что, надеюсь, все это имеет смысл.

РЕДАКТИРОВАТЬ: снято ограничение вывода для разрешения чисел или строк.


1
Это может быть 0 проиндексировано?
Джо Кинг,

3
Никто еще не сказал, но добро пожаловать в PPCG! Хороший первый вопрос, не слишком сложный, но и не совсем тривиальный, и есть несколько разных подходов
Джо Кинг,

3
Через 7 дней я приму кратчайший ответ, который отвечает всем этим критериям. Почему нужно, чтобы вызов закончился?
Эрик Outgolfer

2
В настоящее время мы склонны не принимать ответ, потому что это препятствует дальнейшей публикации ответов. Я полагаю, вы берете в качестве модели старые проблемы (что также не приветствуется). Смотрите на вопросы, которых нужно избегать, когда пишете
user202729

2
@ Денис Хорошо, я уберу дату из вызова; может быть, я приму, когда больше нет новых ответов.
Амфибологический

Ответы:


13

Желе , 3 байта

ŻVƝ

Монадическая ссылка, принимающая целое число, которое дает список целых чисел

Попробуйте онлайн!

Как?

ŻVƝ - Link: integer       e.g. 59
Ż   - zero-range               [0,1,2,3,4,5,6, ... ,58,59]
  Ɲ - apply to each pair: i.e: [0,1] or [5,6]  or  [58,59]
 V  -   evaluate* jelly code   1     or 56     or  5859
    -                       -> [1,12,23,45,56, ... 5859]

* When given a list V actually joins the Python string values and evaluates that
  ...so e.g.: [58,59] -> ['58','59'] -> '5859' -> 5859

Деннис переиграл!
Okx

10

R , 32 байта

strtoi(paste0((x=1:scan())-1,x))

Попробуйте онлайн!

Перехитрил MickyT , так что иди, проголосуй за этот ответ!


Там было редактирование, чтобы разрешить строки ... нет необходимости в strtoi!
JayCe

2
@JayCe необходимо убрать лидерство 0с первого выхода.
Джузеппе

Вы не могли бы удалить ведущий ноль, заканчивая [-1]вместо использования, strtoiили это терпит неудачу в некотором крайнем случае или другом?
JDL

@JDL strtoiиспользуется для преобразования из "01"в, 1потому paste0что вернется, c("01","12","23","34",...)и нам не разрешено возвращаться "01".
Джузеппе

1
@CriminallyVulgar, к сожалению, это не удастся для ввода1
Джузеппе



7

Cubix , 19 байт

I.1.W)>OSo;u.uO;@!-

Попробуйте онлайн!

Это оборачивает на куб следующим образом

    I .
    1 .
W ) > O S o ; u
. u O ; @ ! - .
    . .
    . .

Смотреть это работает

Есть небольшая комната, чтобы поиграть еще, но на данный момент

  • W перенаправить на верхнюю сторону вниз
  • I1> установить стек с вводом и 1, а затем перенаправить в основной цикл
  • OSo;u вывести верхнюю часть стека, добавить пространство в стек, вывести, удалить и перевернуть
  • -!@;Ou)вычтите TOS из входных данных, если 0 остановите, иначе выведите результат, выведите TOS, uturn и увеличьте TOS. Вернуться в основной цикл.

7

Perl 6 , 19 18 байт

{(^$_ Z~1..$_)X+0}

Попробуйте онлайн!

Блок анонимного кода, который архивирует диапазон от 0 до n-1 с 1 до n, используя оператор конкатенации, затем добавляет 0 к каждому элементу, чтобы принудительно преобразовать его в число и удалить начальные 0.


5

R , 30 29 байт

Дополнительный байт благодаря @Giuseppe

10^nchar(n<-1:scan())*(n-1)+n

Попробуйте онлайн!

В основном математическое решение, за исключением использования, nchar()а не floor(log10()). Я был очень удивлен, что он оказался короче, чем струнная версия.


29 байт! хорошая работа над этим, я бы никогда не подумал об этом!
Джузеппе

@Giuseppe спасибо за дополнительный байт.
MickyT



4

Python 2 , 42 41 байт

f=lambda n:n-1and f(n-1)+[`n-1`+`n`]or[1]

Попробуйте онлайн!

Рекурсивная функция, которая возвращает смешанный список строк и целых чисел


Вы намеревались отредактировать оригинальное описание «Анонимная функция, которая возвращает список»?
Esolanging Fruit

@EsolangingFruit Упс, исправлено! Спасибо
Джо Кинг

Может быть, я что-то упустил, но это не похоже на «12» в качестве второго элемента.
ElPedro

2
@ElPedro Это может быть исправлено путем сохранения байт сn and
г Xcoder

1
Это не часто исправление сохраняет байты :-)
ElPedro


4

Blossom , 88 байт

rule e<int x>[1(x)]=>[1(x-1),2(str(x)+str(x+1))|1->2];rule c[1(0),2|1->2]=>[2("12")];e!c

Blossom - это язык графического программирования, над которым я работаю. Он может принимать только графы в качестве входных данных, поэтому эта программа ожидает граф, содержащий один узел с его меткой целым числом. Он возвращает граф связанных ребер, чтобы сформировать ближайший к массиву, который я могу получить, и результирующий граф печатается для вывода.

Незавершенная версия кода такова:

rule expand <int x>
    [ 1 (x) ]
 => [ 1 (x-1), 2(str(x)+str(x+1)) | 1->2 ]
where x > 0;

rule clean
    [ 1 (0), 2 ("12") | 1->2 ]
 => [ 2 ("12") ];

expand! clean

Он определяет два правила: одно вызываемое expand, которое (в то время как в текущем графе есть узел с целочисленной меткой) создает другой узел с сцепленным приращением и понижает значение. Это также создает грань между этими двумя узлами. Это правило также имеет условие, что х больше 0.

В !исполняет это правило, пока он может быть применен на графике, так что в этом случае он будет выполняться до тех пор , пока х равно 0. И тогда cleanправило удаляет этот 0 узел и его края.

Blossom не был создан для игры в гольф, но, думаю, не так уж плохо, учитывая, что это такое. В настоящее время нет действительно простого способа протестировать цветовой код (и интерпретатор, над которым я сейчас работаю, не совсем закончен и немного глючит), но это не совсем конкурирующая запись!



3

Шекспир , 703 байта

Q.Ajax,.Ford,.Act I:.Scene I:.[enter Ajax and Ford]Ford:Open mind!Scene V:.Ajax:You is the sum of thyself the sum of myself the sum of a big bad fat old red pig a big bad fat old lie!Ford:Open mind!Is you nicer zero?Ajax:If so, you is twice the sum of the sum of twice thyself twice thyself thyself!If so,Let us Scene V!Ford:You a cat!Open heart!Scene X:.Ajax:You is the sum of thyself a pig!Is you worse than a cat?If so,let us Scene C.Remember thyself.You is the sum of the sum of a big old red cute rich cat a big old red cute joy a big old pig!Speak mind!You is a big old red cute rich cat!Speak mind!Recall!Ford:Open heart!You is the sum of thyself a joy!Open heart!Let us Scene X.Scene C:.[exeunt]

попробуйте здесь

негольфированная версия

127421th Night.
Ajax, likes to read the stars.
Ford, someone Ajax can always count on.
Act I:.
Scene I: Ajax reads a star.
[enter Ajax and Ford]
Ford: Open your mind! 
Scene V: Ford counts what ajax has learned.
Ajax: you are the sum of thyself and the sum of myself and the sum of a big bad fat old red pig and a big bad fat old lie!
Ford: Open Your mind! Are you nicer than zero?
Ajax: If so, you are twice the sum of the sum of twice thyself and twice thyself and thyself! 
If so, Let us Scene V!
Ford: You are a cat! Open your heart!

Scene X: Ajax and Ford recall the nights.
Ajax: You are the sum of thyself and a pig! Are you worse than a cat? If so, Let us Scene C.
Remember thyself. 
You are the sum of the sum of a big old red cute rich cat and a big old red cute joy and a big old pig! 
Speak you mind!
You are a big old red cute rich cat! Speak your mind! Recall your finest hour!
Ford: Open your heart! You are the sum of thyself and a joy! Open your heart! Let us Scene X.
Scene C: Fin.
[exeunt]

3

Groovy , 35 байт

{(0..<it)*.with{""+it+++it as int}}

Попробуйте онлайн!

В последнюю минуту я пришел с идеей использовать * .with вместо .collect. Я понятия не имею, что it+++itанализирует, но, it++ + itили it + ++itони оба делают одно и то же. Я пытался придумать способ избавиться от <in .. <, превратив его в 1..it и уменьшив, но не думаю, что он станет немного короче.


Добро пожаловать в PPCG; хороший первый пост! Что касается анализа a+++b, этот тест предполагает, что он анализируется слева направо, что означает (a++)+b.
Джонатан Фрех

3

C (gcc) , 44 43 байта

f(i){i--&&printf(" %2$d%d"+5*!f(i),i+1,i);}

Попробуйте онлайн!


@DLosc Спецификатор %m$формата "обозначает позицию в списке аргументов желаемого аргумента, проиндексированную, начиная с 1" ( printf(3)страница руководства ) . Это очень удобно, если ваша библиотека C поддерживает это!
ErikF

Спасибо ... но я все еще не понимаю, почему %d%d(и переключение порядка аргументов) не работает. (Я попробовал, но не знаю, почему он не производит вывод.)
DLosc

@DLosc Если вы изменяете строку формата, убедитесь, что изменили смещение после нее (например, " %d%d"должно иметь +3*!f(i); в противном случае смещение +5 указывает на NUL в конце строки.)
ErikF

О, ладно - я наконец понял: «# 2, затем # 1» необходимо, потому что в базовом случае сокращенная строка формата становится просто «# 1», и поэтому вам нужен первый аргумент printf i+1, а не i. Очень интересно.
DLosc




2

05AB1E , 6 байтов

>GNJ,N

Попробуйте онлайн!

объяснение

>G       # for N in [1 ... input]
  N      # push N
   J     # join stack
    ,    # print
     N   # push N (for next iteration)

LεD<ìï будет работать для того же количества байтов, но с выводом списка




2

Japt -m , 6 5 байт

ó2 ¬n

Попробуйте онлайн!

Как всегда, знайте флаги .

Распаковано и как это работает

-m       Convert to range and map...

Uó2 q n
Uó2      Construct [U, U+1]
    q    Join
      n  Convert to number

         Implicit output (Array is printed as comma-delimited values)

5 байт . Не знаю, почему óне работает здесь без 2.
Лохматый

У меня есть 2 других 5-байтовых решения (оба используют один и тот же метод), которые не используют флаг, если кто-то еще хочет нанести им удар.
Лохматый

Я думаю 5 + 2 = 7 байт из-за флага?
u_ndefined


2

C # (интерактивный компилятор Visual C #) , 103 71 64 56 байт


Гольф Попробуйте онлайн!

i=>{for(int x=0;x<i;)Write($"{(x>0?$",{x}":"")}{++x}");}

Ungolfed

i => {
    for( int x = 0; x < i; )
        Write( $"{( x > 0 ? $",{x}" : "")}{ ++x }" );
}

Полный код

Action<Int32> a = i => {
    for( int x = 0; x < i; )
        Write( $"{( x > 0 ? $",{x}" : "")}{ ++x }" );
    };

Int32[]
    testCases = new Int32[] {
        1,
        2,
        3,
        10,
    };

foreach( Int32[] testCase in testCases ) {
    WriteLine( $" Input: {testCase}\nOutput:" );
    a(testCase);
    WriteLine("\n");
}

Старые версии:

  • v1.2, 64 байта

    i=>{for(int x=0;x<i;)Write($"{(x>0?$",{x}":"")}{++x}");}
  • v1.1, 71 байт

    i=>{for(int x=0;x<i;)System.Console.Write($"{(x>0?$",{x}":"")}{++x}");}
  • v1.0, 103 байта

    i=>{for(int x=0;x<i;)System.Console.Write($"{(x>0?",":"")}{x++*System.Math.Pow(10,$"{x}".Length)+x}");}

релизы

  • v1.3 - - 8 bytes- Удалено Consoleспасибо еще разнагул
  • v1.2 - - 7 bytes- Удалено Systemблагодаря разнагул
  • v1.1 --32 bytes
  • v1.0 - 103 bytes- Исходное решение.

Заметки

  • Никто

1
Интерактивный компилятор C # имеет статический импорт для System.Console. Таким образом, вы можете сохранить 15 байтов, удалив его.
Разнагул

Правильно! Привычка использовать их
auhmaan

Вы также можете удалить Console.: TiO
raznagul


2

ABAP, 101 байт

Не совсем язык игры в гольф, но мне очень нравится

WHILE x<w.
CLEAR z.
IF x=1.
WRITE x.
ELSE.
CONCATENATE y x INTO z.
WRITE z.
ENDIF.
y=x.
x=x+1.
ENDDO.

W - входной член, X - счетчик от 1, Y - X-1 со второго прохода, Z - сцепленная строка.


2

Powershell, 27 26 байт

1.."$args"|%{"$p$_";$p=$_}

-1 байт: спасибо AdmBorkBork

Тестовый скрипт:

$f = {
1.."$args"|%{"$p$_";$p=$_}
}

&$f 1
""
&$f 2
""
&$f 3
""
&$f 10
""
&$f 46

1
1.."$args"Вместо этого вы можете сохранить байт .
AdmBorkBork



2

Javascript, 43 44,46,49,53 байта

n=>[...Array(n)].map((_,a)=>~~(a+(a+1+"")))

Предыдущие версии :

n=>[...Array(n)].map((_,a)=>~~(a+(""+ ++a)))
n=>[...Array(n)].map((_,a)=>0- -(a+(""+ ++a)))
n=>[...Array(n).keys()].map(a=>0- -(a+(""+ ++a)))
n=>[...Array(n).keys()].map(a=>parseInt(a+(""+ ++a)))

Сохранено 3 байта благодаря решению @ Shaggy (которое лучше моего) для удаления .keys()


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.