태그 보관물: string

string

아스키 아트를 코딩하는 쉬운 방법! 같은 아스키 아트에 배치 된이

직무:

같은 아스키 아트에 배치 된이 사이트에 대한 답변을 많이가 있습니다 이 하나 . 일반적으로 배열은 수동으로 수행되지만 프로그램이 도움이되지 않습니까? 🙂

프로그램은 3 개의 입력을받습니다 :

  • 한 줄로 된 코드
  • 패턴의 라인 수 (필요하지 않은 경우 생략 가능)
  • *s 또는 다른 문자 로 패턴 자체

규칙 :

  • stdin에서 읽는 프로그램 (함수가 아님)을 작성해야합니다.
  • 텍스트는 한 줄에 왼쪽에서 오른쪽으로 배치됩니다
  • 패턴을 채울 텍스트가 충분하지 않은 경우 .나머지 공백 에 s를 넣으십시오.
  • 패턴을 채울 텍스트가 너무 많으면 출력 후에 인쇄하십시오
  • , 가장 짧은 코드는 바이트 단위입니다.

샘플 실행 :

입력 (정확한 맞춤 테스트) :

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)


답변

apt , 18 바이트

sVè-)iVr-@t°J1 ª'.

시도 해봐


답변

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)

온라인으로 사용해보십시오


답변

펄 5 -plF , 51 바이트

$_=join'',<>;s/\*/@F?shift@F:'.'/ge;$\=$/.join'',@F

온라인으로 사용해보십시오!