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


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.