ขยายศิลป์ ASCII


64

ในการท้าทายนี้คุณจะต้องใช้ศิลปะ ASCII หลายบรรทัดในการป้อนข้อมูลเช่น:

 OOOOOO  OOOOOO  OOOOOO  OOOOOOO      OOOOOO   OOOOOO  OO      OOOOOOO 
OO      OO    OO OO   OO OO          OO       OO    OO OO      OO      
OO      OO    OO OO   OO OOOOO       OO   OOO OO    OO OO      OOOOO   
OO      OO    OO OO   OO OO          OO    OO OO    OO OO      OO      
 OOOOOO  OOOOOO  OOOOOO  OOOOOOO      OOOOOO   OOOOOO  OOOOOOO OO      

และคุณจะใช้จำนวนเต็มเป็นอินพุทด้วย คุณต้องแสดงผลงานศิลปะ ASCII ที่ขยายให้ใหญ่ขึ้นตามจำนวนที่ระบุด้วยจำนวนเต็ม ตัวอย่างเช่นถ้าคุณใช้อาร์กิวเมนต์ที่สองของ3ผลลัพธ์จะเป็น

   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO                  OOOOOOOOOOOOOOOOOO         OOOOOOOOOOOOOOOOOO      OOOOOO                  OOOOOOOOOOOOOOOOOOOOO
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO                  OOOOOOOOOOOOOOOOOO         OOOOOOOOOOOOOOOOOO      OOOOOO                  OOOOOOOOOOOOOOOOOOOOO
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO                  OOOOOOOOOOOOOOOOOO         OOOOOOOOOOOOOOOOOO      OOOOOO                  OOOOOOOOOOOOOOOOOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO                              OOOOOO                     OOOOOO            OOOOOO   OOOOOO                  OOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO                              OOOOOO                     OOOOOO            OOOOOO   OOOOOO                  OOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO                              OOOOOO                     OOOOOO            OOOOOO   OOOOOO                  OOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOOOOOOOOOOO                     OOOOOO         OOOOOOOOO   OOOOOO            OOOOOO   OOOOOO                  OOOOOOOOOOOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOOOOOOOOOOO                     OOOOOO         OOOOOOOOO   OOOOOO            OOOOOO   OOOOOO                  OOOOOOOOOOOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOOOOOOOOOOO                     OOOOOO         OOOOOOOOO   OOOOOO            OOOOOO   OOOOOO                  OOOOOOOOOOOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO                              OOOOOO            OOOOOO   OOOOOO            OOOOOO   OOOOOO                  OOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO                              OOOOOO            OOOOOO   OOOOOO            OOOOOO   OOOOOO                  OOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO                              OOOOOO            OOOOOO   OOOOOO            OOOOOO   OOOOOO                  OOOOOO
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO                  OOOOOOOOOOOOOOOOOO         OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO   OOOOOO
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO                  OOOOOOOOOOOOOOOOOO         OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO   OOOOOO
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO                  OOOOOOOOOOOOOOOOOO         OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO   OOOOOO

โดยเฉพาะอย่างยิ่งตัวละครแต่ละตัวจะต้องกลายเป็นnโดยnกล่องของตัวละครที่ที่nเป็นอาร์กิวเมนต์จำนวนเต็ม ตัวอย่างเช่นอินพุตของ

ab
cd

และ 3 จะส่งผลให้

aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ


ascii art ดูน่าสนใจในรายการคำถาม
Justin

6
ฉันคิดว่าคุณควรทำรอบรอง / โบนัสสำหรับวิธีการที่นำ aliasing ที่เหมาะสมมาสู่ศิลปะที่ขยายใหญ่ขึ้น โค้ดกอล์ฟยักษ์ของคุณดูช่างสวย
AmeliaBR

5
@AmeliaBR ดูที่นี่
Howard

คำตอบ:


37

APL, 7 ตัวอักษร / ไบต์ *

{⍺/⍺⌿⍵}

ฟังก์ชั่นที่รับตัวเลขและสตริงอินพุตเป็นพารามิเตอร์และส่งคืนผลลัพธ์:

      a
abcde
fghij
      2 {⍺/⍺⌿⍵} a
aabbccddee
aabbccddee
ffgghhiijj
ffgghhiijj
      3 {⍺/⍺⌿⍵} a
aaabbbcccdddeee
aaabbbcccdddeee
aaabbbcccdddeee
fffggghhhiiijjj
fffggghhhiiijjj
fffggghhhiiijjj

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL สามารถเขียนด้วยชุดอักขระแบบไบต์เดียว (ดั้งเดิม) ของตัวเองที่จับคู่สัญลักษณ์ APL กับค่า 128 ไบต์บน ดังนั้นเพื่อจุดประสงค์ในการให้คะแนนโปรแกรมของ N chars ที่ใช้อักขระ ASCII และสัญลักษณ์ APLเท่านั้นจึงถือได้ว่ามีความยาว N ไบต์


1
... : O มันทำงานยังไง?
Doorknob

4
@DoorknobofSnow การแสดงมาตรฐานสำหรับสตริงหลายบรรทัดคือ APL เป็นเมทริกซ์อักขระรูปสี่เหลี่ยมผืนผ้า (ที่มีช่องว่างต่อท้ายหากบรรทัดมีความกว้างไม่เท่ากัน ... ใช่ APL นั้นเก่า) /ฟังก์ชัน (เพื่อไม่ให้สับสนกับตัว/ดำเนินการ ... ใช่สัญลักษณ์เดียวกัน ) ทำซ้ำและ / หรือลบคอลัมน์ออกจากเมทริกซ์ตามอาร์กิวเมนต์ด้านซ้าย หากนั่นคือเซนต์คิตส์และเนวิส (จำนวนง่าย) ก็จะถูกจำลองแบบสำหรับคอลัมน์อินพุตทั้งหมด ดังนั้นจึง2/mเป็นเมทริกซ์ที่มีคอลัมน์ทั้งหมดสองเท่า ที่แตกต่างไม่เหมือนกัน แต่สำหรับแถว (หรือเครื่องบินครั้งแรกแกนในกรณีทั่วไป.)
Tobia

