Mon appareil fonctionne mal… Abuse son comportement de chaîne non défini!


12

Aidez-moi! Mon appareil fonctionne mal et chaque fois que j'essaie de répéter une chaîne, j'obtiens des résultats en désordre. Au lieu de répéter la même chaîne N fois, il remplit un carré NxN avec chacun de ses caractères et empile les carrés.

Par exemple, étant donné la chaîne "Test"et le nombre 2, au lieu de "TestTest", j'obtiens:

TT
TT
ee
ee
ss
ss
tt
tt

Après avoir vu cela pendant un moment, j'ai commencé à l'aimer. Votre tâche aujourd'hui est de reproduire ce comportement étrange. Étant donné une chaîne non vide composée uniquement de caractères ASCII imprimables et un entier positif , affichez la chaîne renvoyée par mon périphérique défectueux.

  • Toutes les règles standard s'appliquent.

  • L'entrée et la sortie peuvent être traitées par tout moyen raisonnable.

  • Il s'agit de , donc le code le plus court en octets dans chaque langue l'emporte.


Cas de test

Contribution 
Production

----------

"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

----------

Vous pouvez trouver un cas de test plus grand ici . Bonne chance et amusez-vous au golf!


Borderline duplicate of Enlarge ASCII art
Digital Trauma

1
Une "liste de lignes" au lieu d'une chaîne séparée par des retours à la ligne est-elle valide?
geokavel

21
Hmm, je ne vois pas comment «abuser de son comportement indéfini» du titre apparaît réellement dans la tâche. Il n'y a pas de comportement indéfini, la tâche consiste à reproduire un comportement bien défini.
Paŭlo Ebermann

3
it fills an NxN square- Ce n'est pas une affirmation correcte.
Urne de poulpe magique du

Réponses:


9

Gelée , 4 octets

Inspiré par l'abus de gelée de M. Xcoder

x⁹×Y

Un programme complet prenant la chaîne et le nombre comme arguments de ligne de commande et affichant le résultat (car en tant que lien dyadique, il renvoie une liste de chaînes et de caractères de nouvelle ligne, ce qui peut ne pas être vraiment acceptable).

Essayez-le en ligne!

Comment?

Le cinq octets naïf (non abusif) est:

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)

L'abus utilisé par M. Xcoder (Python operator.mulpeut agir sur un stret un intpour répéter les str- personnages ici simples - et l'atome qui l' utilise, ×, vectorises WRT son argument gauche) peut être utilisé ici aussi pour remplacer x€avec ×- ce qui donne le programme complet :

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 abus au défi de l'abus
Erik the Outgolfer

9

Gelée , 5 octets

C'est exactement ce qu'on nous demande de faire ... Abuser d'un comportement indéfini! *

×+⁷×⁴

Essayez-le en ligne!

* Par un comportement indéfini, je parle d'utiliser ×pour répéter des chaînes. Parfois, c'est un comportement plus court que d'habitude, alors pourquoi pas?


Merde, bat-moi d'une minute!
caird coinheringaahing

@cairdcoinheringaahing J'ai le sentiment qu'il peut être joué au golf, cependant: - /
M. Xcoder

1
J'ai utilisé votre abus pour jouer
Jonathan Allan




3

PowerShell , 31 octets

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

Essayez-le en ligne!

Explication:

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 octets

t&Y"!

Essayez-le en ligne!

Explication

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 octets

-2 octets grâce à 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;}

Assurez-vous que la surcharge de l' +=opérateur appelé prend un chartype de données dans cette instructionif(!(i++%b))r+=10


2
using s=std::string;est plus court que typedef std::string s;de deux octets.
aschepler

2

Japt , 7 octets

Génère un tableau de chaînes.

VÆmpVÃy

Essayez-le ( -Rindicateur à des fins de visualisation uniquement)


Explication

Saisie implicite de chaîne Uet d'entier V.

VÆ    Ã

Générez un tableau d'entiers de 0à V-1et passez chacun par une fonction.

mpV

Mappez ( m) Uet répétez ( r) chaque Vfois le caractère .

