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 예술은 질문 목록에서 흥미로워 보인다
Justin

6
확대 된 아트에 적절한 앨리어싱을 도입하는 방법을 위해 2 차 / 보너스 라운드를 만들어야한다고 생각합니다. 당신의 거대한 코드 골프 예술은 꽤 고르지 않게 보입니다.
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 기호를 상위 128 바이트 값에 매핑하는 자체 (레거시) 단일 바이트 문자 집합으로
APL을 작성할 수 있습니다. 따라서 스코어링을 위해 ASCII 문자와 APL 기호 만 사용하는 N 문자 프로그램은 N 바이트 길이로 간주 될 수 있습니다.


1
... : O 어떻게 작동합니까?
Doorknob

4
줄로 문자열에 대한 표준 표현 @DoorknobofSnow (예, APL은 ... 라인 요철 폭이있는 경우 공백 후행 APL 직사각형 캐릭터 행렬 인 것을 오래.)를 /함수 (와 혼동하지 /연산자 ... 예, 동일한 기호 ) 왼쪽 인수에 따라 행렬에서 열을 복제 및 / 또는 제거합니다. 이것이 스칼라 (단순)이면 모든 입력 열에 대해 복제됩니다. 따라서 2/m모든 열이 두 배가 된 행렬입니다. 변형 동일한 않지만, 행의 (일반적인 경우 또는 제 축 평면.)
Tobia

6
아름다운 언어 아닌가요? 수십 개의 기호를 배우면 실제로 읽을 수 있습니다. 당신이 여기에 보이는 ASCII 라인 노이즈 언어보다 훨씬 더…
Tobia

시원한. ⌿는 항상 언어에 있었습니까? 그것은 Gilman and Rose 책에 없었고 APL \ 360에 관한 Iverson 책은 / [1]을 언급하지만 ⌿는 언급하지 않습니다.
Mark Plotnick

2
와. 그. 입니다. 다만. 대박. 나는. 심하게. 대박. 으로, ~에 의하여. 이. 암호. 나는 단순한 +1 이상을 제공하고 싶지만 내 담당자는 아직 현상금이 낮습니다.
Outgolfer Erik

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 설명이 추가되었습니다.
Howard

와. 오늘 나는 배웠다 1/. 또한 value function +더 많이 사용해야 합니다.
John Dvorak

2
@CoryKlein : 그것은 종류의 당신이 우리에게 있다면 도움이 될 어떤 오류,하지만 ... * * 수정 구슬로를 바라본 ... 그것은이있을 수 있습니다 golfscript.rb실행 표시되지 않았거나 첫 번째 줄은 루비 인터프리터에 잘못된 경로가 있음 당신의 시스템을 위해. 아, 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. 윈도우있다 \r\n그래서 우리는 사용할 필요가 }:여분의 캐릭터를 잘게 : }:;._2. 동사 문서 컷

