デバイスが誤動作しています...未定義の文字列動作を悪用します!


12

助けて!デバイスが誤動作し、文字列を繰り返してみると、厄介な結果になります。同じ文字列をN回繰り返す代わりに、NxNの正方形に各文字を塗りつぶし、正方形を積み重ねます。

たとえば、String ではなくString "Test"を指定すると、次の2よう"TestTest"になります。

TT
TT
ee
ee
ss
ss
tt
tt

しばらくこれを見た後、私はそれを好きになり始めました。今日のあなたの仕事は、この奇妙な振る舞いを再現することです。与えられた非空でのみ印刷可能なASCII文字から成る文字列、および正の整数、出力文字列の私の誤動作デバイス戻ります。

  • すべての標準ルールが適用されます。

  • 入力と出力は、合理的な手段で処理できます。

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


テストケース

入力 
出力

----------

「テスト」、2

TT
TT
ええ
ええ
ss
ss
tt
tt

----------

「UuU」、3

ううう
ううう
ううう
うう
うう
うう
ううう
ううう
ううう

----------

「A」、5

AAAAA
AAAAA
AAAAA
AAAAA
AAAAA

----------

より大きなテストケースはこちらで見つけることができます。がんばって、ゴルフを楽しんでください!



1
改行で区切られた文字列ではなく、「行のリスト」は有効ですか?
ジオカベル

21
うーん、タイトルからの「その未定義の振る舞いを乱用する」が実際にタスクにどのように表示されるかわかりません。未定義の動作はありません。タスクは、非常に明確に定義された動作を再現することです。
パエロエベルマン

3
it fills an NxN square-正しい記述ではありません。
魔法のタコUr

回答:


9

ゼリー、4 バイト

Xcoder氏のゼリー乱用に触発された

x⁹×Y

文字列と数値をコマンドライン引数として使用し、結果を出力する完全なプログラム(ダイアディックリンクとして、文字列と改行文字のリストを返すため、実際には受け入れられない場合があります)。

オンラインでお試しください!

どうやって?

素朴な(非虐待的な)5バイトは:

x⁹x€Y - Main link: list of characters, s; number, n  e.g. "xyz", 2
 ⁹    - chain's right argument, n                         2
x     - times (repeat each element)                       ['x','x','y','y','z','z']
  x€  - times for €ach                                   [['x','x'],['x','x'],['y','y'],['y','y'],['z','z'],['z','z']]
    Y - join with newlines                                ['x','x','\n','x','x','\n','y','y','\n','y','y','\n','z','z','\n','z','z']
      - as a full program: implicit print
      -   note: this could be submitted as a dyadic link (AKA unnamed function)

氏Xcoderで使用乱用(Pythonのは、operator.mul上で作用することができるstrint繰り返すstrと、それは、使用する原子- -ここでは、単一の文字×あまりにも交換するために、ここで使用することができ、vectorisesはその左引数をWRT)をx€して×-完全なプログラムをもたらします:

x⁹×Y - Main link: list of characters, s; number, n  e.g. "xyz", 2
 ⁹   - chain's right argument, n                         2
x    - times (repeat each element)                       ['x','x','y','y','z','z']
  ×  - multiply (vectorises)                             ["xx","xx","yy","yy","zz","zz"]
     -     (note, these "..." are actually strings, something not usually seen in Jelly) 
    Y - join with newlines                                ["xx",'\n',"xx",'\n',"yy",'\n',"yy",'\n',"zz",'\n',"zz"]
      - implicit print

虐待に関するチャレンジでの虐待
エリックアウトゴルファー

9

ゼリー、5 バイト

これはまさに私たちに求められていることです...未定義の振る舞いを乱用してください!*

×+⁷×⁴

オンラインでお試しください!

* 未定義の動作により、×文字列の繰り返しに使用することについて話している。時々、通常の動作よりも短いので、なぜそうではないのですか?


くそー、私を一分で打ちました!
caird coinheringaahing

@cairdcoinheringaahingゴルフができる気がしますが、:-/
Xcoder氏17

1
私はあなたに虐待を使用している4つのダウンbyter異なる5ゴルフ
ジョナサン・アラン




3

PowerShell、31バイト

param($a,$b)$a|%{,("$_"*$b)*$b}

オンラインでお試しください!

説明:

param($a,$b)                    # Takes input $a (char-array) and $b (integer)
            $a|%{             } # Loop through every character in $a
                   "$_"*$b      # Construct a string of $b length of that character
                 ,(       )*$b  # Repeat that $b times
                                # Implicit Write-Output inserts a newline between elements




2

C ++、125 123バイト

ascheplerのおかげで-2バイト

#include<string>
using s=std::string;s u(s a,int b){s r;for(auto&c:a)for(int i=0;i<b*b;){if(!(i++%b))r+=10;r+=c;}return r;}

+=呼び出された演算子のオーバーロードがcharこの命令でデータ型を取ることを確認してくださいif(!(i++%b))r+=10


2
using s=std::string;typedef std::string s;2バイトより短い。
アシェプラー

2

ジャプト、7バイト

文字列の配列を出力します。

VÆmpVÃy

試してみてください-R視覚化のみを目的としたフラグ)


説明

string Uおよびintegerの暗黙的な入力V

VÆ    Ã