y

Transpose et affiche implicitement le tableau résultant.


1

R , 59 octets

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

Écrit à stdout.

Divise la chaîne en caractères, se répète à chaque n^2fois, puis imprime avec largeur net sans séparateur.

Essayez-le en ligne!


1

J, 15 14 octets

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

Sous-optimal à coup sûr. Renvoie un tableau 2D de caractères. Prend ncomme argument gauche et la chaîne comme droite.

Sur mobile, les équipements habituels manquent donc.

Explication

(Pour l'ancienne réponse)

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

$"1 0 remodeler chaque caractère pour

(2#[)une n* nmatrice.

,/ joindre les matrices ensemble pour produire la sortie.



@miles brilliant! Je dirais que cela mérite sa propre réponse personnellement.
cole

@miles poste le vôtre :)
Ven

1

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

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

Essayez-le en ligne!


Cela semble remplacer chaque caractère par une rangée horizontale de caractères, pas par un carré de caractères.
aschepler

Je suppose que je ne l'ai pas bien compris au début. Correction de 5 octets supplémentaires.
Xcali


1

Fusain , 9 octets

FS«GTIηι↓

Essayez-le en ligne!

Explication

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 octets

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

Essayez-le en ligne (assurez-vous d'activer la mémoire dynamique sinon il ne fonctionnera pas)

Remarque: L'entrée est légèrement différente. Ce code prend une chaîne où le dernier caractère est un chiffre pour le nombre de répétitions. Donc, l'entrée pourrait ressembler Test5.

Ce code nécessite une bande illimitée et s'appuie sur le comportement d'encapsulation d'octets.

Non 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
]

1

SOGLOnline commit 2940dbe , 4 octets

∙ι*I

Cela a été fait pour un commit spécifique, à savoir celui avant que je ne change , lorsqu'il est utilisé sur un tableau de chaînes, en répétant chaque lettre x fois pour répéter chaque élément x fois. Voici l'interpréteur en ligne sans cette version, qui, comme on peut le voir, ne fonctionne pas.

Pour essayer le commit, téléchargez -le , ouvrez le index.htmlfichier, dans le programme coller ∙ι*Iet dans l'entrée écrivez quelque chose comme

Test
2

Explication:

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

Si cela ne fonctionne pas, pourquoi le lien?
isaacg

@isaacg bonne question. J'ai d'abord voulu écrire ce qui a changé, mais j'ai oublié
dzaima

1

Java 8, 152 128 118 118 100 octets

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

Essayez-le en ligne!


2
100 octets: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 octets

Prend la répétition comme argument de gauche et le texte comme argument de droite.

{⍺⌿⍺/⍪⍵}

Essayez-le en ligne!

{} Un lambda sans nom où représente l'argument de gauche et l'argument de droite

⍪⍵ transformer le texte en un tableau à une colonne

⍺/ reproduire les temps horizontalement

⍺⌿ répliquer les temps verticalement


1

Japt , 7 octets

mpV² òV

Renvoie un tableau de chaînes.

Essayez-le en ligne! avec le -Rdrapeau pour rejoindre le tableau avec des sauts de ligne.

Explication

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 octets

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

Renvoie la sortie entière sous forme de chaîne.

Impossible d'utiliser TryItOnline car 1.1 n'est pas pris en charge

Tester

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

Il serait de 84 si une liste de chaînes était acceptable en sortie:

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

0

PHP, 97 octets

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 octets

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

contribution

["Test", 4]


0

Pyth , 12 octets

Petit, mais je n'y suis pas encore arrivé.

VQp*+*Nszbsz

Explication:

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

Suite de tests


0

Clojure , 82 75 octets

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

Essayez-le en ligne!

Non compressé:

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

Edit: Rasé quelques caractères de la fin en remplaçant une boucle for par la fonction de répétition stdlib.


0

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

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

Également inclus dans le nombre d'octets:

using System.Linq;

Essayez-le en ligne!

La sortie est une collection de collections de caractères (une collection pour chaque ligne).

Explication:

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
    )
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.