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

Jess Smith
la source
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
Ce n'est pas ce texte pleine largeur est.
BlueRaja - Danny Pflughoeft
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!

Adnan
la source
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.

vaultah
la source
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.

Adnan
la source
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.

nimi
la source
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` `
Utilisateur générique
la source
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
Luis Mendo
la source
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 ")
CAD97
la source
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.

MickyT
la source
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.

FlipTack
la source
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é.

Khuldraeseth na'Barya
la source
3

05AB1E, 4 octets

Sð«J

Essayez-le en ligne.

Explication

Sð«J

S     split string into a list
 ð«   append a space to each element
   J  join
un spaghetto
la source
ðâJnon-concurrent.
Urne Magique Octopus
Une autre alternative à 3 octets:Sðý
Kevin Cruijssen
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
Luis Mendo
la source
3

Java, 92

class T{public static void main(String[]A){System.out.print(A[0].replaceAll("(.)","$0 "));}}
Shooqie
la source
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
                         ╰────────╯
homme au travail
la source
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

ʰᵈˑ
la source
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
MCS-Kaijin
la source
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).
Martin Ender
la source
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 . 
homme au travail
la source
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
Luis Mendo
la source
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 .

Moris Zucca
la source
3

brainfuck, 24 22 octets

Exemple simple utilisant le 32 le plus court connu pour les caractères d'espacement.

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

Essayez-le en ligne

mbomb007
la source
,[.>>-[-[-<]>>+<]>-.,]enregistre deux octets.
Dennis
3

PHP, 31 octets

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

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

Titus
la source
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!

ATaco
la source
3

Python 2, 27 25 24 octets

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

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

-1 grâce à 60919 (FlipTack).

Erik l'Outgolfeur
la source
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.

Homer Simpson
la source
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

SBI
la source
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
3

R, 36 octets

cat(strsplit(readline(),"")[[1]],"")

Exemple:

> cat(strsplit(readline(),"")[[1]],"")
Hello R!
H e l l o   R ! 
LambruscoAcido
la source
1
Vous n'en avez pas besoin sep=" ", cela peut donc être beaucoup plus court: essayez-le en ligne!
Giuseppe
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
Mego
la source