Сполучення n з n + 1


44

Вступ

Послідовність OEIS A127421 - це послідовність чисел, десяткове розширення яких є конкатенацією двох послідовно зростаючих невід’ємних чисел. Простіше кажучи, кожне число в послідовності утворюється шляхом з’єднання 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 це мій перший виклик, тому, сподіваюся, це все має сенс.

EDIT: Видалено обмеження на вихід, щоб дозволити числа або рядки.


1
Чи можна його індексувати 0?
Джо Кінг

3
Ніхто ще не сказав цього, але ласкаво просимо до PPCG! Перше приємне запитання, не надто важке, але теж не зовсім тривіальне, і є кілька різних підходів
Джо Кінг

3
Через 7 днів я прийму найкоротшу відповідь, яка відповідає всім цим критеріям. Чому існує необхідність, щоб виклик закінчився?
Ерік Аутгольфер

2
У наш час ми, як правило, не приймаємо відповідь, оскільки це відлякує подальше розміщення відповідей. Я припускаю, що ви ставите старі виклики як модель (що також не відштовхується) Дивіться речі, які слід уникати, коли пишуть виклики
user202729

2
@Dennis Гаразд, я видалю дату з виклику; можливо, я прийму, коли більше нових відповідей не буде.
Амфібологічний

Відповіді:


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, вивернути і збільшити 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 Oopsie, виправлено! Спасибі
Jo King

Можливо, мені щось не вистачає, але, здається, це не 12 "як другий елемент.
ElPedro

2
@ElPedro Це можна виправити, n and
збереживши

1
Не часто виправлення економить байти :-)
ElPedro


4

Цвітіння , 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 та його край.

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



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 і decrementing, але я не думаю, що він стане коротшим.


Ласкаво просимо до 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)man man) . Це досить зручно, поки ваша бібліотека C підтримує це!
ЕрікФ

Дякую ... але я все ще збентежений, чому %d%d(і перемикання порядку аргументів) не працює. (Я спробував це, але не знаю, чому він не дає результату.)
DLosc

@DLosc Якщо ви зміните рядок формату, переконайтеся, що після нього змініть зсув (наприклад, " %d%d"мав би бути +3*!f(i); в іншому випадку +5 зміщення вказує на NUL в кінці рядка)
ErikF

О, добре - я нарешті зрозумію: "# 2, тоді # 1" необхідний, тому що в базовому випадку, скорочений рядок формату стає просто "# 1", і тому вам потрібен перший аргумент printf i+1, а не i. Дуже цікаво.
DLosc







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.
Shaggy

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

Я думаю, що 5 + 2 = 7 байт через прапор?
u_ndefined


2

C # (Visual C # Interactive Compiler) , 103 71 64 56 байт


Гольф Спробуйте в Інтернеті!

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

Безумовно

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спасибі ще раз raznagul
  • v1.2 - - 7 bytes- Видалено Systemзавдяки raznagul
  • v1.1 --32 bytes
  • v1.0 - 103 bytes- Початкове рішення.

Примітки

  • Немає

1
Інтерактивний компілятор C # має статичний імпорт System.Console. Таким чином, ви можете зберегти 15 байт, видаливши його.
raznagul

Правильно! Звичка користуватися ними
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.