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!


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

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?


Droga, me bata por um minuto!
caird coinheringaahing 05/09

@cairdcoinheringaahing Eu tenho um sentimento que pode ser golfed, embora: - /
Sr. Xcoder





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



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

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


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.


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!


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.



@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!


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

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
]

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

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!


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


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




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

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)."
";

0

Mathematica, 49 bytes

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

entrada

["Teste", 4]


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


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.


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
    )
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.