나머지 코드 (할당 제외 f=.)는 포크 입니다.
다음과 같이 분류됩니다.[ #&.|: #

경우 a계산이 될 것입니다 우리의 입력 문자열은 3 # a(우리는이 결과를 부를 것이다 x, 다음) 3 [ a(우리는이 결과를 부를 것이다 y다음) y #&.|: x.

3 # a의 모든 회원의 사본을 3 개만 만듭니다 a. 복사 동사 문서는
이 켜집니다

ab
cd

으로

aaabbb
cccddd

3 [ a그냥 3을 반환 합니다.

마지막 y #&.|: x입니다 y전치 아래에 복사합니다 x. #이전처럼 작동하지만이 &.|:J를 알려줍니다 먼저 입력을 바꾸어 다음이 완료 때 그것을 다시 트랜스합니다. 공동 문서 에서 동사 문서를 바꿉니다 .

조옮김

aaabbb
cccddd

으로

ac
ac
ac
bd
bd
bd

그런 다음 사본이

aaaccc
aaaccc
aaaccc
bbbddd
bbbddd
bbbddd

다시 바꾸면

aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

4
창문이 짜증나? : P
cjfaure

@Trimsty 실제로 그렇습니다.
Gareth

이것은 더 짧습니다 : [##"1또한 J에서 작성되지 않은 골프 규칙에 대해 잘 모르겠지만 질문의 느슨한 요구 사항에 따라 문자열 분할 및 할당을 생략 할 수 있다고 말하고 싶습니다. 나는 확실히 내 APL 답변에서 그렇게했습니다. 예 :2 ([##"1) 'abcde',:'fghij'
Tobia

17

하스켈, 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 자

J에서 @Gareth는 본질적으로 똑같은 일을 먼저 했으므로이 APL 항목은 경쟁이 아닌 전시회를위한 것입니다-그는 승자입니다.

      E←{⍉⍺/⍉⍺/⍵}

사용법 : 왼쪽 arg (⍺)의 배율, 오른쪽 arg (⍵)의 2d 문자 행렬 형태의 아트입니다.
⍺ / ⍵는 벡터 또는 행렬의 각 행에 걸쳐 요소를 복제합니다 (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 개의 문자를 사용하므로 실제로 1 문자 만 이길 수 있습니다. :-)
Gareth

2
J는 연산자가 ASCII 문자 집합으로 제한되는 성가신 디자인 목표에 얽매여 있습니다. :)
Mark Plotnick

2
OP가 말한 것처럼 바이트 단위로 측정하면 44 바이트이며 (utf-8이 아닌 유니 코드를 의미 함) @Gareth는 여전히 17입니다. 이는 ASCII로 제한되지 않는 언어의 단점입니다.
cjfaure

5
@Trimsty 그러나 APL에는 각 문자를 단일 바이트로 매핑하는 자체 문자 세트가 있으므로 여전히 11 바이트입니다.
변동성

1
@Volatility 흠. 정말 이상하고, 죄송합니다. 몰랐습니다 : P
cjfaure

13

배쉬 / 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 번 반복되는 문자로 바꿉니다.
  • 3x p명령-전체 패턴 공간 (즉, 현재 줄)을 3 번 인쇄합니다.

우리는 -n명시 적으로 지시하지 않는 한 아무 것도 인쇄하지 말라고 sed에 전달 하므로 인쇄되는 내용과 몇 번을 완벽하게 제어 할 수 있습니다.

에서 임의 길이의 반복 문자열을 직접 생성하는 빠른 방법을 알 수 없으므로 대신 sed몇 가지 bash트릭을 사용했습니다.

printf -vr "%3s"

이렇게하면 3 개의 선행 공백이있는 문자열 (지정되지 않음, 즉 비어 있음)이 인쇄되고 결과가 bash변수에 지정 r됩니다.

그런 다음 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
$ 

나는 생각이없는 방법 이 작동하지만 작동!
Tomas

1
변수 n이 규칙 1을 위반합니다. "하드 코딩되지 않았을 수 있습니다".
manatwork

1
그냥 사용 $1하고 제거 n=3;하면 4자를 저장 {}하고 printf 에도 저장할 수 있습니다.
Tomas

그리고 우리가 $ 1이 숫자라고 가정 할 수 있듯이, printf인수 주위의 인용 부호 는 필요하지 않으므로 52 자로 줄입니다 : r=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}".
manatwork

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..
manatwork

8

루비 :  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

루비 :  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

도 n에 대한 할당을 줄이기 위해 수십 가지 접근법을 시도했지만 삼항 연산자를 놓쳤습니다. 감사합니다, @Ventero.
manatwork

6

파이썬 3-84

그럼에도 불구하고 가장 짧지는 않지만 다른 대답입니다. 흥미로운 원 라이너.

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

숫자를 먼저 입력 한 다음 ASCII 아트를 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

골프 스크립트, 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

파이썬 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
방금 주목했다. 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

자바-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
입력 문자는 아래쪽뿐만 아니라 아래쪽으로 확장해야합니다 . 따라서 위의 출력 예제에는 aaabbb3 줄과 3 줄 이 있어야합니다 cccddd.
Gareth

2
다음 대신에 선언에서 i를 초기화하여 1 개의 문자를 절약 할 수 있습니다 for. x 대신을 사용하여 8 자 ( a=a[1].split("\n")및 x를 모두 a로 변경)
manatwork

3
예, main다른 언어로 된 프로그램 전체보다 많은 바이트가 필요한 언어를 사용하면 참가자는 으스스합니다.
Mark Plotnick 님이

2
흠. 다음은 루프 외부를 약간 정리하여 절약 된 3 개의 문자입니다.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

(편집 : 명령 의 의미 가 변경 되었으므로이 솔루션은 이제 유효 하지 않습니다. 명령을 변경할 때 이미 명령을 사용했음을 알지 못했지만 프로그램을 간단히 변경하여 수정할 수는 있습니다. 최신 지침 .)

클리핑 , 19 자

입력이 \n(no \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, ... ]

마크 위의 모든 것이 자동으로 연결되고 출력되며 나머지는 버려집니다.


Green 太 有意思 了! 你 是 原创 者 对 吧?
theGreenCabbage 2012 년

@theGreenCabbage 对 了. Jan 木 外 是 这个 电脑 语言 的 创始人
Justin

1
(외부 킥 나무, 발음 차 - 무 - 왜)外木踢을 호출 미안 @Timwi
저스틴

@Quincunx : Hehe, 나는 그것이 재미 있음을 발견했다 :) 그러나 결승 i은 [ɑi]가 아니라 [iː]로 발음된다; 중국어로 어떻게 쓰시겠습니까?
Timwi

