Texto de ancho completo


44

El texto de ancho completo es un texto que tiene un espacio después de cada carácter, incluido el último. Por ejemplo, la primera oración de esta pregunta se convierte en:

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 . 

Escriba un programa que tome una línea de texto desde la entrada estándar y la envíe como texto de ancho completo a la salida estándar.

Tabla de clasificación


66
Por lo general, también debe permitir funciones o excluir muchos idiomas (por ejemplo, JavaScript).
wizzwizz4

8
Tenemos algunos valores predeterminados para E / S que se basan en el consenso de la comunidad. Si bien tiene derecho a anularlos, insistir en STDIN / STDOUT para E / S invalida un montón de respuestas (que supone que se aplican los valores predeterminados) y hace que la tarea sea absolutamente imposible en otros idiomas ( no tienen transmisiones estándar).
Dennis

52
That is not what fullwidth text is.
BlueRaja - Danny Pflughoeft

44
@ BlueRaja-DannyPflughoeft tiene razón. El texto de ancho completo trata sobre la codificación de caracteres subyacente (codificada en 2 bytes) requerida por algún lenguaje (es decir, ideogramas). En Unicode, la noción de tamaño medio y completo se llama bloque Unicode
Ludovic Frérot

2
@ LudovicFrérot En realidad, estos no son ideogramas, son letras en inglés chino.
Erik the Outgolfer

Respuestas:


29

Jalea , 5 3 2 bytes

Gracias a Dennis por guardar 2 bytes. También gracias a FryAmTheEggman por guardar 1 byte. Código:

p⁶

Explicación:

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

Utiliza la codificación Jelly .

Pruébalo en línea!


1
⁶ ocupa tres bytes en UTF-8.
Jess Smith

12
@JessSmith Jelly usa su propia página de códigos: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
un spaghetto

1
@AandN Ponlo en la respuesta, no un comentario.
mbomb007

3
@ mbomb007 Está justo en el encabezado.
Adnan

55
@AndN No, debe decir en su respuesta que tiene su propia página de códigos. Especialmente porque es un idioma más nuevo, por lo que la gente aún no lo sabe.
mbomb007

24

Python 3.5, 18 bytes

print(*input(),'')

Esto funciona porque printel separador predeterminado es espacio simple.


3
print(*input(),end=' ')sería portátil, pero no es muy golfoso ...
Dennis

99
MFW el primer uso de mi PEP que veo en la naturaleza es en Code Golf.
Veedrac

¿Tiene esto un espacio después del último personaje?
Esolanging Fruit

17

Hexagonía , 21 13 12 10 bytes

Código:

Ahorrado un montón de bytes gracias a FryAmTheEggman . Código:

P,<0/*;@.>

O en una forma más legible:

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

Pruébalo en línea!

Explicación:

El programa Hexagony comienza en la esquina superior izquierda, configurando inmediatamente el borde de la memoria al valor ASCII de P, que es 80. Después de eso, podemos ver que se toma la siguiente ruta:

ingrese la descripción de la imagen aquí

Podemos ver que el camino tomado es: P,<;.P/0....;*/>. Después del P, tomamos un byte de entrada del usuario. Si esto está vacío, la siguiente rama ( <) nos dirigiría al noreste. Si la entrada no está vacía, la sucursal nos dirige al sudeste. Después de eso, sacamos la entrada del usuario usando ;. Ajustamos el borde de la memoria a P, que es 80. El cero seguido por el espejo se concatena a nuestro número, lo que da como resultado 800. Esto se genera con el ;comando, pero primero se toma el módulo 256, que da como resultado 32, que Es el personaje espacial. Después de eso, restablecemos el borde de la memoria usando el *comando y volvemos al bucle sobre el resto de la entrada del usuario. Cuando terminamos con la entrada del usuario, la ruta se dirige al noreste:

ingrese la descripción de la imagen aquí

Básicamente, esto va al @comando, que finaliza el programa.

Usando Timwi increíble 's HexagonyColorer para hacer los diagramas.


