Mi dispositivo funciona mal ... ¡Abusa de su comportamiento de cadena indefinido!

12

¡Ayuda! El dispositivo funciona mal y cada vez que intento repetir una cadena, obtengo resultados desordenados. En lugar de repetir la misma cadena N veces, llena un cuadrado NxN con cada uno de sus caracteres y apila los cuadrados.

Por ejemplo, dada la cadena "Test"y el número 2, en lugar de "TestTest", obtengo:

TT
TT
ee
ee
ss
ss
tt
tt

Después de haber visto esto por un tiempo, me empezó a gustar. Tu tarea hoy es reproducir este extraño comportamiento. Dada una cadena no vacía que consiste solo en ASCII imprimible y un entero positivo , genera la cadena que devuelve mi dispositivo que funciona mal.

  • Se aplican todas las reglas estándar.

  • La entrada y salida pueden manejarse a través de cualquier medio razonable.

  • Este es el , por lo que gana el código más corto en bytes en cada idioma.


Casos de prueba

Entrada 
Salida

----------

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

----------

Puede encontrar un caso de prueba más grande aquí . ¡Buena suerte y diviértete jugando al golf!


fuente
Duplicado límite de Enlarge ASCII art
Digital Trauma
1
¿Es válida una "lista de líneas" en lugar de una cadena separada por nuevas líneas?
geokavel
21
Hmm, no veo cómo el "abuso de su comportamiento indefinido" del título realmente se muestra en la tarea. No existe un comportamiento indefinido, la tarea es reproducir un comportamiento definido de manera bastante específica.
Paŭlo Ebermann
3
it fills an NxN square- No es una declaración correcta.
Urna mágica del pulpo

Respuestas:

9

Jalea , 4 bytes

Inspirado en el abuso de gelatina del Sr. Xcoder

x⁹×Y

Un programa completo que toma la cadena y el número como argumentos de línea de comando e imprime el resultado (ya que como enlace diádico devuelve una lista de cadenas y caracteres de nueva línea, lo que puede no ser realmente aceptable).

Pruébalo en línea!

¿Cómo?

El ingenuo (no abusivo) cinco byter es:

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)

El abuso usado por el Sr. Xcoder (Python operator.mulpuede actuar sobre una stry una intpara repetir los strcaracteres únicos aquí, y el átomo que lo usa ×, vectoriza con su argumento izquierdo) puede usarse aquí también para reemplazar x€con ×, dando el 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
fuente
je je abuso en desafío sobre abuso
Erik the Outgolfer
9

Jalea , 5 bytes

Esto es exactamente lo que se nos pide que hagamos ... ¡Abusa del comportamiento indefinido! *

×+⁷×⁴

Pruébalo en línea!

* Por comportamiento indefinido estoy hablando de usar ×para repetir cadenas. A veces es más corto que el comportamiento habitual, entonces, ¿por qué no?

Sr. Xcoder
fuente
¡Maldita sea, golpéame por un minuto!
caird coinheringaahing
@cairdcoinheringaahing Tengo la sensación de que se puede jugar al golf, sin embargo: - /
Sr. Xcoder
1
He usado su abuso para jugar
Jonathan Allan
5

Bash + GNU Sed, 58

Usando una técnica muy similar a esta respuesta para ilustrar cuán cerca de ser un dup a esto, esta pregunta es:

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

Pruébalo en línea .

Trauma digital
fuente
3

PowerShell , 31 bytes

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

Pruébalo en línea!

Explicación:

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

05AB1E , 7 5 bytes

-2 bytes gracias a scottinet

εײF=

Pruébalo en línea!

ε     # For each character:
 ×    #   Repeat this character N times
  ²F  #   For 0 .. N:
    = #     Print without popping 
Riley
fuente
-2 bytes aprovechando las entradas implícitas, imprimiendo sin reventar ( =) y reemplazando vycon ε: ¡ Pruébelo en línea!
scottinet
2

MATL , 5 bytes

t&Y"!

Pruébalo en línea!

Explicación

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

C ++, 125 123 bytes

-2 bytes gracias a 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;}

Asegúrese de que la sobrecarga del +=operador llamado toma un chartipo de datos en esta instrucciónif(!(i++%b))r+=10

HatsuPointerKun
fuente
2
using s=std::string;es más corto que typedef std::string s;por dos bytes.
aschepler
2

Japt , 7 bytes

Emite una matriz de cadenas.

VÆmpVÃy

Pruébelo ( -Rmarque solo con fines de visualización)


