직무:
같은 아스키 아트에 배치 된이 사이트에 대한 답변을 많이가 있습니다 이 하나 . 일반적으로 배열은 수동으로 수행되지만 프로그램이 도움이되지 않습니까?
프로그램은 3 개의 입력을받습니다 :
- 한 줄로 된 코드
- 패턴의 라인 수 (필요하지 않은 경우 생략 가능)
*
s 또는 다른 문자 로 패턴 자체
규칙 :
- stdin에서 읽는 프로그램 (함수가 아님)을 작성해야합니다.
- 텍스트는 한 줄에 왼쪽에서 오른쪽으로 배치됩니다
- 패턴을 채울 텍스트가 충분하지 않은 경우
.
나머지 공백 에 s를 넣으십시오. - 패턴을 채울 텍스트가 너무 많으면 출력 후에 인쇄하십시오
- code-golf , 가장 짧은 코드는 바이트 단위입니다.
샘플 실행 :
입력 (정확한 맞춤 테스트) :
qwertyuiopasdfghjklzxcvbnm
4
***** * ***
* * * *
* * * *
***** * ***
출력 :
qwert y uio
p a s d
f g h j
klzxc v bnm
입력 (추가 문자 테스트) :
qwertyuiopasdfghjklzxcvbnm12345
4
***** * ***
* * * *
* * * *
***** * ***
출력 :
qwert y uio
p a s d
f g h j
klzxc v bnm
12345
입력 (불충분 한 문자 테스트) :
qwertyuiopasdfg
4
***** * ***
* * * *
* * * *
***** * ***
출력 :
qwert y uio
p a s d
f g . .
..... . ...
답변
GolfScript, 30 자
n/(\(;n*'*'/{@.!'.'*+([]+@+}*\
예 :
> qwertyuiopasdfghjklzxcvbnm
> 4
> ***** * ***
> * * * *
> * * * *
> ***** * ***
qwert y uio
p a s d
f g h j
klzxc v bnm
> qwertyuiopasdfghjklzxcvbnm
> 1
> ***** * ***
qwert y uio
pasdfghjklzxcvbnm
> qwerty
> 2
> ***** * ***
> * * * *
qwert y ...
. . . .
답변
Perl 6 : 60 자 편집 : 38 포인트 (아래 참조)
#C#O D#E#G#O #L#
#F #.#S# T#A#C#K
get\ .subst( "*"
,{ shift BEGIN [
get\ .comb,\ "."
xx * ]}, :g)\ .\
say\ xx get\ ()\
#E #X#C# H#A#N#G
#E#. #C#O#M# #!#
내 끔찍한 예술 기술에 관심이 없다면 골프는 다음과 같습니다.
get.subst("*",{shift BEGIN [get.comb,"."xx*]},:g).say xx get
이것은 평가 시간으로 이상한 일을합니다.
먼저 BEGIN
키워드를 먼저 [get.comb, "." xx *]
평가하여 “코드”를 구성하는 문자 목록을 배열에 넣은 다음 무한한 양의 "."
s를 붙입니다.
다음으로 get
ASCII 아트 템플릿의 줄 수를 가져 와서 끝 부분을 평가합니다. xx
오퍼레이터는 프로그램의 첫 번째 부분이 여러 번 반복한다. 당신이이 생각하는 경우에 더 의미 code() xx count()
설탕 기본적으로 code() for 1..count()
: count()
먼저 평가해야한다.
마지막으로, get
프로그램의 시작 부분에서 ASCII 아트 템플릿의 줄을 가져 와서 "*"
모든 것보다 먼저 배열의 시작 부분에서 벗어난 값으로 모든 값을 대체 합니다 ( {shift BEGIN …}
).
편집하다:
37 자까지 줄이자 명령 행 스위치를위한 문자 하나를 추가했습니다.
perl6 -pe's:g[\*]=shift BEGIN [get.comb,"."xx*]'
이것은 원본과 같은 개념이며, -p
스위치는 각 줄을 반복하며 ( BEGIN
“코드”로 읽은 후 ) 모든 *
코드를 “코드”에서 다음 문자로 대체 하여 인쇄합니다. 이에 대한 입력 형식에는 형식의 행 수가 포함되어서는 안됩니다.
답변
루비 2.0, 53 52 자
c=gets.chop
$><<gets($n).gsub(?*){c.slice!(0)||?.}+c
사양에 따라 ‘라인 수’매개 변수를 사용하지 마십시오.
예제 실행 :
qwertyuiopasd
***** * ***
* * * *
* * * *
***** * ***
산출:
qwert y uio
p a s d
. . . .
..... . ...
답변
PowerShell , 63 86 83 82 바이트
@Veskah의 +20 바이트 감사
param($s,$p)-join($p|% *ht($s|% Le*)'*'|% t*y|%{if($_-eq42){$_=$s[$i++]}"$_."[0]})
덜 골프 :
param($string,$pattern)
$chars = $pattern |
% PadRight ($string|% Length) '*' |
% toCharArray |
% {
if($_-eq42){$_=$string[$i++]} # $_ can become $null
"$_."[0] # $_ or '.' if $_ is $null
}
-join($chars)
답변
답변
T-SQL, 142 바이트
@h는 입력 텍스트입니다
@는 패턴이다
DECLARE @h varchar(max)='qwertyuiopasdfg'
DECLARE @ varchar(max)='
***** * ***
* * * *
* * * *
***** * ***'
WHILE @ like'%*'SELECT @=left(@,charindex('*',@)-1)+left(@h+'.',1)+stuff(@,1,charindex('*',@),''),@h=substring(@h,2,999)PRINT
concat(@,'
'+@h)