Tam Genişlikte Metin


44

Tam genişlikte metin, sonuncusu da dahil olmak üzere her karakterden sonra boşluk içeren metindir. Örneğin, bu sorunun ilk cümlesi şöyle olur:

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 . 

Standart girişten metinde bir satır alan ve onu standart çıktısına tam genişlikte metin olarak çıkaran bir program yazın.

Liderler Sıralaması


6
Genelde , işlevlere de izin vermelisiniz ya da birçok dili hariç tutmalısınız (örneğin, JavaScript).
wizzwizz4

8
Topluluk fikir birliğine dayanan G / Ç için birkaç varsayılan değerimiz var. Bunları geçersiz kılmaya hakkınız varken, G / Ç için STDIN / STDOUT'da ısrar etmek, (varsayılanların geçerli olduğunu varsayarsak) bir dizi cevabı geçersiz kılar ve görevi diğer dillerde imkansız hale getirir ( standart akışlara sahip değildir ).
Dennis,

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

4
@ BlueRaja-DannyPflughoeft haklı. Tam Genişlik metni, bazı dillerin (yani ideogramların) gerektirdiği karakter kodlamasını (kodlanmış 2 bayt) ilgilidir. Unicode'da yarı ve tam boyut kavramı Unicode bloğu
Ludovic Frérot

2
@ LudovicFrérot Aslında, bunlar ideogram değil, bunlar Çince ingilizce harfler.
Outgolfer Erik,

Yanıtlar:


29

Jöle , 5 3 2 bayt

2 bayt kaydettiğiniz için Dennis'e teşekkür ederiz . Ayrıca 1 byte tasarruf için FryAmTheEggman sayesinde . Kod:

p⁶

Açıklama:

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

Jelly kodlamasını kullanır .

Çevrimiçi deneyin!


1
⁶ UTF-8'de üç bayt alır.
Jess Smith

12
@JessSmith Jelly kendi kod sayfasını kullanır: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
bir

1
@AandN Yoruma değil, cevaba koyun.
mbomb007 22.06.2016

3
@ mbomb007 Başlıkta doğru.
Adnan

5
@AandN Hayır, cevabında kendi kod sayfasına sahip olduğunu söylemelisin. Özellikle yeni bir dil olduğundan, insanlar henüz bilmiyor.
mbomb007 22.03.2016

24

Python 3.5, 18 bayt

print(*input(),'')

Bu çalışır çünkü printvarsayılan ayırıcı tek boşluktur.


3
print(*input(),end=' ')taşınabilir olurdu, ama çok golf gibi değil ...
Dennis,

9
MFW PEP'imin ilk kullanımında vahşi doğada gördüğüm Code Golf.
Veedrac

Bunun son karakterden sonra bir boşluğu var mı?
Esolanging Fruit

17

Altıgen , 21 13 12 10 bayt

Kod:

Bir Kaydedilen çok bayt sayesinde FryAmTheEggman . Kod:

P,<0/*;@.>

Veya daha okunabilir bir biçimde:

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

Çevrimiçi deneyin!

Açıklama:

Hexagony programı sol üst köşeden başlayarak, hemen bellek kenarını P80 olan ASCII değerine ayarlıyor . Bundan sonra aşağıdaki yolun geçtiğini görebiliyoruz:

görüntü tanımını buraya girin

Biz alınan yol olduğunu görebilirsiniz: P,<;.P/0....;*/>. Ondan sonra Pkullanıcı girişi bayt alırız. Eğer bu boşsa, aşağıdaki dal ( <) bizi Kuzey Doğu'ya yönlendirir. Girdi boş değilse, şube bizi Güney Doğu'ya yönlendirir. Ondan sonra, kullanıcı girdisini kullanarak çıktısını alırız ;. Bu bellek kenar erkene Psonra kullanılarak çıkarılmaktadır 800 Bu içine çıkan daha sonra eden sayıda birleştirilmiş ayna ardından 80. sıfırdır, ;komut, ancak ilk önce, 32 içine çıkan, modulo 256 alınmış olan boşluk karakteri. Ondan sonra, *komutu kullanarak bellek kenarını sıfırlıyoruz ve kullanıcı girişinin geri kalanı üzerinde tekrar dönüyoruz. Kullanıcı girişi bittiğimizde, yol Kuzey Doğu'ya yönlendirilir:

