Текст повної ширини


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 . 

Напишіть програму, яка приймає рядок у тексті зі стандартного введення та виводить його як текст повної ширини до стандартного.

Таблиця лідерів


6
Зазвичай ви повинні дозволити також функції, або ви виключаєте багато мов (наприклад, JavaScript).
wizzwizz4

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

52
That is not what fullwidth text is.
BlueRaja - Danny Pflughoeft

4
@ BlueRaja-DannyPflughoeft має рацію. Текст на повній ширині - це кодування, що лежить в основі символів (2 байти, закодовані), необхідні деякою мовою (тобто ідеограми). У Unicode поняття половини та повного розміру називається блоком Unicode
Ludovic Frérot

2
@ LudovicFrérot Власне, це не ідеограми, це китайські англійські букви.
Ерік Аутгольфер

Відповіді:


29

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

Завдяки Деннісу за збереження 2-х байт. Також завдяки FryAmTheEggman за збереження 1 байта. Код:

p⁶

Пояснення:

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

Використовує кодування Jelly .

Спробуйте в Інтернеті!


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 Перше використання мого PEP, яке я бачу в дикій природі, є на Code Golf.
Ведрак

Чи є в цьому пробіл після останнього символу?
Esolanging Fruit

17

Шестикутник , 21 13 12 10 байт

Код:

Збережено багато байтів завдяки FryAmTheEggman . Код:

P,<0/*;@.>

Або в більш читаному вигляді:

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

Спробуйте в Інтернеті!

Пояснення:

Програма Hexagony запускається у верхньому лівому куті, одразу встановлюючи край пам'яті до значення ASCII P, що дорівнює 80. Після цього ми можемо побачити, що йде наступний шлях:

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

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

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

Це в основному йде до @команди, яка припиняє програму.

Використовуючи Timwi дивовижний «s HexagonyColorer для створення діаграм.


Так, я займався гольфом, поки ти редагував. На жаль 10:P,<0/*;@.>
FryAmTheEggman

@FryAmTheEggman Hahaha, давайте зробимо нове пояснення тоді: с.
Аднан

P,<<>0;@>*також 10, але, на жаль, я не думаю, що це допомагає відголити інший байт.
Мартін Ендер

@ MartinBüttner О, це прикро. Я сумніваюся, чи можна збрити інший байт, але це здається малоймовірним.
Аднан

Зараз анімація HexagonyColorer?
Esolanging Fruit

12

Haskell, 11 байт

((:" ")=<<)

Приклад використання: ((:" ")=<<) "Code Golf"-> "C o d e G o l f ".

Мапа кожного символу cдо списку двох елементів [c, space]та об'єднайте все в один список.


Цікаво, що Хаскелл і Джеллі роблять тут те саме, оскільки монада в списку діє аналогічно декартовому продукту.
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
'просто загортається, розсуваючи символи, поки не знайде іншого, 'щоб закрити його. У цьому випадку відкриваючий і закриваючий 'код є тим же знаком, і більша частина вихідного коду висувається, але верхній знак буде просто місцем, оскільки він був натиснений останнім.
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 та лямбда.

28 символів для лямбда, але це не відповідає вимогам програми.

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

У питанні було вказано, що вхід повинен бути від STDIN.
ЕМБЛЕМА

Я можу додати один для вас, якщо це нормально.
Синій

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

Немає необхідності в дужках у вашому регулярному виразі. Також видалено додатковий простір між аргументами до replaceAll.
Khuldraeseth na'Barya

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, що штовхає та друкує пробіл. ІС триває на заході до тих пір, поки не завернеться назад i, до початку основного циклу.

1 Якщо символ є нульовим байтом, він буде ігнорувати ?і продовжити прямо, просто виводить єдиний пробіл.


Звичайно, є лише стільки письмових пояснень, тому я дуже рекомендую переглянути це в Інтернетному перекладачі . Існує варіант "швидкості", який дозволяє переглядати виконання так повільно або швидко, як вам подобається.


1
ви можете зберегти байт за допомогою@.Uoi?So
MickyT

4

Стакс , 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

Найкраще працює, коли рядок задано в командному рядку, але це може бути виконано одним символом одночасно і в реальному часі.

Безголівки:

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 елементи для кожного символу в рядку, з ефектом додавання пробілу

Щоб програма стала тримати stdin, це однакова кількість байтів:

∊2↑¨⎕

Спробуйте тут .



3

PHP, 31 байт

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

приймає дані з аргументу командного рядка.


3

Тріада , 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 байт (від stdin)

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

Простий старий відповідь С. Після компіляції програму потрібно викликати рядком, оскільки це перший параметр, рядок з пробілами потрібно укласти в лапки. Для прикладу в стартовій публікації:

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

Рішення, яке читається безпосередньо зі stdin.

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

На один байт менше завдяки @FryAmTheEggman


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

@Josh Чи вважається це параметром основним? Тому що в іншому випадку відповідь Java буде настільки ж помилковою, і не дуже впевненою щодо Haskell.
SBI

Або добре, ми любимо, щоб наше введення-виведення дружнє :) Але я вважаю, що використання getchar()коротше. Крім того, вам не потрібно включити для більшості компіляторів C.
FryAmTheEggman

@FryAmTheEggman Я залишив включити, щоб бути повністю сумісним, я можу протестувати лише з gcc. Поки gcc-only нормально, так, так, гоління включає добре.
SBI

Як правило, якщо це працює з 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.