Полный текст ширины


44

Текст полной ширины - это текст, который имеет пробел после каждого символа, включая последний. Например, первое предложение этого вопроса становится:

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 . 

Напишите программу, которая берет строку текста из стандартного ввода и выводит ее в виде текста полной ширины в стандартный вывод.

Leaderboard


6
Обычно вы также должны разрешать функции или исключать много языков (например, JavaScript).
wizzwizz4

8
У нас есть несколько значений по умолчанию для ввода / вывода , которые основаны на консенсусе сообщества. Несмотря на то, что вы имеете право их переопределить, настаивание на том, что STDIN / STDOUT для ввода-вывода лишает законной силы кучу ответов (что предполагает применение значений по умолчанию) и делает задачу совершенно невозможной в других языках (у них нет стандартных потоков).
Денис

52
That is not what fullwidth text is.
BlueRaja - Дэнни Пфлугхофт

4
@ BlueRaja-DannyPflughoeft прав. Текст полной ширины относится к базовой кодировке символов (кодируется 2 байта), необходимой для некоторого языка (то есть идеограммы). В Unicode понятие половины и полного размера называется блоком Unicode
Людовик Фреро,

2
@ LudovicFrérot На самом деле это не идеограммы, это китайские английские буквы.
Эрик Outgolfer

Ответы:


29

Желе , 5 3 2 байта

Спасибо Деннису за сохранение 2 байта. Также спасибо FryAmTheEggman за сохранение 1 байта. Код:

p⁶

Объяснение:

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

Использует кодировку желе .

Попробуйте онлайн!


1
⁶ занимает три байта в UTF-8.
Джесс Смит

12
@JessSmith Jelly использует свой собственный код страницы: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
в spaghetto

1
@AandN Поместите это в ответ, а не в комментарий.
mbomb007

3
@ mbomb007 Это прямо в шапке.
Аднан

5
@AandN Нет, вы должны сказать в своем ответе, что у него есть собственная кодовая страница. Тем более, что это более новый язык, поэтому люди еще не знают.
mbomb007

24

Python 3.5, 18 байт

print(*input(),'')

Это работает, потому что printразделитель по умолчанию - один пробел.


3
print(*input(),end=' ')было бы портативно, но это не очень хорошо для гольфа ...
Деннис

9
MFW первое использование моего ПКП, которое я вижу в дикой природе, на Code Golf.
Veedrac

Есть ли пробел после последнего символа?
Esolanging Fruit

17

Гексагония , 21 13 12 10 байт

Код:

Благодаря FryAmTheEggman сэкономлено много байтов . Код:

P,<0/*;@.>

Или в более читаемой форме:

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

Попробуйте онлайн!

Объяснение:

Программа Hexagony запускается в верхнем левом углу, немедленно устанавливая для края памяти значение ASCII, равное P80. После этого мы видим, что выбран следующий путь:

введите описание изображения здесь

Мы можем видеть , что путь , пройденный является: P,<;.P/0....;*/>. После Pмы берем байт пользовательского ввода. Если он пуст, следующая ветвь ( <) направит нас на северо-восток. Если ввод не пуст, ветвь направляет нас на юго-восток. После этого мы выводим пользовательский ввод, используя ;. Мы устанавливаем край памяти обратно P, равный 80. Ноль, за которым следует зеркало, затем соединяется с нашим числом, в результате чего получается 800. Затем он выводится с помощью ;команды, но сначала он берется по модулю 256, что приводит к 32, что это космический символ. После этого мы сбрасываем край памяти с помощью *команды и возвращаемся к циклу по остальной части пользовательского ввода. Когда мы закончим с пользовательским вводом, путь будет направлен на северо-восток:

введите описание изображения здесь

Это в основном идет к @команде, которая завершает программу.

Используя Timwi удивительный «s HexagonyColorer для создания диаграмм.


