คูณสตริงด้วยตัวเลข!


34

มีเรื่องที่ท้าทายมานานแล้วเกี่ยวกับการคูณสตริง มันแสดงให้เราเห็นว่าเราสามารถคูณตัวเลขได้ไม่เพียง แต่ยังรวมถึงสตริงด้วย อย่างไรก็ตามเรายังไม่สามารถคูณจำนวนด้วยสตริงได้อย่างถูกต้อง มีความพยายามครั้งหนึ่งที่จะทำเช่นนั้น แต่สิ่งนี้ผิดอย่างเห็นได้ชัด เราจำเป็นต้องแก้ไขมัน!

งานของคุณ:

เขียนฟังก์ชั่นหรือโปรแกรมที่ทวีคูณสองอินพุตสตริงและจำนวนเต็ม ในการ (คูณ) สตริงด้วยจำนวนเต็มคุณต้องแบ่งสตริงออกเป็นอักขระทำซ้ำอักขระแต่ละตัวในจำนวนครั้งเท่ากับจำนวนเต็มแล้วติดอักขระกลับเข้าด้วยกัน ถ้าจำนวนเต็มเป็นลบเราจะใช้ค่าสัมบูรณ์ของมันในขั้นตอนแรกแล้วย้อนกลับสตริง ถ้าอินพุตเป็น 0 เอาต์พุตจะไม่มีอะไร (อะไรก็ตามคูณด้วย 0 เท่ากับอะไร)

การป้อนข้อมูล:

สตริงที่ประกอบด้วยตัวอักษร ASCII ที่พิมพ์ได้และการขึ้นบรรทัดใหม่และเลขจำนวนเต็ม (ค่าลบที่เป็นไปได้)

เอาท์พุท:

สตริงคูณด้วยจำนวนเต็ม

ตัวอย่าง:

Hello World!, 3            --> HHHeeellllllooo   WWWooorrrlllddd!!!
foo, 12                    --> ffffffffffffoooooooooooooooooooooooo
String, -3                 --> gggnnniiirrrtttSSS
This is a fun challenge, 0 --> 
Hello
World!, 2                  --> HHeelllloo

                               WWoorrlldd!!

เกณฑ์การให้คะแนน:

นี่คือ , จำนวนไบต์ต่ำสุดที่ชนะ!


4
เราสามารถสันนิษฐานได้ว่าสตริงนั้นสามารถพิมพ์ได้เฉพาะ ASCII บวกกับขึ้นบรรทัดใหม่ได้หรือไม่
mbomb007

เราสามารถแสดงรายการสตริงได้หรือไม่?
มนุษย์โดยรวม

โซลูชันบางส่วนใน Retina ใช้ได้กับค่าบวกของจำนวนเต็มเท่านั้น ฉันอาจจะไม่ทำเวลาให้เสร็จถ้ามีคนต้องการ tio.run/##K0otycxL/P8/…
mbomb007

@ mbomb007 ใช่ขอโทษที่สละเวลานานขนาดนั้น
Gryphon - Reinstate Monica

@ โทนี่มนุษย์ไม่คุณอาจไม่
Gryphon - Reinstate Monica

คำตอบ:


31

เยลลี่ , 6 5 4 ไบต์

²Ɠxm

ลองออนไลน์!

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

²Ɠxm  Main link. Argument: n (integer)

²     Yield n².
 Ɠ    Read and eval one line of input. This yields a string s.
  x   Repeat the characters of s in-place, each one n² times.
   m  Takes each |n|-th character of the result, starting with the first if n > 0, 
      the last if n < 0.

1
ตกลงตอนนี้ฉันประทับใจจริงๆ ฉันชอบคำอธิบายเกี่ยวกับสิ่งมหัศจรรย์นี้เป็นจิ๋ว
Gryphon - Reinstate Monica

แน่ใจ ทันทีที่ฉันทำชุดทดสอบและเล่นกอล์ฟเสร็จแล้ว
Dennis