6
ภาษาที่สวยงามใช่มั้ย จริงๆแล้วมันสามารถอ่านได้สวยเมื่อคุณเรียนรู้สัญลักษณ์ไม่กี่โหล มากไปกว่าภาษาเสียงรบกวนสาย ASCII ที่คุณเห็นในที่นี่ ...
Tobia

เย็น. เป็น in ในภาษาเสมอหรือไม่ มันไม่ได้อยู่ในหนังสือ Gilman and Rose และหนังสือ Iverson ใน APL \ 360 กล่าวถึง / [1] แต่ไม่ใช่⌿
Mark Plotnick

2
ว้าว. ที่. คือ. เพียงแค่ น่ากลัว ฉัน. อย่างรุนแรง ประหม่า โดย นี้. รหัส. ฉันต้องการเสนอมากกว่า +1 แต่ตัวแทนของฉันค่อนข้างต่ำสำหรับค่าหัว
Erik the Outgolfer

35

GolfScript 20 ตัวละคร

n%(~{.{*}+@1/%n+*}+/

รับอินพุตทั้งหมดจาก STDIN บรรทัดแรกคือปัจจัยการปรับสเกลส่วนที่เหลือเป็นอินพุตมัลติไลน์ คุณสามารถลองตัวอย่างออนไลน์

อินพุต

3
ab
cd

เอาท์พุต

aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

รหัส

n%            # Split the input into separate lines
(~            # Take the first line and evaluate (factor)
{             # {...}+/ adds the factor to the code block and loops over
              # the remaining lines (i.e. the factor will be the top of stack
              # for each line of input
   .{         # Same thing, duplicate factor and add it to code block and
              # loop over each character (1/ splits the string into chars)
     *        # multiply single-char string with factor
   }+@1/%
   n+         # Join string by adding a newline
   *          # Multiply the line by the factor (left from the . operation)
}+/

เฮ้! คุณมีรูปแบบการป้อนข้อมูลคะแนนและเวลาที่ดีกว่าฉัน: - / +1
John Dvorak

นอกจากนี้ฉันก็อ่านหนังสือด้วย
John Dvorak

2
@JanDvorak เพิ่มคำอธิบายบางอย่าง
โฮเวิร์ด

ว้าว. 1/วันนี้ผมได้เรียนรู้ ฉันยังต้องใช้value function +เพิ่มเติม
John Dvorak

2
@CoryKlein: มันจะช่วยได้ถ้าคุณบอกเราว่ามีข้อผิดพลาดอะไรแต่ ... * มองเข้าไปในลูกบอลคริสตัล * ... อาจเป็นเพราะgolfscript.rbมันไม่ได้ทำเครื่องหมายว่าปฏิบัติการหรือบรรทัดแรกมีเส้นทางผิดไปล่ามทับทิม สำหรับระบบของคุณ Oh, และที่สันนิษฐานว่าควรจะเป็นecho catลองcat inputFile | ruby golfscript.rb scriptFile(หรือเพียงแค่ruby golfscript.rb scriptFile < inputFile) และดูว่าการทำงาน
Ilmari Karonen

19

J, 20 17 ตัวอักษร

f=.([#&.|:#)];._2

กำหนดคำกริยาfที่ทำในสิ่งที่จำเป็น การใช้งาน:

   3 f a
aaaccc
aaaccc
aaaccc
bbbddd
bbbddd
bbbddd

โดยที่aสตริงอินพุต
ใน Windows จำเป็นต้องใช้อักขระพิเศษเพื่อลบ\r:

f=.([#&.|:#)}:;._2

คำอธิบาย :

];._2\nสับสายป้อนเป็นชิ้นขึ้นอยู่กับตัวอักษรตัวสุดท้ายของสตริงซึ่งในกรณีนี้จะเป็น Windows มี\r\nดังนั้นเราจำเป็นต้องใช้}:เพื่อตัดอักขระพิเศษออก: }:;._2. ตัดเอกสารกริยา

ส่วนที่เหลือของรหัส (ยกเว้นมอบหมายf=.) เป็นส้อม
มันพังลงมาเช่นนี้[ #&.|: #

ถ้าaเป็นสายป้อนของเราคำนวณจะเป็น3 # a(เราจะเรียกผลนี้x) แล้ว3 [ a(เราจะเรียกผลนี้y) y #&.|: xแล้ว

3 # aaเพียงแค่ทำให้สามสำเนาของสมาชิกทุกคน เอกสารสำเนาคำกริยา
นี้จะเปิด

ab
cd

เข้าไป

aaabbb
cccddd

3 [ aเพิ่งส่งคืน 3 เอกสารคำกริยาซ้าย

สุดท้ายy #&.|: xคือyการคัดลอกภายใต้ xtranspose การ#ทำงานเหมือนก่อนหน้า แต่&.|:บอกให้ J ให้เปลี่ยนค่าอินพุตก่อนจากนั้นจึงแปลงกลับเมื่อเสร็จสิ้น ภายใต้เอกสารคู่มือร่วมให้เปลี่ยนเอกสารคำกริยา

ผลัดขนย้าย

aaabbb
cccddd

เข้าไป

ac
ac
ac
bd
bd
bd

จากนั้นสำเนาจะเปลี่ยนเป็น

aaaccc
aaaccc
aaaccc
bbbddd
bbbddd
bbbddd

และการเปลี่ยนกลับให้คุณ

aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

4
Windows แย่ใช่มั้ย : P
cjfaure

@Trimsty แน่นอนมัน
Gareth

สิ่งนี้สั้นกว่า: [##"1นอกจากนี้ฉันไม่แน่ใจเกี่ยวกับกฎที่ไม่ได้เขียนของการเล่นกอล์ฟใน J แต่ฉันจะบอกว่าการแยกสตริงและการมอบหมายอาจถูกละเว้นได้เนื่องจากข้อกำหนดที่หลวมของคำถาม ฉันทำอย่างนั้นในคำตอบ APL ของฉัน ตัวอย่าง:2 ([##"1) 'abcde',:'fghij'
Tobia

17

Haskell, 49 ไบต์

x=(=<<).replicate
e n=unlines.x n.map(x n).lines

ฟังก์ชั่นการขยายคือeการนับและสตริงและส่งคืนสตริง:

λ: putStrLn $ e 3 "ab\ncd\n"
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

15

APL, 11 ตัวอักษร

@Gareth ได้ทำสิ่งเดียวกันเป็นครั้งแรกใน J ดังนั้นรายการ APL นี้เป็นเพียงการจัดนิทรรศการไม่ใช่การแข่งขัน - เขาเป็นผู้ชนะ

      E←{⍉⍺/⍉⍺/⍵}

การใช้งาน: การขยายใน ARG ด้านซ้าย (⍺), ศิลปะในรูปแบบของเมทริกซ์อักขระ 2d ใน ARG ด้านขวา (⍵)
⍺ / ⍵จะทำซ้ำองค์ประกอบในแต่ละแถวของเวกเตอร์หรือเมทริกซ์ (2 / 'OO' กลายเป็น 'OO OO')
⍉⍺ / ⍉จะแปลงที่ทำซ้ำองค์ประกอบเปลี่ยนที่

(หากเราต้องการความชัดเจนมากกว่าความยาวของโปรแกรมรหัสอาจเป็น E ← {⍺ / [1] ⍺ / ⍵})

      I←5 32⍴' OOOOOO  OOOOOO  OOOOOO  OOOOOOOOO      OO    OO OO   OO OO     OO      OO    OO OO   OO OOOOO  OO      OO    OO OO   OO OO      OOOOOO  OOOOOO  OOOOOO  OOOOOOO'
      I
 OOOOOO  OOOOOO  OOOOOO  OOOOOOO
OO      OO    OO OO   OO OO     
OO      OO    OO OO   OO OOOOO  
OO      OO    OO OO   OO OO     
 OOOOOO  OOOOOO  OOOOOO  OOOOOOO

      3 E I
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO               
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO               
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO               
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOOOOOOOOOOO      
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOOOOOOOOOOO      
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOOOOOOOOOOO      
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO               
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO               
OOOOOO                  OOOOOO            OOOOOO   OOOOOO         OOOOOO   OOOOOO               
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO
   OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOO      OOOOOOOOOOOOOOOOOOOOO

ฉันควรจะชี้ให้เห็นว่าฉันใช้ 5 chars เปลี่ยนอินพุตสตริงเป็นอาร์เรย์อักขระดังนั้นคุณจะเอาชนะฉันด้วยตัวอักษร 1 ตัวเท่านั้น :-)
Gareth

2
J ถูก hobbled โดยเป้าหมายการออกแบบที่น่ารำคาญซึ่งตัวดำเนินการถูก จำกัด ชุดอักขระ ASCII :)
Mark Plotnick

2
แม้ว่าถ้าเราวัดเป็นไบต์เช่น OP ที่กล่าวมานี้ก็คือ 44 ไบต์ (หมายถึงยูนิโค้ดแน่นอนไม่ใช่ utf-8) และ @ Gareth's ยังคงเป็น 17 นั่นคือข้อเสียของภาษาที่ไม่ได้ จำกัด อยู่ที่ ASCII
cjfaure

5
@Trimsty แต่ APL มีชุดอักขระเป็นของตัวเองซึ่งแมปอักขระแต่ละตัวเป็นไบต์เดียวดังนั้นเนื้อหานี้จึงยังคงเป็น 11 ไบต์
ความผันผวน

1
@ ความผันผวน Hm ช่างประหลาดจริงๆขอโทษด้วยไม่รู้: P
cjfaure

13

สคริปต์ Bash / sed 48 ตัวอักษร

printf -vr %$1s
sed -n s/./${r// /&}/g${r// /;p}

บันทึกเป็นสคริปต์chmod +xและเรียกใช้:

$ ./asciiexpand 3 <<< $'ab\ncd'
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd
$ 

มันทำงานยังไง?

เนื้อของมันอยู่ในsedคำสั่ง ตัวอย่างเช่นถ้า n = 3 คำสั่ง sed จะถูกขยายเป็นบางอย่างเช่น:

sed -n 's/./&&&/g;p;p;p'

sedคำสั่งผสมนี้สามารถแบ่งออกเป็น:

  • s/./&&&/g - คำสั่งทดแทนนี้ตรงกับตัวละครแต่ละตัวและแทนที่ด้วยตัวละครซ้ำ 3 ครั้ง
  • pคำสั่ง3x - เพียงแค่พิมพ์พื้นที่รูปแบบทั้งหมด (เช่นบรรทัดปัจจุบัน) 3 ครั้ง

เราส่งผ่านความไม่พอใจ-nที่จะบอกว่าจะไม่พิมพ์อะไรนอกจากจะได้รับคำสั่งอย่างชัดเจนดังนั้นเราจึงสามารถควบคุมสิ่งที่พิมพ์และจำนวนครั้ง

ฉันไม่สามารถหาวิธีที่รวดเร็วในการสร้างสตริงการทำซ้ำความยาวโดยพลการโดยตรงsedดังนั้นฉันจึงใช้bashเทคนิคบางอย่างแทน:

printf -vr "%3s"

นี้จะพิมพ์สตริง (ไม่ได้ระบุเช่นว่างเปล่า) มี 3 ช่องว่างนำและกำหนดผลไปยังตัวแปรbashr

จากนั้นเราใช้bashการขยายพารามิเตอร์เพื่อแปลงสตริงของช่องว่างนี้เป็นสิ่งที่เราต้องการแทนที่ลงในsedนิพจน์:

$ echo ${r// /&}
&&&
$ echo ${r// /;p}
;p;p;p
$ 

ฉันสามารถที่จะออกไปพร้อมกับลบเครื่องหมายคำพูดรอบตัวprintfระบุรูปแบบและsedนิพจน์เนื่องจากไม่มีอักขระใด ๆ ที่ต้องการหลบหนีในbashเชลล์

นับตัวอักษร:

$ submission='r=`printf %$1s`
> sed -n s/./${r// /&}/g${r// /;p}'
$ echo ${#submission}
48
$ 

ฉันไม่ทราบว่ามันใช้งานได้ดี แต่ทำงานได้!
โทมัส

1
ตัวแปร n ละเมิดกฎข้อที่ 1:“ อาจไม่ได้ฮาร์ดโค้ด”
จัดการ

1
เพียงแค่ใช้$1และลบn=3;คุณยังสามารถบันทึกอักขระได้ 4 ตัวและอาจ{}อยู่ใน printf ด้วย
โทมัส

และการที่เราสามารถสรุปได้ $ 1 จะมีตัวเลขคำพูดรอบprintf's อาร์กิวเมนต์ไม่จำเป็นต้องลดถึง 52 r=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}"ตัวอักษร:
จัดการ

1
@Tomas - คุณอาจจะคิดว่ามันใช้งานได้อย่างไรตอนนี้ แต่ฉันได้เพิ่มคำอธิบายในกรณีที่คุณสนใจ
Digital Trauma

9

PERL,  41 39 25   22 ตัวอักษร

PERL ง่ายและมีประสิทธิภาพ - สร้างสิ่งที่ถูกต้องสำหรับงาน เมื่อเรียกใช้โดย-pi3ที่3พารามิเตอร์nคือ:

s/./$&x$^I/ge;$_ x=$^I

โซลูชันคลาสสิก (39 ตัวอักษร):

$n=<>;print map{s/./$&x$n/ge;"$_"x$n}<>

การแก้ปัญหาแบบคลาสสิกจำเป็นต้องnมีการระบุไว้ในบรรทัดแรกของอินพุตเช่น

3
ab
cd

ขอบคุณ @manatwork สำหรับ$&เคล็ดลับ


1
เย็น. แต่คุณไม่จำเป็นต้องจับตัวละครที่ตรงกัน: s/./$&x$n/ge.
จัดการ

8

Ruby:  64  49 ตัวอักษร

ข้อมูลทั้งหมดที่ได้รับใน STDIN: บรรทัดแรกของปัจจัยการปรับแล้วศิลปะ ASCII

BEGIN{n=gets.to_i}
$_=[$_.gsub(/./){$&*n}]*n*$/

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

bash-4.2$ ruby -lpe 'BEGIN{n=gets.to_i};$_=[$_.gsub(/./){$&*n}]*n*$/' <<< '3
> ab
> cd'
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

Ruby:  44  41 ตัวอักษร

สมมติว่าทุกบรรทัดอินพุตถูกยกเลิกด้วยตัวคั่นบรรทัด ขอบคุณ @Ventero

$.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n

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

bash-4.2$ ruby -ne '$.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n' <<< '3
> ab
> cd'
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

1
วิธีที่สั้นกว่าในการตั้งค่าn: $.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n(เศร้าพื้นที่หลังลำไส้ใหญ่เป็นสิ่งจำเป็นมิฉะนั้นโปรแกรมแยกวิเคราะห์จะสับสน) ruby -nทำงานด้วย
Ventero

Doh ฉันพยายามหลายวิธีเพื่อลดการมอบหมายให้สั้นลงถึง n แต่ฉันพลาดผู้ประกอบการที่สาม ขอบคุณ @Ventero
จัดการ

6

Python 3 - 84

ไม่ใช่คำตอบที่สั้นที่สุด แต่เป็นคำตอบที่ต่างออกไป หนึ่งซับที่น่าสนใจ

n=int(input())
for i in eval(input()):print(((''.join(j*n for j in i)+'\n')*n)[:-1])

ใส่ตัวเลขก่อนจากนั้น ASCII art เป็นรายการ Python เช่น:

C:\Users\User4\Desktop>c:/python33/python.exe golf.py
3
["aabb","bbcc","ccdd"]
aaaaaabbbbbb
aaaaaabbbbbb
aaaaaabbbbbb
bbbbbbcccccc
bbbbbbcccccc
bbbbbbcccccc
ccccccdddddd
ccccccdddddd
ccccccdddddd

5

GolfScript, 29 ตัวอักษร

{:i;n/{1/:c;{c{i*}/n}i*}/}:f;

นี้กำหนดบล็อกfที่เมื่อเรียกว่าจะผลิตผลลัพธ์ที่ต้องการ มันถือว่าข้อโต้แย้งอยู่ในสแต็ก (เพราะโดยทั่วไปแล้วเป็นวิธีการส่งผ่านข้อโต้แย้งใน GolfScript)

Ungolfed (นั่นทำให้เข้าใจได้หรือไม่: P):

{:i;n/{ # for each line...
  1/:c; # save characters of string in c
  {     # i times...
    c{  # for each character...
      i*
    }/
    n
  }i*
}/}:f;


# Test run
"ab
cd" 3 f

5

Golfscript, 23 ตัวอักษร

~(:i;n/{{{.}i*}:c%c}%n*

ฉันตัดสินใจที่จะเขียนโปรแกรมทั้งหมดเพราะมันมีค่าใช้จ่ายน้อยกว่าแม้ฟังก์ชั่นที่ไม่ระบุชื่อทำ:

  • ~(:i;- ใส่ค่าอินพุตจากนั้นลดค่าตัวคูณแล้วเก็บเป็นiและทิ้ง
  • n/{...}%n* - แยกตามการขึ้นบรรทัดใหม่ทำแผนที่แต่ละบรรทัดเข้าร่วมด้วยการขึ้นบรรทัดใหม่
    • {...}:c%c, - นำบล็อกนำไปใช้กับแผนที่ในแต่ละองค์ประกอบแล้วนำไปใช้กับทั้งเส้น
      • {.}i*- ทำซ้ำองค์ประกอบนี้iครั้ง

การสาธิตสด: http://golfscript.apphb.com/?c=OyciYWJjCmRlZiIzJwp%2BKDppO24ve3t7Ln1pKn06YyVjfSVuKg%3D%3D

ตัวอย่างการใช้งาน:

;'"abc
def"3'
~(:i;n/{{{.}i*}:c%c}%n*

5

Python 3 - 109 107 93

i=input;n,s,a=int(i()),i(),[]
while s:a+=[''.join(c*n for c in s)]*n;s=i()
print('\n'.join(a))

ก่อนอื่นให้ป้อนตัวเลขจากนั้นสตริง ควรอธิบายตนเอง ...

ขอบคุณ Waleed Khan ที่แนะนำให้ลบ []

ขอบคุณความผันผวนสำหรับการแนะนำaให้มีรายการ


7
เพิ่งสังเกตเห็น; the nsa กำลังเฝ้าดูอินพุตของคุณทุกครั้ง
Justin

รหัสที่สั้นที่สุดในหน่วยไบต์ จะไม่รวมถึงการขึ้นบรรทัดใหม่หรือไม่ การนับของคุณไม่ควรเป็น 112 หรือ
cjfaure

ขออภัยฉันหมายถึง 111
cjfaure

@Trimsty คุณพูดถูก; ฉันคิดว่า wordcounter.net นับบรรทัดใหม่
Justin

2
ทำaรายการทำa+=[''.join(c*n for c in s)]*nแล้วทำprint('\n'.join(a))ในตอนท้าย ที่ควรจะทำงาน
ความผันผวน

5

Java - 217

ลองเล่นกอล์ฟก่อน ดูเหมือนว่า Java ไม่ใช่ภาษาที่ต้องใช้

enum M{;public static void main(String[]a){int f=new Integer(a[0]),i=0,j,k;a=a[1].split("\n");for(;++i<a.length*f;System.out.println())for(j=0;++j<a[i/f].length();)for(k=0;k++<f;)System.out.print(a[i/f].charAt(j));}}

ใน Windows คุณต้องแทนที่ "\ n" ด้วย "\ r \ n"

java M 3 "ab
cd"
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

2
อักขระอินพุตต้องขยายตัวลงเช่นเดียวกับข้าม (ดังนั้นควรมี 3 บรรทัดaaabbbและ 3 บรรทัดcccdddในตัวอย่างผลลัพธ์ของคุณด้านบน)
Gareth

2
คุณสามารถสำรอง: 1 ตัวอักษรโดยการเริ่มต้นฉันในการประกาศแทนการfor; 8 ตัวอักษรโดยใช้ a แทน x ( a=a[1].split("\n")และเปลี่ยน x ทั้งหมดด้วย a)
จัดการ

3
ใช่ด้วยภาษาใดก็ตามที่เพียงแค่การประกาศmainใช้เวลาไบต์มากกว่าโปรแกรมทั้งหมดในภาษาอื่น ๆ ผู้เข้าแข่งขันจะได้รับโบกี้
Mark Plotnick

2
อืมโอเค นี่คือ 3 ตัวอักษรที่บันทึกไว้โดยการจัดเรียง outter การห่วงนิด ๆ หน่อย ๆ :enum M{;public static void main(String[]a){int f=Integer.valueOf(a[0]),i=-1,j,k;a=a[1].split("\n");for(;++i<a.length*f;System.out.println())for(j=0;j<a[i/f].length();j++)for(k=0;k++<f;)System.out.print(a[i/f].charAt(j));}}
daniero

3
อีก 4 ไบต์: Integer.valueOf(a[0])->new Integer(a[0])
Yurii Shylov

5

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

Scliptingตัวละคร 19 ตัว

คาดว่าอินพุตจะถูกคั่นด้วย\n(ไม่ใช่\r) และบรรทัดแรกเพื่อให้มีปัจจัยการคูณ

겠坼銻標⑴가殲各標⓶各①復終겠併①復終

คำอธิบาย

겠坼 | split everything at \n
銻 | get first element (the factor)
標 | mark
⑴가殲 | bring list to front; remove first element (the factor)
各 | for each line...
    標⓶ | mark
    各①復終 | for each character, multiply it
    겠併 | add a newline and concatenate everything above the mark
    ①復 | multiply that
終 | end of loop

ในตอนท้ายสแต็กจะมีลักษณะดังนี้:

[ factor, mark, line1, line2, line3, ... ]

ทุกสิ่งที่อยู่เหนือเครื่องหมายจะถูกต่อกันอัตโนมัติและเอาท์พุทส่วนที่เหลือจะถูกทิ้ง


这太有意思了你是原创者对吧!?
theGreenCabbage

@TheGreenCabbage 对了 踢木外是这个电脑语言的
Justin

1
@Timwi ขอโทษสำหรับโทรหาคุณ踢木外(ไม้เตะนอกออกเสียงชาหมู่-ทำไม) ...
จัสติน

@Quincunx: เฮ่ฉันคิดว่ามันตลก :) แต่สุดท้ายiก็เด่นชัด [iː] ไม่ใช่ [ɑi]; ตอนนี้คุณจะเขียนเป็นภาษาจีนได้อย่างไร
Timwi

@ Timwi คิดว่ามันเป็นวิธีการออกเสียง (แต่ฉันไม่สามารถนึกถึงตัวละครที่เกี่ยวข้อง) ฉันเขียนโดยการค้นหาและคัดลอกวาง (บนmdbg.net/chindict/chindict.php )
Justin

3

J, 7 ตัวอักษร

([#"1#)

เหมือนกับในคำตอบ APL ของ @ Tobia แต่เป็นตัวอักษร ASCII

a =. ' 0 ',.'0 0',.' 0 '
a
 0 
0 0
 0 

2 ([#"1#) a
  00  
  00  
00  00
00  00
  00  
  00  

3

พาวเวอร์เชล (96)

function m($n,$s){$s.split("`n")|%{$l="";$_.ToCharArray()|%{$c=$_;1..$n|%{$l+=$c}};1..$n|%{$l}}}

คิดว่าฉันจะให้ภาพนี้ใน PS โดยใช้ท่อเข้าไปใน foreach ของ (%) ที่จะให้มันสั้น ๆ ที่นี่ แต่functionและToCharArrayจะทำให้ใช้เวลาตีมันกะทัดรัด

วิธีใช้คุณเรียกมันจากบรรทัดคำสั่งดังนี้:

PS C:\> m 3 "ab
>> cd"
>>
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

นี่คือรุ่นที่ไม่ย่อเล็กสุด:

function f($n, $s)
{
    $s.split("`n") | % {            # split input into separate lines
        $l=""                       # initialize an output line
        $_.ToCharArray() | % {      # split line into chars
            $c=$_ ; 1..$n | % {     # add n chars to the line
                $l+=$c 
            } 
        }
        1..$n | % {$l}              # output the line n times
    }
}

2
Mazzyปัญหาfunction m($n,$s){-split$s|%{,(-join($_-split''|%{$_*$n}))*$n}}63 ไบต์
OVS

2

Julia, 74 ตัวอักษร / ไบต์

julia> f(i,n)=print(prod([(prod(["$c"^n for c in l])*"\n")^3 for l in split(i)]))
f (generic function with 1 method)

julia> f("ab\ncd",3)
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

7 น้อยลงถ้าฉันแค่ส่งคืนสตริง julia>เป็นพรอมต์แบบโต้ตอบ


1
นี่คือจูเลียกอล์ฟตัวแรกที่ฉันเคยเห็น
cjfaure

@Trimsty codegolf.stackexchange.com/search?q=juliaยังหายากมาก แต่ก็มีอยู่ไม่กี่แห่ง (รวมถึงหนึ่งในนักออกแบบของภาษาจริง ๆ )
plannapus

@plannapus น่าสนใจ! มี esolang ใหม่หายากที่เรียกว่า ~ - ~! ที่ฉันเคยใช้เช่นกันแม้ว่ามันจะแย่มากสำหรับการเล่นกอล์ฟ
cjfaure


2

Powershell, 54 ไบต์

param($s,$n)$s-replace'.',('$0'*$n)-split'
'|%{,$_*$n}

สคริปต์ทดสอบ:

$f = {

param($s,$n)$s-replace'.',('$0'*$n)-split'
'|%{,$_*$n}

}

@(
@"
ab
cd
"@
,
@"
 OOOOOO  OOOOOO  OOOOOO  OOOOOOO      OOOOOO   OOOOOO  OO      OOOOOOO
OO      OO    OO OO   OO OO          OO       OO    OO OO      OO
OO      OO    OO OO   OO OOOOO       OO   OOO OO    OO OO      OOOOO
OO      OO    OO OO   OO OO          OO    OO OO    OO OO      OO
 OOOOOO  OOOOOO  OOOOOO  OOOOOOO      OOOOOO   OOOOOO  OOOOOOO OO
"@
) | % {
    &$f $_ 3
}

คำอธิบาย:

  • $s-replace'.',('$0'*$n) ทำซ้ำสัญลักษณ์แต่ละบรรทัดที่ขึ้นบรรทัดใหม่
  • -split'``n' แยกสตริงที่กว้างด้วยบรรทัดใหม่
  • |%{,$_*$n} ทำซ้ำแต่ละบรรทัดเป็นองค์ประกอบอาร์เรย์และส่งกลับอาร์เรย์

ผลลัพธ์คืออาร์เรย์ของสตริงที่กว้างและซ้ำ


2

R , 83/72 ไบต์

วิธีการ Alt โดยใช้ regexps

หากเราอนุญาตให้ขึ้นบรรทัดใหม่ต่อท้าย 72 ไบต์:

function(s,n)cat(gsub("([^
]*
)",r,gsub("([^
])",r<-strrep("\\1",n),s)))

ลองออนไลน์!

มิฉะนั้น 83 ไบต์:

function(s,n)write(rep(el(strsplit(gsub("([^\n])",strrep("\\1",n),s),"\n")),e=n),1)

ลองออนไลน์!



1

BrainFuck เพิ่มเติม : 158

{a<]<[->+}3>,>3+[->4+[-<<4->>]&a>+<<]<+[-<,[>10+[-<->>+<]<[[->>+<<]3>[->[->+&a&a#3<+>>]>>]<[-]<<]>>[>[-4<[<]>[.>]>>.>]4<[-]<[-]4>[-]]>>[->+<]>[-<+<+>>]4<+<]>]

มันกลายเป็น:

Brainfuck: 185

>>>,>+++[->++++[-<<---->>]<]<[->+>+<<]<+[-<,[>++++++++++[-<->>+<]<[[->>+<<]>>>[->[->+<]<[->+<]<[->+<<<+>>]>>]<[-]<<]>>[>[-<<<<[<]>[.>]>>.>]<<<<[-]<[-]>>>>[-]]>>[->+<]>[-<+<+>>]<<<<+<]>]

มันต้องใช้ล่ามที่มี 0 หรือไม่มีการเปลี่ยนแปลงเป็นเครื่องหมาย EOF beefใช้งานได้จาก repos ของ Ubuntu สามารถใช้งานได้:

$ ( echo -n 2
> cat <<eof
> BBBB  RRRR   AAA  IIII NN  NN FFFFF * * * KK  KK
> BB BB RR RR AA AA  II  NNN NN FF      *   KK  KK
> BBBB  RRRR  AAAAA  II  NNNNNN FFFF  ***** KKKKK
> BB BB RR RR AA AA  II  NN NNN FF      *   KK  KK
> BBBB  RR RR AA AA IIII NN  NN FF    * * * KK  KK
> eof
> ) | beef double.bf
BBBBBBBB    RRRRRRRR      AAAAAA    IIIIIIII  NNNN    NNNN  FFFFFFFFFF  **  **  **  KKKK    KKKK
BBBBBBBB    RRRRRRRR      AAAAAA    IIIIIIII  NNNN    NNNN  FFFFFFFFFF  **  **  **  KKKK    KKKK
BBBB  BBBB  RRRR  RRRR  AAAA  AAAA    IIII    NNNNNN  NNNN  FFFF            **      KKKK    KKKK
BBBB  BBBB  RRRR  RRRR  AAAA  AAAA    IIII    NNNNNN  NNNN  FFFF            **      KKKK    KKKK
BBBBBBBB    RRRRRRRR    AAAAAAAAAA    IIII    NNNNNNNNNNNN  FFFFFFFF    **********  KKKKKKKKKK
BBBBBBBB    RRRRRRRR    AAAAAAAAAA    IIII    NNNNNNNNNNNN  FFFFFFFF    **********  KKKKKKKKKK
BBBB  BBBB  RRRR  RRRR  AAAA  AAAA    IIII    NNNN  NNNNNN  FFFF            **      KKKK    KKKK
BBBB  BBBB  RRRR  RRRR  AAAA  AAAA    IIII    NNNN  NNNNNN  FFFF            **      KKKK    KKKK
BBBBBBBB    RRRR  RRRR  AAAA  AAAA  IIIIIIII  NNNN    NNNN  FFFF        **  **  **  KKKK    KKKK
BBBBBBBB    RRRR  RRRR  AAAA  AAAA  IIIIIIII  NNNN    NNNN  FFFF        **  **  **  KKKK    KKKK

รหัส EBF ที่ไม่ถูกตรึง:

;;;; Multiply 
;;;; Takes a digit x and ASCII art on STDIN
;;;; Prints ASCI art scaled x times
;;;; Usage:
;;;; bf ebf.bf < multiply.ebf >multiply.bf
;;;; bf multiply.bf

;;; Memory map for this program
:zero
:str
:flag
:tmp
:dup    
:num

;;; Macros

;; EOL support. Comment out the body of the two 
;; macros below to only support 0 and no change
;; Some interpreters use -1
{eol_start
  +(- 
}

{eol_end 
   )
}

;; macro that reads a digit.
;; the actual number is one more than input
;; ^12 uses 3 cells from origin
{read_number
  ,                    ; read char
  ^1 3+(-^2 4+(-^ 4-)) ; reduce by 3*4*4=48
}

;; duplicate current element
;; to the left using the right as tmp
{copy_left 
  (-^1+)^1(-^0+<+)
}

;; Duplicate char n times while
;; shifting to the right
{handle_char
  $str(-$tmp+)               ; copy the char to tmp
  $dup(-$num(->+)            ; for each dup move num
        $dup(-$num+)         ; and dup one step to the right
        $tmp(-$dup+$str+)    ; and copy the char back to str and to dup
        @flag)               ; which is the new tmp (it gets shifted to the right)
  $tmp(-)                    ; clear char when done
}

{handle_linefeed
  $dup(-                     ; for each dup
    $zero[<]>                ; go to beginnning of string
    [.>]@str                 ; print string 
    $tmp.                    ; print newline
  )
  $zero[-]<[-]>@zero         ; clean last two chars
  $tmp(-)                    ; remove line feed
}


;;; Main program 

;; read number
$tmp &read_number
$tmp (-$dup+$num+)
;$tmp,[-] ; uncomment to require a newline before asci art
$flag+(-
  $str = ,
  ( ;; NB! The line containing EOF will not be printed!
    &eol_start
    $flag 10+(-$str-$tmp+)
    if $str is not linefeed (   
       &handle_char
    ) $tmp ( linefeed
       &handle_linefeed
    ) 
    $num &copy_left      ; we need two copies of the duplicate dupber
    $flag+               ; flag to 
    &eol_end
  )  
)

1

Rebol - 87 79

r: do input while[d: input][forskip d r[insert/dup d d/1 r - 1]loop r[print d]]

เวอร์ชันที่มีรูปแบบสวยงาม:

r: do input

while [d: input] [
    forskip d r [insert/dup d d/1 r - 1]
    loop r [print d]
]

ตัวอย่างการใช้งาน:

rebol -qw --do 'Rebol[]r: do input while[d: input][forskip d r[insert/dup d d/1 r - 1]loop r[print d]]' <<< "3
ab
cd"
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

NB รหัสนี้ใช้งานได้ใน Rebol 2 เท่านั้นในขณะนี้ ( ฟังก์ชั่นINPUT ที่ใช้ยังไม่ได้ใช้อย่างสมบูรณ์ใน Rebol 3)


1

R , 125 ไบต์

function(s,n,x=utf8ToInt(s),m=matrix(x[u<-x!=10],,sum(!u)+1))for(i in 1:ncol(m))cat(rep(intToUtf8(rep(m[,i],e=n)),n),sep="
")

ลองออนไลน์!

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


ขอแสดงความยินดีกับ 1K ไปแล้ว! :-)
จูเซปเป้

ty :-)! เป็นเรื่องดีที่จะได้เห็นคำตอบ R สำหรับคำถามส่วนใหญ่และแม้แต่คำตอบหลายคำถาม
JayCe

0

R - 89

M=function(I,N) cat(paste(lapply(lapply(strsplit(I,""),rep,e=N),paste,collapse=""),"\n"))

I <- c("aa  aa  aa", "bbb bbb bbb", "c c c c c c")
N <- 3

I
# aa  aa  aa
# bbb bbb bbb
# c c c c c c"

M(I,N)

# aaaaaa      aaaaaa      aaaaaa 
# bbbbbbbbb   bbbbbbbbb   bbbbbbbbb 
# ccc   ccc   ccc   ccc   ccc   ccc

ดูน่าสนใจ แต่ฉันได้รับข้อผิดพลาด: "ข้อผิดพลาด: ไม่พบฟังก์ชัน" str_split "" ฉันจำเป็นต้องติดตั้งแพคเกจstringrอย่างชัดเจนเพื่อให้สามารถเรียกใช้รหัสของคุณได้หรือไม่? (ขออภัยไม่คุ้นเคยกับ R. )
จัดการ

มันไม่ได้หายไปเรียกร้องcatให้พิมพ์เป็น stdout? นอกจากนี้แต่ละองค์ประกอบของสตริงไม่ควรทำซ้ำความยาว n ครั้ง แต่ซ้ำด้วยความกว้าง
plannapus

คุณยังสามารถกอล์ฟการทำงานของคุณมากขึ้นอีกนิด: <-สามารถ=, paste0ที่นี่จะถูกแทนที่ด้วยpasteเนื่องจากคุณกำลังใช้อาร์กิวเมนต์ล่มสลายอยู่แล้วและการโต้แย้งสามารถร่นไปeach eดูที่นี่สำหรับแนวคิดพื้นฐานบางประการเกี่ยวกับการเล่นกอล์ฟกับ R.
plannapus

มิฉะนั้นมันเป็นความพยายามที่ดี (ที่สั้นที่สุดความพยายามของตัวเองยังอยู่ใน 200 ตัวอักษรหรือเพื่อให้ :))
plannapus

@ manatwork ok ไม่มีข้อผิดพลาดอีกต่อไปโหลด wihtoutstringr
petermeissner

0

MATLAB: 20 ​​ตัวอักษร

['' imresize(ans,n)]

วิธีแก้ปัญหานี้สันนิษฐานว่าภาพนั้นถูกเก็บไว้ในไฟล์ที่เรียกว่าstartup.mและอนุญาตให้มีการทำซ้ำกับ matlab เมื่อเรียกมันสิ่งนี้สามารถทำได้โดย:!matlab -r "n=3"&

MATLAB การโทรโดยไม่มีอาร์กิวเมนต์: 23 ตัวอักษร

load;['' imresize(s,n)]

ซึ่งแตกต่างจากโซลูชันแรกทั้งสองหลังคิดว่าปริมาณของการจำลองแบบอาจไม่ได้รับการคาดหวังในการโทร สำหรับโซลูชันเหล่านี้คาดว่าจะมีสตริงและหมายเลขดั้งเดิมในไฟล์ที่เรียกว่าmatlab.matในไดเรกทอรีปัจจุบันของคุณ

MATLAB ทางเลือกทางคณิตศาสตร์: 27 ตัวอักษร

load;['' kron(s,ones(1,n))]

0

C # (177)

public string e(string i,int x){return string.Join("",i.Split('\n').Select(a=>string.Join("",Enumerable.Repeat(string.Join("",a.ToCharArray().Select(c=>new string(c,x))),x))));}

ต้องการสตริงอินพุต "i" ที่มีบรรทัดใหม่ "\ n" เป็นตัวคั่น

ที่จัดรูปแบบ

public string e(string i, int x)
{
    return string.Join("", i.Split('\n').Select(a => string.Join("", Enumerable.Repeat( string.Join("", a.ToCharArray().Select(c => new string(c, x))), x))));
 }

0

CJam, 14 ไบต์

CJam ใหม่กว่าความท้าทายนี้ (และคุณสมบัติหลักที่ฉันใช้คือจริง ๆ ล่าสุด) ดังนั้นคำตอบนี้จะไม่มีสิทธิ์ได้รับการยอมรับ - แต่มันไม่ได้เต้น APL อยู่แล้วดังนั้น ...

l~qN/1$e*fe*N*

ทดสอบที่นี่

คำอธิบาย

ด้วยe*ตัวละครใหม่ที่ซ้ำอักขระแต่ละตัวในสตริงสิ่งนี้จะตรงไปตรงมาจริงๆ:

l~             e# Read and eval the scale factor.
  qN/          e# Read the rest of the input as the ASCII art and split into lines
     1$e*      e# Copy the scale factor and repeat each line by it.
         fe*   e# Repeat the characters in each line by the scale factor.
            N* e# Join with newlines.

ฉันรู้ว่านี่เป็นคำตอบเก่า แต่คุณสามารถบันทึก byte โดยใช้ฟังก์ชั่นแทน:{N/1$fe*e*N*}
ผลไม้ Esolanging

0

RProgN 100 ไบต์ (Windows) การแข่งขันที่ไม่ใช่

'l' asoc
'i' asoc
i '[^
]' '%0' l rep replace '[^
]*' '%0
' l rep 'z' asoc z 1 z len 1 - sub replace

RProgN ไม่มีการยกเว้นอักขระขณะเขียนซึ่งทำให้การจัดการบรรทัดใหม่ต้องใช้บรรทัดใหม่จริง ดังนั้นคำตอบนี้ (และอินพุตใด ๆ ) ต้องใช้ CRLF แทนที่จะเป็นเพียง LF :(

นอกจากนี้ยังมีการเพิ่มฟังก์ชั่น 'ตัวแทน' หลังจากที่มีการออกความท้าทายเช่นนี้เท่านั้นซึ่งไม่ใช่การแข่งขัน


0

เป็นกลุ่ม, 39 การกดแป้น (ไม่รวมอินพุต, ไม่ใช่การแข่งขัน)

gotcha และเหตุผลที่นี่ไม่ใช่การแข่งขันเป็นเพราะต้องป้อนข้อมูลสองครั้ง แทนที่ทั้งสอง2ด้วยอินพุตของคุณเอง

qayl2phxl@aquu:%norm @a<cr>gg0qbyy2P2jkddj@bq@b

คำอธิบาย

  • qayl2phxl@aquuบันทึกแมโครที่ส่งอักขระไปวางและย้ายไปยังอีกอันจากนั้นไกลตัวเอง จากนั้นจะยกเลิกการเปลี่ยนแปลง เนื่องจากเราไม่ต้องการให้ลูปไม่สิ้นสุดเราจึงไม่ลบอักขระซึ่งหมายความว่าเราต้องลบสิ่งที่ไม่เกี่ยวข้องออกไป แต่ยังคงจบด้วยการเคลื่อนไหวที่ล้มเหลวในอักขระตัวสุดท้าย
  • :%norm @a<cr> เรียกใช้แมโครในทุกบรรทัด
  • gg0 กลับไปที่จุดเริ่มต้นมาก
  • qbyy2P2jkddj@bq@bใช้เทคนิคเดียว@aกับการคัดลอกทุกบรรทัด แต่มีมาโครแบบเรียกซ้ำ

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

คำตอบก่อนหน้า (32 การกดแป้นเพียงสองเท่าเท่านั้น)

qaylpl@aqu:%norm @a<cr>:%s/.*/&\r&<cr>

คำอธิบาย

  • qaylpl@aquบันทึกแมโครที่ส่งอักขระไปวางและย้ายไปยังอีกอันจากนั้นไกลตัวเอง เลิกทำการเปลี่ยนแปลง
  • :%norm @a<cr> เรียกใช้แมโครในทุกบรรทัด
  • :%s/.*/&\r&<cr> เพิ่มเป็นสองเท่าทุกบรรทัด

ฉันอยากจะทำแมโครที่ซ้อนกัน แต่ตัวใน (ตัวละคร) จะหยุดด้านนอก (บรรทัด) ... ดังนั้นฉันต้องรันสองคำสั่งโดยเพิ่มการกดแป้นจำนวนหนึ่งเล็กน้อยเพื่อแก้ปัญหาอย่างง่าย

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