Nối n với n + 1


44

Giới thiệu

Chuỗi OEIS A127421 là dãy số có phần mở rộng thập phân là phép nối của 2 số không âm tăng liên tiếp. Nói một cách đơn giản, mọi số trong chuỗi được hình thành bằng cách ghép n với n + 1 cho một số giá trị nguyên, không âm của n . Một số thuật ngữ đầu tiên là:

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,

Thử thách

Cho một số nguyên dương n duy nhất , in n mục đầu tiên của chuỗi OEIS A127421 theo thứ tự tăng dần.

  • Đầu vào và đầu ra có thể ở bất kỳ định dạng chấp nhận được . Chuỗi hoặc số là tốt cho đầu ra.
  • Số không hàng đầu không được phép.
  • Một chương trình đầy đủ hoặc chức năng được cho phép.
  • Đối với mục đích của thử thách này, n sẽ tích cực và dưới 100.
  • Các sơ hở tiêu chuẩn không được phép theo mặc định.
  • Câu hỏi này là mã golf, vì vậy, số byte thấp nhất sẽ thắng.
  • Dưới đây là một số mẫu đầu vào và đầu ra:

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

Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại hỏi. Chúc may mắn.

PS đây là thử thách đầu tiên của tôi, vì vậy hy vọng tất cả điều này có ý nghĩa.

EDIT: Đã loại bỏ hạn chế đầu ra để cho phép số hoặc chuỗi.


1
Nó có thể được lập chỉ mục 0 không?
Jo King

3
Chưa ai nói điều đó, nhưng chào mừng bạn đến với PPCG! Câu hỏi đầu tiên hay, không quá khó, nhưng cũng không hoàn toàn tầm thường, và có một số cách tiếp cận khác nhau
Jo King

3
Sau 7 ngày, tôi sẽ chấp nhận câu trả lời ngắn nhất đáp ứng tất cả các tiêu chí này. Tại sao cần phải có thử thách để kết thúc?
Erik the Outgolfer 04/07/18

2
Ngày nay chúng ta có xu hướng không chấp nhận một câu trả lời, bởi vì nó không khuyến khích đăng thêm câu trả lời. Tôi cho rằng bạn chấp nhận những thách thức cũ như một mô hình (cũng không được khuyến khích) Xem những điều cần tránh khi viết-thử thách
dùng202729

2
@Dennis Ok, tôi sẽ xóa ngày khỏi thử thách; có lẽ tôi sẽ chấp nhận khi không có thêm câu trả lời mới.
Lưỡng cư

Câu trả lời:


13

Thạch , 3 byte

ŻVƝ

Một liên kết đơn được chấp nhận một số nguyên mang lại một danh sách các số nguyên

Hãy thử trực tuyến!

Làm sao?

Ż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

Dennis hết hồn!
Okx

10

R , 32 byte

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

Hãy thử trực tuyến!

Bị đánh bại bởi MickyT , vì vậy hãy đưa ra câu trả lời!


Đã có chỉnh sửa để cho phép chuỗi ... không cần strtoi!
JayCe

2
@JayCe cần phải loại bỏ hàng đầu 0từ đầu ra đầu tiên.
Giuseppe

bạn không thể loại bỏ số 0 đứng đầu bằng cách kết thúc bằng [-1]thay vì sử dụng strtoihoặc thất bại trong trường hợp cạnh này hay trường hợp khác?
JDL

@JDL strtoiđang được sử dụng để chuyển đổi từ "01"tới 1paste0sẽ trở lại c("01","12","23","34",...)và chúng tôi không được phép trở lại "01".
Giuseppe

1
@CriminallyVulgar không may sẽ thất bại với đầu vào của1
Giuseppe



7

Khối , 19 byte

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

Hãy thử trực tuyến!

Điều này kết thúc vào khối như sau

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

Xem nó chạy

Có một phòng nhỏ để chơi với, nhưng tại thời điểm này

  • W chuyển hướng đến mặt trên hướng xuống
  • I1> thiết lập ngăn xếp với đầu vào và 1 sau đó chuyển hướng vào vòng lặp chính
  • OSo;u xuất đỉnh của ngăn xếp, thêm không gian vào ngăn xếp, đầu ra, loại bỏ và mở ra
  • -!@;Ou)trừ Tosh khỏi đầu vào, nếu 0 dừng kết quả pop khác, đầu ra Tosh, mở ra và tăng Tosh. Trở lại vòng lặp chính.

