Testo a larghezza intera


44

Il testo a larghezza intera è un testo che ha uno spazio dopo ogni carattere, incluso l'ultimo. Ad esempio, la prima frase di questa domanda diventa:

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 . 

Scrivi un programma che prende una riga nel testo dall'input standard e lo emette come testo a larghezza intera allo standard out.

Classifica


6
Di solito dovresti consentire anche le funzioni o escludere molte lingue (ad es. JavaScript).
wizzwizz4,

8
Abbiamo alcune impostazioni predefinite per l'I / O basate sul consenso della comunità. Sebbene tu abbia il diritto di sovrascriverli, insistere su STDIN / STDOUT per I / O invalida un mucchio di risposte (che presupponevano che si applichino le impostazioni predefinite) e rende il compito assolutamente impossibile in altre lingue ( non hanno flussi standard).
Dennis,

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

4
@ BlueRaja-DannyPflughoeft ha ragione. Il testo a larghezza intera riguarda la codifica dei caratteri sottostanti (codificati a 2 byte) richiesti da un linguaggio (ad es. Ideogrammi). In Unicode la nozione di metà e dimensione intera è chiamata blocco Unicode
Ludovic Frérot

2
@ LudovicFrérot In realtà, questi non sono ideogrammi, sono lettere cinesi inglesi.
Erik the Outgolfer,

Risposte:


29

Gelatina , 5 3 2 byte

Grazie a Dennis per aver salvato 2 byte. Grazie anche a FryAmTheEggman per il salvataggio di 1 byte. Codice:

p⁶

Spiegazione:

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

Utilizza la codifica Jelly .

Provalo online!


1
⁶ occupa tre byte in UTF-8.
Jess Smith,

12
@JessSmith Jelly utilizza una propria tabella codici: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
uno spaghetto

1
@AandN Inseriscilo nella risposta, non in un commento.
mbomb007,

3
@ mbomb007 È proprio nell'intestazione.
Adnan,

5
@AandN No, dovresti dire nella tua risposta che ha una sua tabella codici. Soprattutto perché è una lingua più recente, quindi le persone non lo sanno ancora.
mbomb007,

24

Python 3.5, 18 byte

print(*input(),'')

Questo funziona perché printil separatore predefinito è lo spazio singolo.


3
print(*input(),end=' ')sarebbe portatile, ma non è molto golfoso ...
Dennis

9
MFW il primo utilizzo del mio PEP che vedo in natura è su Code Golf.
Veedrac,

Questo ha uno spazio dopo l'ultimo personaggio?
Esolanging Fruit

17

Esagonia , 21 13 12 10 byte

Codice:

Risparmio di molti byte grazie a FryAmTheEggman . Codice:

P,<0/*;@.>

O in una forma più leggibile:

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

Provalo online!

Spiegazione:

Il programma Hexagony si avvia nell'angolo in alto a sinistra, impostando immediatamente il limite della memoria sul valore ASCII di P, che è 80. Successivamente, possiamo vedere che viene preso il seguente percorso:

inserisci qui la descrizione dell'immagine

Possiamo vedere che il cammino intrapreso è: P,<;.P/0....;*/>. Dopo il P, prendiamo un byte di input dell'utente. Se questo è vuoto, il seguente ramo ( <) ci indirizzerebbe verso il Nord Est. Se l'input non è vuoto, il ramo ci dirige verso sud-est. Successivamente, abbiamo inviato l'input dell'utente usando ;. Riportiamo il bordo di memoria su P, che è 80. Lo zero seguito dal mirror viene quindi concatenato al nostro numero, risultante in 800. Questo viene quindi emesso usando il ;comando, ma prima viene preso il modulo 256, risultante in 32, che è il personaggio spaziale. Dopodiché, ripristiniamo il bordo della memoria usando il *comando e torniamo al loop sull'altro input dell'utente. Quando abbiamo finito con l'input dell'utente, il percorso è diretto a nord est:

inserisci qui la descrizione dell'immagine

Questo in sostanza va al @comando, che termina il programma.

Utilizzando Timwi sorprendente s' HexagonyColorer per fare gli schemi.