Explicación

Entrada implícita de cadena Uy entero V.

VÆ    Ã

Generar una matriz de enteros de 0a V-1y pasar cada uno a través de una función.

mpV

Mapa ( m) sobre Uy repetir ( r) Vveces cada carácter .

y

Transponer y generar implícitamente la matriz resultante.

Lanudo
fuente
1

R , 59 bytes

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

Escribe a stdout.

Divide la cadena en caracteres, se repite cada n^2vez y luego imprime con ancho ny sin separador.

Pruébalo en línea!

Giuseppe
fuente
1

J, 15 14 bytes

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

Subóptimo seguro. Devuelve una matriz 2D de caracteres. Toma ncomo argumento izquierdo y la cadena como el derecho.

En dispositivos móviles, faltan las comodidades habituales.

Explicación

(Para la vieja respuesta)

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

$"1 0 remodelar cada personaje para

(2#[)una n* nmatriz.

,/ unir matrices para producir la salida.

col
fuente
2
5 bytes
millas
@miles genial! Yo diría que merece su propia respuesta personalmente.
cole
@miles publica el tuyo :)
Ven
1

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

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

Pruébalo en línea!

Xcali
fuente
Esto parece reemplazar cada carácter con una fila horizontal de caracteres, no con un cuadrado de caracteres.
aschepler
Supongo que no lo entendí bien al principio. Se corrigió con 5 bytes adicionales.
Xcali
1

Carbón de leña , 9 bytes

FS«GTIηι↓

Pruébalo en línea!

Explicación

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
Solo ASCII
fuente
1

Brainfuck, 103 bytes

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

Pruébalo en línea (asegúrese de encender la memoria dinámica o no se ejecutará)

Nota: La entrada es ligeramente diferente. Este código toma una cadena donde el último carácter es un dígito para el número de repeticiones. Entonces la entrada podría verse comoTest5 .

Este código requiere una cinta ilimitada y se basa en el comportamiento de ajuste de bytes.

Sin golf:

,[>,]< 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
fuente
1

SOGLOnline commit 2940dbe , 4 bytes

∙ι*I

Esto se hizo para una confirmación específica, es decir, la anterior a la que cambié , cuando se usa en una serie de cadenas, repitiendo cada letra x veces para repetir cada elemento x veces. aquí está el intérprete en línea sin esa versión, que, como se puede ver, no funciona.

Para probar el commit, descargue esto , abra el index.htmlarchivo, en el programa pegue ∙ι*Iy en la entrada escriba algo como

Test
2

Explicación:

∙ι*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
fuente
Si no funciona, ¿por qué el enlace?
isaacg
@isaacg buena pregunta. Primero tenía la intención de escribir lo que cambió, pero lo olvidé
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)));}

Pruébalo en línea!

Roberto Graham
fuente
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

Toma la repetición como argumento izquierdo y el texto como argumento derecho.

{⍺⌿⍺/⍪⍵}

Pruébalo en línea!

{... } una lambda sin nombre donde representa el argumento izquierdo y el argumento derecho

⍪⍵ convertir el texto en una tabla de una columna

⍺/ replicar tiempos horizontalmente

⍺⌿ replicar tiempos verticalmente

Adán
fuente
1

Japt , 7 bytes

mpV² òV

Devuelve una matriz de cadenas.

Pruébalo en línea! con la -Rbandera para unir la matriz con nuevas líneas.

Explicación

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

Devuelve toda la salida como una cadena.

No se puede usar TryItOnline ya que 1.1 no es compatible

Prueba

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

Sería 84 si una lista de cadenas fuera aceptable como salida:

fun s(s:String,c:Int)=s.flatMap{p->List(c,{p})}.map{p->List(c,{p}).joinToString("")}
jrtapsell
fuente
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
fuente
0

Mathematica, 49 bytes

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

entrada

["Prueba", 4]

J42161217
fuente
0

Pyth , 12 bytes

De mente pequeña, pero todavía no he llegado allí.

VQp*+*Nszbsz

Explicación:

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

Banco de pruebas

Stan Strum
fuente
0

Clojure , 82 75 bytes

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

Pruébalo en línea!

Sin comprimir:

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

Editar: eliminó algunos caracteres del final al reemplazar un bucle for con la función de repetición stdlib.

puerto_luminosa
fuente
0

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

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

También incluido en el recuento de bytes:

using System.Linq;

Pruébalo en línea!

La salida es una colección de colecciones de caracteres (una colección para cada línea).

Explicación:

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
fuente