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


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!


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.


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.


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ę.


Ciekawe, że Haskell i Jelly robią tutaj to samo, ponieważ monada z listy działa podobnie do produktu kartezjańskiego.
ballesta25


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` `

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

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 ")

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.


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.


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.



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

3

Java, 92

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

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
                         ╰────────╯

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


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

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).

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 . 

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

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 .



3

PHP, 31 bajtów

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

pobiera dane wejściowe z argumentu wiersza poleceń.


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!


3

Python 2, 27 25 24 bajtów

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

Krótszy niż odpowiedź Raffiego ...

-1 dzięki 60919 (FlipTack).


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.


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


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.