Moje urządzenie działa nieprawidłowo… Nadużywaj jego nieokreślonego zachowania w łańcuchu!

12

Wsparcie! Moje urządzenie działa nieprawidłowo i za każdym razem, gdy próbuję powtórzyć ciąg znaków, otrzymuję nieporządny wynik. Zamiast powtarzać ten sam ciąg N razy, wypełnia kwadrat NxN każdą ze swoich postaci i układa kwadraty w górę.

Na przykład, biorąc pod uwagę ciąg "Test"i liczbę 2, zamiast "TestTest", otrzymuję:

TT
TT
ee
ee
ss
ss
tt
tt

Po dłuższej perspektywie zacząłem to lubić. Twoim zadaniem dzisiaj jest odtworzenie tego dziwnego zachowania. Biorąc pod uwagę niepusty ciąg, który składa się tylko z drukowalnego ASCII i dodatnią liczbę całkowitą, wypisz ciąg, który zwraca moje źle działające urządzenie.

  • Obowiązują wszystkie standardowe zasady.

  • Dane wejściowe i wyjściowe można przetwarzać dowolnymi rozsądnymi środkami.

  • To jest , więc wygrywa najkrótszy kod w bajtach w każdym języku.


Przypadki testowe

Wejście 
Wynik

----------

„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

----------

Możesz znaleźć większy przypadek testowy tutaj . Powodzenia i baw się dobrze grając w golfa!


źródło
Graniczny duplikat sztuki Powiększ ASCII
Cyfrowa trauma
1
Czy „lista linii” zamiast łańcucha oddzielonego znakami nowej linii jest poprawna?
geokavel
21
Hmm, nie rozumiem, jak „nadużycie jego nieokreślonego zachowania” z tytułu faktycznie pokazuje się w zadaniu. Nie ma nieokreślonego zachowania, zadaniem jest odtworzenie ściśle określonego zachowania.
Paŭlo Ebermann
3
it fills an NxN square- Nieprawidłowe stwierdzenie.
Magic Octopus Urn

Odpowiedzi:

9

Galaretka , 4 bajty

Zainspirowany nadużywaniem Jelly przez pana Xcodera

x⁹×Y

Pełny program przyjmujący ciąg znaków i liczbę jako argumenty wiersza poleceń i wypisujący wynik (ponieważ jako diademiczny link zwraca listę ciągów znaków i znaków nowej linii, co może być nie do zaakceptowania).

Wypróbuj online!

W jaki sposób?

Naiwny (nieużywający) pięć bajtów to:

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)

Nadużywanie wykorzystywane przez pana Xcoder (Pythona operator.mulmoże działać na zasadzie stri intpowtarzać str- tutaj pojedyncze postacie - i atom, który go używa, ×, vectorises wrt jego lewy argument) może być użyty tu też wymienić x€z ×- uzyskując pełny program :

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
Jonathan Allan
źródło
heh nadużycie w sprawie o nadużycie
Erik the Outgolfer,
9

Galaretka , 5 bajtów

Właśnie o to nas proszono ... Nadużywaj niezdefiniowane zachowanie! *

×+⁷×⁴

Wypróbuj online!

* Przez niezdefiniowane zachowanie mówię o używaniu ×do powtarzania ciągów. Czasami zachowanie jest krótsze niż zwykle, więc dlaczego nie?

Pan Xcoder
źródło
Cholera, pokonaj mnie minutę!
caird coinheringaahing
@cairdcoinheringaahing Mam wrażenie, że można grać w golfa, chociaż: - /
Mr. Xcoder
1
Wykorzystałem twoje nadużycia do gry w golfa innym pięciobokiem do czterech
Jonathan Allan
5

Bash + GNU Sed, 58

Stosując technikę bardzo podobną do tej odpowiedzi do zilustrowania, jak blisko do bycia dup do tego , że to pytanie jest:

printf -vr %$1s
sed "s/./${r// /&}\n/g;s/\S*./${r// /&}/g"

Wypróbuj online .

Cyfrowa trauma
źródło
3

PowerShell , 31 bajtów

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

Wypróbuj online!

Wyjaśnienie:

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
AdmBorkBork
źródło
3

05AB1E , 7 5 bajtów

-2 bajty dzięki scottinet

εײF=

Wypróbuj online!

ε     # For each character:
 ×    #   Repeat this character N times
  ²F  #   For 0 .. N:
    = #     Print without popping 
Riley
źródło
-2 bajty wykorzystując ukrytych wejść, drukowania bez popping ( =) i zastępując vyz ε: Spróbuj online!
scottinet,
2

MATL , 5 bajtów

t&Y"!

Wypróbuj online!

Wyjaśnienie

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
Luis Mendo
źródło
2

C ++, 125 123 bajty

-2 bajty dzięki ascheplerowi

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

Upewnij się, że przeciążenie +=wywoływanego operatora ma chartyp danych w tej instrukcjiif(!(i++%b))r+=10

HatsuPointerKun
źródło
2
using s=std::string;jest krótszy niż typedef std::string s;o dwa bajty.
aschepler
2

Japt , 7 bajtów

Zwraca tablicę ciągów.

VÆmpVÃy

Wypróbuj ( -Rflaga tylko do celów wizualizacji)


Wyjaśnienie

Domniemane wprowadzanie ciągu Ui liczby całkowitej V.

VÆ    Ã

Wygeneruj tablicę liczb całkowitych od 0do V-1i przekaż każdą z nich przez funkcję.

mpV

Map ( m) ponad Ui powtarzaj ( r) każdy znak Vrazy.

y

Transponuj i niejawnie wyprowadzaj wynikową tablicę.

