O meu dispositivo está com defeito ... Abuse do comportamento indefinido da string!

12

Socorro! Meu dispositivo está com defeito e sempre que tento repetir uma String, obtenho resultados confusos. Em vez de repetir a mesma seqüência N vezes, ele preenche um quadrado NxN com cada um de seus caracteres e empilha os quadrados para cima.

Por exemplo, considerando a String "Test"e o número 2, em vez de "TestTest", recebo:

TT
TT
ee
ee
ss
ss
tt
tt

Depois de ter visto isso por um tempo, comecei a gostar. Sua tarefa hoje é reproduzir esse comportamento estranho. Dada uma seqüência de caracteres não vazia que consiste apenas em ASCII imprimível e um número inteiro positivo , a saída do dispositivo com falha de String retorna.

  • Todas as regras padrão se aplicam.

  • A entrada e a saída podem ser tratadas por qualquer média razoável.

  • Isso é , então o código mais curto em bytes em cada idioma vence.


Casos de teste

Entrada 
Resultado

----------

"Teste", 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

----------

Você pode encontrar um caso de teste maior aqui . Boa sorte e divirta-se jogando golfe!


fonte
Duplicidade limítrofe da arte
Digital Trauma
1
Uma "lista de linhas" em vez de uma sequência separada por novas linhas é válida?
geokavel
21
Hmm, não vejo como o "abuso de seu comportamento indefinido" do título realmente aparece na tarefa. Não há comportamento indefinido, a tarefa é reproduzir um comportamento definido especificamente.
Pa Elo Ebermann 5/09
3
it fills an NxN square- Não é uma afirmação correta.
Magic Octopus Urn

Respostas:

9

Gelatina , 4 bytes

Inspirado pelo abuso de Jelly do Sr. Xcoder

x⁹×Y

Um programa completo usando a string e o número como argumentos da linha de comando e imprimindo o resultado (como um link diádico, ele retorna uma lista de strings e caracteres de nova linha, que podem não ser realmente aceitáveis).

Experimente online!

Quão?

O ingênuo (não abusivo) cinco 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)

O abuso usado pelo Sr. Xcoder (o Python operator.mulpode agir a stre a intpara repetir os strcaracteres aqui - e o átomo que o usa ×vetoriza o argumento esquerdo) também pode ser usado aqui para substituir x€por ×- produzindo o programa completo :

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
fonte
heh abusar de desafio sobre o abuso
Erik o Outgolfer
9

Gelatina , 5 bytes

É exatamente isso que nos pedem para fazer ... Abuso de comportamento indefinido! *

×+⁷×⁴

Experimente online!

* Por comportamento indefinido, estou falando sobre o uso ×para repetir strings. Às vezes é um comportamento mais curto do que o normal, então por que não?

Mr. Xcoder
fonte
Droga, me bata por um minuto!
caird coinheringaahing 05/09
@cairdcoinheringaahing Eu tenho um sentimento que pode ser golfed, embora: - /
Sr. Xcoder
1
Eu tenho usado o seu abuso de golfe a different cinco Byter até quatro
Jonathan Allan
5

Bash + GNU Sed, 58

Usando uma técnica muito semelhante a esta resposta para ilustrar como perto de ser um dup para este que esta pergunta é:

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

Experimente online .

Trauma Digital
fonte
4

Casca , 5 4 bytes

-1 byte graças a @Zgarb

SṀRṘ

Experimente online!

H.PWiz
fonte
ṠMRṘfunciona se você trocar as entradas.
Zgarb 5/09/19
3

PowerShell , 31 bytes

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

Experimente online!

Explicação:

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
fonte
3

05AB1E , 7 5 bytes

-2 bytes graças ao scottinet

εײF=

Experimente online!

ε     # For each character:
 ×    #   Repeat this character N times
  ²F  #   For 0 .. N:
    = #     Print without popping 
Riley
fonte
-2 bytes, aproveitando as entradas implícitas, imprimindo sem popping ( =) e substituindo vypor ε: Experimente online!
scottinet
2

MATL , 5 bytes

t&Y"!

Experimente online!

Explicação

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
fonte
2

C ++, 125 123 bytes

-2 bytes graças ao aschepler

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

Certifique-se de que a sobrecarga do +=operador chamado tenha um chartipo de dados nesta instruçãoif(!(i++%b))r+=10

HatsuPointerKun
fonte
2
using s=std::string;é menor que typedef std::string s;dois bytes.
aschepler
2

Japonês , 7 bytes

Produz uma matriz de seqüências de caracteres.

VÆmpVÃy

Experimente ( -Rsinalize apenas para fins de visualização)


