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アートを出力する必要があります。たとえば、の2番目の引数を使用した場合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

具体的には、各文字はその文字のnby nボックスに変換する必要がありnます。ここで、は整数の引数です。たとえば、次の入力

ab
cd

そして3は

aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd

これはであるため、バイト単位の最短コードが優先されます。


アスキーアートは質問リストで面白そうです
ジャスティン14年

6
拡大されたアートに適切なエイリアシングを導入する方法のために、二次/ボーナスラウンドを行うべきだと思います。あなたの巨大なコードゴルフアートはかなりブロック状に見えます。
AmeliaBR 14年

5
@AmeliaBRこちらをご覧ください
ハワード

回答:


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どのように機能しますか?
ドアノブ

4
複数行の文字列のための標準的な表現@DoorknobofSnow(はい、APLは...ラインが不均一の幅を持っている場合は、末尾に空白のあるAPLは、長方形の文字行列であることを古い。)/機能(と混同しない/オペレータは...はい、同じ記号)左側の引数に従って、行列から列を複製または削除します。それがスカラー(単純な数値)の場合、すべての入力列に対して複製されます。したがって2/m、すべての列が2倍になった行列です。変異体は、同じことが、行の(一般的な場合又は第一軸平面)
トビア

6
美しい言語ですね。数十個のシンボルを学習すれば、実際にかなり読みやすくなります。ここで見られるASCIIラインノイズ言語よりもはるかに…
トビア14年

クール。⌿はいつも言語でしたか?それはギルマンとローズの本にはなく、APL \ 360のアイバーソンの本は/ [1]に言及しているが、notには言及していない。
マークプロトニック14年

2
ワオ。それ。です ただ。驚くばかり。わたし。ひどく。Awestruck。沿って。この。コード。私は単なる+1以上を提供したいと思いますが、賞金のために私の担当者はまだかなり低いです。
エリックアウトゴルファー

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
ジョンドヴォルザーク14年

また、私はそれを読むのを少し失いました。
ジョン・ドヴォルザーク

2
@JanDvorak説明を追加しました。
ハワード14年

ワオ。今日は学びました1/。私もvalue function +もっと使う必要があります。
ジョンドボラック14年

2
@CoryKlein:どんなエラーを教えてくれたら助かりますが、... 水晶玉を注視します... ... golfscript.rb実行可能とマークされていないか、最初の行にRubyインタープリターへの間違ったパスがある可能性がありますあなたのシステムに。ああ、それはechoおそらくする必要がありますcat。試してcat inputFile | ruby golfscript.rb scriptFile(または単にruby golfscript.rb scriptFile < inputFile)、それが機能するかどうかを確認します。
イルマリカロネン

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=.)はforkです。
次のように分類されます。[ #&.|: #

場合はa、当社の入力文字列である計算になります3 # a(私たちはこの結果を呼びますx、その後、) 3 [ a(私たちはこの結果を呼び出しますy当時)y #&.|: x

3 # aのすべてのメンバーの3つのコピーを作成しaます。コピー動詞のドキュメントでは、
これが変わります

ab
cd

aaabbb
cccddd

3 [ a3を返すだけです。左動詞のドキュメント

最後y #&.|: xytransposeの下のコピーxです。これ#は以前と同じように機能しますが、&.|: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 14年

@Trimsty確かにそうです。
ガレス14年

これは短くなります。[##"1また、Jでのゴルフの書かれていない規則についてはわかりませんが、質問のゆるい要件を考えると、文字列の分割と割り当てを省略できると思います。私は確かにAPLの回答でそうしました。例:2 ([##"1) 'abcde',:'fghij'
トビア

17

Haskell、49バイト

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

enlarge関数はe、カウントと文字列を取り、文字列を返します:

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

15

APL、11文字

@Garethは基本的に同じことをJで最初に行ったため、このAPLエントリーは展示用であり、競争ではありません-彼が勝者です。

      E←{⍉⍺/⍉⍺/⍵}

使用法:左引数(⍺)での拡大、右引数(⍵)での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文字しか私を倒しません。:-)
ガレス14年

2
Jは、演算子がASCII文字セットに制限されるという厄介な設計目標によって妨げられています。:)
マークプロトニック14年

2
ただし、OPが言ったようにバイト単位で測定すると、これは44バイト(もちろんutf-8ではなくユニコードを意味します)であり、@ Garethはまだ17です。これは、ASCIIに制限されない言語の欠点です。
cjfaure 14年

5
@Trimstyしかし、APLには、各文字を1バイトにマップする独自の文字セットがあるため、おそらく11バイトのままです。
ボラティリティ2014年

1
@ボラティリティHm。それは本当に奇妙で、申し訳ありませんが、知りませんでした:P
cjfaure 14年

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回繰り返される文字に置き換えます
  • 3x pコマンド-パターンスペース全体(現在の行)を3回だけ印刷します

-nsedに渡して、明示的に指示されない限り、何も印刷しないように指示します。したがって、何を何回印刷するかを完全に制御できます。

で任意の長さの繰り返し文字列を直接生成する簡単な方法を見つけられなかった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
$ 

私はこれがどのように機能するのか分かりませんが、機能します!
トマス14年

1
変数nはルール1に違反します:「ハードコーディングできない」。
マナトワーク14年

1
を使用$1して削除するだけでn=3;、4文字、さらに{}はprintfにも保存できます。
トマス

また、$ 1は数値であると想定できるため、printfの引数を囲む引用符は不要で、52文字に削減されますr=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}"
マナトワーク14年

1
@Tomas-おそらくこれまでにどのように機能するかをご存知でしょうが、興味がある場合のために説明を追加しました。
デジタル外傷14年

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
マナトワーク14年

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。
マナトワーク14年

6