Estaba jugando al golf mientras tú editabas. Ups 10:P,<0/*;@.>
FryAmTheEggman

@FryAmTheEggman Jajaja, hagamos una nueva explicación: p.
Adnan

P,<<>0;@>*también es 10, pero desafortunadamente no creo que ayude a eliminar otro byte.
Martin Ender

@ MartinBüttner Oh, eso es una pena. Dudo si es posible eliminar otro byte, pero parece poco probable.
Adnan

¿HexagonyColorer ahora está animado?
Esolanging Fruit

12

Haskell, 11 bytes

((:" ")=<<)

Ejemplo de uso: ((:" ")=<<) "Code Golf"-> "C o d e G o l f ".

Asigne cada carácter ca una lista de dos elementos [c, space]y concatene todo en una sola lista.


Es interesante que Haskell y Jelly estén haciendo lo mismo aquí, ya que la mónada de la lista actúa de manera similar a un producto cartesiano.
ballesta25


6

JavaScript, 20 bytes

Simple, solo deseo que Array.join agregue el espacio al final para poder guardar 3 bytes.

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

55
[...s,``].join` ` ¿quizás?
Neil

3
Aún mejor [...s,,].join...
edc65 01 de

@ edc65 ¿No funciona en las últimas versiones de Firefox o Chrome? Solo obtengo la joinfunción como el retorno, como era de esperar.
Mwr247

@ Mwr247 después de la unión debes poner el resto de tu código, por eso pongo puntos suspensivos (...). Es solo 1 byte de ahorro
edc65

Es posible que @ edc65 haya sido demasiado vago para averiguar cómo escribir ` `un comentario.
Neil

5

> <> , 13 10 bytes

3 bytes guardados gracias a @ Sp3000

i:0(?;o 'o

Probar aquí . Haga clic en el enlace, luego Enviar , luego escriba alguna entrada y presione Dar , y finalmente ejecute el programa con Inicio o Ejecutar sin animación .

Explicación

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 'opara 10
Sp3000

De hecho, io 'otambién funciona, por error.
Sp3000

@ Sp3000 Gracias! Iré por la versión sin errores (¿tal vez quieres enviar la tuya?). Olvidé que puedes ingresar caracteres directamente. ¿Cómo funciona la cita sin igual? ¿Siempre elige el carácter anterior?
Luis Mendo

1
'simplemente se envuelve, empujando caracteres hasta que encuentra otro 'para cerrarlo. En este caso, los correos electrónicos de apertura y cierre 'son el mismo carácter y la mayor parte del código fuente se inserta, pero el carácter superior solo sería espacio desde que se presionó el último.
Sp3000

@ Sp3000 Lo tengo. Entonces eso también es cíclico. Muchas gracias por la sugerencia y explicación!
Luis Mendo

5

Java, 132 (System.in) o 99 (argumento del programa) bytes

¿Puedes sentir la sobrecarga esta noche?

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 descubrió una forma más corta de 6 bytes para hacer esto, pero no robaré su enfoque. Sin embargo, lo he usado con las versiones STDIN y lambda.

28 caracteres para una lambda pero eso no cumple con los requisitos del programa.

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

La pregunta especificaba que la entrada debía ser de STDIN.
EMBLEMA

Podría agregar uno para usted, si está bien.
Azul

Agregué una versión STDIN ahora (y usé el ingenioso regexplace shooqie descubierto).
CAD97

No necesitas paréntesis en tu expresión regular. También se eliminó un espacio extra entre argumentos para replaceAll.
Khuldraeseth na'Barya

4

Cubix , 10 bytes

Cubix es un lenguaje bidimensional desarrollado por @ETHproductions donde los comandos se envuelven en un cubo. Pruébalo en línea

@.?wi^\oSo

Esto se asigna a un cubo con longitud de borde 2

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

Comienza con una entrada i. El flujo se redirige hacia ^el norte a la cara superior. ?Si el valor es negativo, gire a la izquierda para terminar @, el cero continúa en el desplazamiento a la derecha wo el giro positivo a la derecha y luego se refleja a la izquierda \. Carácter de salida con un espacio final oSo.


4

Cubix , 9 bytes

@./.i?>So

¡Véalo trabajar en línea!

Cubix es un lenguaje en el que las instrucciones se trazan en la cara de un cubo. Este programa forma la siguiente red de cubos:

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

El puntero de instrucción comienza en i, que toma otro código de caracteres de la entrada y lo empuja a la pila. Si no queda más entrada para tomar, ?gira la IP hacia la izquierda, donde golpea /, y se refleja hacia arriba @, lo que finaliza el programa.

Sin embargo, si queda una entrada, el valor será un código de caracteres. Como todos los códigos de 1 carácter son positivos, ?hace que la IP gire a la derecha, donde se envuelve todo el cubo, pasando opor el camino que genera el carácter. Luego golpea, lo /que hace que regrese >So, lo que empuja e imprime un espacio. La IP continúa hacia el oeste hasta iregresar al inicio del ciclo principal.

1 Si el carácter es un byte nulo, ignorará ?y continuará en línea recta, simplemente generando un solo espacio.


Por supuesto, solo puede hacer una explicación por escrito, por lo que le recomiendo que vea esto en el intérprete en línea . Hay una opción de "velocidad", que le permite ver la ejecución tan lenta o rápida como desee.


1
puede guardar un byte con@.Uoi?So
MickyT

4

Stax , 2 bytes

Corbatas gelatina!

0\

Pruébalo en staxlang.xyz!

Todo lo que hace es empujar 0a la pila y comprimir la cadena desde la entrada estándar con ella, repitiendo el 0 según sea necesario. En Stax, el punto de código 0 en una cadena generalmente se convierte a 32 (espacio).

Esto es lo suficientemente corto como para que empacarlo no ûThaga más que reducir la legibilidad.



3

CJam , 5 4 bytes

1 byte menos gracias a @FryAmTheEggman

lSf+

Pruébalo en línea!

Explicación

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 bytes

(Código de 4 caracteres + opción de línea de comando de 3 caracteres).

NF++

Ejecución de muestra:

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

(Existe cierto desacuerdo sobre lo que debe incluirse en el recuento de opciones de la línea de comandos. Incluí lo que realmente se pasa al awkintérprete: “-”, “F” y un separador entre “F” y el parámetro de cadena vacía. Vea a continuación qué Quiero decir.)

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 bytes

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

Ejecútelo desde la línea de comando

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 bytes

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

Funciona mejor cuando la cadena se da en la línea de comando, pero también se puede hacer un carácter a la vez en tiempo real.

Sin golf:

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

3

Laberinto , 10 bytes

<.23.%):,>

Esto termina con un error, pero los mensajes de error van a STDERR.

Pruébalo en línea!

Explicación

Este es uno de los raros casos en los que es factible un programa completamente lineal. El bucle se logra a través de los comandos de modificación del código fuente <y >, lo que funciona porque después de cada iteración sabemos que la pila está vacía nuevamente.

< desplaza cíclicamente toda la línea una celda a la izquierda, por lo que terminamos con:

.23.%):,><

Esto lleva el puntero de instrucción (IP) con él, por lo que la IP está ahora en el extremo derecho del código y tiene que moverse a la izquierda. A continuación, >realiza la modificación opuesta, por lo que cambia el código fuente de nuevo a

<.23.%):,>

Ahora ejecutamos una única iteración (de derecha a izquierda), antes de que todo comience de nuevo:

,    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 bytes

?=?\ 

Ejecución de muestra:

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

No he visto este idioma antes. Enlace al intérprete?
un spaghetto

Lo siento. Se agregó hipervínculo al título de la publicación. Muy antiguo, pero lamentablemente, Google puede ayudarlo a encontrarlo de manera eficiente solo si sabe que el nombre proviene de "macroprocesador de propósito general".
manatwork

3

MATL , 7 bytes

tnZ"v1e

Pruébalo en línea!

Explicación

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 bytes

∊2∘↑¨

Esto toma 2 elementos para cada carácter en la cadena, con el efecto de agregar un espacio

Para convertirlo en un programa que tome stdin, es el mismo número de bytes:

∊2↑¨⎕

Pruébalo aquí .



3

PHP, 31 bytes

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

toma información del argumento de la línea de comando.


3

Threead , 45 16 Bytes no competitivos.

  B[coB]
32c   o

Toma entrada a través de STDIN.

La primera línea / cinta simplemente lee bytes de STDIN y los escribe. La segunda línea, inicialmente almacena un espacio vía 32c, luego, al mismo tiempo que se lee el siguiente carácter, genera ese espacio.

Pruébalo en línea!


3

Python 2, 27 25 24 bytes

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

Más corto que la respuesta de Raffi ...

-1 gracias a 60919 (FlipTack).


Si se permiten funciones, entonces lambda x:' '.join(x)+' 'es 1 byte más corto.
FlipTack


3

C, 56 Bytes (como argumento del programa), 46 Bytes (de stdin)

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

La vieja respuesta de C. Una vez compilado, el programa debe llamarse con una cadena como primer parámetro, una cadena con espacios debe estar entre comillas. Para el ejemplo en la publicación de inicio:

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

Que dará salida

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 .

Solución que se lee directamente desde stdin.

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

Un byte menos gracias a @FryAmTheEggman


Los requisitos son un poco turbios, pero creo que hay que leer la entrada en stdinlugar de tomarla como argumento. Además, aquí hay una página con algunos consejos útiles para seguir jugando golf en C: codegolf.stackexchange.com/q/2203/13877
Josh

@ Josh ¿Cuenta como un parámetro para main? Porque de lo contrario, la respuesta de Java será igual de incorrecta, y tampoco estará tan segura de la respuesta de Haskell.
SBI

O bien, nos gusta que nuestra E / S sea amigable :) Pero creo que usar getchar()es más corto. Además, no necesita la inclusión para la mayoría de los compiladores de C.
FryAmTheEggman

@FryAmTheEggman Dejé la inclusión para que sea completamente compatible, solo puedo probar con gcc. Mientras gcc-only esté bien, sí, afeitar la inclusión está bien.
SBI

En general, si funciona con Ideone , está bien :)
FryAmTheEggman


2

En serio, 7 bytes

' ;,@j+

Pruébalo en línea!

Hombre, ese espacio final requerido agregó 3 bytes adicionales. Sin ella, ,' jfuncionaría para 4.

Explicación:

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.