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.