Python 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;

これはblockを定義します。これは、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、-ブロックを取得し、map-each要素に適用してから、行全体に適用します。
      • {.}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リストであることを提案してくれたVolatilityに感謝します。


7
ちょうど気づいた。nsaはすべての入力を監視しています
ジャスティン14年

バイト単位の最短コード。それには改行が含まれませんか?あなたの数は112であるべきではありませんか?
cjfaure 14年

申し訳ありませんが、私は111を意味しました。
cjfaure14年

@Trimstyあなたは正しいです。wordcounter.netは改行を数えると思った。
ジャスティン14年

2
作るaのリストに、んa+=[''.join(c*n for c in s)]*n、そしてやるprint('\n'.join(a))終わり。うまくいくはずです。
ボラティリティ2014年

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
入力文字は下方向と横方向に拡張する必要があります(したがって、上記の出力例aaabbbcccdddは3行と3行が必要です)。
ガレス14年

2
宣言の中でiを初期化することにより、1文字にすることができforます。xの代わりにaを使用して8文字(a=a[1].split("\n")、およびすべてのxをaで変更)。
マナトワーク14年

3
ええ、宣言だけmainで他の言語のプログラム全体よりも多くのバイトを必要とする言語では、競技者はボギーになります。
マークプロトニック14年

2
うん :ここではループのために少しoutterを並べ替えることによって保存された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])
ユーリィシャイロフ14年

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, ... ]

マークの上にあるものはすべて自動的に連結されて出力され、残りは破棄されます。


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

@theGreenCabbage了了。踢木外は、このような電気的な言葉の始まりです
ジャスティン

1
...(外キック木材、顕著な茶(ノ・ムヒョン)なぜ)外木踢あなたを呼び出すため申し訳ありません@Timwi
ジャスティン・

@Quincunx:へへ、おもしろいことに気づいた:)しかし、決勝iは[iɑ]ではなく[ːi]と発音されます。今は中国語でどう書く?
ティムウィ14年

@Timwiそれはそれが発音される方法だと思った(しかし、私は対応する文字を考えることができなかった)。検索とコピー&ペースト(mdbg.net/chindict/chindict.phpで)で書きました
ジャスティン

3

J、7文字

([#"1#)

@TobiaのAPL回答とまったく同じですが、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
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
これは私が見た最初のジュリアゴルフです。
cjfaure 14年

@Trimsty codegolf.stackexchange.com/search?q=juliaはまだ非常にまれですが、少数でした(実際には言語のデザイナーの1人によるものも含まれます)。
プランナパス

@plannapus面白い!〜-〜という新しい珍しいエゾランがあります!私も使ったことがありますが、ゴルフにはひどいです。
cjfaure 14年


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} 各行を配列要素として繰り返し、配列を返します

結果は、幅の広い繰り返し文字列の配列です。




1

拡張BrainFuck:158

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

それは次のようになります:

ブレインファック:185

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

EOFマーカーとして0または変更なしのいずれかのインタープリターが必要です。beef、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

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おめでとうございます!:-)
ジュゼッペ

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"が見つかりませんでした」というエラーが表示されます。コードを実行するには、ストリンガーパッケージを明示的にインストールする必要がありますか?(申し訳ありませんが、Rに精通していません。)
マナトワーク

catそれを標準出力として印刷するための呼び出しが欠落していませんか?さらに、文字列の各要素は、長さをn回繰り返すだけでなく、幅も繰り返す必要があります。
プランナパス14年

関数をもう少しゴルフすることも<-できます:とにかく、collapse引数を使用していて、引数をに短縮できるため=paste0ここで置き換えることができます。Rでのゴルフの基本的なアイデアについては、こちらをご覧ください。pasteeache
plannapus 14年

それ以外の場合、それはいい試みです(私自身の最短の試みはまだ200文字程度です:))
plannapus 14年

もうロードwihtout OK @manatwork、エラーなしstringr
petermeissner

0

MATLAB:20文字

['' imresize(ans,n)]

このソリューションは、イメージが呼び出されたファイルに保存され、startup.mそれを呼び出すときにmatlabに複製の量を与えることが許可されていることを前提としています。これは次の方法で実行できます。!matlab -r "n=3"&

MATLAB、引数なしの呼び出し:23文字

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

最初のソリューションとは異なり、後者の2つは、呼び出しでレプリケーションの量が予想されない可能性があることを前提としています。これらのソリューションでは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

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回入力する必要があるためです。両方2を独自の入力に置き換えます。

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

説明

  • qayl2phxl@aquu文字をヤンクし、貼り付けて次の文字に移動するマクロを記録し、それから自分自身を再生します。次に、変更を元に戻します。ループが無限にならないようにしたいので、文字を削除しません。つまり、無関係なものを削除する必要がありますが、最後の文字で失敗する動きで終了しなければなりません。
  • :%norm @a<cr> すべての行でマクロを実行します
  • gg0 最初に戻る
  • qbyy2P2jkddj@bq@b@aすべての行をコピーするのと同じ手法を使用しますが、再帰マクロを使用します。

たとえば、行の複製のために逆方向にトラバースすることにより、これをもっとゴルフできることを知っていますが、複数の入力エントリ要件があるため、そこで停止し、この答えを非競合としてマークします。

前の回答(32回のキーストローク、2回のみ)

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

説明

  • qaylpl@aqu文字をヤンクし、貼り付けて次の文字に移動するマクロを記録し、それから自分自身を再生します。変更を元に戻します。
  • :%norm @a<cr> すべての行でマクロを実行します
  • :%s/.*/&\r&<cr> すべての行を倍増

ネストされたマクロを実行したかったのですが、内側のマクロ(文字)が外側のマクロ(行)を停止するため、2つのコマンドを実行する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.