บันไดสตริงที่ต่อยอด


12

กำหนดสตริงsและจำนวนเต็มบวกNค่อยๆทำซ้ำอักขระแต่ละตัวมากขึ้นเรื่อย ๆ จนกว่าจะNซ้ำกันจากนั้นพักที่Nซ้ำกันจนกระทั่งNตัวละครอยู่ห่างจากจุดสิ้นสุดจากนั้นก้าวลงอีกครั้ง

ตัวอย่างเช่นที่กำหนดabaloneและ3:

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

และผลลัพธ์ก็abbaaalllooonneคือ

มีการรับประกันว่าสตริงมีความยาวมากกว่า2Nและมีอักขระตั้งแต่aถึงzเท่านั้น

ทดสอบเพิ่มเติม:

N string       output
2 aaaaa        aaaaaaaa
3 abcdabcdabcd abbcccdddaaabbbcccdddaaabbbccd

นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดในการชนะไบต์ ช่องโหว่มาตรฐานใช้

คำตอบ:


11

เยลลี่ขนาด 6 ไบต์

JṡFṢị⁸

ลองออนไลน์!

มันทำงานอย่างไร

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.

วิ่งตัวอย่าง

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
การแยก + วิธีการเรียงแบบเรียบ + นั้นเป็นอัจฉริยะบริสุทธิ์ ดี! :)
HyperNeutrino

7

Python 2 , 57 ไบต์

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

ลองออนไลน์!

ยัง 57:

Python 2 , 57 ไบต์

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

ลองออนไลน์!


คุณช่วยอธิบายตรรกะของคุณได้len(s[:i][:n])ไหม? ฉันเชื่อว่ามีวิธีที่สั้นกว่าในการรับหมายเลขนั้น แต่ฉันไม่แน่ใจ
musicman523

ไม่เป็นไรฉันเข้าใจแล้ว! min(len(s),i,n)แต่มันเป็นหนึ่งไบต์สั้นกว่า เยี่ยมมาก!
musicman523

6

JavaScript (ES6), 67 65 ไบต์

-2 ไบต์ขอบคุณที่วิธีการที่สั้นกว่า Chas บราวน์min()ใช้

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

จะเข้าในไวยากรณ์ f("abalone")(3)currying:

ตัวอย่างการทดสอบ

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

เยลลี่ , 8 7 ไบต์

J««U$⁸x

ลองออนไลน์!

มันทำงานอย่างไร

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 ไบต์ขอบคุณ @LeakyNun


หา @LeakyNun ดีมาก! ทิศทางที่ใกล้ที่สุดที่ฉันได้รับคือJ«¥@«U$x@9 ไบต์
fireflame241

กรุณาอธิบาย
สหาย SparklePony

@ fireflame241 genenrally, x@⁸เทียบเท่ากับ⁸x(ฉันใช้ที่นี่)
Leaky Nun

2

Haskell , 61 60 ไบต์

ขอบคุณ @Laikoni ที่ช่วยกำจัด 1 ไบต์

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

ลองออนไลน์!

Ungolfed:

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

การใช้งานที่ยอดเยี่ยมของdoบล็อก! บันทึกไบต์โดยปล่อยวงเล็บlength(s)ไว้
Laikoni

1

Haskell (แลมบ์บ็อต), 74 ไบต์

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

ลองออนไลน์!


คะแนนนำเข้านับคะแนน! คุณน่าจะดีกว่าด้วย>>=id
bartavelle

ใช่ผมว่าเกินไปก่อนและจากนั้นผมเห็นนี้ (นั่นเป็นเหตุผลที่มี Lambdabot ในวงเล็บ) วิธีที่ถูกต้องคืออะไร?
2560

ฉันยืนแก้ไขแล้วฉันคิดว่านี่ไม่เป็นไร!
bartavelle

น่ารู้มีการนำเข้าที่มีประโยชน์มากมายในรายการนั้น
อังคาร

1

J, 24 ไบต์

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