Explicação

Entrada implícita de sequência Ue número inteiro V.

VÆ    Ã

Gere uma matriz de números inteiros de 0para V-1e passe cada um por uma função.

mpV

Mapeie ( m) Ue repita ( r) cada caractere Vvezes.

y

Transpõe e gera implicitamente a matriz resultante.

Shaggy
fonte
1

R , 59 bytes

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

Grava em stdout.

Divide a sequência em caracteres, repete-se cada n^2vez e depois imprime com largura ne sem separador.

Experimente online!

Giuseppe
fonte
1

J, 15 14 bytes

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

Sub-ideal, com certeza. Retorna uma matriz 2D de caracteres. Toma ncomo argumento à esquerda e a sequência como à direita.

No celular, faltam as comodidades usuais.

Explicação

(Para resposta antiga)

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

$"1 0 remodelar cada caractere para

(2#[)uma matriz n* n.

,/ unir matrizes para produzir a saída.

Cole
fonte
2
5 bytes
milhas
@miles shiny! Eu diria que merece sua própria resposta pessoalmente.
Cole
@miles seu pós :)
Ven
1

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

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

Experimente online!

Xcali
fonte
Isso parece substituir cada caractere por uma linha horizontal de caracteres, não por um quadrado de caracteres.
aschepler
Acho que não entendi direito no começo. Corrigido com 5 bytes extras.
Xcali 6/09/17
1

Carvão , 9 bytes

FS«GTIηι↓

Experimente online!

Explicação

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
Somente ASCII
fonte
1

Brainfuck, 103 bytes

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

Experimente online (certifique-se de ativar a memória dinâmica ou ela não será executada)

Nota: A entrada é um pouco diferente. Esse código usa uma sequência em que o último caractere é um dígito para o número de repetições. Portanto, a entrada pode parecer Test5.

Esse código requer uma fita ilimitada e depende do comportamento de quebra de bytes.

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
]
Ethan
fonte
1

SOGLOnline confirmar 2940dbe , 4 bytes

∙ι*I

Isso foi feito para um commit específico, ou seja, aquele antes de eu mudar , quando usado em uma matriz de strings, repetindo cada letra x vezes para repetir cada item x vezes. Aqui está o intérprete online sem essa versão, que, como pode ser visto, não funciona.

Para tentar o cometer, baixar este , abra o index.htmlarquivo, na pasta de programa ∙ι*Ie na gravação de entrada algo como

Test
2

Explicação:

∙ι*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
fonte
Se não funcionar, por que o link?
Isaacg #
@isaacg boa pergunta. Primeiro eu pretendia que escrever o que mudou, mas esqueceu
dzaima
1

Java 8, 152 128 118 100 bytes

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

Experimente online!

Roberto Graham
fonte
2
100 bytes: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 bytes

Leva a repetição como argumento à esquerda e o texto como argumento à direita.

{⍺⌿⍺/⍪⍵}

Experimente online!

{} Uma lambda sem nome onde representa o argumento da esquerda e o argumento da direita

⍪⍵ transforme o texto em uma tabela de uma coluna

⍺/ replicar os tempos horizontalmente

⍺⌿ replicar vezes verticalmente

Adão
fonte
1

Japonês , 7 bytes

mpV² òV

Retorna uma matriz de strings.

Experimente online! com o -Rsinalizador para ingressar na matriz com novas linhas.

Explicação

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
fonte
1

D, 86 bytes

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

Experimente online!

Leva a string como argumento à esquerda e o número inteiro como argumento à direita. Esta é uma porta da resposta C ++ de HatsuPointerKun para D.

Zacharý
fonte
0

Kotlin 1.1 - 99 bytes

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

Retorna toda a saída como uma sequência.

Não é possível usar o TryItOnline porque o 1.1 não é suportado

Teste

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

Seria 84 se uma lista de strings fosse aceitável como saída:

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

PHP, 97 bytes

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

Mathematica, 49 bytes

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

entrada

["Teste", 4]

J42161217
fonte
0

Pitão , 12 bytes

Mente pequena, mas ainda não cheguei lá.

VQp*+*Nszbsz

Explicação:

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

Suíte de teste

Stan Strum
fonte
0

Clojure , 82 75 bytes

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

Experimente online!

Descomprimido:

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

Edit: Raspou alguns caracteres do final, substituindo um loop for pela função stdlib repeat.

luminous_arbour
fonte
0

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

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

Também incluído na contagem de bytes:

using System.Linq;

Experimente online!

Saída é uma coleção de coleções de caracteres (uma coleção para cada linha).

Explicação:

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
fonte