Texto de largura total


44

Texto de largura total é um texto que possui um espaço após cada caractere, incluindo o último. Por exemplo, a primeira frase desta pergunta se torna:

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 . 

Escreva um programa que retire uma linha do texto da entrada padrão e a envie como texto de largura total para a saída padrão.

Entre os melhores


6
Geralmente, você também deve permitir funções ou excluir muitos idiomas (por exemplo, JavaScript).
Wizzwizz4 22/03

8
Temos alguns padrões para E / S baseados no consenso da comunidade. Enquanto você tem direito de substituí-los, insistir em STDIN / STDOUT para E / S invalida um monte de respostas (que assumiram que os padrões se aplicam) e torna a tarefa totalmente impossível em outros idiomas (eles não têm fluxos padrão).
Dennis

52
That is not what fullwidth text is
BlueRaja - Danny Pflughoeft 22/03

4
@ BlueRaja-DannyPflughoeft está certo. O texto em largura total é sobre a codificação de caracteres subjacente (codificada em 2 bytes) exigida por algum idioma (ie ideogramas). Em Unicode a noção de metade do tamanho e cheio é chamado bloco Unicode
Ludovic Frérot

2
@ LudovicFrérot Na verdade, esses não são ideogramas, são letras chinesas em inglês.
Erik the Outgolfer 01/07/16

Respostas:


29

Geléia , 5 3 2 bytes

Agradecimentos a Dennis por salvar 2 bytes. Também obrigado a FryAmTheEggman por economizar 1 byte. Código:

p⁶

Explicação:

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

Usa a codificação Jelly .

Experimente online!


1
⁶ ocupa três bytes em UTF-8.
Jess Smith

12
@JessSmith Jelly utiliza a sua própria página de código: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
um Spaghetto

1
@AandN Coloque na resposta, não em um comentário.
mbomb007

3
@ mbomb007 Está bem no cabeçalho.
Adnan

5
@AandN Não, você deve dizer na sua resposta que ele tem sua própria página de código. Especialmente porque é um idioma mais novo, para que as pessoas ainda não saibam.
mbomb007

24

Python 3.5, 18 bytes

print(*input(),'')

Isso funciona porque printo separador padrão é de espaço único.


3
print(*input(),end=' ')seria portátil, mas não é muito golfy ...
Dennis

9
MFW, o primeiro uso do meu PEP que vejo na natureza é no Code Golf.
Veedrac

Isso tem um espaço após o último caractere?
Esolanging Fruit

17

Hexagonia , 21 13 12 10 bytes

Código:

Economizou muitos bytes graças ao FryAmTheEggman . Código:

P,<0/*;@.>

Ou de uma forma mais legível:

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

Experimente online!

Explicação:

O programa Hexagony é iniciado no canto superior esquerdo, configurando imediatamente a borda da memória com o valor ASCII de P80. Depois disso, podemos ver que o seguinte caminho é seguido:

insira a descrição da imagem aqui

Podemos ver que o caminho percorrido é: P,<;.P/0....;*/>. Após o P, pegamos um byte de entrada do usuário. Se estiver vazio, o seguinte ramo ( <) nos direcionaria para o Nordeste. Se a entrada não estiver vazia, o ramo nos direcionará para o sudeste. Depois disso, produzimos a entrada do usuário usando ;. Ajustamos a borda da memória de volta para P, que é 80. O zero seguido pelo espelho é concatenado para o nosso número, resultando em 800. Isso é gerado usando o ;comando, mas primeiro é utilizado o módulo 256, resultando em 32, que é o caractere de espaço. Depois disso, redefinimos a borda da memória usando o *comando e retornamos ao loop pelo resto da entrada do usuário. Quando terminamos a entrada do usuário, o caminho é direcionado para o Nordeste:

insira a descrição da imagem aqui

Isso basicamente vai para o @comando, que finaliza o programa.

Usando Timwi incrível 's HexagonyColorer para fazer os diagramas.