görüntü tanımını buraya girin

Bu temel @olarak programı sonlandıran komuta gider .

Kullanılması Timwi 'ın inanılmaz HexagonyColorer diyagramlar yapmak için.


Sen düzenlerken ben golf oynuyordum. Hata. 10:P,<0/*;@.>
FryAmTheEggman

@ FryAmTheEggman Hahaha, o zaman yeni bir açıklama yapalım: s.
Adnan,

P,<<>0;@>*ayrıca 10'dur, fakat ne yazık ki başka bir baytın tıraş edilmesine yardımcı olacağını sanmıyorum.
Martin Ender

@ MartinBüttner Ah, bu utanç verici. Başka bir byte'ı tıraş etmenin mümkün olup olmadığından şüpheliyim, ancak olası görünmüyor.
Adnan

HexagonyColorer şimdi animasyonlu mu?
Esolanging Fruit

12

Haskell, 11 bayt

((:" ")=<<)

Kullanım örneği: ((:" ")=<<) "Code Golf"-> "C o d e G o l f ".

Her karakteri ciki öğe listesine [c, space]eşleyin ve her şeyi tek bir listede birleştirin.


Haskell ve Jelly'in burada aynı şeyi yapması ilginç, çünkü liste monad bir Kartezyen ürüne benzer şekilde davranıyor.
ballesta25


6

JavaScript, 20 Bayt

Basit, sadece Array.join'in 3 byte tasarruf edebilmek için boşluk bırakmasını diliyorum.

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

5
[...s,``].join` ` belki?
Neil

3
Daha da iyisi [...s,,].join...
edc65

@ edc65 En son Firefox veya Chrome'da çalışmıyor mu? joinBeklediğim gibi sadece işlevini geri dönüş olarak alıyorum.
Mwr247,

@ Mwr247 birleştirme işleminden sonra kodunuzun geri kalanını koymak zorundasınız, bu yüzden üç nokta (...) koydum. Bu sadece 1 bayt tasarrufu
edc65

@ edc65, ` `bir yorumu nasıl yazacağınızı öğrenmek için çok tembel olabilir .
Neil,

5

> <> , 13 10 bayt

@ Sp3000 sayesinde 3 bayt kaydedildi

i:0(?;o 'o

Burada dene . Daha sonra, bağlantıyı tıklayın Gönder ardından bazı giriş ve basın yazın vermek ve nihayet ile programı çalıştırın Başlat veya animasyon olmadan Run .

açıklama

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 'o10
Sp3000

Aslında, de io 'oçalışıyor, hata veriyor.
Sp3000

@ Sp3000 Teşekkürler! Hatasız sürümüne gidiyorum (belki sizinkini göndermek ister misiniz?). Doğrudan karakter girişi yapabileceğinizi unuttum. Eşsiz alıntı nasıl çalışır? Her zaman önceki karakteri seçer mi?
Luis Mendo

1
'Sadece etrafını saran, 'kapatmak için başka bir tane bulana kadar karakterleri iterek Bu durumda açılış ve kapanışlar 'aynı karakterdedir ve kaynak kodun çoğu itilir, ancak en üst karakter sadece en son basıldığından beri boşluk olur.
Sp3000

@ Sp3000 Anladım. Yani bu da döngüsel. Öneri ve açıklama için çok teşekkürler!
Luis Mendo

5

Java, 132 (System.in) veya 99 (Program argümanı) bayt

Bu gece havai hissedebiliyor musun?

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, bunu yapmak için 6 bayt daha kısa bir yol buldu, ancak yaklaşımlarını çalmayacağım. Ancak, STDIN ve lambda sürümleriyle kullandım.

Bir lambda için 28 karakter ancak program gereksinimini karşılamıyor.

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

Girişin STDIN'den olması gerektiği sorusu.
EMBLEM

Eğer uygunsa, sizin için bir tane ekleyebilirim.
Mavi,

Şimdi bir STDIN sürümü ekledim (ve zeki regexplace shooqie'yi buldum).
CAD97

Regex'inizde parantez kullanmanıza gerek yok. Ayrıca argümanlar arasındaki fazladan bir boşluk kaldırıldı replaceAll.
Khuldraeseth na'Barya

4

Cubix , 10 bayt

Cubix, @ETHproductions tarafından geliştirilen, komutların bir küp üzerine sarıldığı 2 boyutlu bir dildir. Çevrimiçi deneyin

@.?wi^\oSo

Bu, kenar uzunluğu 2 olan bir küpün üstüne eşlenir

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

Girişle başlar i. Akış kuzeye ^, üst yüze yönlendirilir . ?Değer negatif ise sola, bitirmek için @sıfıra sağdan sola wveya sağa sola dönüş yapar, sonra sola yansıtılır \. Sondaki boşlukla birlikte çıktı karakteri oSo.


4

Cubix , 9 bayt

@./.i?>So

Çevrimiçi çalıştığını görün!

Cubix, talimatların bir küpün yüzüne çizildiği bir dildir. Bu program aşağıdaki küp netini oluşturur:

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

Komut işaretçisi i, girişten başka bir karakter kodu alan ve yığına iterek başlar. Alınacak daha fazla giriş ?kalmadıysa, IP sola döner, vurur /ve yukarı doğru yansıtılır @, bu da programı sonlandırır.

Ancak, eğer giriş kaldıysa, değer bir karakter kodu olacaktır. Tüm 1 karakter kodları pozitif olduğu için ?, IP'yi sağa döndürür, char'ı oçıkaran yoldan geçerek küpün her yerine sarar . Daha sonra /geri dönmesini sağlayan >So, bir alanı iter ve basan isabet eder . IP i, ana döngünün başlangıcına kadar geri , arkaya doğru sarılıncaya kadar batıya taşınır.

1 Karakter boş bir bayt ise, ?tek bir boşluk bırakarak yoksayır ve dümdüz devam eder.


Elbette, yazılı bir açıklamanın yapabileceği çok şey var, bu yüzden bunu çevrimiçi tercüman olarak görmenizi şiddetle tavsiye ediyorum . Yürütmeyi istediğiniz kadar yavaş veya hızlı bir şekilde görüntülemenizi sağlayan bir "hız" seçeneği vardır.


1
ile bir bayt kaydedebilirsiniz@.Uoi?So
MickyT

4

Stax , 2 bayt

Jöle Bağları!

0\

Staxlang.xyz adresinde deneyin!

Bütün bunlar 0yığına basmak ve dizeyi standart girdiden yanına almak, gerektiği gibi tekrarlamak. Stax'ta, bir dizedeki kod noktası 0 genellikle 32 (boşluk) değerine dönüştürülür.

Bu, içine paketlenecek kadar kısa ûT, okunabilirliği azaltmaktan başka bir şey yapmaz.



3

CJam , 5 4 bayt

@FryAmTheEggman sayesinde 1 bayt daha az

lSf+

Çevrimiçi deneyin!

açıklama

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 bayt

(4 karakter kod + 3 karakter komut satırı seçeneği.)

NF++

Örnek çalışma:

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

(Komut satırı seçenek sayısına nelerin dahil edilmesi gerektiği konusunda bazı anlaşmazlıklar var. awk“-”, “F” ve “F” ile boş dize parametresi arasındaki bir ayırıcıya gerçekten ne olduğunu yorumlayıcısına dahil ettim . Demek istediğim.)

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 bayt

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

Komut satırından çalıştır

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 bayt

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

Dize komut satırında verildiğinde en iyi şekilde çalışır, ancak gerçek zamanlı olarak aynı anda bir karakter yapılabilir.

Ungolfed:

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

3

Labirent , 10 bayt

<.23.%):,>

Bu bir hata ile sonlanır, ancak hata mesajları STDERR'ye gider.

Çevrimiçi deneyin!

açıklama

Bu tamamen doğrusal bir programın mümkün olduğu nadir durumlardan biridir. Döngü, kaynak kod değiştirme komutları ile gerçekleştirilir <ve >bu işe yarar çünkü her yinelemeden sonra yığının tekrar boş olduğunu biliyoruz.

< döngüsel olarak tüm çizgiyi bir hücre sola kaydırır, bu yüzden sonunda:

.23.%):,><

Bu komut göstergesini (IP) yanına alır, böylece IP kodun sağ ucundadır ve sola hareket etmek zorunda kalır. Sonra, >tersi değişiklik yapar, böylece kaynak kodunu tekrar

<.23.%):,>

Şimdi her şey başlamadan önce (sağdan sola) tek bir yineleme yapıyoruz:

,    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 bayt

?=?\ 

Örnek çalışma:

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

Bu dili daha önce görmedim. Tercümana bağlantı?
Bir spaghetto

Üzgünüm. Gönderi başlığına köprü eklendi. Oldukça eski, ama ne yazık ki, Google, yalnızca “genel amaçlı makro işlemci” adından geldiğini biliyorsanız, bulmada etkili bir şekilde yardımcı olabilir.
Manat çalışması

3

MATL , 7 bayt

tnZ"v1e

Çevrimiçi deneyin!

açıklama

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 bayt

∊2∘↑¨

Bu, bir dize ekleme efekti ile dizedeki her karakter için 2 öğe alır.

Stdin alan bir program yapmak için, aynı sayıda bayt var:

∊2↑¨⎕

Burada dene .



3

PHP, 31 bayt

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

komut satırı argümanından girdi alır.


3

Threead , 45 16 Bayt rekabet etmiyor .

  B[coB]
32c   o

STDIN ile girişi alır.

İlk Satır / Teyp sadece STDIN'den bayt okur ve yazar. İkinci satır, başlangıçta bir boşluk depolar 32c, daha sonra bir sonraki karakterin okunmasıyla aynı zamanda o alanı çıkarır.

Çevrimiçi deneyin!


3

Python 2, 27 25 24 bayt

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

Raffi'nin cevabından daha kısa ...

60919 (FlipTack) sayesinde -1.


İşlevlere izin verilirse lambda x:' '.join(x)+' '1 bayt daha kısa olur.
FlipTack

3

C, 50 bayt

Biraz main()özyineleme :)

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

Çevrimiçi deneyin! - Bunu kendi makinenizde kullanıyorsanız , EOF'yi belirtmek için Ctrl+ Dkullanın.


3

C, 56 Bayt (program argümanı olarak), 46 Bayt (stdin'den)

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

Düz eski C cevap. Derlendikten sonra, program ilk parametresi olarak bir dize ile çağrılmalıdır, boşluk içeren bir dize tırnak içine alınmalıdır. Başlangıç ​​postasındaki örnek için:

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

Hangi çıkacak

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 .

Doğrudan stdin'den okuyan çözüm.

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

@FryAmTheEggman sayesinde bir bayt daha az teşekkürler


Gereksinimler biraz bulanık, ama stdinbir argüman olarak almak yerine , girişi okumak zorunda olduğuna inanıyorum . Ayrıca, C’de daha fazla golf oynamak
Josh

@Josh Ana parametre olarak sayılır mı? Çünkü aksi takdirde, Java cevabı da aynı şekilde yanlış olacaktır ve Haskell ile ilgili de o kadar da kesin değildir.
SBI

Her ikisi de gayet iyi, bizim G / Ç'mizin arkadaş canlısı olmasını seviyoruz :) Ama getchar()kullanımın daha kısa olduğuna inanıyorum . Ayrıca çoğu C derleyicisi için dahil edilmesine gerek yoktur.
FryAmTheEggman, 22.06

@FryAmTheEggman Tamamen uyumlu olması için dahil etmeyi bıraktım, sadece gcc ile test edebilirim. Sadece gcc-only iyi olduğu sürece, evet, ütüyü tıraş etmek tamamdır.
SBI

Genellikle, eğer Ideone ile çalışıyorsa sorun yok :)
FryAmTheEggman


2

Cidden, 7 bayt

' ;,@j+

Çevrimiçi deneyin!

Dostum, bu gerekli boşluğa yer açmak için 3 bayt daha ekledi. Onsuz, ,' j4 için çalışacak.

Açıklama:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.