4
ตกลงถ้าคุณสามารถทำให้สิ่งนี้เล็กลงฉันจะเลิกพยายามตั้งคำถามที่จะนำคุณไป> 10 ไบต์
Gryphon - Reinstate Monica

13
ตกลงนั่นแหล่ะ ฉันเรียนเยลลี่ ฉันต้องการที่จะสามารถทำเวทย์มนตร์เกินไป
Gryphon - Reinstate Monica

2
เราทุกคนรู้ว่าการอภิปรายเกี่ยวกับเจลลี่โซ่กลายเป็นความยุ่งเหยิง ...
Erik the Outgolfer

9

JavaScript (ES6), 63 ไบต์

(s)(n)จะเข้าในไวยากรณ์ currying

s=>n=>[...s].reduce((s,c)=>n<0?c.repeat(-n)+s:s+c.repeat(n),'')

กรณีทดสอบ


3
+1 สำหรับreduce!
Neil

9

Python 3 , 44 ไบต์

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

ลองออนไลน์!


กรณีฐานดูเหมือนจะไม่สนใจอักขระตัวสุดท้าย
xnor

ไม่แน่ใจว่าทำไมฉันถึงทำอย่างนั้น ... ขอบคุณ!
Dennis

1
41 ไบต์ แต่ idk ถ้าการเรียกใช้ฟังก์ชันตามที่f(n,*s)ถือว่าถูกต้อง
Felipe Nardi Batista


6

05AB1E , 10 ไบต์

S²Ä×J²0‹iR

ลองออนไลน์!

S          # Split the string into characters
 ²Ä×       # Repeat each character abs(integer) times
    J      # Join into a string
     ²0‹i  # If the integer is less than 0...
         R #   Reverse the string

TFW คุณใช้เวลา 30 นาทีในการหาบางสิ่งเพื่อพิสูจน์ถึง @Riley ซึ่ง²0‹iไม่ใช่เส้นทางที่ดีที่สุดและมีทางเลือก 0 อย่างแท้จริง
Magic Octopus Urn

@MagicOctopusUrn ฉันเคยใช้บางอย่าง²0‹iมาก่อนและฉันคิดเสมอว่าจะต้องมีสิ่งที่ดีกว่า
Riley

ฉันคิดว่าฉันได้พยายามหาทางเลือกใหม่ประมาณ 10 ครั้งในขณะนี้ ... เสียเวลาชีวิตของฉัน 3 ชั่วโมง Ä.D)øJ¹0‹iRเป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้โดยไม่คัดลอกคุณฉันคิดว่าคุณได้รับการปรับปรุงแล้ว
Magic Octopus Urn

หากคุณเป็นห่วง Emigna ใช้è ที่นี่แต่ฉันไม่สามารถหาวิธีนำไปใช้ในสถานการณ์นี้ได้ จะบันทึกได้สูงสุด 1 ไบต์ถ้าเป็นเช่นนั้น
Magic Octopus Urn

SÂΛ@²Ä×Jใช้Îเพื่อกด 0 และอินพุตทำงานถ้าคุณเปลี่ยนคำสั่ง บันทึก 1 ไบต์! (แทนที่ด้วย if ดังนั้นจึงไม่จำเป็นต้องปิด)
kalsowerus

5

MATL , 9 ไบต์

y|Y"w0<?P

อินพุตคือ: number จากนั้นสตริง

สตริงที่มีการขึ้นบรรทัดใหม่มีการป้อนข้อมูลโดยใช้ถ่านดังต่อไปนี้:10['first line' 10 'second line']

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

พิจารณาปัจจัยการผลิตและ-3'String'

y      % Implicitly take two inputs. Duplicate from below
       % STACK: -3, 'String', -3
|      % Absolute value
       % STACK: -3, 'String', 3
Y"     % Run-length decoding
       % STACK: -3, 'SSStttrrriiinnnggg'
w      % Swap
       % STACK: 'SSStttrrriiinnnggg', -3
0<     % Less than 0?
       % STACK: 'SSStttrrriiinnnggg', 1
?      % If so
  P    %   Flip
       %   STACK: 'gggnnniiirrrtttSSS'
       % End (implicit). Display (implicit)

