Texte pleine largeur


44

Le texte en pleine largeur est un texte qui comporte un espace après chaque caractère, y compris le dernier. Par exemple, la première phrase de cette question devient:

F u l l   w i d t h   t e x t   i s   t e x t   t h a t   h a s   a   s p a c e   a f t e r   e v e r y   c h a r a c t e r ,   i n c l u d i n g   t h e   l a s t   o n e . 

Ecrivez un programme qui prend une ligne de texte à partir d'une entrée standard et le sort sous forme de texte pleine largeur vers une sortie standard.

Classement


6
Habituellement, vous devez également autoriser des fonctions ou exclure de nombreux langages (par exemple, JavaScript).
wizzwizz4

8
Nous avons quelques valeurs par défaut pour les E / S qui sont basées sur un consensus de la communauté. Bien que vous ayez le droit de les ignorer, insister sur STDIN / STDOUT pour les E / S invalide un tas de réponses (supposant que les valeurs par défaut s’appliquent) et rendant la tâche carrément impossible dans d’autres langues (elles ne disposent pas de flux standard).
Dennis

52

4
@ BlueRaja-DannyPflughoeft a raison. Le texte en pleine largeur concerne le codage de caractères sous-jacent (codé sur 2 octets) requis par certaines langues (par exemple, les idéogrammes). En Unicode, la notion de demi-taille et de taille réelle s'appelle bloc Unicode
Ludovic Frérot

2
@ LudovicFrérot En réalité, ce ne sont pas des idéogrammes, ce sont des lettres anglaises chinoises.
Erik the Outgolfer

Réponses:


29

Gelée , 5 3 2 octets

Merci à Dennis d' avoir économisé 2 octets. Merci également à FryAmTheEggman pour avoir économisé 1 octet. Code:

p⁶

Explication:

p⁶   # Cartesian product with the input and the space character.

Utilise le codage Jelly .

Essayez-le en ligne!


1
⁶ occupe trois octets en UTF-8.
Jess Smith

12
@JessSmith Jelly utilise sa propre page de code: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
un spaghetto

1
@AandN Mettez-le dans la réponse, pas un commentaire.
mbomb007

3
@ mbomb007 C'est juste dans l'en-tête.
Adnan

5
@AandN Non, vous devriez indiquer dans votre réponse qu'il a sa propre page de code. Surtout qu'il s'agit d'une nouvelle langue, donc les gens ne le savent pas encore.
mbomb007

24

Python 3.5, 18 octets

print(*input(),'')

Cela fonctionne car printle séparateur par défaut est un espace unique.


3
print(*input(),end=' ')serait portable, mais ce n'est pas très gaie ...
Dennis

9
MFW La première utilisation de mon PEP que je vois à l'état sauvage est sur Code Golf.
Veedrac

Est-ce que cela a un espace après le dernier caractère?
Esolanging Fruit

17

Hexagony , 21 13 12 10 octets

Code:

Économisé beaucoup d'octets grâce à FryAmTheEggman . Code:

P,<0/*;@.>

Ou sous une forme plus lisible:

  P , <
 0 / * ;
@ . > . .
 . . . .
  . . .

Essayez-le en ligne!

Explication:

Le programme Hexagony commence dans le coin supérieur gauche, en définissant immédiatement le bord de la mémoire sur la valeur ASCII de P80 (valeur 80). Après cela, nous pouvons voir que le chemin suivant est pris:

entrez la description de l'image ici

Nous pouvons voir que le chemin emprunté est: P,<;.P/0....;*/>. Après cela P, nous prenons un octet de saisie de l'utilisateur. Si cela est vide, la branche suivante ( <) nous dirigerait vers le nord-est. Si l'entrée n'est pas vide, la branche nous dirige vers le sud-est. Après cela, nous générons l'entrée utilisateur à l'aide de ;. Nous remettons le bord mémoire à P80. Le zéro suivi du miroir est ensuite concaténé à notre nombre, ce qui donne 800. Il est ensuite émis à l'aide de la ;commande, mais il est d'abord pris modulo 256, ce qui donne 32. est le caractère de l'espace. Après cela, nous réinitialisons le bord de la mémoire à l'aide de la *commande et revenons en boucle sur le reste de l'entrée utilisateur. Lorsque nous avons terminé avec l'entrée de l'utilisateur, le chemin est dirigé vers le nord-est:

entrez la description de l'image ici

Cela va essentiellement à la @commande, qui termine le programme.

L' utilisation Timwi étonnante de HexagonyColorer pour faire des diagrammes.