0to から整数の配列を生成し、V-1それぞれを関数に渡します。

mpV

マッピング(m)してUr各文字を繰り返し()繰り返しVます。

y

結果の配列を転置して暗黙的に出力します。



1

J、15 14バイト

[:,/]$"1 0~[,[

確かに準最適。文字の2D配列を返します。テイクn左の引数として、文字列を右として。

モバイルでは、通常のアメニティが不足しています。

説明

(古い回答の場合)

[:,/(2#[)$"1 0]

$"1 0 各キャラクターを

(2#[)n* n行列。

,/ 行列を結合して出力を生成します。



@マイル素晴らしい!私はそれが個人的に答えに値すると思います。
コール

@milesポストあなた:)
ヴェン




1

Brainfuck、103バイト

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

オンラインで試す(動的メモリをオンにしないと、実行されません)

注:入力はわずかに異なります。このコードは、最後の文字が繰り返し回数の数字である文字列を取ります。したがって、入力は次のようになりますTest5ます。

このコードには無制限のテープが必要で、バイトラッピングの動作に依存しています。

ゴルフをしていない:

,[>,]< Take Input
>-[>+<-----]>--- ASCII 0, to use in next step
[-<<->>]<< Convert ASCII number to raw number by subtracting ASCII 0
[->+<]> Move the number over one to separate it from the phrase
[
  [->+>+<<]>>[-<<+>>]< Copy the number
  [
    <<<[<]> Back to Letter
    . Print Letter
    [>]>>- Back to Counter
  ]
  ++++++++++.[-]< Print the newline
  <<[<]>[-]> Clear Letter
  [>]> Back to Counter
]

1

SOGLOnlineコミット2940dbe、4 バイト

∙ι*I

これは、特定のコミット、つまり変更前のコミットで、文字列の配列で使用され、各文字をx回繰り返して各項目をx回繰り返した場合に行われました。ここにに、そのバージョンのないオンラインインタープリターを示します。これは、ご覧のとおり、機能しません。

コミットを試すには、これをダウンロードindex.htmlファイルを開いて、プログラムで貼り付け∙ι*I、入力で次のように書きます

Test
2

説明:

∙ι*I
∙     get an array with 2nd input amount of items of the 1st input
 ι    pop one implicit input to cycle back to the number
  *   multiply horizontally each separate character
   I  rotate clockwise

それが機能しない場合、なぜリンクですか?
isaacg

@isaacg良い質問です。最初に私は変わっ何書くためにそれを意図したものではなく、忘れてしまった
dzaima


1

APL(ダイアログ)、8バイト

左引数として繰り返し、右引数としてテキストを受け取ります。

{⍺⌿⍺/⍪⍵}

オンラインでお試しください!

{… 左引数と右引数を表す} 名前のないラムダ

⍪⍵ テキストを1列のテーブルにします

⍺/時間を水平方向に 複製する

⍺⌿時間を垂直に 複製する






0

Kotlin 1.1-99バイト

fun s(s:String,c:Int)=s.flatMap{p->List(c,{p})}.joinToString("\n"){p->List(c,{p}).joinToString("")}

出力全体を文字列として返します。

1.1はサポートされていないため、TryItOnlineを使用できません

テスト

fun s(s:String,c:Int)=s.flatMap{p->List(c,{p})}.joinToString("\n"){p->List(c,{p}).joinToString("")}

fun main(args: Array<String>) {
    println(s("Hello World", 5))
}

文字列のリストが出力として受け入れられる場合、84になります。

fun s(s:String,c:Int)=s.flatMap{p->List(c,{p})}.map{p->List(c,{p}).joinToString("")}

0

PHP、97バイト

for($i=0;$i<strlen($s=$argv[1]);$i++)for($j=0;$j<$r=$argv[2];$j++)echo str_repeat($s[$i],$r)."
";

0

Mathematica、49バイト

(z=#2;Grid[Column/@Table[#,z,z]&/@Characters@#])&

入力

[「テスト」、4]


0

パイス、12バイト

心は小さいですが、まだそこに行きませんでした。

VQp*+*Nszbsz

説明:

VQ          For every letter in the first input...
  p         Print without newline...
   *+*Nszsz (The index * int(second input) + newline) * int(the second input)

テストスイート


0

Clojure82 75バイト

#(dotimes[x(count %1)](dotimes[y %2](prn(apply str(repeat %2(get %1 x))))))

オンラインでお試しください!

非圧縮:

#(dotimes [x (count %1)]
  (dotimes [y %2]
    (prn
      (apply str
        (repeat %2 (get %1 x))))))

編集:forループをstdlibのrepeat関数に置き換えることで、最後の数文字を削りました。


0

C#(.NET Core)、68 + 18バイト

a=>n=>new int[a.Length*n].Select((x,i)=>Enumerable.Repeat(a[i/n],n))

バイトカウントにも含まれます。

using System.Linq;

オンラインでお試しください!

出力は、文字のコレクションのコレクションです(各行に1つのコレクション)。

説明:

a => n =>                                // Take a string and a number
    new int[a.Length * n]                // Create new collection, 'n' times larger than 'a'
    .Select((x, i) =>                    // Replace every member with
        Enumerable.Repeat(a[i / n], n)   //     a collection of repeated character from 'a', based on index
    )
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.