5

Haskell , 41 36 ไบต์

f n|n<0=reverse.f(-n)|1<3=(<*[1..n])

ลองออนไลน์!

ตัวอย่างการใช้งาน: อัตราผลตอบแทนf (-3) "abc""cccbbbaaa"

แก้ไข: -5 ไบต์ขอบคุณ xnor!


1
นอกจากนี้สำหรับ(<*[1..n]) ((<$[1..n])=<<)
xnor

@xnor ขอบคุณ! เป็นเรื่องดีที่รู้
Laikoni

5

V , 29, 23, 18 , 17 ไบต์

æ_ñÀuñÓ./&ò
ÀäëÍî

ลองออนไลน์!

hexdump:

00000000: e65f f1c0 75f1 d32e 2f26 f20a c0e4 ebcd  ._..u.../&......
00000010: ee                                       .

ขอบคุณ @ nmjcman101 สำหรับการบันทึก 6 ไบต์ซึ่งสนับสนุนให้ฉันบันทึกอีก 5!

การแก้ไขดั้งเดิมนั้นแย่มาก แต่ตอนนี้ฉันภูมิใจในคำตอบนี้มากเพราะมันจัดการกับจำนวนลบได้อย่างน่าประหลาดใจ (V ไม่มีการสนับสนุนตัวเลขและไม่สนับสนุนตัวเลขติดลบ)

คำอธิบาย:

æ_          " Reverse the input
  ñ  ñ      " In a macro:
   À        "   Run the arg input. If it's positive it'll give a count. If it's negative
            "   running the '-' will cause V to go up a line which will fail since we're
            "   on the first line, which will break out of this macro
    u       "   (if arg is positive) Undo the last command (un-reverse the line)
      Ó./&ò " Put every character on it's own line

ณ จุดนี้บัฟเฟอร์จะมีลักษณะดังนี้:

H
e
l
l
o

w
o
r
l
d
!
<cursor>

เป็นสิ่งสำคัญที่จะไม่ขึ้นบรรทัดใหม่และเคอร์เซอร์อยู่บนนั้น

À           " Run arg again. If it's negative, we will move up a line, and then give the 
            " absolute value of the count. If it's positive (or 0) it'll just give the
            " count directly (staying on the last line)
 ä          " Duplicate... (count times)
  ë         "   This column. 
   Íî       " Remove all newlines.

ลองใช้งานออนไลน์ไม่กี่ไบต์! ฉันมักจะเกลียด "จำนวนลบหมายถึงอย่างอื่น!" กรณีขอบเกินไป นี่เป็นกรณีที่0เคสพิเศษของคุณใน V มีประโยชน์อย่างยิ่ง
nmjcman101

ขออภัยเกี่ยวกับจำนวนลบพิเศษ อย่างไรก็ตามคำตอบจำนวนมากได้ถูกรวมเข้าไว้ในคำตอบหลักของพวกเขา ประทับใจกับ V ตัวนี้
Gryphon - Reinstate Monica

@ nmjcman101 โอ้ว้าวมันชัดเจนมากฉันไม่รู้ว่าฉันไม่คิดอย่างไร ขอขอบคุณ!
DJMcMayhem

@Gryphon โอ้ฉันรู้ ความท้าทายนั้นใช้ได้ฉันไม่ชอบภาษาของตัวเองเพราะแย่ในสิ่งที่ควรจะเป็น : P
DJMcMayhem

5

R, 83 78 76 ไบต์

function(s,i)cat('if'(i<0,rev,`(`)(rep(el(strsplit(s,'')),e=abs(i))),sep='')

ฟังก์ชั่นไม่ระบุชื่อ

Frederic บันทึก 3 ไบต์ Giuseppe บันทึก2 4

คำอธิบาย:

     el(strsplit(s,''))                      # split string into list characters
 rep(                  ,e=abs(i)))           # repeat each character abs(i) times


    'if'(i<0,rev,   ){...}                 # if i>0, reverse character list
                 `(`                       # otherwise leave it alone: `(` is the identity function