@Timwi 그것이 그것이 발음되는 방식이라고 생각했습니다 (그러나 나는 상응하는 캐릭터를 생각할 수 없었습니다). 내가 검색하고 (복사 - 붙여 쓴 mdbg.net/chindict/chindict.php )
저스틴

3

J, 7 자

([#"1#)

@Tobia의 APL 답변과 동일하지만 ascii chars와 동일합니다.

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
Mazzyfunction m($n,$s){-split$s|%{,(-join($_-split''|%{$_*$n}))*$n}}63 바이트를 제안 했습니다
ovs

2

줄리아, 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
이것은 내가 본 첫 번째 Julia 골프입니다.
cjfaure

@Trimsty codegolf.stackexchange.com/search?q=julia 여전히 매우 드물지만, 실제로는 언어 디자이너 중 한 명을 포함하여 몇 가지였습니다.
plannapus

@plannapus 재미있는! ~-~라는 새롭고 희귀 한 esolang이 있습니다! 골프에도 끔찍하지만 내가 사용한 것도
cjfaure


2

파워 쉘, 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} 각 줄을 배열 요소로 반복하고 배열을 반환

결과는 넓고 반복되는 문자열의 배열입니다.




1

확장형 BrainFuck : 158

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

그것은 다음과 같이 변합니다 :

Brainfuck : 185

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

EOF 마커로 0이 있거나 변경되지 않은 인터프리터가 필요합니다. beef우분투 리포지토리에서 구할 수있는 기능 :

$ ( 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

Ungolfed 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

리볼 -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 축하합니다! :-)
Giuseppe

타이 :-)! 대부분의 질문에 대한 R 답변과 일부 질문에 대한 여러 답변을 보는 것이 좋습니다.
JayCe

0

제 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에 익숙하지 않습니다.)
manatwork

catstdout으로 인쇄 하라는 호출이 누락되지 않았 습니까? 또한 줄의 각 요소는 길이가 n 번 반복 될뿐만 아니라 폭도 반복되어야합니다.
plannapus

함수를 조금 더 골프화 할 수도 <-있습니다. =, paste0될 수 있습니다. 여기서 pastecollapse 인수를 사용하고 있기 때문에 인수 each를 단축 할 수 있습니다 e. R 골프와 관련된 기본 아이디어는 여기 를 참조 하십시오 .
plannapus

그렇지 않으면, 그것은 좋은 시도입니다 (내 자신의 가장 짧은 시도는 여전히 200 자 정도입니다 :))
plannapus

@manatwork ok, 더 이상 로딩 중 에러가 없습니다stringr
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))));}

구분자로 새 줄 "\ n"을 포함하는 입력 문자열 "i"가 필요합니다.

형식화

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*문자열에서 각 문자를 반복 하는 new 를 사용하면 다음과 같이 간단합니다.

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.

나는 이것이 오래된 대답이라는 것을 알고 있지만 대신 함수를 사용하여 바이트를 절약 할 수 있습니다.{N/1$fe*e*N*}
Esolanging Fruit

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은 글을 쓸 때 문자 이스케이프가 없으므로 새로운 줄을 처리하려면 실제 줄 바꿈이 필요합니다. 따라서이 답변 (및 모든 입력)은 LF 대신 CRLF를 사용해야합니다. :(

또한 'rep'기능은이 챌린지가 발행 된 후에 만 ​​추가되었으므로 경쟁이 아닙니다.


0

Vim, 39 개의 키 입력 (입력 제외, 경쟁하지 않음)

문제와 이것이 경쟁하지 않는 이유는 입력을 두 번 입력해야하기 때문입니다. 둘 다 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.