Thang dây


12

Cho một chuỗi svà một số nguyên dương N, dần dần nhân đôi mỗi ký tự cho đến khi Ntrùng lặp, và sau đó giữ nguyên các Nbản sao cho đến khi các Nký tự cách xa cuối, sau đó bước xuống một lần nữa.

Ví dụ: đã cho abalone3:

a    we start with 1 copy
bb   then 2 copies
aaa  then 3 copies, which is our second parameter
lll  so we continue using 3 copies
ooo  until we reach the end
nn   where we use 2 copies
e    and then finally 1 copy

và kết quả sẽ là abbaaalllooonne.

Nó được đảm bảo rằng chuỗi có độ dài lớn hơn 2Nvà chỉ có các ký tự từ ađến z.

Thêm thử nghiệm:

N string       output
2 aaaaa        aaaaaaaa
3 abcdabcdabcd abbcccdddaaabbbcccdddaaabbbccd

Đây là . Câu trả lời ngắn nhất trong byte thắng. Tiêu chuẩn áp dụng.

Câu trả lời:


11

Thạch , 6 byte

JṡFṢị⁸

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

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

JṡFṢị⁸  Main link. Arguments: s (string), n (integer)

J       Get the indices of s.
 ṡ      Split the indices into overlapping chunks of length n.
  F     Flatten the array of chunks.
   Ṣ    Sort the resulting array of indices.
    ị⁸   Get the characters of s at these indices.

Chạy mẫu

JṡFṢị⁸  "abalone", 3

J       [1, 2, 3, 4, 5, 6, 7].
 ṡ      [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]]
  F     [1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6, 5, 6, 7]
   Ṣ    [1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7]
    ị⁸  "abbaaalllooonne"

3
Phương pháp split + flatten + sort là thiên tài thuần túy. Đẹp! :)
HyperNeutrino

7

Python 2 , 57 byte

f=lambda s,n,i=1:s and s[0]*len(s[:i][:n])+f(s[1:],n,i+1)

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

Cũng 57:

Python 2 , 57 byte

f=lambda s,n,i=1:s and s[0]*len(s[:i])+f(s[1:],n,i+(i<n))

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


Bạn có thể giải thích logic của bạn đằng sau len(s[:i][:n])? Tôi tin rằng có một cách ngắn hơn để có được số đó nhưng tôi không biết làm thế nào.
sĩ523

Không sao, tôi hiểu rồi! Nhưng nó ngắn hơn một byte min(len(s),i,n). Bạn đã làm rất tốt!
sĩ523

6

JavaScript (ES6), 67 65 byte

-2 byte nhờ phương pháp ngắn hơn của Chas Brown bằng cách sử dụng min().

s=>n=>s.replace(/./g,(c,i)=>c.repeat(Math.min(i+1,s.length-i,n)))

Đưa đầu vào theo cú pháp currying : f("abalone")(3).

Kiểm tra đoạn trích

f=
s=>n=>s.replace(/./g,(c,i)=>c.repeat(Math.min(i+1,s.length-i,n)))
<div oninput="O.value=f(S.value)(+N.value)">String: <input id=S> N: <input id=N size=3></div>Out: <input id=O size=50 disabled>


6

Thạch , 8 7 byte

J««U$⁸x

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

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

J««U$⁸x - main link, input e.g. abalone
J        - range of length of letters: [1,2,3,4,5,6,7]
 «       - minimum of each term with second input: [1,2,3,3,3,3,3]
  «U$    - termwise minimum with the reverse: 
                    min([1,2,3,3,3,3,3],[3,3,3,3,3,2,1])=[1,2,3,3,3,2,1]
     ⁸x  - repeat each character of the input a number of times corresponding to elements:
                    a*1;b*2;a*3...e*1 = abbaaalllooonne

-1 byte nhờ @LeakyNun


Tìm tốt @LeakyNun! Điểm gần nhất tôi nhận được theo hướng đó là J«¥@«U$x@9 byte.
fireflame241

Xin giải thích?
Đồng chí SparklePony

@ fireflame241 genen, x@⁸tương đương với ⁸x(Tôi đã sử dụng ở đây)
Leaky Nun

2

Haskell , 61 60 byte

Cảm ơn @Laikoni đã giúp cạo sạch 1 byte

n#s=do(i,c)<-zip[1..]s;replicate(minimum[n,i,length s-i+1])c

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

Ung dung:

(#) n string = do
    (i, char) <- zip [1..] string
    replicate (minimum [n, i, length(string)-i+1]) char

Công dụng tuyệt vời của một dokhối! Lưu một byte bằng cách thả dấu ngoặc đơn vào length(s).
Laikoni

1

Haskell (Lambdabot), 74 byte

r=replicate
f x n=join$zipWith r([1..n]++r(length x-2*n)n++reverse[1..n])x

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


Nhập khẩu tính trong số điểm! Bạn sẽ tốt hơn với>>=id
bartavelle

Vâng, tôi cũng đã làm điều đó trước đó và sau đó tôi đã thấy điều này (đó là lý do tại sao có Lambdabot trong ngoặc). Cách đúng là gì?
ბიმო

Tôi đứng sửa, tôi nghĩ rằng điều này là ổn!
bartavelle

Điều tốt để biết, có rất nhiều hàng nhập khẩu rất tiện dụng trong danh sách đó.
ბიმო

1

J, 24 byte

(<.&n<./(|.,:[)>:i.#s)#s

Bit trong parens - (<.&n<./(|.,:[)>:i.#s)- tạo 1 2 ... n n n ... 2 1mảng, như sau:

                   #s    length of s, call it L
                 i.      numbers 0 1 ... L-1
               >:        increment by 1, now 1 2 ... L
        (|.,:[)          fork: |. = reverse, ,: = stack, [ = identity
                         resulting in  L ... 2 1
                                       1 2 ... L 
     <./                 min of each element of the top and bottom row
 <.&n                    min of each resulting elm and n

khi chúng ta có điều đó, #toán tử của J sẽ tự động thực hiện chính xác những gì được yêu cầu, sao chép từng phần tử số lần được chỉ định.

Tò mò muốn xem sự ngẫu hứng của một chuyên gia J về điều này ...


23 byte với cách tiếp cận khá khác nhau [#~#@[$([:>:<:,&:i.-)@](có thể là một không gian đi lạc bị kẹt trong đó). Tôi không biết tại sao cái móc không lấy xnhưng không ở vị trí quá quan tâm.
cole


1

Japt , 11 10 byte

ËpVm°TEnUÊ

Kiểm tra nó


Giải trình

Đầu vào ngầm định của chuỗi Uvà số nguyên V.

Ë

Bản đồ trên Uvà thay thế mọi nhân vật.

Vm

Nhận tối thiểu V, ...

°T

T(ban đầu 0) tăng thêm 1, ...

EnUÊ

Và chỉ số của ký tự hiện tại ( E) được trừ từ ( n) độ dài ( Ê) của U.

p

Lặp lại ký tự hiện tại nhiều lần.

Ngẫu nhiên xuất chuỗi cuối cùng.



0

Python 2 68 byte

f=lambda s,n:''.join(s[i]*min(i+1,len(s)-i,n)for i in range(len(s)))

Bạn không cần f=câu trả lời; chức năng có thể được ẩn danh. Với ý nghĩ đó, bạn có thể loại bỏ 3 byte với lambda s,n:''.join(c*min(i+1,len(s)-i,n)for i,c in enumerate(s)).
notjagan

0

Husk , 10 9 byte

₁₁ṀR
↔z↑N

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

Dòng đầu tiên là chức năng chính, nó lặp lại mỗi chữ cái n lần và sau đó gọi dòng thứ hai hai lần.

Dòng thứ hai lấy tối đa N chữ cái từ mỗi nhóm chữ cái lặp lại, trong đó N là chỉ số dựa trên 1 của nhóm, sau đó đảo ngược danh sách.



0

APL (Dyalog) , 15 byte

{⍵/⍨⍺⌊i⌊⌽i←⍳≢⍵}

{... } chức năng nơi tranh luận trái (cap) là và lập luận đúng (string) là :

≢⍵ đếm số lượng ký tự trong chuỗi

 tạo ra nhiều ɩ ntegers

i← lưu trữ trong tôi

 đảo ngược

i⌊ cặp tối thiểu với i

⍺⌊ cặp tối thiểu với nắp

⍵/⍨ sử dụng các số đó để sao chép các chữ cái của chuỗi

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




0

Bào ngư là một loại cá (tốt, một loài động vật có vỏ), do đó

> <> , 79 byte

&i1\
0(?\:1+:&::&@)?$~i:@
&~}\&~1
0(?\:&::1+&@)?$~}}:
 ~r\
?!v>l?!;:o$1-:@
~~<^

Hãy thử trực tuyến , hoặc xem nó tại sân chơi cá !

Đọc chuỗi từ STDIN và giả sử số đã có trên ngăn xếp.

Giải thích: Dòng thứ hai, thứ tư và thứ sáu là các vòng lặp chính. Các chi tiết là một số thao tác ngăn xếp xấu xí, nhưng trong các nét rộng, đầu tiên, dòng thứ hai điền vào ngăn xếp xen kẽ giữa một ký tự đầu vào và min ( in ), trong đó n là giới hạn chiều dài và i là chỉ số của ký tự trong đầu vào: cho "bào ngư", 3, ngăn xếp trông giống như

"a", 1, "b", 2, "a", 3, "l", 3, "o", 3, "n", 3, "e", 3, -1=EOF, 3

Tiếp theo, dòng 4 đi qua ngăn xếp theo cùng một cách ngược lại, để có được đầu bên phải được giới hạn đúng cách:

"a", 1, "b", 2, "a", 3, "l", 3, "o", 3, "n", 2, "e", 1, -1

Sau đó, dòng thứ sáu lấy từng cặp số nhân vật và in ký tự nhiều lần bằng số.

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.