Eu estava jogando golfe enquanto você editava. Opa 10:P,<0/*;@.>
FryAmTheEggman 22/03

@FryAmTheEggman Hahaha, vamos fazer uma nova explicação: p.
Adnan

P,<<>0;@>*também é 10, mas infelizmente não acho que ajude a eliminar outro byte.
Martin Ender

@ MartinBüttner Oh, isso é uma pena. Duvido que seja possível reduzir outro byte, mas parece improvável.
Adnan

O HexagonyColorer agora é animado?
Esolanging Fruit

12

Haskell, 11 bytes

((:" ")=<<)

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

Mapeie cada caractere cpara uma lista de dois elementos [c, space]e concatene tudo em uma única lista.


Interessante que Haskell e Jelly estejam fazendo o mesmo aqui, já que a mônada da lista age de maneira semelhante a um produto cartesiano.
ballesta25


6

JavaScript, 20 bytes

Simples, eu gostaria que o Array.join adicionasse o espaço ao final para que eu pudesse salvar 3 bytes.

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

5
[...s,``].join` ` possivelmente?
Neil

3
Ainda melhor [...s,,].join...
edc65 01/07

@ edc65 Não funciona no Firefox ou Chrome mais recente? Acabei de receber a joinfunção como retorno, como seria de esperar.
#

@ Mwr247 após a junção, você deve colocar o restante do seu código, é por isso que coloquei reticências (...). É apenas uma economia de 1 byte
edc65 01/07

@ edc65 pode ter sido muito preguiçoso para descobrir como digitar o ` `comentário.
Neil

5

> <> , 13 10 bytes

3 bytes salvos graças ao @ Sp3000

i:0(?;o 'o

Experimente aqui . Clique no link, depois em Enviar , digite alguma entrada e pressione Dar e, finalmente, execute o programa com Iniciar ou Executar sem animação .

Explicação

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 23/03

De fato, io 'otambém funciona, errando.
Sp3000 23/03

@ Sp3000 Obrigado! Eu vou para a versão sem erro (talvez você queira enviar a sua?). Esqueci que você pode inserir caracteres diretamente. Como funciona a cotação sem correspondência? Ele sempre escolhe o caractere anterior?
Luis Mendo

1
'apenas envolve, empurrando caracteres até encontrar outro 'para fechá-lo. Nesse caso, a abertura e o fechamento 's são o mesmo caractere e a maior parte do código-fonte é enviada por push, mas o caractere superior seria apenas espaço desde que foi enviado por último.
Sp3000 23/03

@ Sp3000 Entendi. Então isso também é cíclico. Muito obrigado pela sugestão e explicação!
Luis Mendo

5

Java, 132 (System.in) ou 99 (argumento do programa) bytes

Você pode sentir a sobrecarga hoje à noite?

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+" ");}}

O shooqie descobriu uma maneira mais curta de 6 bytes de fazer isso, mas não vou roubar a abordagem deles. Eu usei com as versões STDIN e lambda, no entanto.

28 caracteres para um lambda, mas que não atendem aos requisitos do programa.

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

A pergunta especifica que a entrada deve ser de STDIN.
EMBLEMA

Eu poderia adicionar um para você, se estiver tudo bem.
Azul

Eu adicionei uma versão STDIN agora (e usei o inteligente comando regexplace shooqie descoberto).
CAD97

Não há necessidade de parênteses em sua regex. Também foi removido um espaço extra entre os argumentos de replaceAll.
Khuldraeseth na'Barya

4

Cubix , 10 bytes

Cubix é uma linguagem bidimensional desenvolvida pela @ETHproductions onde os comandos são agrupados em um cubo. Experimente online

@.?wi^\oSo

É mapeado para um cubo com comprimento de borda 2

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

Inicia com uma entrada i. O fluxo é redirecionado ^para o norte para a face superior. ?Se o valor for negativo, gire para a esquerda para terminar @, o zero continuará para a direita wou para a direita e reflita para a esquerda \. Caractere de saída com um espaço à direita oSo.


4

Cubix , 9 bytes

@./.i?>So

Veja como funciona online!

Cubix é um idioma no qual as instruções são mapeadas na face de um cubo. Este programa forma a seguinte rede de cubos:

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

O ponteiro de instruções começa em i, que pega outro código de caractere da entrada e o empurra para a pilha. Se não houver mais nenhuma entrada a ser tomada, o ?IP fica à esquerda, onde ele atinge /e é refletido para cima @, o que finaliza o programa.

No entanto, se houver uma entrada restante, o valor será um código de caractere. Como todos os códigos de 1 caractere são positivos, o ?IP vira à direita, onde envolve todo o cubo, passando opelo caminho que gera o caractere. Em seguida, ele atinge o /que o faz retornar >So, o que empurra e imprime um espaço. O IP segue para o oeste até voltar para o iretorno ao início do loop principal.

1 Se o caractere for um byte nulo, ele ignorará ?e continuará em frente, produzindo apenas um espaço.


Obviamente, há muito o que uma explicação por escrito pode fazer, por isso recomendo que você a veja no intérprete on - line . Existe uma opção de "velocidade", que permite visualizar a execução tão lenta ou rapidamente quanto você desejar.


1
você pode salvar um byte com@.Uoi?So
MickyT 3/17/17

4

Stax , 2 bytes

Gravatas Geléia!

0\

Experimente em staxlang.xyz!

Tudo isso é empurrar 0para a pilha e compactar a string da entrada padrão com ela, repetindo o 0 conforme necessário. No Stax, o ponto de código 0 em uma seqüência de caracteres geralmente é convertido em 32 (espaço).

Isso é curto o suficiente para empacotá-lo e ûTnão reduz a legibilidade.



3

CJam , 5 4 bytes

1 byte a menos graças a @FryAmTheEggman

lSf+

Experimente online!

Explicação

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 + opção de linha de comando de 3 caracteres.)

NF++

Exemplo de execução:

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

(Existe alguma discordância sobre o que deve ser incluído na contagem de opções da linha de comando. Incluí o que realmente é passado ao awkintérprete: “-”, “F” e um separador entre “F” e o parâmetro de string vazio. Veja abaixo o que Quero dizer.)

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])).' ';

Execute-o na linha 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 melhor quando a string é fornecida na linha de comando, mas também pode ser executado um caractere por vez em tempo real.

Ungolfed:

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

3

Labirinto , 10 bytes

<.23.%):,>

Isso termina com um erro, mas as mensagens de erro vão para STDERR.

Experimente online!

Explicação

Este é um dos raros casos em que um programa completamente linear é viável. O loop é alcançado através dos comandos de modificação do código-fonte <e >, o que funciona porque após cada iteração sabemos que a pilha está vazia novamente.

< muda ciclicamente toda a linha de uma célula para a esquerda, para terminar com:

.23.%):,><

Isso leva o ponteiro de instrução (IP) para que o IP esteja agora na extremidade direita do código e precise se mover para a esquerda. Em seguida, >faz a modificação oposta para que o código-fonte mude de volta para

<.23.%):,>

Agora, executamos uma única iteração (da direita para a esquerda), antes de tudo começar de novo:

,    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

?=?\ 

Exemplo de execução:

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

Eu não vi esse idioma antes. Link para o intérprete?
a spaghetto

Desculpa. Adicionado hiperlink para o título da postagem. Muito antigo, mas, infelizmente, o Google pode ajudar a encontrá-lo com eficiência apenas se você souber que o nome vem de "processador de macro de uso geral".
26616 manatwork

3

MATL , 7 bytes

tnZ"v1e

Experimente online!

Explicação

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∘↑¨

São necessários 2 itens para cada caractere na sequência, com o efeito de adicionar um espaço

Para torná-lo um programa que usa stdin, é o mesmo número de bytes:

∊2↑¨⎕

Experimente aqui .



3

PHP, 31 bytes

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

recebe entrada do argumento da linha de comando.


3

Threead , 45 16 Bytes não concorrentes.

  B[coB]
32c   o

Recebe entrada via STDIN.

A primeira linha / fita simplesmente lê bytes de STDIN e os grava. A segunda linha, inicialmente armazena um espaço via 32c, e ao mesmo tempo em que o próximo caractere está sendo lido, gera esse espaço.

Experimente online!


3

Python 2, 27 25 24 bytes

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

Mais curta que a resposta de Raffi ...

-1 graças a 60919 (FlipTack).


Se funções são permitidas, então lambda x:' '.join(x)+' 'é 1 byte menor.
FlipTack

3

C, 50 bytes

Um pouco de main()recursão :)

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

Experimente online! - Se estiver usando isso em sua própria máquina, use Ctrl+ Dpara indicar EOF.


3

C, 56 bytes (como argumento do programa), 46 bytes (de stdin)

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

Resposta C simples e antiga. Uma vez compilado, o programa precisa ser chamado com uma string como seu primeiro parâmetro, uma string com espaços deve ser colocada entre aspas. Para o exemplo no post inicial:

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

Qual saída

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 .

Solução que lê diretamente do stdin.

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

Um byte a menos, graças a @FryAmTheEggman


Os requisitos são um pouco obscuros, mas acredito que você precise ler a entrada em stdinvez de tomá-la como argumento. Além disso, aqui é uma página com algumas dicas úteis para mais de golfe em C: codegolf.stackexchange.com/q/2203/13877
Josh

@ Josh Isso conta como parâmetro para main? Porque, caso contrário, a resposta do Java será tão errada quanto a Haskell.
SBI

Qualquer um deles é bom, gostamos que nossa E / S seja amigável :) Mas acredito que o uso getchar()é mais curto. Além disso, você não precisa da inclusão para a maioria dos compiladores C.
FryAmTheEggman 22/03

@FryAmTheEggman Deixei a inclusão para ser completamente compatível, só posso testar com o gcc. Desde que apenas o gcc seja bom, sim, raspar a inclusão é bom.
SBI

Geralmente, se ele funciona com o Ideone , está tudo bem :)
FryAmTheEggman 22/03


2

Sério, 7 bytes

' ;,@j+

Experimente online!

Cara, esse espaço final necessário adicionou 3 bytes adicionais. Sem ele, ,' jfuncionaria para 4.

Explicação:

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.