Tekst o pełnej szerokości

44

Tekst o pełnej szerokości to tekst, który ma spację po każdym znaku, w tym ostatnim. Na przykład pierwsze zdanie tego pytania brzmi:

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 . 

Napisz program, który pobiera wiersz tekstu ze standardowego wejścia i wysyła go jako tekst o pełnej szerokości do standardowego wyjścia.

Tabela liderów

Jess Smith
źródło
6
Zwykle powinieneś także zezwalać na funkcje lub wykluczać wiele języków (np. JavaScript).
wizzwizz4
8
Mamy kilka domyślnych ustawień we / wy opartych na konsensusie społeczności. Chociaż masz prawo je zastąpić, naleganie na STDIN / STDOUT dla I / O unieważnia kilka odpowiedzi (które zakładają, że obowiązują ustawienia domyślne) i uniemożliwiają zadanie w innych językach ( nie mają standardowych strumieni).
Dennis
52
That is not what fullwidth text is.
BlueRaja - Danny Pflughoeft
4
@ BlueRaja-DannyPflughoeft ma rację. Tekst o pełnej szerokości dotyczy podstawowego kodowania znaków (zakodowane w 2 bajtach) wymaganego przez jakiś język (np. Ideogramy). W Unicode pojęcie połowy i pełnego rozmiaru nazywa się
Blokiem
2
@ LudovicFrérot Właściwie to nie są ideogramy, to chińskie angielskie litery.
Erik the Outgolfer

Odpowiedzi:

29

Galaretka , 5 3 2 bajty

Dzięki Dennis za oszczędność 2 bajtów. Również dzięki FryAmTheEggman za zaoszczędzenie 1 bajtu. Kod:

p⁶

Wyjaśnienie:

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

Wykorzystuje kodowanie Jelly .

Wypróbuj online!

Adnan
źródło
1
⁶ zajmuje trzy bajty w UTF-8.
Jess Smith
12
@JessSmith Jelly używa własnej strony kodowej: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
spaghetto
1
@AnN Wpisz to w odpowiedzi, a nie w komentarzu.
mbomb007
3
@ mbomb007 To jest dokładnie w nagłówku.
Adnan
5
@AnN Nie, powinieneś powiedzieć w swojej odpowiedzi, że ma własną stronę kodową. Zwłaszcza, że ​​jest to nowszy język, więc ludzie jeszcze nie wiedzą.
mbomb007
24

Python 3.5, 18 bajtów

print(*input(),'')

Działa to, ponieważ printdomyślnym separatorem jest pojedyncza spacja.

sklepienie
źródło
3
print(*input(),end=' ')byłby przenośny, ale nie jest zbyt golfowy ...
Dennis
9
MFW, pierwsze użycie mojego PEP, które widzę na wolności, dotyczy Code Golf.
Veedrac
Czy to ma spację po ostatniej postaci?
Esolanging Fruit
17

Sześciokąt , 21 13 12 10 bajtów

Kod:

Zaoszczędzono wiele bajtów dzięki FryAmTheEggman . Kod:

P,<0/*;@.>

Lub w bardziej czytelnej formie:

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

Wypróbuj online!

Wyjaśnienie:

Program Hexagony uruchamia się w lewym górnym rogu, natychmiast ustawiając krawędź pamięci na wartość ASCII wynoszącą P80, po czym możemy zobaczyć, że wybrana jest następująca ścieżka:

wprowadź opis zdjęcia tutaj

Widzimy, że ścieżka jest zrobione: P,<;.P/0....;*/>. Po P, bierzemy bajt danych wejściowych użytkownika. Jeśli to pole jest puste, następująca gałąź ( <) przekieruje nas na północny wschód. Jeśli dane wejściowe nie są puste, gałąź kieruje nas na południowy wschód. Następnie wysyłamy dane wejściowe użytkownika za pomocą ;. Ustawiamy ponownie krawędź pamięci na wartość P80. Zero, po którym następuje lustro, jest następnie konkatenowane do naszej liczby, co daje w wyniku liczbę 800. Jest to następnie wyprowadzane za pomocą ;polecenia, ale najpierw jest pobierane modulo 256, co daje 32, co jest spacją. Następnie resetujemy krawędź pamięci za pomocą *polecenia i wracamy do pętli nad resztą danych wprowadzanych przez użytkownika. Po zakończeniu wprowadzania danych przez użytkownika ścieżka jest kierowana na północny wschód:

wprowadź opis zdjęcia tutaj

Zasadniczo chodzi o @polecenie, które kończy działanie programu.

Korzystanie Timwi „s niesamowite HexagonyColorer do tworzenia diagramów.