cat(                      ,sep='')         # print the result

แบบทดสอบ:

> f('Hello World!', 3 )
HHHeeellllllooo   WWWooorrrlllddd!!!
> f('foo', 12)
ffffffffffffoooooooooooooooooooooooo
> f('String', -3)
gggnnniiirrrtttSSS
> f('This is a fun challenge', 0)
> f('Hello
+ World!', 2)
HHeelllloo

WWoorrlldd!!

2
ทำได้ดี ! คุณสามารถบันทึกไม่กี่ไบต์โดยการเขียนrep(foo,,,3)หรือrep(foo,e=3)(ความยาวเท่ากัน) ;-)
Frédéric

@ Frédéricคุณชนะฉันมันฉันจะพูดในสิ่งเดียวกัน!
จูเซปเป้

1
ใช่ไม่มีปัญหา! a=โดยทั่วไปฉันต้องการที่จะกำจัดของเครื่องหมายวงเล็บดังนั้นฉันต้องการที่จะกำจัด ดังนั้นฉันจึงใช้ค่าของaเป็นอาร์กิวเมนต์ในฟังก์ชั่นย้อนกลับถ้าi<0โดยมีเงื่อนไขกลับฟังก์ชั่น (ซึ่งเป็นเหตุผลที่ฉันต้องการ backquotes) แต่ฉันจำเป็นต้องใช้ฟังก์ชั่นตัวตนสำหรับi>=0กรณีดังนั้นฉันใช้(ซึ่งอยู่ใกล้พอ (ในความเป็นจริงฟังก์ชั่น R แปลก
Giuseppe

1
btw เอกสาร R สำหรับ Parenบอกว่า(มีความหมายเทียบเท่ากับตัวตนfunction(x)x
Giuseppe




4

Brain-Flak (BrainHack) , 154 152 ไบต์

([(({})(<()>))]<>)<>{({}()<([{}]()<([{}])>)<>({}<>)<>>)<>}{}<>{}<>({}<([][()]){{}({<({}<(({}<>)<>)>())>[()]}<{}{}>)([][()])}{}{}<>>){{}{({}<>)<>}(<>)}{}

ลองออนไลน์!

มาที่นี่เพื่อให้การแข่งขัน DJMcMayhem ;)

คำอธิบาย

นี่คือคำอธิบายของ DJMcMayhem ที่แก้ไขแล้ว

#Compute the sign and negative absolute value 
([(({})<(())>)]<>)<>{({}()<([{}]()<([{}])>)<>({}<>)<>>)<>}{}<>{}<>

#Keep track of the sign
({}<

    #For each char in the input string:
    ([][()])
    {
        {}

        #Push n copies to the alternate stack
        ({<({}<(({}<>)<>)>())>[()]}<{}{}>)

        #Endwhile
        ([][()])
    }{}{}<>

#Push the sign back on
>)

#If so...
{{}

    #Reverse the whole stack
    {({}<>)<>}

    #And toggle over, ending the loop
    (<>)
}

#Pop the counter off
{}

4

J , 19 15 13 ไบต์

(#~|)A.~0-@>]

ลองออนไลน์!

คำอธิบาย

        0-@>]      NB. first or last index depending on sign of right arg
     A.~           NB. get first or last Anagram of left arg
(#~|)              NB. copy left arg, absolute-value-of-right-arg times

2
(#~|)A.~0-@>]สำหรับ 13 ไบต์
ไมล์

ดีมาก @miles!
Tikkanz

ไม่มีปัญหา. คุณไม่จำเป็นต้องนับวงเล็บที่ใช้ในการเรียกคำกริยา
ไมล์

1
นอกจากนี้ 13 ไบต์:#~ ::(|.@#~|)
FrownyFrog

3

Dyalog APL ขนาด 15 ไบต์

{⌽⍣(⍵<0)⊢⍺/⍨|⍵}

สตริงเป็นอาร์กิวเมนต์ซ้ายจำนวนเป็นอาร์กิวเมนต์ที่ถูกต้อง

ลองออนไลน์!

อย่างไร?

⍺/⍨ - ทำซ้ำสตริง

|⍵ - abs (จำนวน) ครั้ง

⌽⍣ - ย้อนกลับถ้า

(⍵<0) - ตัวเลขต่ำกว่า 0


อืมมันคงจะดีถ้า TIO ชอบทำงานเหรอ?
Gryphon - Reinstate Monica

@Gryphon และนี่ไปไบต์ ...
Uriel

ใช่ฉันเพิ่งรู้ว่าและพิมพ์ความคิดเห็นของฉันเพื่อบอกคุณ
Gryphon - Reinstate Monica

3

MATLAB, 37 ไบต์

@(s,n)flip(repelem(s,abs(n)),(n<0)+1)

ฟังก์ชันนี้กำหนดและไม่ระบุชื่อพร้อมอินพุตs: string และn: number

ตัวอย่างการทำงาน:

>> @(s,n)flip(repelem(s,abs(n)),(n<0)+1)
ans = 
    @(s,n)flip(repelem(s,abs(n)),(n<0)+1)

>> f = ans;

>> f('String', 3)
ans =
SSStttrrriiinnnggg

>> f('String', -3)
ans =
gggnnniiirrrtttSSS

>> f('String', 0)
ans =
   Empty matrix: 1-by-0

การเลือกมิติที่จะพลิกดูดีกว่าความยุ่งเหยิงที่ฉันเขียน😛 +1 และฉันลืมrepelemอยู่เสมอ
Stewie Griffin

@StewieGriffin คุณสามารถรวมคำตอบนั้นด้วย :-) (+1 แล้ว) ฉันคิดว่าไม่มีrepelemใน Octave สำหรับตอนนี้
Luis Mendo

3

Brain-Flak (Haskell) , 202 192 ไบต์

(({})<(([({})]<>)){({}()<([{}])<>({}<>)<>>)<>}{}([{}]<><{}>)([][()]){{}({<({}<(({}<>)<>)>[()])>()}<{}{}>)([][()])}{}{}<>>)([({}<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}{{}{({}<>)<>}(<>)}{}

ลองออนไลน์!

นี่อาจเป็นภาษาที่แย่ที่สุดที่จะทำได้ แต่ก็เสร็จแล้ว ขอขอบคุณ @Wheatwizard ที่ให้บริการล่าม Haskell ซึ่งอนุญาตให้ใช้รูปแบบอินพุตแบบผสม นี่จะมีความยาวประมาณ 150 ไบต์หากไม่มีมัน

คำอธิบาย:

#Keep track of the first input (n)
(({})<

    #Push abs(n) (thanks WheatWizard!)
    (([({})]<>)){({}()<([{}])<>({}<>)<>>)<>}{}([{}]<><{}>)

    #For each char in the input string:
    ([][()])
    {
        {}

        #Push n copies to the alternate stack
        ({<({}<(({}<>)<>)>[()])>()}<{}{}>)

        #Endwhile
        ([][()])
    }{}{}<>

#Push the original n back on
>)

#Push n >= 0
([({}<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}

#If so...
{{}

    #Reverse the whole stack
    {({}<>)<>}

    #And toggle over, ending the loop
    (<>)
}

#Pop the counter off
{}

คุณสามารถใช้ 52 ไบต์ abs ของฉันเพื่อบันทึก 2 ไบต์คุณสามารถใช้ 50 ไบต์ -abs ที่ฉันให้และเพิ่มขึ้นแทนการลดลงเพื่อบันทึก 6 ไบต์
ข้าวสาลี Wizard


3

Java (OpenJDK 8) , 99 98 89 87 85 ไบต์

s->n->{for(int i=s.length*(n<0?n:-n),r=n<0?0:~i;i++<0;)System.out.print(s[(i+r)/n]);}

ลองออนไลน์!

  • -2 ไบต์ต้องขอบคุณ @Xanderhall
  • -2 ไบต์ขอบคุณ @Nevay

ความคิดที่ไม่ทำงาน (ใช้เวลานานกว่า): ย้อนกลับสตริงก่อนใช้สตรีม
Olivier Grégoire

1
บันทึก 2 ไบต์ด้วยs[(n<0?-l-~i:i)/n]
Xanderhall

@Xanderhall ขอบคุณ! ฉันกำลังมองหาอันนั้นมานานแล้วที่ดวงตาของฉันมีเลือดออก ฉันรู้ว่ามันเป็นไปได้ฉันแค่ทำทุกอย่างยุ่งเมื่อนำมาใช้
Olivier Grégoire

1
@ user902383 ใช่มันบังคับ หากเป็นตัวเลือกสิ่งต่าง ๆ มากมายจะอ่านไม่ออก นอกจากนี้ฟังก์ชั่นของฉันไม่ได้เป็น "คำสั่งเดียว" แต่สำหรับ for-loop ซึ่งรวมหลายคำสั่ง
Olivier Grégoire

1
คุณสามารถบันทึก 1 ไบต์โดยการเพิ่มในสภาพi s->n->{for(int l=s.length*(n<0?-n:n),i=0;i++<l;)System.out.print(s[(n<0?i-l:i-1)/n]);}ไบต์อื่นสามารถบันทึกได้โดยทำซ้ำจาก -l ถึง 0 แทน ( s->n->{for(int i=s.length*(n<0?n:-n),r=n<0?0:~i;i++<0;)System.out.print(s[(i+r)/n]);})
Nevay


2

Ruby , 59 +1 = 60 ไบต์

ใช้-nธง

n=eval$_
a=$<.read
a.reverse!if n<0
a.chars{|i|$><<i*n.abs}

ลองออนไลน์!


1
eval$_สั้นกว่า$_.to_i1 ไบต์ String#charsยังสามารถรับบล็อกแบบเดียวString#each_charสามารถ สุดท้ายให้ย้อนกลับอินพุตก่อนประมวลผลอักขระแต่ละตัวเพื่อให้คุณสามารถพิมพ์ได้โดยตรงแทน (เปลี่ยนสถานะเป็น-n) ทั้งหมดนี้รวมเข้าด้วยกันเป็น 55 + 1 = 56 ไบต์
หมึกมูลค่า

2

ถ่าน 16 ไบต์

Fθ¿‹η0F±Iη←ιFIηι

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

Fθ              For each character in the input string
  ¿‹η0          If the input number is less than zero
      F±Iη      Repeat the negation of the input number times
          ←ι    Print the character leftwards (i.e. reversed)
      FIη       Otherwise repeat the input number times
         ι      Print the character


2

Japt , 12 ไบต์

®pVaìr!+sVg

ลองออนไลน์!

คำอธิบาย

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

®pVaÃ

แผนที่ ( ®) จดหมายแต่ละฉบับของU(โดยนัย) ไปยังตัวเองซ้ำแล้วซ้ำอีก ( p) abs(V)( Va) ครั้ง

¬r

เปลี่ยนสตริงให้เป็นอาร์เรย์ของตัวอักษร ( ¬) และลด ( r) ที่มี ...

!+sVg

"!+".slice(sign(V))- นี้ทั้งช่วยลดด้วย+a + bหรือ→!+ ขอบคุณ @Arnauld สำหรับแนวคิดย้อนหลัง - ลด!b + a


ฉันรู้สึกว่า£gY*Vg)pVaควรนำไปสู่ทางออกที่สั้นกว่า แต่สมองของฉันหยุดทำงานเพื่อวันหยุดดังนั้นฉันจึงไม่สามารถเข้าใจได้ คุณอาจทำอะไรกับมันได้
Shaggy


2

C89 ไบต์

main(int c,char**v){for(;*v[1];v[1]++)for(c=atoi(v[2]+(*v[2]=='-'));c--;)putchar(*v[1]);}

ฉันเห็นเวอร์ชันของ Ben Perlinและสงสัยว่าคุณจะสั้นลงหรือไม่และมีโปรแกรมเต็มรูปแบบ แน่นอนatoi()และputchar()ไม่แพงในแง่ของไบต์? ดูเหมือนว่าฉันถูก!


2

Pyth, 13 11 ไบต์

*sm*.aQdz._

ลองมัน!

-2 ไบต์ต้องขอบคุณ @jacoblaw

คำอธิบาย

*sm*.aQdz._   
  m     z     # map onto the input string (lambda var: d)
   *.aQd      # repeat the char d as often as the absolute value of the input number 
 s            # sum the list of strings into a single string
*        ._Q   # Multiply with the sign of the implicit input value: reverse for negative Q 

วิธีเก่า 13 ไบต์

_W<Q0sm*.aQdz

ลองมัน!


คุณสามารถบันทึกสองไบต์ด้วยตรรกะการกลับรายการนี้
jacoblaw

2

Python 3 , 68 ไบต์

h=lambda s,n:h(s[::-1],-n)if n<0 else s[0]*n+h(s[1:],n)if s else s*n

ลองออนไลน์!


สวัสดีและยินดีต้อนรับสู่เว็บไซต์! แต่คำตอบนี้ไม่ถูกต้องในขณะนี้เพราะมันไม่สนับสนุนจำนวนลบ ความท้าทายกล่าวว่า:If the integer is negative, we use its absolute value in the first step, and then reverse the string.
DJMcMayhem

ขอบคุณสำหรับการแก้ไข! BTW คุณสามารถนำสองไบต์ออกโดยการลบช่องว่างหลังจากวงเล็บ)
DJMcMayhem

แก้ไขขอขอบคุณสำหรับความช่วยเหลือ
Kavi

n<0 else=>n<0else
Zacharý

1

QBICขนาด 32 ไบต์

g=sgn(c)[_l;||[:*g|?_sA,b*g,1|';

คำอธิบาย

            Takes inputs A$ ('Hello'), and c (-3) from the cmd line
g=sgn(c)    Save the sign of c          -1
[_l;||      FOR each char in A$
[:*g|       FOR the number of repetitions wanted    (ie: -3 * -1)
            Note that : reads a number from the cmd line, and c is the first 
            available variable to save it in after a and b got used as FOR counters.
            Also note that a negative value times the sign becomes positive.
?_s         PRINT a substring
  A         of A$
 ,b*g       startng at char n, where n is the first FOR loop counter times the sign
                That means that when c is negative, so is this. A negative starting index
                on Substring instructs QBIC to take from the right.
 ,1|        taking 1 char.
';          This bit injects a literal ; in the output QBasic, to suppress newlines om PRINT

1

Mathematica, 89 ไบต์

(T=Table;t=""<>T[s[[i]]~T~Abs@#2,{i,Length[s=Characters@#]}];If[#2>0,t,StringReverse@t])&


อินพุต

["Hello World!", 3]


1

Braingolf , 22 ไบต์

1-v{R.[v.R]v}R[v>R]v&@

ลองออนไลน์!

เอ๊ะไม่เลว

รับอินพุตเป็นจำนวนเต็มและอาร์เรย์ของอักขระ

อีกวิธีหนึ่งคือ:

Braingolf , 31 ไบต์

l1->[M]1-v&,{R.[v.R]v}R[v>R]v&@

ลองออนไลน์!

รับอินพุตเป็นจำนวนเต็มและสตริง


1

C, 109 ไบต์

char *f(int n, char *s){char *o=calloc(n,strlen(s)+1),*t=o;while(*s){for(int i=n;i--;)*t++=*s;s++;}return o;}

เริ่มต้นด้วยการประกาศฟังก์ชั่นที่ใช้ int และสตริงและสร้างสตริง (ดูเหมือนว่าโดยนัยว่าหน่วยความจำไม่ได้ถูกจัดสรรล่วงหน้าและจะต้องสร้างขึ้นมา) ดูเหมือนว่าวิธีการตรงไปข้างหน้านั้นสั้นกว่าความพยายามใด ๆ .

char *f(int n, char *s){
  char *o=calloc(n, strlen(s)+1),
    *t=o;

  while (*s) {
    for(int i=n; i--; )
      *t++=*s;
    s++;
  }

 return o;

}


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