Cihazım arızalı… Tanımsız dize davranışını kötüye kullanın!


12

Yardım! Cihazım arızalı ve bir String'i tekrarlamaya çalıştığımda dağınık sonuçlar alıyorum. Aynı dizeyi N kez tekrarlamak yerine , karakterlerinin her biri ile bir NxN karesi doldurur ve kareleri biriktirir.

Örneğin, Dize "Test"ve sayı verildi 2, yerine "TestTest", ben olsun:

TT
TT
ee
ee
ss
ss
tt
tt

Bunu bir süre gördükten sonra sevmeye başladım. Bugünkü göreviniz bu garip davranışı yeniden üretmektir. Yalnızca yazdırılabilir ASCII ve pozitif bir tamsayıdan oluşan boş olmayan bir dize verildiğinde, hatalı aygıtımın döndürdüğü Dize çıktısını alın.

  • Tüm standart kurallar geçerlidir.

  • Giriş ve çıkış herhangi bir makul yolla ele alınabilir.

  • Bu , bu nedenle her dilde bayt cinsinden en kısa kod kazanır.


Test Durumları

Giriş 
Çıktı

----------

"Test", 2

TT
TT
ee
ee
ss
ss
tt
tt

----------

"UuU", 3

UUU
UUU
UUU
uuu
uuu
uuu
UUU
UUU
UUU

----------

"A", 5

AAAAA
AAAAA
AAAAA
AAAAA
AAAAA

----------

Sen edebilirsiniz burada daha büyük bir test vakası bulmak . İyi şanslar ve iyi eğlenceler golf!



1
Yeni satırlarla ayrılmış bir dize yerine "satır listesi" geçerli mi?
geokavel

21
Hmm, başlıktaki "tanımlanmamış davranışını kötüye kullanma" nın aslında görevde nasıl göründüğünü görmüyorum. Tanımlanmamış bir davranış yoktur, görev oldukça özel olarak tanımlanmış bir davranışı yeniden oluşturmaktır.
Paŭlo Ebermann

3
it fills an NxN square- Doğru bir ifade değil.
Sihirli Ahtapot Urn

Yanıtlar:


9

Jöle , 4 bayt

Bay Xcoder'ın Jelly istismarından ilham aldı

x⁹×Y

Dizeyi ve sayıyı komut satırı bağımsız değişkenleri olarak alan ve sonucu yazdırılan tam bir program (ikili bir bağlantı olarak, gerçekten kabul edilemeyebilecek bir dize ve yeni satır karakterleri listesi döndürür).

Çevrimiçi deneyin!

Nasıl?

Saf (küfürlü olmayan) beş byter:

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)

Sn Xcoder kullandığı kötüye (Python en operator.mulbir hareket edebilir strve bir inttekrarlamak strve onu kullanır atom - - burada tek karakterleri ×de yerine burada kullanılabilir vectorises sol argüman wrt) x€ile ×- tam program verimli :

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

heh kötüye kullanımı hakkında meydan okuma
Erik Outgolfer

9

Jöle , 5 bayt

Tam olarak bunu yapmamız isteniyor ... Tanımlanmamış davranışı kötüye kullanın! *

×+⁷×⁴

Çevrimiçi deneyin!

* Tanımlanmamış davranışlarla× dizeleri tekrarlamak için kullanıyorum . Bazen normal davranıştan daha kısa, neden olmasın?


Lanet olsun, bir dakika beni dövün!
caird coinheringaahing

@cairdcoinheringaahing Yine de golf oynayabileceğine dair bir his var: - /
Bay





3

PowerShell , 31 bayt

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

Çevrimiçi deneyin!

Açıklama:

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

MATL , 5 bayt

t&Y"!

Çevrimiçi deneyin!

açıklama

t     % Implicitly input a number, n. Duplicate
&Y"   % Implicitly input a string. Three-input repelem function. Repeats
      % each entry in the first input (s) the specified numbers of times 
      % vertically (n) and horizontally (n). Gives a char matrix
!     % Transpose. Implicit display

2

C ++, 125 123 bayt

Aschepler sayesinde -2 bayt

#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;}

+=Çağrılan operatörün aşırı yüklenmesinin charbu talimatta bir veri türü aldığından emin olunif(!(i++%b))r+=10


2
using s=std::string;typedef std::string s;iki bayttan daha kısadır .
aschepler

2

Japt , 7 bayt

Bir dizgi çıktısı verir.

VÆmpVÃy

Deneyin ( -Ryalnızca görselleştirme amaçlı olarak işaretleyin)


açıklama

Kapalı dize Uve tamsayı girişi V.

VÆ    Ã

Arasındaki tam bir dizi oluşturmak 0için V-1ve bir fonksiyonu sayesinde her geçişte.

mpV

Harita ( maşırı) Uve tekrar ( r) her karakter Vkez.

y

Ortaya çıkan diziyi aktarın ve dolaylı olarak çıktı alın.


1

R , 59 bayt

function(S,n)write(rep(strsplit(S,"")[[1]],e=n*n),"",n,,"")