Я играл в гольф, пока ты редактировал. К сожалению. 10:P,<0/*;@.>
FryAmTheEggman

@FryAmTheEggman Хахаха, давай тогда сделаем новое объяснение: с.
Аднан

P,<<>0;@>*также 10, но, к сожалению, я не думаю, что это помогает сбрить другой байт.
Мартин Эндер

@ MartinBüttner О, это позор. Я сомневаюсь, можно ли сбрить другой байт, но это кажется маловероятным.
Аднан

HexagonyColorer теперь анимирован?
Esolanging Fruit

12

Haskell, 11 байт

((:" ")=<<)

Пример использования: ((:" ")=<<) "Code Golf"-> "C o d e G o l f ".

Отобразите каждый символ cв список из двух элементов [c, space]и объедините все в один список.


Интересно, что Haskell и Jelly делают здесь одно и то же, поскольку монада списка действует аналогично декартовому произведению.
ballesta25

9

Сетчатка , 5

.
$& 

Обратите внимание на пробел в конце второй строки.

$&эквивалентно $0. Спасибо @ mbomb007 за эту ссылку .

Попробуйте онлайн.


@FryAmTheEggman Я предпочитаю использовать $0. Это то же самое, но чаще.
mbomb007

Вот полезный справочник по вики с Retina: msdn.microsoft.com/en-us/library/…
mbomb007

6

JavaScript, 20 байт

Все просто, я бы хотел, чтобы Array.join добавил в конец пробел, чтобы я мог сохранить 3 байта.

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

5
[...s,``].join` ` возможно?
Нил

3
Еще лучше [...s,,].join...
edc65

@ edc65 Не работает в последних Firefox или Chrome? Я просто получаю joinфункцию в качестве возврата, как я и ожидал.
Mwr247

@ Mwr247 после объединения вы должны поместить оставшуюся часть кода, поэтому я поставил многоточие (...). Это всего лишь 1 байтовое сохранение
edc65

@ edc65, возможно, было слишком лениво, чтобы понять, как напечатать ` `в комментарии.
Нил

5

> <> , 13 10 байт

3 байта сохранены благодаря @ Sp3000

i:0(?;o 'o

Попробуй это здесь . Нажмите на ссылку, затем « Отправить» , затем введите некоторые данные и нажмите « Дать» , и, наконец, запустите программу с « Пуск» или « Запуск без анимации» .

объяснение

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 'oна 10
Sp3000

На самом деле io 'oтоже работает, выдает ошибку.
Sp3000

@ Sp3000 Спасибо! Я пойду на версию без ошибок (может быть, вы хотите представить свою?). Я забыл, что вы можете вводить символы напрямую. Как работает непревзойденная цитата? Всегда ли выбирается предыдущий символ?
Луис Мендо

1
'просто оборачивается, толкая символы, пока не найдет другого, 'чтобы закрыть его. В этом случае открывающий и закрывающий 's - это один и тот же символ, и большая часть исходного кода передается, но верхний символ будет просто пробелом, поскольку он был передан последним.
Sp3000

@ Sp3000 Понял. Так что это тоже циклично. Большое спасибо за предложение и объяснение!
Луис Мендо

5

Java, 132 (System.in) или 99 (аргумент программы) байтов

Можете ли вы почувствовать накладные расходы сегодня вечером?

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 разобрался с 6 байт короче способ сделать это , но я не буду воровать их подход. Однако я использовал его с версиями STDIN и Lambda.

28 символов для лямбды, но это не соответствует требованию программы.

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

В вопросе указано, что входные данные должны быть из STDIN.
ЭМБЛЕМА

Я мог бы добавить один для вас, если это нормально.
Blue

Я добавил версию STDIN (и использовал умное регулярное выражение shooqie).
CAD97

Нет необходимости в скобках в вашем регулярном выражении. Также убрал лишний пробел между аргументами для replaceAll.
Халдрасет на'Барья

4

Cubix , 10 байт

Cubix - это двумерный язык, разработанный @ETHproductions, где команды помещаются в куб. Попробуйте онлайн

@.?wi^\oSo

Это отображается на куб с длиной ребра 2

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

Начинается со входа i. Поток перенаправлен на север ^к верхней грани. ?Если значение отрицательное, поверните налево, чтобы закончить @, ноль переходит в сдвиг вправо wили положительный поворот вправо, затем отражается влево \. Выходной символ с завершающим пробелом oSo.


4

Cubix , 9 байтов

@./.i?>So

Посмотрите, как работает онлайн!

Cubix - это язык, на котором инструкции отображаются на поверхности куба. Эта программа формирует следующую сеть кубов:

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

Указатель инструкции начинается с i, который берет другой символьный код из ввода и помещает его в стек. Если больше нет ввода, которое нужно взять, то ?IP поворачивается влево, куда он попадает /, и отражается вверх @, что завершает программу.

Однако, если остается ввод, значением будет код символа. Поскольку все 1- символьные коды положительны, ?IP-адрес поворачивается направо, где он оборачивается вокруг куба, проходя oпуть, который выводит символ. Затем /он >Soнажимает, что заставляет его вернуться к циклу , который выдвигает и печатает пробел. IP продолжается на запад, пока не обернется iобратно к началу основного цикла.

1 Если символ является нулевым байтом, он будет игнорировать ?и продолжать прямо, просто выводя один пробел.


Конечно, есть только так много письменного объяснения, поэтому я настоятельно рекомендую вам посмотреть это в онлайн-переводчике . Есть опция «скорость», которая позволяет вам просматривать исполнение так медленно или быстро, как вам нравится.


1
Вы можете сохранить байт с@.Uoi?So
MickyT

4

Stax , 2 байта

Галстуки желе!

0\

Попробуйте это на staxlang.xyz!

Все, что это делает, это проталкивает 0в стек и архивирует строку из стандартного ввода вместе с ним, повторяя 0 при необходимости. В Stax кодовая точка 0 в строке обычно преобразуется в 32 (пробел).

Это достаточно мало, чтобы упаковать в ûTнего ничего, кроме снижения читабельности.




3

Ява, 92

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

3

Awk, 7 байт

(4 символа кода + 3 символа командной строки.)

NF++

Образец прогона:

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

(Есть некоторые разногласия относительно того, что должно быть включено в счетчик параметров командной строки. Я включил то, что фактически передается awkинтерпретатору: «-», «F» и разделитель между «F» и параметром пустой строки. См. Ниже, что Я имею в виду.)

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 байт

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

Запустите его из командной строки

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 байт

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

Лучше всего работает, когда строка указана в командной строке, но это может быть сделано по одному символу за раз в реальном времени.

Ungolfed:

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

3

Лабиринт , 10 байт

<.23.%):,>

Это завершается с ошибкой, но сообщения об ошибках отправляются в STDERR.

Попробуйте онлайн!

объяснение

Это один из редких случаев, когда возможна полностью линейная программа. Цикл достигается с помощью команд модификации исходного кода <и >, который работает, потому что после каждой итерации мы знаем, что стек снова пуст.

< циклически сдвигает всю строку на одну ячейку влево, поэтому мы получаем:

.23.%):,><

Это берет указатель инструкции (IP) с собой, так что теперь IP находится в правом конце кода и должен двигаться влево. Затем >выполняется противоположная модификация, поэтому он перемещает исходный код обратно в

<.23.%):,>

Теперь мы выполняем одну итерацию (справа налево), прежде чем все начнется снова:

,    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

Гема , 5 байт

?=?\ 

Образец прогона:

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

Я не видел этот язык раньше. Ссылка на переводчика?
спагетто

Сожалею. Добавлена ​​гиперссылка на заголовок поста. Довольно старый, но, к сожалению, Google может эффективно помочь найти его, только если вы знаете, что название происходит от «универсального макропроцессора».
Манатворк


3

APL, 5 байт

∊2∘↑¨

Это занимает 2 элемента для каждого символа в строке, с эффектом добавления пробела

Чтобы сделать это программой, которая принимает стандартный ввод, это то же самое число байтов:

∊2↑¨⎕

Попробуй это здесь .



3

PHP, 31 байт

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

принимает входные данные из аргумента командной строки.


3

Threead , 45 16 байт, не конкурирующих.

  B[coB]
32c   o

Принимает ввод через STDIN.

Первая строка / лента просто читает байты из STDIN и записывает их. Во второй строке сначала записывается пробел 32c, а затем в то время, когда читается следующий символ, выводится этот пробел.

Попробуйте онлайн!


3

Python 2, 27 25 24 байта

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

Короче, чем ответ Раффи ...

-1 благодаря 60919 (FlipTack).


Если функции разрешены, то lambda x:' '.join(x)+' 'это на 1 байт короче.
FlipTack


3

C, 56 байт (в качестве аргумента программы), 46 байт (из стандартного ввода)

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

Простой старый C ответ. После компиляции программа должна вызываться со строкой в ​​качестве первого параметра, строка с пробелами должна быть заключена в кавычки. Для примера в стартовом посте:

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

Который будет выводить

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 .

Решение, которое читает прямо из стандартного ввода.

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

На один байт меньше благодаря @FryAmTheEggman


Требования немного мутные, но я считаю, что вы должны читать входные данные, stdinа не принимать их в качестве аргумента. Кроме того, вот страница с некоторыми полезными советами для дальнейшего игры в гольф на C: codegolf.stackexchange.com/q/2203/13877
Джош

@ Джош Это считается параметром для главного? Потому что в противном случае ответ на Java будет таким же неправильным, и не настолько уверенным в ответе на Haskell.
ВОО

Либо хорошо, что наш ввод-вывод дружелюбен :) Но я верю, что использование getchar()короче. Также вам не нужно включение для большинства компиляторов Си.
FryAmTheEggman

@FryAmTheEggman Я оставил включаемый файл полностью совместимым, я могу тестировать только с помощью gcc. Пока с gcc-only все в порядке, да, с бритьем все в порядке.
ВОО

В общем, если это работает с Ideone, то все в порядке :)
FryAmTheEggman


2

Серьезно, 7 байтов

' ;,@j+

Попробуйте онлайн!

Человек, которому требуется конечное место, добавил 3 дополнительных байта. Без него ,' jработало бы 4.

Объяснение:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.