직무:
같은 아스키 아트에 배치 된이 사이트에 대한 답변을 많이가 있습니다 이 하나 . 일반적으로 배열은 수동으로 수행되지만 프로그램이 도움이되지 않습니까? 🙂
프로그램은 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를 붙입니다.
다음으로 getASCII 아트 템플릿의 줄 수를 가져 와서 끝 부분을 평가합니다. 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)