บิตใน parens - (<.&n<./(|.,:[)>:i.#s)- สร้าง1 2 ... n n n ... 2 1อาร์เรย์ดังนี้:

                   #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

เมื่อเราได้สิ่งนั้นแล้ว#โอเปอเรเตอร์ของ J จะทำสิ่งที่ขอโดยอัตโนมัติโดยทำซ้ำแต่ละองค์ประกอบตามจำนวนครั้งที่ระบุ

อยากเห็นผู้เชี่ยวชาญด้าน J ที่ได้ทำเรื่องนี้ ...


23 ไบต์ด้วยวิธีที่แตกต่างกันมาก[#~#@[$([:>:<:,&:i.-)@](อาจมีพื้นที่หลงทางอยู่ในนั้น) ฉันตกอยู่ในความสูญเสียว่าทำไมเบ็ดไม่ได้รับxแต่ไม่อยู่ในตำแหน่งที่จะดูแลได้มากเกินไป
โคล


1

Japt , 11 10 ไบต์

ËpVm°TEnUÊ

ทดสอบมัน


คำอธิบาย

การป้อนข้อมูลโดยนัยของสตริงและจำนวนเต็มUV

Ë

แผนที่เหนือUและแทนที่ตัวละครทุกตัว

Vm

รับขั้นต่ำของV...

°T

T(เริ่มแรก0) เพิ่มค่าโดย 1, ...

EnUÊ

และดัชนีของตัวละครในปัจจุบัน (คนE) หักออกจาก ( n) ความยาว ( Ê) Uของ

p

ทำซ้ำตัวละครปัจจุบันที่หลายต่อหลายครั้ง

เอาท์พุทสตริงสุดท้ายโดยปริยาย



0

Python 2 68 ไบต์

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

คุณไม่ต้องการf=คำตอบ ฟังก์ชั่นสามารถไม่ระบุชื่อ โดยที่ในใจคุณสามารถลบ 3 lambda s,n:''.join(c*min(i+1,len(s)-i,n)for i,c in enumerate(s))ไบต์ด้วย
notjagan

0

Husk , 10 9 ไบต์

₁₁ṀR
↔z↑N

ลองออนไลน์!

บรรทัดแรกคือฟังก์ชั่นหลักมันทำซ้ำแต่ละตัวอักษรnครั้งจากนั้นเรียกบรรทัดที่สองสองครั้ง

บรรทัดที่สองใช้ตัวอักษร N มากที่สุดจากแต่ละกลุ่มของตัวอักษรที่ซ้ำกันโดยที่ N คือดัชนี 1 ฐานของกลุ่มจากนั้นกลับรายการ



0

APL (Dyalog) 15 ไบต์

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

{} ฟังก์ชันที่อาร์กิวเมนต์ซ้าย (หมวก) คือและอาร์กิวเมนต์ขวา (สตริง) คือ :

≢⍵ นับจำนวนอักขระในสตริง

 สร้างที่หลายɩ ntegers

i← เก็บในฉัน

 ถอยหลัง

i⌊ ขั้นต่ำคู่กับi

⍺⌊ ขั้นต่ำแบบคู่กับฝา

⍵/⍨ ใช้ตัวเลขเหล่านั้นเพื่อทำซ้ำตัวอักษรของสตริง

ลองออนไลน์!




0

หอยเป๋าฮื้อเป็นปลาชนิดหนึ่ง (ดีหอย) ดังนั้น ...

> <> , 79 ไบต์

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

ลองออนไลน์หรือดูที่สนามเด็กเล่นปลา !

อ่านสตริงจาก STDIN และถือว่าตัวเลขอยู่ในสแต็กแล้ว

คำอธิบาย: บรรทัดที่สอง, ที่สี่และที่หกคือลูปหลัก รายละเอียดเป็นการจัดการสแต็กที่น่าเกลียด แต่ในจังหวะกว้างครั้งแรกบรรทัดที่สองเติมสแต็กสลับระหว่างอักขระของอินพุตและmin ( in ) โดยที่nคือหมวกความยาวและฉันคือดัชนีของอักขระใน อินพุต: สำหรับ "abalone", 3, stack จะมีลักษณะดังนี้

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

ถัดไปบรรทัดที่ 4 จะผ่านสแต็กในลักษณะเดียวกันในทางกลับกันเพื่อให้ได้จุดสิ้นสุดที่ด้านขวามือ:

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

จากนั้นบรรทัดที่หกจะจับคู่อักขระแต่ละตัว - หมายเลขและพิมพ์อักขระหลาย ๆ ครั้งตามหมายเลข

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.