7

Perl 6 , 19 18 byte

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

Hãy thử trực tuyến!

Khối mã ẩn danh kéo phạm vi 0 đến n-1 bằng 1 đến n bằng cách sử dụng toán tử nối, sau đó thêm 0 vào mọi phần tử để buộc nó thành một số và loại bỏ các số 0 đứng đầu.


5

R , 30 29 byte

Một byte thêm nhờ @Giuseppe

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

Hãy thử trực tuyến!

Một giải pháp chủ yếu là toán học, ngoại trừ việc sử dụng nchar()chứ không phải floor(log10()). Tôi thực sự ngạc nhiên khi nó xuất hiện ngắn hơn phiên bản chuỗi .


29 byte! làm tốt về điều này, tôi sẽ không bao giờ nghĩ về nó!
Giuseppe

@Giuseppe cảm ơn vì đã thêm byte.
MickyT



4

Python 2 , 42 41 byte

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

Hãy thử trực tuyến!

Hàm đệ quy trả về một danh sách hỗn hợp các chuỗi và số nguyên


Bạn có định chỉnh sửa mô tả ban đầu "Hàm ẩn danh trả về danh sách" không?
Trái cây Esolanging

@EsolangingFops Oopsie, đã sửa! Cảm ơn
Jo King

Có thể tôi đang thiếu một cái gì đó nhưng điều này dường như không có '12' là yếu tố thứ hai.
ElPedro

2
@ElPedro Điều đó có thể được khắc phục bằng cách lưu một byte vớin and
Ông Xcoder

1
Thông thường, bản sửa lỗi sẽ tiết kiệm byte :-)
ElPedro


4

Blossom , 88 byte

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 là một ngôn ngữ lập trình đồ thị tôi đang làm việc. Nó chỉ có thể lấy biểu đồ làm đầu vào, vì vậy chương trình này mong đợi một biểu đồ bao gồm một nút có nhãn là số nguyên. Nó trả về một đồ thị của các cạnh được kết nối để tạo thành gần nhất với một mảng tôi có thể nhận được và biểu đồ kết quả được in ra.

Một phiên bản chưa hoàn thành của mã này là:

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

Nó định nghĩa hai quy tắc: một quy tắc được gọi expand, trong đó (trong khi có một nút có nhãn có giá trị nguyên trong biểu đồ hiện tại) tạo ra một nút khác với gia số được nối và giảm giá trị. Nó cũng tạo ra một cạnh giữa hai nút này. Quy tắc này cũng có điều kiện x lớn hơn 0.

Việc !thực thi quy tắc này miễn là nó có thể được áp dụng trên biểu đồ, vì vậy trong trường hợp này, nó sẽ thực thi cho đến khi x bằng 0. Và sau đó cleanquy tắc sẽ loại bỏ nút 0 này và cạnh của nó.

Blossom không được tạo ra để chơi gôn, nhưng nó không làm quá tệ, tôi không nghĩ vậy, xem xét nó là gì. Hiện tại thực sự không phải là một cách dễ dàng để mọi người kiểm tra mã hoa (và trình thông dịch mà tôi đang làm việc hiện tại vẫn chưa hoàn thành và có một chút lỗi), nhưng đây không hẳn là một mục cạnh tranh!



3

Shakespeare , 703 byte

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]

thử nó ở đây

phiên bản vô văn hóa

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 byte

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

Hãy thử trực tuyến!

Tôi đã nghĩ ra phút cuối với ý tưởng sử dụng * .with thay vì .collect. Tôi không biết it+++itphân tích cú pháp để làm gì nhưng liệu nó it++ + ithoặc it + ++itcả hai đều làm điều tương tự. Tôi đã cố gắng nghĩ cách thoát khỏi <in .. <bằng cách biến nó thành 1..it và giảm dần nhưng tôi không nghĩ nó sẽ ngắn hơn nữa.


