Text in voller Breite

44

Text in voller Breite ist ein Text, der nach jedem Zeichen ein Leerzeichen enthält, einschließlich des letzten Zeichens. Zum Beispiel lautet der erste Satz dieser Frage:

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 . 

Schreiben Sie ein Programm, das eine Textzeile von der Standardeingabe auf die Standardausgabe überträgt.

Bestenliste

Jess Smith
quelle
6
Normalerweise sollten Sie auch Funktionen zulassen, oder Sie schließen viele Sprachen aus (z. B. JavaScript).
wizzwizz4
8
Wir haben einige Standardeinstellungen für E / A , die auf dem Konsens der Community basieren. Während Sie berechtigt sind, diese zu überschreiben, macht das Beharren auf STDIN / STDOUT für E / A eine Reihe von Antworten ungültig (wobei davon ausgegangen wurde, dass die Standardeinstellungen zutreffen) und macht die Aufgabe in anderen Sprachen geradezu unmöglich (sie haben keine Standard-Streams).
Dennis
52
That That is not fullwidth text is is
BlueRaja - Danny Pflughoeft
4
@ BlueRaja-DannyPflughoeft ist richtig. Bei Text in voller Breite handelt es sich um die zugrunde liegende Zeichencodierung (2 Byte codiert), die von einigen Sprachen (z. B. Ideogrammen) benötigt wird. In Unicode wird der Begriff der halben und der vollen Größe als Unicode-Block bezeichnet
Ludovic Frérot
2
@ LudovicFrérot Eigentlich handelt es sich nicht um Ideogramme, sondern um chinesische englische Buchstaben.
Erik der Outgolfer

Antworten:

29

Jelly , 5 3 2 Bytes

Vielen Dank an Dennis für das Speichern von 2 Bytes. Vielen Dank auch an FryAmTheEggman für die Einsparung von 1 Byte. Code:

p⁶

Erläuterung:

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

Verwendet die Jelly-Codierung .

Probieren Sie es online!

Adnan
quelle
1
⁶ belegt in UTF-8 drei Bytes.
Jess Smith
12
@JessSmith Jelly verwendet eine eigene Codepage: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
ein Spaghetto
1
@AandN Schreibe es in die Antwort, nicht in einen Kommentar.
mbomb007
3
@ mbomb007 Es ist direkt in der Kopfzeile.
Adnan
5
@AandN Nein, Sie sollten in Ihrer Antwort angeben, dass es eine eigene Codepage gibt. Vor allem, da es eine neuere Sprache ist, wissen die Leute es noch nicht.
mbomb007
24

Python 3.5, 18 Bytes

print(*input(),'')

Dies funktioniert, weil printdas Standardtrennzeichen ein einzelnes Leerzeichen ist.

Vaultah
quelle
3
print(*input(),end=' ')wäre tragbar, aber es ist nicht sehr golfen ...
Dennis
9
MFW Die erste Verwendung meines PEP, die ich in freier Wildbahn sehe, ist Code Golf.
Veedrac
Gibt es nach dem letzten Zeichen ein Leerzeichen?
Esolanging Fruit
17

Hexagony , 21 13 12 10 Bytes

Code:

Sparte eine Menge von Bytes dank FryAmTheEggman . Code:

P,<0/*;@.>

Oder in besser lesbarer Form:

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

Probieren Sie es online!

Erläuterung:

Das Hexagony-Programm startet in der oberen linken Ecke und setzt die Speicherkante sofort auf den ASCII-Wert von P80. Danach sehen wir, dass der folgende Pfad eingeschlagen wird:

Bildbeschreibung hier eingeben

Wir können sehen , dass der Weg genommen ist: P,<;.P/0....;*/>. Nach dem Pnehmen wir ein Byte Benutzereingabe. Wenn dies leer ist, würde der folgende Zweig ( <) uns nach Nordosten leiten. Wenn die Eingabe nicht leer ist, werden wir vom Zweig nach Südosten geleitet. Danach geben wir die Benutzereingaben mit aus ;. Wir setzen die Speicherkante zurück auf P80. Die Null, auf die der Spiegel folgt, wird dann zu unserer Zahl verkettet, was zu 800 führt. Dies wird dann mit dem ;Befehl ausgegeben , aber zuerst wird es modulo 256 genommen, was zu 32 führt ist das Leerzeichen. Danach setzen wir die Speicherflanke mit dem *Befehl zurück und kehren zurück, um den Rest der Benutzereingabe zu durchlaufen. Wenn wir mit der Benutzereingabe fertig sind, ist der Pfad nach Nordosten ausgerichtet:

Bildbeschreibung hier eingeben

Dies geht im Wesentlichen zu dem @Befehl, der das Programm beendet.

Verwenden Sie den erstaunlichen HexagonyColorer von Timwi, um die Diagramme zu erstellen.

Adnan
quelle
Ähm, ich habe Golf gespielt, während Sie bearbeitet haben. Hoppla. 10:P,<0/*;@.>
FryAmTheEggman
@FryAmTheEggman Hahaha, lass uns dann eine neue Erklärung abgeben: p.
Adnan
P,<<>0;@>*ist auch 10, aber ich glaube leider nicht, dass es hilft, ein anderes Byte zu entfernen.
Martin Ender
@ MartinBüttner Oh, das ist eine Schande. Ich bezweifle, dass es möglich ist, ein weiteres Byte zu entfernen, aber es scheint unwahrscheinlich.
Adnan
Ist HexagonyColorer jetzt animiert?
Esolanging Fruit
12

Haskell, 11 Bytes

((:" ")=<<)

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

Ordnen Sie jedes Zeichen ceiner Liste mit zwei Elementen zu [c, space]und verknüpfen Sie alles zu einer einzigen Liste.

nimi
quelle
Interessant, dass Haskell und Jelly hier das Gleiche tun, da die Listenmonade einem kartesischen Produkt ähnelt.
Ballesta25
6

JavaScript, 20 Bytes

Ganz einfach, ich wünschte nur, Array.join hätte den Speicherplatz am Ende hinzugefügt, damit ich 3 Bytes einsparen könnte.

s=>[...s,``].join` `
Generischer Benutzer
quelle
5
[...s,``].join` ` vielleicht?
Neil
3
Noch besser [...s,,].join...
edc65
@ edc65 Funktioniert nicht in aktuellem Firefox oder Chrome? Ich bekomme nur die joinFunktion als Rückgabe, wie ich es erwarten würde.
Mwr247
@ Mwr247 Nach dem Join musst du den Rest deines Codes setzen, deshalb setze ich Auslassungspunkte (...). Es spart nur 1 Byte
edc65
@ edc65 war möglicherweise zu faul, um herauszufinden, wie man ` `einen Kommentar eingibt .
Neil
5

> <> , 13 10 Bytes

3 Bytes gespart dank @ Sp3000

i:0(?;o 'o

Probieren Sie es hier aus . Klicken Sie auf den Link, dann auf Senden , geben Sie eine Eingabe ein, drücken Sie auf Geben und führen Sie das Programm mit Start oder Ausführen ohne Animation aus .

Erläuterung

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
quelle
i:0(?;o 'ofür 10
Sp3000
In der Tat io 'ofunktioniert auch fehlerfrei.
Sp3000
@ Sp3000 Danke! Ich werde für die fehlerfreie Version gehen (vielleicht möchten Sie Ihre einreichen?). Ich habe vergessen, dass Sie Zeichen direkt eingeben können. Wie funktioniert das unübertroffene Angebot? Wählt es immer das vorhergehende Zeichen aus?
Luis Mendo
1
'wickeln Sie sich einfach um und drücken Sie Zeichen, bis es ein anderes findet ', um es zu schließen. In diesem Fall sind das öffnende und das schließende 'Zeichen dasselbe und der größte Teil des Quellcodes wird übertragen, aber das oberste Zeichen ist nur ein Leerzeichen, da es zuletzt übertragen wurde.
Sp3000
@ Sp3000 Verstanden. Das ist also auch zyklisch. Vielen Dank für den Vorschlag und die Erklärung!
Luis Mendo
5

Java, 132 (System.in) oder 99 (Programmargument) Bytes

Spürst du den Overhead heute Nacht?

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 hat einen 6-Byte-kürzeren Weg gefunden, um dies zu tun, aber ich werde ihren Ansatz nicht stehlen. Ich habe es jedoch mit den STDIN- und Lambda-Versionen verwendet.

28 Zeichen für ein Lambda, aber das entspricht nicht den Programmanforderungen.

s->s.replaceAll("(.)","$0 ")
CAD97
quelle
In der Frage wurde angegeben, dass die Eingabe von STDIN stammen muss.
EMBLEM
Ich könnte eine für dich hinzufügen, wenn das in Ordnung ist.
Blue
Ich habe jetzt eine STDIN-Version hinzugefügt (und mit dem cleveren Regexplace shooqie herausgefunden).
CAD97
In Ihrer Regex sind keine Klammern erforderlich. Außerdem wurde ein zusätzliches Leerzeichen zwischen den Argumenten zu entfernt replaceAll.
Khuldraeseth na'Barya
4

Cubix , 10 Bytes

Cubix ist eine zweidimensionale Sprache, die von @ETHproductions entwickelt wurde und bei der die Befehle in einen Cube eingebunden werden. Probieren Sie es online aus

@.?wi^\oSo

Dies wird auf einen Würfel mit Kantenlänge 2 abgebildet

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

Beginnt mit einer Eingabe i. Die Strömung wird nach Norden ^zur Oberseite umgeleitet . ?Wenn der Wert negativ ist, biegen Sie zum Beenden nach links ab @, Null geht weiter in Rechtsverschiebung woder Rechtsbiegung und spiegeln Sie dann links wider \. Ausgabezeichen mit einem nachgestellten Leerzeichen oSo.

MickyT
quelle
4

Cubix , 9 Bytes

@./.i?>So

Sehen Sie, wie es online funktioniert!

Cubix ist eine Sprache, in der die Anweisungen auf die Oberfläche eines Cubes abgebildet werden. Dieses Programm bildet das folgende Würfelnetz:

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

Der Befehlszeiger beginnt bei i, der einen anderen Zeichencode von der Eingabe nimmt und ihn zum Stapel schiebt. Wenn keine weiteren Eingaben mehr zu machen sind, ?dreht das die IP nach links, wo es trifft /, und spiegelt sich nach oben @, was das Programm beendet.

Wenn jedoch noch Eingaben vorhanden sind, handelt es sich bei dem Wert um einen Zeichencode. Da alle 1- Zeichen-Codes positiv sind, ?dreht sich die IP nach rechts, wobei sie sich um den gesamten Würfel dreht und oauf dem Weg weitergibt , der das Zeichen ausgibt. Es schlägt dann zu /, wodurch es eine Schleife zurückführt >So, die ein Leerzeichen drückt und druckt. Die IP fährt nach Westen fort, bis sie sich izurück zum Anfang der Hauptschleife wickelt .

1 Wenn das Zeichen ein Null-Byte ist, ignoriert es das ?und gibt einfach ein einzelnes Leerzeichen aus.


Natürlich gibt es nur so viel, was eine schriftliche Erklärung leisten kann. Daher empfehle ich Ihnen, dies im Online-Dolmetscher anzuzeigen . Es gibt eine "Geschwindigkeit" -Option, mit der Sie die Ausführung so langsam oder schnell anzeigen können, wie Sie möchten.

FlipTack
quelle
1
Sie können ein Byte speichern mit@.Uoi?So
MickyT
4

Stax , 2 Bytes

Krawatten Gelee!

0\

Probieren Sie es bei staxlang.xyz!

Alles, was Sie tun müssen, ist, 0auf den Stapel zu schieben und die Zeichenfolge von der Standardeingabe damit zu komprimieren und die 0 nach Bedarf zu wiederholen. In Stax wird der Codepunkt 0 in einer Zeichenfolge normalerweise in 32 (Leerzeichen) konvertiert.

Dies ist kurz genug, ûTum die Lesbarkeit zu verringern.

Khuldraeseth na'Barya
quelle
3

05AB1E, 4 Bytes

Sð«J

Probieren Sie es online aus.

Erläuterung

Sð«J

S     split string into a list
 ð«   append a space to each element
   J  join
ein Spaghetto
quelle
ðâJnicht konkurrierend.
Magic Octopus Urn
Eine weitere 3-Byte-Alternative:Sðý
Kevin Cruijssen
3

CJam , 5 4 Bytes

Dank @FryAmTheEggman 1 Byte weniger

lSf+

Probieren Sie es online!

Erläuterung

l     e# read line
Sf+   e# map "concatenation" (+) with a space (S) as extra parameter
      e# implicitly display characters in the stack
Luis Mendo
quelle
3

Java, 92

class T{public static void main(String[]A){System.out.print(A[0].replaceAll("(.)","$0 "));}}
shooqie
quelle
3

Awk, 7 Bytes

(4 Zeichen Code + 3 Zeichen Befehlszeilenoption.)

NF++

Probelauf:

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

(Es gibt einige Meinungsverschiedenheiten darüber, was in der Anzahl der Befehlszeilenoptionen enthalten sein soll. Ich habe angegeben, was tatsächlich an den awkInterpreter übergeben wird: "-", "F" und ein Trennzeichen zwischen "F" und dem leeren Zeichenfolgenparameter Ich meine.)

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
                         ╰────────╯
Mann bei der Arbeit
quelle
3

PHP, 39 Bytes

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

Führen Sie es über die Befehlszeile aus

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

https://eval.in/541179

ʰᵈˑ
quelle
3

WhoScript 38 Bytes

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

Funktioniert am besten, wenn die Zeichenfolge in der Befehlszeile angegeben wird. Sie kann jedoch auch zeichenweise in Echtzeit ausgeführt werden.

Ungolfed:

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

Labyrinth , 10 Bytes

<.23.%):,>

Das wird mit einem Fehler beendet aber die Fehlermeldung geht an STDERR.

Probieren Sie es online!

Erläuterung

Dies ist einer der seltenen Fälle, in denen ein vollständig lineares Programm möglich ist. Die Schleife wird über die Befehle zum Ändern des Quellcodes <und erreicht >, was funktioniert, da wir nach jeder Iteration wissen, dass der Stack wieder leer ist.

< Verschiebt die gesamte Zeile zyklisch um eine Zelle nach links, so erhalten wir:

.23.%):,><

Dieser nimmt den Anweisungszeiger (IP) mit, sodass sich die IP nun am rechten Ende des Codes befindet und nach links verschoben werden muss. Als nächstes >wird die entgegengesetzte Modifikation durchgeführt, sodass der Quellcode wieder auf "" verschoben wird

<.23.%):,>

Nun führen wir eine einzelne Iteration durch (von rechts nach links), bevor alles von vorne beginnt:

,    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
quelle
3

Gema , 5 Bytes

?=?\ 

Probelauf:

bash-4.3$ gema '?=?\ ' <<< 'Full width text.'
F u l l   w i d t h   t e x t . 
Mann bei der Arbeit
quelle
Ich habe diese Sprache noch nie gesehen. Link zum Dolmetscher?
ein Spaghetto
Es tut uns leid. Hyperlink zum Beitragstitel hinzugefügt. Google ist ziemlich alt, aber leider kann es nur dann effizient helfen, wenn Sie wissen, dass der Name von einem „Allzweck-Makroprozessor“ stammt.
Manatwork
3

MATL , 7 Bytes

tnZ"v1e

Probieren Sie es online!

Erläuterung

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
quelle
3

APL, 5 Bytes

∊2∘↑¨

Für jedes Zeichen in der Zeichenfolge werden 2 Elemente benötigt, wodurch ein Leerzeichen hinzugefügt wird

Um daraus ein Programm zu machen, das stdin benötigt, ist es die gleiche Anzahl von Bytes:

∊2↑¨⎕

Probieren Sie es hier aus .

Moris Zucca
quelle
3

PHP, 31 Bytes

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

Nimmt Eingaben vom Befehlszeilenargument entgegen.

Titus
quelle
3

Threead , 45 16 Bytes nicht konkurrierend.

  B[coB]
32c   o

Übernimmt die Eingabe über STDIN.

Die erste Zeile / das erste Band liest einfach Bytes von STDIN und schreibt sie. Die zweite Zeile speichert zunächst ein Leerzeichen über 32cund gibt dann zur gleichen Zeit, zu der das nächste Zeichen gelesen wird, dieses Leerzeichen aus.

Probieren Sie es online!

Ein Taco
quelle
3

Python 2, 27 25 24 Bytes

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

Kürzer als Raffis Antwort ...

-1 dank 60919 (FlipTack).

Erik der Outgolfer
quelle
Wenn Funktionen erlaubt sind, lambda x:' '.join(x)+' 'ist dies 1 Byte kürzer.
FlipTack
3

C 50 Bytes

Ein bisschen main()Rekursion :)

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

Probieren Sie es online! - Wenn Sie dies auf Ihrem eigenen Computer verwenden, verwenden Sie Ctrl+ D, um EOF zu kennzeichnen.

Homer Simpson
quelle
3

C, 56 Bytes (als Programmargument), 46 Bytes (von stdin)

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

Einfache alte C-Antwort. Nach dem Kompilieren muss das Programm mit einem String als erstem Parameter aufgerufen werden. Ein String mit Leerzeichen muss in Anführungszeichen eingeschlossen werden. Für das Beispiel im Startbeitrag:

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

Welches wird ausgegeben

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 .

Lösung, die direkt von stdin liest.

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

Ein Byte weniger dank @FryAmTheEggman

SBI
quelle
Die Anforderungen sind ein wenig trübe, aber ich glaube, Sie müssen die Eingabe stdineher lesen, als sie als Argument heranzuziehen. Hier ist auch eine Seite mit einigen nützlichen Tipps zum weiteren Golfen in C: codegolf.stackexchange.com/q/2203/13877
Josh
@Josh Zählt es als Parameter für main? Andernfalls ist die Java-Antwort genauso falsch und auch in Bezug auf die Haskell-Antwort nicht so sicher.
SBI
Entweder ist in Ordnung, wir möchten, dass unser I / O freundlich ist :) Aber ich glaube, die Verwendung getchar()ist kürzer. Außerdem benötigen Sie das Include für die meisten C-Compiler nicht.
FryAmTheEggman
@FryAmTheEggman Ich habe das Include in verlassen, um vollständig kompatibel zu sein. Ich kann es nur mit gcc testen. Solange gcc-only in Ordnung ist, ist es in Ordnung, das Include zu rasieren.
SBI
Im Allgemeinen, wenn es mit Ideone funktioniert, ist es in Ordnung :)
FryAmTheEggman
3

R, 36 Bytes

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

Beispiel:

> cat(strsplit(readline(),"")[[1]],"")
Hello R!
H e l l o   R ! 
lambruscoAcido
quelle
1
Das brauchen Sie nicht sep=" ", also kann es viel kürzer sein: Probieren Sie es online aus!
Giuseppe
2

Im Ernst, 7 Bytes

' ;,@j+

Probieren Sie es online!

Mann, das erforderte Platz zum Beenden und fügte 3 zusätzliche Bytes hinzu. Ohne ,' jwürde es für 4 funktionieren.

Erläuterung:

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