Adnan
źródło
Grałem w golfa podczas redakcji. Ups 10:P,<0/*;@.>
FryAmTheEggman
@FryAmTheEggman Hahaha, zróbmy nowe wyjaśnienie: str.
Adnan
P,<<>0;@>*ma również 10, ale niestety nie sądzę, aby pomogło to w odjęciu kolejnego bajtu.
Martin Ender
@ MartinBüttner Och, szkoda. Wątpię, czy można ogolić kolejny bajt, ale wydaje się to mało prawdopodobne.
Adnan
Czy HexagonyColorer jest teraz animowany?
Esolanging Fruit
12

Haskell, 11 bajtów

((:" ")=<<)

Przykład użycia: ((:" ")=<<) "Code Golf"-> "C o d e G o l f ".

Przypisz każdy znak cdo listy dwóch elementów [c, space]i połącz wszystko w jedną listę.

nimi
źródło
Ciekawe, że Haskell i Jelly robią tutaj to samo, ponieważ monada z listy działa podobnie do produktu kartezjańskiego.
ballesta25
9

Siatkówka , 5

.
$& 

Zwróć uwagę na spację na końcu drugiej linii.

$&jest równoważne z $0. Dzięki @ mbomb007 za ten link .

Wypróbuj online.

Cyfrowa trauma
źródło
@FryAmTheEggman Wolę używać $0. To to samo, ale bardziej powszechne.
mbomb007
Oto przydatne odniesienie do wiki
Retiny
6

JavaScript, 20 bajtów

Proste, po prostu chciałbym, aby Array.join dodał spację na końcu, abym mógł zapisać 3 bajty.

s=>[...s,``].join` `
Użytkownik ogólny
źródło
5
[...s,``].join` ` być może?
Neil
3
Jeszcze lepiej [...s,,].join...
edc65
@ edc65 Nie działa w najnowszej przeglądarce Firefox lub Chrome? Po prostu dostaję joinfunkcję zwrotu, jak się spodziewałbym.
Mwr247
@ Mwr247 po dołączeniu musisz umieścić resztę kodu, dlatego wstawiłem ellipsis (...). To tylko 1 bajt oszczędności
edc65
@ edc65 może być zbyt leniwy, aby wymyślić, jak wpisać ` `komentarz.
Neil
5

> <> , 13 10 bajtów

3 bajty zapisane dzięki @ Sp3000

i:0(?;o 'o

Wypróbuj tutaj . Kliknij link, a następnie Prześlij , a następnie wpisz dane wejściowe i naciśnij Daj , a na koniec uruchom program za pomocą Start lub Uruchom bez animacji .

Wyjaśnienie

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
źródło
i:0(?;o 'odla 10
Sp3000
W rzeczywistości io 'oteż działa, powodując błąd.
Sp3000
@ Sp3000 Thanks! Przejdę do wersji bez błędów (może chcesz przesłać swoją?). Zapomniałem, że możesz wprowadzać znaki bezpośrednio. Jak działa niedopasowana wycena? Czy zawsze wybiera poprzedni znak?
Luis Mendo
1
'po prostu owija się wokół, pchając znaki, aż znajdzie inny, 'aby go zamknąć. W tym przypadku otwierające i zamykające 's mają ten sam znak i większość kodu źródłowego jest wypychana, ale górny znak byłby po prostu spacją, ponieważ został wypchnięty jako ostatni.
Sp3000
@ Sp3000 Rozumiem. Tak że „s również cykliczny. Wielkie dzięki za sugestie i wyjaśnienia!
Luis Mendo
5

Java, 132 (System.in) lub 99 (Program argument) bajtów

Czy dziś wieczorem czujesz koszty ogólne?

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 wymyślił 6-bajtowy krótszy sposób na zrobienie tego, ale nie ukradnę ich podejścia. Użyłem go jednak z wersjami STDIN i lambda.

28 znaków dla lambda, ale to nie spełnia wymagań programu.

s->s.replaceAll("(.)","$0 ")
CAD97
źródło
W pytaniu określono, że dane wejściowe muszą pochodzić ze STDIN.
EMBLEMAT
Mógłbym dodać jeden dla ciebie, jeśli to w porządku.
Blue
Dodałem teraz wersję STDIN (i użyłem sprytnego wyrażenia regularnego shooqie zorientowanego).
97 CAD
Nie trzeba nawiasów w wyrażeniu regularnym. Usunięto również dodatkową spację między argumentami do replaceAll.
Khuldraeseth na'Barya
4

Cubix , 10 bajtów

Cubix to dwuwymiarowy język opracowany przez @ETHproductions, w którym polecenia są zawijane na kostce. Wypróbuj online

@.?wi^\oSo

Mapuje to na sześcian o długości krawędzi 2

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

Zaczyna się od wejścia i. Przepływ jest przekierowywany na północ ^do górnej powierzchni. ?Jeśli wartość jest ujemna, skręć w lewo, aby zakończyć @, zero przechodzi w przesunięcie w prawo wlub dodatnie skręć w prawo, a następnie odbija w lewo \. Wyjście znaku ze spacją oSo.

MickyT
źródło
4

Cubix , 9 bajtów

@./.i?>So

Zobacz, jak działa online!

Cubix to język, w którym instrukcje są odwzorowane na powierzchni sześcianu. Ten program tworzy następującą sieć kostek:

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

Wskaźnik instrukcji zaczyna się od i, który pobiera kolejny kod znakowy z danych wejściowych i wypycha go na stos. Jeśli nie ma już więcej danych do pobrania, ?zmienia adres IP w lewo, tam gdzie uderza /, i jest odbijany w górę @, co kończy program.

Jeśli jednak pozostanie wejście, wartością będzie kod znakowy. Ponieważ wszystkie 1- znakowe kody są dodatnie, ?IP skręca w prawo, gdzie owija się wokół kostki, przekazując odrogę, która wypisuje znak. Następnie uderza, /co powoduje, że zapętla się z powrotem >So, co popycha i drukuje przestrzeń. IP prowadzi na zachód, aż wraca do i, z powrotem do początku głównej pętli.

1 Jeśli postać ma bajt zerowy, zignoruje ją ?i przejdzie dalej, po prostu wyprowadzając pojedynczą spację.


Oczywiście, jest tylko tyle wyjaśnienia na piśmie, więc gorąco polecam przejrzenie tego w tłumaczu online . Dostępna jest opcja „prędkości”, która pozwala wyświetlać wykonanie tak wolno lub szybko, jak chcesz.

FlipTack
źródło
1
możesz zapisać bajt za pomocą@.Uoi?So
MickyT
4

Stax , 2 bajty

Krawaty Galaretki!

0\

Wypróbuj na staxlang.xyz!

Wszystko to polega na przepchnięciu 0stosu i skompresowaniu go ze standardowego wejścia, powtarzając w razie potrzeby 0. W Stax kod 0 w ciągu znaków jest zwykle konwertowany na 32 (spację).

Jest to na tyle krótkie, że spakowanie go ûTpowoduje jedynie zmniejszenie czytelności.

Khuldraeseth na'Barya
źródło
3

05AB1E, 4 bajty

Sð«J

Wypróbuj online.

Wyjaśnienie

Sð«J

S     split string into a list
 ð«   append a space to each element
   J  join
spaghetto
źródło
ðâJniekonkurujący.
Magic Octopus Urn
Kolejna 3-bajtowa alternatywa:Sðý
Kevin Cruijssen
3

CJam , 5 4 bajtów

1 bajt mniej dzięki @FryAmTheEggman

lSf+

Wypróbuj online!

Wyjaśnienie

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

Java, 92

class T{public static void main(String[]A){System.out.print(A[0].replaceAll("(.)","$0 "));}}
shooqie
źródło
3

Awk, 7 bajtów

(4-znakowy kod + 3-znakowa opcja wiersza poleceń).

NF++

Przykładowy przebieg:

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

(Istnieje rozbieżność co do tego, co powinno być uwzględnione w liczeniu opcji wiersza poleceń. Podałem to, co faktycznie przekazano awkinterpreterowi: „-”, „F” oraz separator między „F” a parametrem pustego ciągu. Zobacz poniżej Mam na myśli.)

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
                         ╰────────╯
człowiek w pracy
źródło
3

PHP, 39 bajtów

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

Uruchom go z wiersza poleceń

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

https://eval.in/541179

ʰᵈˑ
źródło
3

WhoScript 38 bajtów

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

Działa najlepiej, gdy ciąg jest podawany w wierszu polecenia, ale można go również wykonywać w czasie rzeczywistym po jednym znaku.

Nie golfowany:

time_vortex
  psychic_paper read
  duplicate
  # 0 1
  -
  integer
  TARDIS =
  TARDIS if
      opening
  TARDIS landing
  # 20
paradox
pop
psychic_paper flush
MCS-Kaijin
źródło
3

Labirynt , 10 bajtów

<.23.%):,>

To kończy się błędem, ale komunikaty o błędach trafiają do STDERR.

Wypróbuj online!

Wyjaśnienie

Jest to jeden z rzadkich przypadków, w których możliwy jest całkowicie liniowy program. Pętla jest realizowana za pomocą poleceń modyfikacji kodu źródłowego <i >, co działa, ponieważ po każdej iteracji wiemy, że stos jest ponownie pusty.

< cyklicznie przesuwa całą linię o jedną komórkę w lewo, więc otrzymujemy:

.23.%):,><

To zabiera ze sobą wskaźnik instrukcji (IP), więc adres IP znajduje się teraz na prawym końcu kodu i musi przesuwać się w lewo. Następnie >robi odwrotną modyfikację, więc przesuwa kod źródłowy z powrotem do

<.23.%):,>

Teraz wykonujemy jedną iterację (od prawej do lewej), zanim wszystko zacznie się od nowa:

,    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
źródło
3

Gema , 5 bajtów

?=?\ 

Przykładowy przebieg:

bash-4.3$ gema '?=?\ ' <<< 'Full width text.'
F u l l   w i d t h   t e x t . 
człowiek w pracy
źródło
Nie widziałem tego języka wcześniej. Link do tłumacza?
spaghetto
Przepraszam. Dodano link do tytułu posta. Dość stary, ale niestety, Google może skutecznie pomóc w znalezieniu go, tylko jeśli wiesz, że nazwa pochodzi od „makroprocesora ogólnego przeznaczenia”.
manatwork
3

MATL , 7 bajtów

tnZ"v1e

Wypróbuj online!

Wyjaśnienie

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
źródło
3

APL, 5 bajtów

∊2∘↑¨

Zajmuje to 2 elementy dla każdego znaku w ciągu, z efektem dodania spacji

Aby uczynić go programem, który przyjmuje standardowe wejście, ma tę samą liczbę bajtów:

∊2↑¨⎕

Wypróbuj tutaj .

Moris Zucca
źródło
3

PHP, 31 bajtów

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

pobiera dane wejściowe z argumentu wiersza poleceń.

Tytus
źródło
3

Threead , 45 16 bajtów niekonkurujących.

  B[coB]
32c   o

Pobiera dane wejściowe przez STDIN.

Pierwsza linia / taśma po prostu odczytuje bajty ze STDIN i zapisuje je. Drugi wiersz początkowo przechowuje spację 32c, a następnie w tym samym czasie, gdy czytany jest następny znak, wypisuje tę spację.

Wypróbuj online!

ATaco
źródło
3

Python 2, 27 25 24 bajtów

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

Krótszy niż odpowiedź Raffiego ...

-1 dzięki 60919 (FlipTack).

Erik the Outgolfer
źródło
Jeśli funkcje są dozwolone, lambda x:' '.join(x)+' 'jest o 1 bajt krótszy.
FlipTack,
3

C, 50 bajtów

Trochę main()rekurencji :)

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

Wypróbuj online! - Jeśli używasz tego na swoim komputerze, użyj Ctrl+, Daby zaznaczyć EOF.

Homer Simpson
źródło
3

C, 56 bajtów (jako argument programu), 46 bajtów (od standardowego)

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

Zwykła stara odpowiedź C. Po skompilowaniu program należy wywołać za pomocą łańcucha, ponieważ jest to pierwszy parametr, łańcuch ze spacjami musi być ujęty w cudzysłów. Na przykład w początkowym poście:

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

Które wydadzą

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 .

Rozwiązanie, które odczytuje bezpośrednio ze standardowego wejścia.

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

Jeden bajt mniej dzięki @FryAmTheEggman

SBI
źródło
Wymagania są trochę mętne, ale uważam, że musisz przeczytać dane wejściowe stdinzamiast brać je jako argument. Ponadto, tutaj jest strona z kilkoma przydatnymi wskazówkami dla dalszej gry w golfa w C: codegolf.stackexchange.com/q/2203/13877
Josh
@Josh Czy to się liczy jako parametr main? Ponieważ w przeciwnym razie odpowiedź w języku Java będzie równie błędna i nie będzie też tak pewna co do Haskella.
SBI
Albo dobrze, że podoba nam się, że nasze wejścia / wyjścia są przyjazne :) Ale sądzę, że używanie getchar()jest krótsze. Również nie potrzebujesz dołączania do większości kompilatorów C.
FryAmTheEggman
@FryAmTheEggman Zostawiłem dołączenie, aby być całkowicie zgodnym, mogę testować tylko z gcc. Tak długo, jak gcc-only jest w porządku, tak, golenie dołączenia jest w porządku.
SBI
Ogólnie rzecz biorąc, jeśli działa z Ideone, jest w porządku :)
FryAmTheEggman
3

R, 36 bajtów

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

Przykład:

> cat(strsplit(readline(),"")[[1]],"")
Hello R!
H e l l o   R ! 
lambruscoAcido
źródło
1
Nie potrzebujesz sep=" ", więc może być znacznie krótszy: wypróbuj online!
Giuseppe,
2

Poważnie, 7 bajtów

' ;,@j+

Wypróbuj online!

Człowieku, to wymagało miejsca końcowego dodając 3 dodatkowe bajty. Bez tego ,' jdziałałby dla 4.

Wyjaśnienie:

' ;,@j+
' ;      push two copies of a single space
   ,@    push input, swap
     j+  join on spaces, append a space
Mego
źródło