Chào mừng đến với PPCG; bài viết đầu tiên tốt đẹp! Về phân tích cú pháp a+++b, thử nghiệm này cho thấy nó được phân tích cú pháp từ trái sang phải, có nghĩa là (a++)+b.
Jonathan Frech

3

C (gcc) , 44 43 byte

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

Hãy thử trực tuyến!


@DLosc Trình %m$xác định định dạng "biểu thị vị trí trong danh sách đối số của đối số mong muốn, được lập chỉ mục bắt đầu từ 1" ( printf(3)trang man) . Nó khá tiện dụng miễn là thư viện C của bạn hỗ trợ nó!
ErikF

Cảm ơn ... nhưng tôi vẫn bối rối tại sao %d%d(và chuyển đổi thứ tự của các đối số) không hoạt động. (Tôi đã thử nó, nhưng không biết tại sao nó không tạo ra đầu ra.)
DLosc

@DLosc Nếu bạn thay đổi chuỗi định dạng, hãy đảm bảo thay đổi phần bù sau nó (ví dụ: " %d%d"nên có +3*!f(i)điểm bù +5 thành NUL ở cuối chuỗi.)
ErikF

Oh, okay - Tôi cuối cùng đã có được nó: "# 2, sau đó # 1" là cần thiết vì trong trường hợp cơ sở, chuỗi định dạng rút ngắn chỉ trở thành "số 1" và vì vậy bạn cần lập luận printf đầu tiên được i+1, không i. Rất thú vị.
DLosc


2

Thạch , 4 byte

ḶżRV

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

ḶżRV  Main link. Argument: n

Ḷ     Unlength; yield [0, ..., n-1].
  R   Range; yield [1, ... n].
 ż    Zipwith; yield [[0, 1], ..., [n-1, n]].
   V  Eval; cast each array to string and evaluate, yielding integers.





2

Japt -m , 6 5 byte

ó2 ¬n

Hãy thử trực tuyến!

Như mọi khi, biết cờ .

Giải nén & Cách thức hoạt động

-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 byte . Không biết tại sao ókhông làm việc ở đây mà không có 2.
Shaggy

Tôi có 2 giải pháp 5 byte khác (cả hai đều sử dụng cùng một phương thức) không sử dụng cờ, nếu có ai muốn đâm vào chúng.
Xù xì

Tôi nghĩ 5 + 2 = 7 byte vì cờ?
u_nd xác định


2

C # (Trình biên dịch tương tác Visual C #) , 103 71 64 56 byte


Chơi thử trực tuyến!

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

Ung dung

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

Mã đầy đủ

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");
}

Các phiên bản cũ hơn:

  • v1.2, 64 byte

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

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

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

Phát hành

  • v1.3 - - 8 bytes- Đã xóa Consolemột lần nữa nhờ raznagul
  • v1.2 - - 7 bytes- Đã xóa Systemnhờ raznagul
  • v1.1 --32 bytes
  • v1.0 - 103 bytes- Giải pháp ban đầu.

Ghi chú

  • không ai

1
Trình biên dịch tương tác C # có nhập tĩnh cho System.Console. Vì vậy, bạn có thể lưu 15 byte bằng cách loại bỏ nó.
raznagul

Đúng! Thói quen phải sử dụng chúng
auhmaan

Bạn cũng có thể xóa Console.: TIO
raznagul


2

ABAP, 101 byte

Không thực sự là một ngôn ngữ chơi gôn, nhưng tôi có rất nhiều niềm vui với nó

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 là thuật ngữ đầu vào, X là bộ đếm từ 1, Y là X-1 từ lần truyền thứ hai trở đi, Z là chuỗi nối.


2

Powershell, 27 26 byte

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

-1 byte: cảm ơn admBorkBork

Kịch bản thử nghiệm:

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

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

1
Bạn có thể lưu một byte làm 1.."$args"thay thế.
admBorkBork



2

Javascript, 43 44,46,49,53 byte

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

Những phiên bản trước :

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)))

Đã lưu 3 byte nhờ giải pháp của @ Shaggy (tốt hơn của tôi) để xóa .keys()


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.