Kudłaty
źródło
1

R , 59 bajtów

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

Zapisuje na standardowe wyjście.

Dzieli ciąg na znaki, powtarza się za każdym n^2razem, a następnie drukuje z szerokością ni bez separatora.

Wypróbuj online!

Giuseppe
źródło
1

J, 15 14 bajtów

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

Na pewno nieoptymalne. Zwraca tablicę znaków 2D. Pobiera njako lewy argument, a ciąg jako prawy.

Na telefon komórkowy, więc brakuje zwykłych udogodnień.

Wyjaśnienie

(Dla starej odpowiedzi)

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

$"1 0 przekształć każdą postać w

(2#[)n* nmacierzy.

,/ połącz macierze razem, aby uzyskać wynik.

kapusta
źródło
2
5 bajtów
mil
@miles genialny! Powiedziałbym, że osobiście zasługuje na własną odpowiedź.
cole
@miles post yours :)
Ven
1

Perl 5 , 26 + 1 (-p) = 27 bajtów

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

Wypróbuj online!

Xcali
źródło
Wydaje się, że zastępuje każdy znak poziomym rzędem znaków, a nie kwadratem znaków.
aschepler
Wydaje mi się, że na początku nie zrozumiałem tego właściwie. Naprawiono to z dodatkowymi 5 bajtami.
Xcali,
1

Węgiel drzewny , 9 bajtów

FS«GTIηι↓

Wypróbuj online!

Wyjaśnienie

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
Tylko ASCII
źródło
1

Brainfuck, 103 bajtów

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

Wypróbuj online (pamiętaj, aby włączyć pamięć dynamiczną, bo inaczej się nie uruchomi)

Uwaga: Dane wejściowe są nieco inne. Ten kod przyjmuje ciąg, w którym ostatni znak jest cyfrą liczby powtórzeń. Więc dane wejściowe mogą wyglądaćTest5 .

Ten kod wymaga nieograniczonej taśmy i zależy od zachowania zawijania bajtów.

Nie golfowany:

,[>,]< 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
]
Ethan
źródło
1

SOGLOnline commit 2940dbe , 4 bajty

∙ι*I

Zostało to zrobione dla konkretnego zatwierdzenia, mianowicie tego, przed którym się zmieniłem , kiedy jest używane w tablicy ciągów, powtarzając każdą literę x razy, aby powtórzyć każdą pozycję x razy. Tutaj tłumacz online bez tej wersji, który, jak widać, nie działa.

Aby spróbować zatwierdzić, pobierz to , otwórz index.htmlplik, wklej program, ∙ι*Ia na wejściu napisz coś podobnego

Test
2

Wyjaśnienie:

∙ι*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
dzaima
źródło
Jeśli to nie działa, dlaczego link?
isaacg
@isaacg dobre pytanie. Najpierw chciałem napisać, co się zmieniło, ale zapomniałem
dzaima,
1

Java 8, 152 128 118 100 bajtów

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

Wypróbuj online!

Roberto Graham
źródło
2
100 bajtów: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 bajtów

Przyjmuje powtórzenie jako lewy argument, a tekst jako prawy argument.

{⍺⌿⍺/⍪⍵}

Wypróbuj online!

{} Nienazwana lambda, gdzie reprezentuje lewy argument i prawy argument

⍪⍵ przekształć tekst w tabelę z jedną kolumną

⍺/ powtórzyć czasy w poziomie

⍺⌿ powtórzyć czasy w pionie

Adám
źródło
1

Japt , 7 bajtów

mpV² òV

Zwraca tablicę ciągów.

Wypróbuj online! z-R flagą, aby połączyć tablicę z nowymi liniami.

Wyjaśnienie

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
Justin Mariner
źródło
1

D, 86 bajtów

S u(S,I)(S a,I b){S r;foreach(c;a)for(I i;i<b*b;){if(!(i++%b))r~='\n';r~=c;}return r;}

Wypróbuj online!

Bierze ciąg jako lewy argument, a liczba całkowita jako prawy argument. To jest port odpowiedzi C ++ HatsuPointerKun na D.

Zacharý
źródło
0

CJam, 11 bajtów

{__*@e*/N*}

Funkcja, która pobiera ciąg, po którym następuje int.

Wypróbuj online

geokavel
źródło
0

Kotlin 1,1 - 99 bajtów

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

Zwraca cały wynik jako ciąg.

Nie można użyć TryItOnline, ponieważ 1.1 nie jest obsługiwany

Test

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

Byłoby 84, gdyby lista ciągów była akceptowalna jako wynik:

fun s(s:String,c:Int)=s.flatMap{p->List(c,{p})}.map{p->List(c,{p}).joinToString("")}
jrtapsell
źródło
0

PHP, 97 bajtów

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

Mathematica, 49 bajtów

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

Wejście

[„Test”, 4]

J42161217
źródło
0

Pyth , 12 bajtów

Małe zdanie, ale jeszcze tam nie dotarłem.

VQp*+*Nszbsz

Wyjaśnienie:

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

Pakiet testowy

Stan Strum
źródło
0

Clojure , 82 75 bajtów

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

Wypróbuj online!

Nieskompresowane:

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

Edycja: Ogoliłem kilka znaków z końca, zastępując pętlę for funkcją powtarzania stdlib.

luminous_arbour
źródło
0

C # (.NET Core) , 68 + 18 bajtów

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

Również uwzględniony w liczbie bajtów:

using System.Linq;

Wypróbuj online!

Dane wyjściowe to zbiór kolekcji znaków (jedna kolekcja dla każdej linii).

Wyjaśnienie:

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
    )
Grzegorz Puławski
źródło