Uh, stavo giocando a golf mentre tu modificavi. Ops. 10:P,<0/*;@.>
FryAmTheEggman

@FryAmTheEggman Hahaha, facciamo una nuova spiegazione quindi: p.
Adnan,

P,<<>0;@>*è anche 10, ma sfortunatamente non penso che aiuti a radere un altro byte.
Martin Ender,

@ MartinBüttner Oh, è un peccato. Dubito che sia possibile radere via un altro byte, ma sembra improbabile.
Adnan,

HexagonyColorer è ora animato?
Esolanging Fruit

12

Haskell, 11 byte

((:" ")=<<)

Esempio di utilizzo: ((:" ")=<<) "Code Golf"-> "C o d e G o l f ".

Mappa ogni personaggio cin un elenco di due elementi [c, space]e concatena tutto in un unico elenco.


Interessante che Haskell e Jelly stiano facendo la stessa cosa qui, poiché la monade della lista agisce in modo simile a un prodotto cartesiano.
ballesta25,


6

JavaScript, 20 byte

Semplice, vorrei solo che Array.join aggiungesse lo spazio alla fine in modo da poter salvare 3 byte.

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

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

3
Ancora meglio [...s,,].join...
edc65,

@ edc65 Non funziona negli ultimi Firefox o Chrome? Ricevo solo la joinfunzione come ritorno, come mi sarei aspettato.
Mwr247,

@ Mwr247 dopo il join devi inserire il resto del codice, ecco perché metto i puntini di sospensione (...). È solo 1 byte di risparmio
edc65

@ edc65 potrebbe essere stato troppo pigro per capire come digitare ` `in un commento.
Neil,

5

> <> , 13 10 byte

3 byte salvati grazie a @ Sp3000

i:0(?;o 'o

Provalo qui . Fare clic sul collegamento, quindi su Invia , quindi digitare alcuni input e premere Give , quindi eseguire il programma con Start o Esegui senza animazione .

Spiegazione

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 'oper 10
Sp3000,

In effetti, io 'ofunziona anche, sbagliando.
Sp3000,

@ Grazie Sp3000! Proverò la versione senza errori (forse vuoi inviare la tua?). Ho dimenticato che puoi inserire direttamente i caratteri. Come funziona la citazione senza eguali? Prende sempre il carattere precedente?
Luis Mendo,

1
'semplicemente si avvolge, spingendo i caratteri fino a quando non trova un altro 'per chiuderlo. In questo caso, i caratteri di apertura e chiusura 'sono lo stesso carattere e la maggior parte del codice sorgente viene spinto, ma il carattere principale sarebbe solo spazio dall'ultima volta che è stato premuto.
Sp3000,

@ Sp3000 Capito. Quindi, che 's anche ciclico. Grazie mille per il suggerimento e la spiegazione!
Luis Mendo,

5

Java, 132 (System.in) o 99 (argomento Program) byte

Riesci a sentire il sovraccarico stasera?

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 ha escogitato un modo più breve di 6 byte per farlo, ma non ruberò il loro approccio. L'ho usato con le versioni STDIN e lambda, tuttavia.

28 caratteri per un lambda ma che non soddisfa i requisiti del programma.

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

La domanda specificava che l'input doveva provenire da STDIN.
EMBLEMA

Potrei aggiungerne uno per te, se va bene.
Blue

Ho aggiunto una versione STDIN ora (e ho usato l'intelligente regexplace shooqie capito).
CAD97

Non c'è bisogno di parentesi nella tua regex. Rimosso anche uno spazio aggiuntivo tra gli argomenti di replaceAll.
Khuldraeseth na'Barya,

4

Cubix , 10 byte

Cubix è un linguaggio bidimensionale sviluppato da @ETHproductions in cui i comandi sono racchiusi in un cubo. Provalo online

@.?wi^\oSo

Questo viene mappato su un cubo con lunghezza del bordo 2

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

Inizia con un input i. Il flusso viene reindirizzato a nord ^verso la faccia superiore. ?Se il valore è negativo, girare a sinistra per terminare @, lo zero prosegue con lo spostamento a destra wo la svolta positiva a destra, quindi si riflette a sinistra \. Carattere di output con uno spazio finale oSo.


4

Cubix , 9 byte

@./.i?>So

Guardalo funzionare online!

Cubix è una lingua in cui le istruzioni sono mappate sulla faccia di un cubo. Questo programma costituisce la seguente rete cubica:

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

Il puntatore dell'istruzione inizia da i, che prende un altro codice carattere dall'input e lo spinge nello stack. Se non c'è più input da prendere, il ?IP gira a sinistra, dove colpisce /, e si riflette verso l'alto @, che termina il programma.

Tuttavia, se è rimasto un input, il valore sarà un codice carattere. Poiché tutti i codici a 1 carattere sono positivi, l' ?IP gira a destra, dove si avvolge tutto intorno al cubo, passando osulla strada che genera il carattere. Quindi colpisce /ciò che lo fa tornare indietro >So, che spinge e stampa uno spazio. L'IP prosegue verso ovest fino a quando non torna iindietro, all'inizio del ciclo principale.

1 Se il carattere è un byte nullo, ignorerà ?e proseguirà dritto, semplicemente emettendo un singolo spazio.


Ovviamente, c'è solo una spiegazione scritta che può fare, quindi ti consiglio vivamente di vederlo nell'interprete online . C'è un'opzione "speed", che ti consente di visualizzare l'esecuzione come lenta o veloce come preferisci.


1
puoi salvare un byte con@.Uoi?So
MickyT

4

Stax , 2 byte

Ties Jelly!

0\

Provalo su staxlang.xyz!

Tutto ciò che fa è spingere 0nello stack e comprimere la stringa dallo standard input con essa, ripetendo lo 0 come necessario. In Stax, il punto di codice 0 in una stringa viene in genere convertito in 32 (spazio).

Questo è abbastanza breve che comprimerlo non ûTfa altro che ridurre la leggibilità.



3

CJam , 5 4 byte

1 byte in meno grazie a @FryAmTheEggman

lSf+

Provalo online!

Spiegazione

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 byte

(Codice di 4 caratteri + opzione della riga di comando di 3 caratteri.)

NF++

Esecuzione di esempio:

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

(Vi è un certo disaccordo su ciò che dovrebbe essere incluso nel conteggio delle opzioni della riga di comando. Ho incluso ciò che è effettivamente passato awkall'interprete: “-”, “F” e un separatore tra “F” e il parametro stringa vuota. Vedi sotto cosa Intendo.)

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 byte

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

Eseguilo dalla riga di 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 byte

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

Funziona meglio quando la stringa viene fornita dalla riga di comando, ma può essere eseguita anche un carattere alla volta in tempo reale.

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 byte

<.23.%):,>

Questo termina con un errore, ma i messaggi di errore vanno a STDERR.

Provalo online!

Spiegazione

Questo è uno dei rari casi in cui è possibile un programma completamente lineare. Il ciclo si ottiene tramite i comandi di modifica del codice sorgente <e >, che funziona perché dopo ogni iterazione sappiamo che lo stack è di nuovo vuoto.

< sposta ciclicamente l'intera linea di una cella a sinistra, quindi finiamo con:

.23.%):,><

Questo porta con sé il puntatore di istruzioni (IP) in modo che l'IP sia ora all'estremità destra del codice e debba spostarsi a sinistra. Successivamente, >esegue la modifica opposta in modo da riportare il codice sorgente su

<.23.%):,>

Ora eseguiamo una singola iterazione (da destra a sinistra), prima che tutto ricomincia:

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

?=?\ 

Esecuzione di esempio:

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

Non ho mai visto questa lingua prima. Link all'interprete?
uno spaghetto il

Scusate. Aggiunto collegamento ipertestuale al titolo del post. Abbastanza vecchio, ma purtroppo, Google può aiutare efficacemente a trovarlo solo se sai che il nome deriva da "macro processore generico".
arte

3

MATL , 7 byte

tnZ"v1e

Provalo online!

Spiegazione

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 byte

∊2∘↑¨

Questo richiede 2 elementi per ogni carattere nella stringa, con l'effetto di aggiungere uno spazio

Per renderlo un programma che richiede stdin, è lo stesso numero di byte:

∊2↑¨⎕

Provalo qui .



3

PHP, 31 byte

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

accetta input dall'argomento della riga di comando.


3

Threead , 45 16 byte non concorrenti.

  B[coB]
32c   o

Accetta input tramite STDIN.

La prima riga / nastro legge semplicemente i byte da STDIN e li scrive. La seconda riga, inizialmente memorizza uno spazio tramite 32c, quindi nello stesso momento in cui viene letto il carattere successivo, genera quello spazio.

Provalo online!


3

Python 2, 27 25 24 byte

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

Più breve della risposta di Raffi ...

-1 grazie a 60919 (FlipTack).


Se le funzioni sono consentite, la lambda x:' '.join(x)+' 'lunghezza è inferiore di 1 byte.
FlipTack

3

C, 50 byte

Un po 'di main()ricorsione :)

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

Provalo online! - Se si utilizza questo sul proprio computer, utilizzare Ctrl+ Dper indicare EOF.


3

C, 56 byte (come argomento del programma), 46 byte (dallo stdin)

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

Semplicemente vecchia risposta C. Una volta compilato, il programma deve essere chiamato con una stringa poiché è il primo parametro, una stringa con spazi deve essere racchiusa tra virgolette. Per l'esempio nel post iniziale:

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

Quale uscirà

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 .

Soluzione che legge direttamente da stdin.

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

Un byte in meno grazie a @FryAmTheEggman


I requisiti sono un po 'oscuri, ma credo che tu debba leggere l'input stdinpiuttosto che prenderlo come argomento. Inoltre, ecco una pagina con alcuni consigli utili per continuare a giocare a golf in C: codegolf.stackexchange.com/q/2203/13877
Josh

@Josh Conta come parametro per main? Perché altrimenti, la risposta di Java sarà altrettanto sbagliata, e nemmeno così sicura di quella di Haskell.
SBI

O va bene, ci piace che il nostro I / O sia amichevole :) Ma credo che l'uso getchar()sia più breve. Inoltre non è necessario includere nella maggior parte dei compilatori C.
FryAmTheEggman,

@FryAmTheEggman Ho lasciato l'inclusione per essere completamente conforme, posso solo provare con gcc. Finché solo gcc va bene, sì, radere l'inclusione va bene.
SBI

In generale, se funziona con Ideone va bene :)
FryAmTheEggman

3

R, 36 byte

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

Esempio:

> cat(strsplit(readline(),"")[[1]],"")
Hello R!
H e l l o   R ! 

1
Non è necessario sep=" ", quindi può essere molto più breve: provalo online!
Giuseppe

2

Scherzi a parte, 7 byte

' ;,@j+

Provalo online!

L'uomo, che ha richiesto lo spazio finale ha aggiunto 3 byte aggiuntivi. Senza di essa, ,' jfunzionerebbe per 4.

Spiegazione:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.