Euh, je jouais au golf pendant que vous éditiez. Oops. 10:P,<0/*;@.>
FryAmTheEggman

@FryAmTheEggman Hahaha, faisons une nouvelle explication alors: p.
Adnan

P,<<>0;@>*est également 10, mais malheureusement, je ne pense pas que cela aide à raser un autre octet.
Martin Ender

@ MartinBüttner Oh, c'est dommage. Je doute qu'il soit possible de supprimer un autre octet, mais cela semble peu probable.
Adnan

Est-ce que HexagonyColorer est maintenant animé?
Esolanging Fruit

12

Haskell, 11 octets

((:" ")=<<)

Exemple d'utilisation: ((:" ")=<<) "Code Golf"-> "C o d e G o l f ".

Mappez chaque caractère csur une liste de deux éléments [c, space]et concaténez le tout en une seule liste.


Il est intéressant de noter que Haskell et Jelly font un peu la même chose ici, car la liste monade agit de manière similaire à un produit cartésien.
ballesta25


6

JavaScript, 20 octets

Simple, je souhaite juste que Array.join a ajouté l'espace à la fin afin que je puisse économiser 3 octets.

s=>[...s,``].join` `

5
[...s,``].join` ` peut-être
Neil

3
Encore mieux [...s,,].join...
edc65

@ edc65 Ne fonctionne pas dans les derniers Firefox ou Chrome? Je viens de recevoir la joinfonction comme retour, comme je m'y attendais.
Mwr247

@ Mwr247 après la jointure, vous devez mettre le reste de votre code, c'est pourquoi je mets des points de suspension (...). C'est juste 1 octet d'économie
edc65

@ edc65 a peut-être été trop paresseux pour savoir comment taper le ` `dans un commentaire.
Neil

5

> <> , 13 10 octets

3 octets enregistrés grâce à @ Sp3000

i:0(?;o 'o

Essayez ici . Cliquez sur le lien, puis sur Soumettre , puis tapez une entrée et appuyez sur Donner , puis exécutez le programme avec Démarrer ou Exécuter sans animation .

Explication

i       read a character
:       duplicate
0(      is it less than 0?
?;      if so: end program. Else:
o       output read character
 '      push all chars until matching (same) quote. Top character is a space
o       output that character, which is a space. Go back to the beginning

i:0(?;o 'opour 10
Sp3000

En fait, io 'ofonctionne aussi, en se trompant.
Sp3000

@ Sp3000 Merci! Je vais aller pour la version sans erreur (peut-être que vous voulez soumettre la vôtre?). J'ai oublié que vous pouvez saisir des caractères directement. Comment fonctionne la citation inégalée? Choisit-il toujours le caractère précédent?
Luis Mendo

1
's'enroule, poussant des caractères jusqu'à ce qu'il en trouve un autre 'pour le fermer. Dans ce cas, les caractères d'ouverture et de fermeture 'sont identiques et la plus grande partie du code source est importée, mais le caractère supérieur ne représente que de l'espace puisqu'il a été poussé en dernier.
Sp3000

@ Sp3000 J'ai compris. Donc, c'est aussi cyclique. Merci beaucoup pour la suggestion et l'explication!
Luis Mendo

5

Java, 132 (System.in) ou 99 (argument de programme) octets

Pouvez-vous sentir les frais généraux ce soir?

class F{public static void main(String[]a){System.out.print(new java.util.Scanner(System.in).nextLine().replaceAll("(.)", "$0 "));}}
class W{public static void main(String[]a){for(char c:a[0].toCharArray())System.out.print(c+" ");}}

shooqie a découvert un moyen plus court de 6 octets pour le faire mais je ne leur volerai pas leur approche. Je l'ai utilisé avec les versions STDIN et lambda, cependant.

28 caractères pour un lambda mais cela ne répond pas aux exigences du programme.

s->s.replaceAll("(.)","$0 ")

La question spécifiait que l'entrée devait provenir de STDIN.
EMBLEM

Je pourrais en ajouter un pour vous, si ça vous va.
Bleu

J'ai ajouté une version de STDIN maintenant (et utilisé le shooqie regexplace intelligent compris).
CAD97

Pas besoin de parenthèses dans votre expression rationnelle. Également supprimé un espace supplémentaire entre les arguments de replaceAll.
Khuldraeseth na'Barya

4

Cubix , 10 octets

Cubix est un langage bidimensionnel développé par @ETHproductions où les commandes sont encapsulées dans un cube. Essayez-le en ligne

@.?wi^\oSo

Ceci mappe sur un cube avec une longueur de bord 2

    @ .
    ? w
i ^ \ o S o . .
. . . . . . . .
    . .
    . .

Commence avec une entrée i. Le flux est redirigé vers le nord ^vers la face supérieure. ?Si la valeur est négative, tournez à gauche pour terminer @, le zéro continue dans le décalage à droite wou positif, tournez à droite puis réfléchissez à gauche \. Caractère de sortie avec un espace de fin oSo.


4

Cubix , 9 octets

@./.i?>So

Voir le travail en ligne!

Cubix est un langage dans lequel les instructions sont mappées sur la face d’un cube. Ce programme forme le cube suivant:

    @ .
    / . 
i ? > S o . . .
. . . . . . . .
    . .
    . .

Le pointeur d'instruction commence à i, ce qui permet de saisir un autre code de caractère et de le placer dans la pile. S'il n'y a plus aucune entrée à prendre, les ?adresses IP tournent à gauche, là où elles touchent /et se reflètent vers le haut @, ce qui termine le programme.

Cependant, s'il reste des entrées, la valeur sera un code de caractère. Comme tous les codes de 1 caractère sont positifs, le ?IP tourne à droite, où il passe tout autour du cube, en passant osur le chemin de sortie du caractère. Il frappe ensuite, /ce qui le fait revenir en boucle >So, ce qui pousse et imprime un espace. La propriété intellectuelle continue vers l’Ouest jusqu’à iremonter au début de la boucle principale.

1 Si le caractère est un octet nul, il ignorera la valeur ?et continuera tout droit, en produisant simplement un seul espace.


Bien sûr, une explication écrite n’est possible que dans la mesure du possible, je vous recommande donc vivement de la visualiser dans l’ interprète en ligne . Il existe une option "vitesse" qui vous permet de voir l'exécution aussi lente ou rapide que vous le souhaitez.


1
vous pouvez économiser un octet avec@.Uoi?So
MickyT

4

Stax , 2 octets

Cravates gelée!

0\

Essayez-le à staxlang.xyz!

Cela ne fait que pousser 0vers la pile et compresser la chaîne à partir de l'entrée standard, en répétant le 0 si nécessaire. Dans Stax, le point de code 0 d'une chaîne est généralement converti en 32 (espace).

Ceci est suffisamment court pour que l’embarquement ûTne réduise en rien la lisibilité.



3

CJam , 5 4 octets

1 octet en moins grâce à @FryAmTheEggman

lSf+

Essayez-le en ligne!

Explication

l     e# read line
Sf+   e# map "concatenation" (+) with a space (S) as extra parameter
      e# implicitly display characters in the stack

3

Java, 92

class T{public static void main(String[]A){System.out.print(A[0].replaceAll("(.)","$0 "));}}

3

Awk, 7 octets

(Option de ligne de commande code 4 caractères + 3 caractères.)

NF++

Échantillon échantillon:

bash-4.3$ awk -F '' 'NF++' <<< 'Full width text.'
F u l l   w i d t h   t e x t . 

(Il y a un certain désaccord sur ce qui devrait être inclus dans le nombre d'options en ligne de commande. J'ai inclus ce qui est réellement transmis à l' awkinterpréteur: «-», «F» et un séparateur entre «F» et le paramètre de chaîne vide. Voir ci-dessous. Je veux dire.)

bash-4.3$ od -tax1 /proc/`pidof awk`/cmdline 
0000000   a   w   k nul   -   F nul nul   N   F   +   + nul
         61  77  6b  00  2d  46  00  00  4e  46  2b  2b  00
                         ╰────────╯

3

PHP, 39 octets

echo join(' ',str_split($argv[1])).' ';

Lancez le depuis la ligne de commande

php fullwidth.php "Full width text is text that has a space after every character, including the last one."

https://eval.in/541179


3

WhoScript 38 octets

1v;pr;e;#0 1;-;i;t=;ti;o;tl;" ";d;>;pf

Fonctionne mieux lorsque la chaîne est indiquée sur la ligne de commande, mais vous pouvez également effectuer un caractère à la fois en temps réel.

Ungolfed:

time_vortex
  psychic_paper read
  duplicate
  # 0 1
  -
  integer
  TARDIS =
  TARDIS if
      opening
  TARDIS landing
  # 20
paradox
pop
psychic_paper flush

3

Labyrinthe , 10 octets

<.23.%):,>

Cela se termine par une erreur, mais le message d'erreur passe à STDERR.

Essayez-le en ligne!

Explication

C'est l'un des rares cas où un programme complètement linéaire est réalisable. La boucle est réalisée via les commandes de modification du code source <et >, ce qui fonctionne car après chaque itération, nous savons que la pile est à nouveau vide.

< décale cycliquement la ligne entière d'une cellule vers la gauche, on obtient donc:

.23.%):,><

Cela prend le pointeur d'instruction (IP) avec celui-ci de sorte que l'IP est maintenant à l'extrémité droite du code et doit être déplacé à gauche. Ensuite, la >modification inverse est-elle effectuée de sorte que le code source passe de nouveau à

<.23.%):,>

Maintenant, nous exécutons une seule itération (de droite à gauche), avant que tout ne recommence:

,    Read a character code from STDIN, or -1 at EOF.
:)   Duplicate and increment.
%    Modulo. At EOF this will attempt a division by zero and terminate. Otherwise, we
     have n % (n+1) = n, so we're left with the input character again.
.    Print it back to STDOUT.
32   Turn the top of the stack into a 32.
.    Print it as well (a space).

3

Gema , 5 octets

?=?\ 

Échantillon échantillon:

bash-4.3$ gema '?=?\ ' <<< 'Full width text.'
F u l l   w i d t h   t e x t . 

Je n'ai pas vu cette langue avant. Lien vers l'interprète?
un spaghetto

Désolé. Lien hypertexte ajouté au titre de l'article. Très vieux, mais malheureusement, Google ne peut efficacement aider à le trouver que si vous savez que le nom vient de «processeur de macro à usage général».
Manatwork

3

MATL , 7 octets

tnZ"v1e

Essayez-le en ligne!

Explication

t    % implicitly take input string and duplicate it
n    % number of elements
Z"   % string with that many spaces
v    % concatenate vertically (2xN array, where N is input length)
1e   % reshape into 1 row. Implicitly display

3

APL, 5 octets

∊2∘↑¨

Cela prend 2 éléments pour chaque caractère de la chaîne, avec pour effet d'ajouter un espace

Pour en faire un programme qui utilise stdin, il faut le même nombre d’octets:

∊2↑¨⎕

Essayez ici .



3

PHP, 31 octets

<?=chunk_split($argv[1],1," ");

prend en entrée l'argument de ligne de commande.


3

Threead , 45 16 octets non concurrents.

  B[coB]
32c   o

Prend la saisie via STDIN.

La première ligne / bande lit simplement les octets de STDIN et les écrit. La deuxième ligne, stocke initialement un espace via 32c, puis en même temps que le caractère suivant est en cours de lecture, génère cet espace.

Essayez-le en ligne!


3

Python 2, 27 25 24 octets

lambda x:' '.join(x)+' '

Plus court que la réponse de Raffi ...

-1 grâce à 60919 (FlipTack).


Si les fonctions sont autorisées, la lambda x:' '.join(x)+' 'longueur est de 1 octet.
FlipTack

3

C, 50 octets

Un peu de main()récursion :)

main(c){~(c=getchar())?printf("%c ",c),main():0;}

Essayez-le en ligne! - Si vous utilisez ceci sur votre propre machine, utilisez Ctrl+ Dpour indiquer EOF.


3

C, 56 octets (en tant qu'argument de programme), 46 octets (à partir de stdin)

main(int a,char**b){while(*b[1])printf("%c ",*b[1]++);}

Plaine vieux réponse C. Une fois compilé, le programme doit être appelé avec une chaîne comme premier paramètre. Une chaîne avec des espaces doit être placée entre guillemets. Pour l'exemple dans le post de départ:

./prog "Full width text is text that has a space after every character, including the last one."

Qui va sortir

F u l l   w i d t h   t e x t   i s   t e x t   t h a t   h a s   a   s p a c e   a f t e r   e v e r y   c h a r a c t e r ,   i n c l u d i n g   t h e   l a s t   o n e .

Solution qui lit directement à partir de stdin.

main(c){while(c=~getchar())printf("%c ",~c);}

Un octet en moins grâce à @FryAmTheEggman


Les exigences sont un peu floues, mais je pense que vous devez lire les commentaires stdinplutôt que de les prendre comme argument. Aussi, voici une page avec quelques conseils utiles pour la pratique du golf en C: codegolf.stackexchange.com/q/2203/13877
Josh

@Josh Est-ce que cela compte comme paramètre de main? Parce que sinon, la réponse Java sera tout aussi fausse et moins sûre pour Haskell.
SBI

Soit c'est bien, nous aimons que nos E / S soient amicales :) Mais je crois que l’utilisation getchar()est plus courte. De plus, vous n'avez pas besoin d'inclure pour la plupart des compilateurs C.
FryAmTheEggman

@FryAmTheEggman J'ai laissé l'inclusion dans pour être complètement conforme, je ne peux que tester avec gcc. Tant que gcc-only est correct, ouais, le rasage de l'inclusion est correct.
SBI

Généralement, si ça marche avec Ideone, ça va :)
FryAmTheEggman


2

Sérieusement, 7 octets

' ;,@j+

Essayez-le en ligne!

Man, cela nécessitait de l'espace de fin ajouté 3 octets supplémentaires. Sans cela, ,' jtravaillerait pour 4.

Explication:

' ;,@j+
' ;      push two copies of a single space
   ,@    push input, swap
     j+  join on spaces, append a space

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.