Stdout'a yazar.

Dizeyi karakterlere böler, her n^2seferinde tekrarlar ve sonra genişlikle nve ayırıcı olmadan yazdırır .

Çevrimiçi deneyin!


1

J, 15 14 bayt

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

Kesinlikle alt optimal. 2B karakter dizisini döndürür. Alır nsol argüman ve hak olarak dize olarak.

Mobilde, bu nedenle olağan olanaklar eksik.

açıklama

(Eski cevap için)

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

$"1 0 her karakteri yeniden şekillendir

(2#[)bir n* nmatrisi.

,/ çıktıyı elde etmek için matrisleri birleştirin.



@miles brilliant! Ben şahsen kendi cevabını hak ettiğini söyleyebilirim.
cole

@miles post yours :)
Ven

1

Perl 5 , 26 + 1 (-p) = 27 bayt

$"=<>;s|.|($&x$".$/)x$"|ge

Çevrimiçi deneyin!


Bu, her karakterin yerine bir karakter karesini değil, yatay bir karakter dizisini koyar.
aschepler

Sanırım ilk başta doğru anlamadım. Fazladan 5 bayt ile düzeltildi.
Xcali


1

Kömür , 9 bayt

FS«GTIηι↓

Çevrimiçi deneyin!

açıklama

FS         For each character (i) in the next input as a string
   «
    G    ι  Polygon using i as fill
      T      Right, down, then left
       Iη   The second input (h) casted (to a number)
           ↓ Move down

1

Brainfuck, 103 Bayt

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

Çevrimiçi deneyin (Dinamik belleği açtığınızdan emin olun, aksi takdirde çalışmaz)

Not: Giriş biraz farklıdır. Bu kod, son karakterin tekrar sayısı için bir basamak olduğu bir dize alır. Yani girdi gibi görünebilir Test5.

Bu kod sınırsız bir bant gerektirir ve bayt sarma davranışına dayanır.

Ungolfed:

,[>,]< 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 taahhüt 2940dbe , 4 bayt

∙ι*I

Bu, bir dizi dizide kullanıldığında, her bir öğeyi x kez tekrarlamak için her harfi x kez tekrarlayan belirli bir taahhüt için, yani değiştirmeden önce olanı için yapıldı. Buraya bu versiyona sahip olmayan ve görülebildiği gibi çalışmayan çevrimiçi tercüman.

Taahhüdü denemek için bunu indirin , index.htmldosyayı açın , program hamurunda ∙ι*Ive girişte aşağıdaki gibi bir şey yazın

Test
2

Açıklama:

∙ι*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

Eğer işe yaramazsa, neden bağlantı?
isaacg

@isaacg iyi soru. İlk olarak neyin değiştiğini yazmayı amaçladım, ama unuttum
dzaima

1

Java 8, 152 128 118 100 bayt

s->n->{for(char c:s)for(int j=0;j++<n;System.out.println("".valueOf(new char[n]).replace('\0',c)));}

Çevrimiçi deneyin!


2
100 bayt:s->n->{for(char c:s)for(int j=0;j++<n;System.out.println("".valueOf(new char[n]).replace('\0',c)));}
Nevay

1

APL (Dyalog) , 8 bayt

Tekrarı sol argüman olarak ve metni sağ argüman olarak alır.

{⍺⌿⍺/⍪⍵}

Çevrimiçi deneyin!

{} İsimsiz bir lambda, burada sol ve sağ argümanları temsil eder

⍪⍵ metni tek sütunlu bir tablo haline getirme

⍺/ çoğaltmak yatay kez

⍺⌿ suret kez dikey


1

Japt , 7 bayt

mpV² òV

Bir dizgi dizisi döndürür.

Çevrimiçi deneyin! -Rdiziye yeni satırlarla katılmak için bayrak.

açıklama

mpV² òV     Implicit input of U=string, V=number
m           Map each char in the input string to...
 pV²        Itself repeated V² times
     òV     Cut the resulting string into partitions of length V




0

Kotlin 1.1-99 bayt

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

Çıktının tamamını dize olarak döndürür.

1.1 desteklenmediği için TryItOnline kullanılamıyor

Ölçek

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))
}

Bir dize listesinin çıktı olarak kabul edilebilir olması 84 olur:

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

0

PHP, 97 bayt

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 bayt

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

giriş

[ "Test", 4]


0

Pyth , 12 bayt

Küçük fikirli, ama henüz oraya henüz ulaşmadım.

VQp*+*Nszbsz

Açıklama:

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

Test odası


0

Clojure , 82 75 bayt

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

Çevrimiçi deneyin!

sıkıştırılmamış:

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

Düzenleme: ford döngüsünü stdlib yineleme işleviyle değiştirerek birkaç karakteri sonlandırdı.


0

C # (.NET Core) , 68 + 18 bayt

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

Bayt sayısına da dahil:

using System.Linq;

Çevrimiçi deneyin!

Çıktı, karakter koleksiyonlarından oluşan bir koleksiyondur (her satır için bir koleksiyon).

Açıklama:

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
    )
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.