Görünmez metin yazdır


38

Girdi olarak bir dize verildiğinde, dize uzunluğuna eşit sayıda boşluk karakteri (0x0A ve 0x20) çıkar.

Örneğin, dizginize verilen Hello, World!kodun tam olarak 13 boşluk karakteri ve başka bir şey vermemesi gerekir. Bunlar herhangi bir boşluk ve yeni satır karışımı olabilir.

Kodunuz, ek izleyen yeni satırlar veya boşluklar çıkarmamalı.

testcases:

     Input      -> Amount of whitespace to output
"Hello, World!" -> 13
"Hi"            -> 2
"   Don't
Forget about
Existing
Whitespace!   " -> 45
""              -> 0
"             " -> 13
"
"               -> 1

puanlama:

Bu kadar az bayt kazanır!


1
Bu "0x0A" ile ne demek istediğinizi anlamadım. Bu nerede üretilmeli? Bu tutulmalı mı, yani “a␠b␊c” “␠␠␠␊␠” olur mu?
Manatwork

1
@manatwork 0x0Ave 0x20sırasıyla Newline ve Space karakterleri için onaltılık değerlerdir
Skidsdev

1
“Bir dizi boşluk karakteri ver (0x0A ve 0x20)” - Çıktıda bu yeni satır karakterleri nerede olmalıdır?
Manatwork

3
These can be any mix of spaces and newlinesÇıktınız herhangi bir boşluk ve yeni satır karışımı olabilir, istediğiniz gibi, diğerleri gibi boşluk bırakabilirsiniz veya yeni satırlar yazabilirsiniz. Bu size kalmış
Skidsdev

1
Anladım. Teşekkürler.
Manatwork

Yanıtlar:


137

Boşluk , 311 150 77 68 65 46 41 38 bayt

Kevin Cruijssen sayesinde -3 bayt - Ephphatha
sayesinde -27 bayt


  
   	 	 
 
  
 	
	 			
	  
	
  
 


Çevrimiçi deneyin!

Görünür bir format

'\n  \n   \t \t \n \n  \n \t\n\t \t\t\t\n\t  \n\t\n  \n \n\n'

Açıklama (s = boşluk, t = sekme, n = yeni satır)

nssn     # label(NULL) - loop start
ssststsn # push 10 in the stack -> [10]
sns      # duplicate the top of the stack -> [10, 10]
sns      # duplicate the top of the stack -> [10, 10, 10]
tnts     # read a single char from input, pop the stack and store at that address -> [10, 10] [10:<char that was read>]
ttt      # pop the stack and put the value at that adress on stack -> [10,<char>] [10:<char>]
ntssn    # jump to label(0) - since label(0) is not defined, the interpreter jumps to the end of the program - if the top of the stack (char) is 0 -> [10] [10:<char>]
tnss     # pop the top of the stack and print as ascii -> [] [10:<char>]
nsnn     # go back to the label(NULL)

25
Bunun gerçekten işe yaradığını varsayarsak, bu kesinlikle en yaratıcı cevap için
oyumu kazanıyor

24
Bekle cevap nerede? O da görünmez mi?
Outgolfer Erik,

16
SİYAH MAGIC BU NEDİR. Kodun orada bile değil! -1
Christopher

28
@Christopher daha fazla WHITEspace MAGIC
Rod

12
Birinin bu soruyu bir boşluk programı ile cevaplayacağını biliyordum
Draco18

59

22
Japt ciddiye bunun için bir yerleşik var mı? Kahretsin ...
Skidsdev

22
@Mayube, bir dizgideki tüm karakterleri bir başkasıyla değiştirmek için yerleşik bir yapıya sahiptir ve varsayılan değiştirme bir boşluktur;)
Tom

4
Çok hoş! Programı çalıştıranlar için -Q, çıktıya tırnak koymak için bayrağı girdiye ekleyebilirsiniz . TIO
Oliver,

38

Haskell , 7 bayt

(>>" ")

Çevrimiçi deneyin! Kullanımı: (>>" ") "Hello, world!".

İki liste göz önüne alındığında (ve dizeler Haskell'deki karakterlerin >>listesidir ), operatör ikinci listeyi ilk listedeki öğelerin sayısı kadar tekrarlar. " "İkinci argüman olarak ayarlamak , giriş dizesi uzun olduğu kadar çok boşluk birleştirdiğimiz anlamına gelir.


Alternatif (aynı bayt sayısı):

(' '<$)

Çevrimiçi deneyin! Kullanımı: (' '<$) "Hello, world!".

Bir değer ve bir liste verildiğinde, <$operatör listedeki her değeri verilen değerle değiştirir. Böylece ve içinde 5 <$ "abc"sonuçlanır .[5,5,5]' ' <$ "abc"" "

İşlev, kodumda (<$)' 'daha fazla deniz canlısı bulmak istemeniz durumunda eşit olarak yazılabilir .


18
Sevimli, küçük bir balina balığı gibiydi
Taylor Scott



17

Retina, 3 4 bayt

S\`.

Eski versiyon çalışmıyor çünkü Retina takip eden satır beslemesi yazdırıyor.

.
 

(İkinci satır bir boşluk içerir).


2
Retina TIO'nun kullanımı oldukça kolaydır. İşte cevabınız
Dijital Travma

2
Ne yazık ki, Retina varsayılan olarak izleyen satır besleme yazdırır. Bundan \`kaçınmak için hazırlanmanız gerekir. Sonra S\`.her karakteri bir satır besleme ile değiştiren olsa da kullanmak daha kısadır (çünkü her karakterin etrafındaki girişi böler).
Martin Ender

@MartinEnder Ahhh, bunun bir Retina veya TIO olayı olup olmadığından emin değildi. Orada bir bayt kaydetme konusunda yardım için teşekkürler!
TheLethalCoder


13

Brainfuck, 16 bayt

Yeni satırları yazdırır.

,[>++++++++++.,]

11

C #, 28 24 bayt

s=>"".PadLeft(s.Length);

Yapıcıyı string28 bayt için kullanan eski sürüm :

s=>new string(' ',s.Length);


1
@StefanDelport Çevremdeyken C # ile hızlı olmalıyım :) Aynı şeyi yapmak için Linq yaklaşıyor ama hepsi çok daha uzun ...
TheLethalCoder


9

Mathematica, 21 bayt

StringReplace[_->" "]

1
Charlist girişine izin verildiyse, bu olabilir #/._->" "&. Ne yazık ki, giriş bir dizedir ve Characters [], çözümünüzden bir bayt daha uzun olmasını sağlar :(
CalculatorFeline

1
Bunun içinde bir #ve bir ihtiyacı &yok mu? ÖrneğinStringReplace[#,_->" "]&
Ian Miller

3
@IanMiller Mathematica'da Değil 10.4 veya 11. reference.wolfram.com/language/ref/StringReplace.html
alephalpha

2
Ah tamam. Sadece 10,3'üm var. Belki de yükseltme zamanı ...
Ian Miller

8

JavaScript ES6, 22 bayt

a=>a.replace(/./g," ")

f=a=>a.replace(/./g," ");

var test = f("Hello, World!");
console.log(test, test.length);


3
Huh, "ah kahretsin, s=>s.replace(/[^]/g," ")diğer çözümden daha uzun bir bayt olmalı" diye düşündüm . Çıktıda yeni satırlara izin verilmediği
aklıma gelmedi

8

C, 31 bayt

f(char*c){puts(""),*c++&&f(c);}

1
Bunun diğer C cevabından ne farkı var ? Açıkçası, bu daha kısa, ama diğerini basitçe düzenlemeli miydiniz? İki çözümle tek bir cevap mı olmalı?
Tas

4
@Tas Her şeyden önce, sanırım bir anlamda bunun daha kısa olsa da diğer olay kadar iyi olmadığını hissediyorum çünkü aslında olduğu gibi derlenmiyor. Bu sadece bir fonksiyondur, bu yüzden etrafına bir miktar rutin yazmanız gerekir. Ancak, bir daha kısa ve diğerleri sadece işlevleri göndermek gibi görünüyor. Açıkçası iki çok farklı çözüm var. Biri diğerinin geliştirmesi değildir, bu yüzden bana iki farklı cevap olması gerektiği anlamına geliyor. Ancak bu toplulukta yeniyim. Bir kullanıcının yalnızca bir cevap gönderdiği mutabakatı mı? Eğer öyleyse bunu bir dahaki sefere yapacağım.
sigvaldm

Virgül virgül olmalı, noktalı virgül değil mi?
Oskar Skog

1
@OskarSkog, bu durumda o kadar önemli değil çünkü lhs yok
kedi

1
@OskarSkog Evet, virgül olmalı. @Cat’in dediği gibi, bu durumda gerçekten önemli değil ama varyasyon için virgül seçtim i++, j++. Önemli bir detay, özyinelemenin bir şekilde durması gerektiğidir. &&yanlışsa, rh'lerini değerlendirmez. *c++dizenin boş sonlanmasına işaret ederken false olarak değerlendirir.
sigvaldm


7

Excel VBA, 17 15 Bayt

Hücreden girdi alan [A1]ve girişin uzunluğundaki boşlukları VBE acil durum penceresine çıkaran isimsiz VBE acil durum penceresi işlevi

?Spc([Len(A1)])

7

05AB1E , 3 bayt

vð?

Çevrimiçi deneyin!

v   # For each character...
 ð? #    Output a space without a newline

Diğer 3 byte çözümler ( Bunların çoğu için teşekkürler Magic Octopus Urn ve Kevin Cruijssen )

v¶? # For each character print a newline (without adding a newline)
võ, # For each character print the empty string with a newline
gð× # Get the length, concatenate that many copies of space
g¶× # Get the length, concatenate that many copies of newline
Sð: # Split, push a space, replace each char in input with a space
ðs∍ # Push ' ', swap, make the string of spaces as long as the input was
võJ # For each char, push a space and ''.join(stack)
v¶J # For each char, push a newline and ''.join(stack)
€ðJ # For each char, push a space. Then ''.join(stack)
ۦJ # For each char, push a newline. Then ''.join(stack)

1
Diğer çözüm: gð×geldiğimde kalanlar 3'ün üstünde idi:õ‚.B¤
Magic Octopus Urn

2
Başka bir eğlenceli bir:Sð:
Magic Octopus Urn

1
Daha eğlenceli:ðs∍
Magic Octopus Urn,

Bazı daha alternatif 3-baytlar: võJ/ v¶J; €ðJ/ €¶J. Ve G / Ç dizileri istendiğinde varsayılan olarak G / Ç olarak bir karakter dizisine izin verildiğinden, bazı 2 bayt sürümleri mümkündür: €ð/ €¶/ εð/ ε¶ve ð:/ ¶:. Bu oldukça eski bir zorluk olduğundan ve diğer tüm cevaplar gerçek dizgiler kullanmasına rağmen, dizge giriş / çıkış olarak tutup tutmadığınızı anlayabilirim.
Kevin Cruijssen



6

C, 45 bayt

Ana kullanarak. Gcc ile derleyin, uyarıları dikkate almayın.

main(c,v)char**v;{while(*(v[1]++))puts("");}

Kullanımı:

$./a.out "Hello, World!"

1
Eğer koyamazsınız herhangi bir neden char**vde main(c,v)?
Hesap MakinesiFeline

@CalculatorFeline En azından GCC 6.3.1 ile basitçe derleme gcc main.c, ANSI fonksiyon tanımını K&R fonksiyon tanımına karıştırmaya izin vermiyor gibi görünüyor, bu yüzden main(c,char**v)derleme yapmayacak. Yapmam gerekecek main(int c,char**v)veya main(c,v)char**v;ikincisi 3 bayt daha kısa. Şans eseri herhangi bir bayrak veya bu tarzların karıştırılmasına izin veren bir şey bilemezsiniz.
sigvaldm

3
Hayır, karıştıramazsın. Buna izin veren bayrak yok. K & R tarzı uzun eski, sadece kod golf ve gizlilik amaçları için kullanılır.
Cody Gray

Ve char**vtamamen kaldırmayı da derlemediğimi tahmin ediyorum .
Hesap MakinesiFeline

@CalculatorFeline char**Tamamen ihmal ederseniz , derleyici bunu yorumlayacaktır int. Yanılmıyorsam, bir intzorunluluğu kaldırmaya çalışırken bir hata alırsınız ve program olmasa bile, bir intkaç charsaniye tükettiğinden ve yapmanız gereken bir NULLdeğeri alamadığınızdan , yapmayı beklediğiniz şeyi yapmazsınız .
sigvaldm



5

> <> , 7 bayt

i0(?;ao

Program bir döngüdür

i         //Push a character from the input onto the stack
 0        //Add a 0 to the stack
  (       //Pop the top two values of the stack, and push a 1 if the second is less than the first (In this case, the input has all been read), else push a 0
   ?      //Pop the top of the stack. If the value is a 0, skip the next instruction
    ;     // Terminate the program
     a    // Add a newline to the stack
      o   // Pop the top character of the stack and print it


5

Altıgen , 12 11 bayt

Martin Ender sayesinde -1 bayt

,<.;.M@.>~8

Çevrimiçi deneyin!

İşte genişletilmiş hex:

  , < . 
 ; . M @
. > ~ 8 .
 . . . .
  . . .

Giriş varken bu kod çalışır:

,        # Get input
 <       # Turn right (SE) if we didn't get EOF
  M8     # Set the memory edge to 778 which is 10 (mod 256)
    ;    # Print as a character (newline)
     >   # Redirect East
      ~  # Multiply by -1. This makes the pointer go to the top when it runs off the edge
       8 # Effectively a no-op.

EOF'ye ulaşıldığında:

,    # Get input
 <   # Turn left (NE)
  8  # Effectively a no-op
   @ # End program

Bir satır beslemeyi üç bayt ile M8;(778 = 10 (mod 256) verir) yazdırabilirsiniz . Bu ~, ;şu anda bulunduğu yere gitmenizi ve bir bayt tasarrufu sağlamanızı sağlar .
Martin Ender


5

Python 2,25 bayt

exec'print;'*len(input())

Loovjo sayesinde -2 bayt = Totalhuman sayesinde
geçersiz koddaki -2 bayt: p
-3 bayt


1
exec
Parens'i

1
@Loovjo Ah, Python 2. Teşekkürler!
HyperNeutrino

Bunun eski olduğunu biliyorum ama exec'print;'*len(input())işe yarıyor.
totallyhuman

1
@totallyhuman oh doğru, teşekkürler: P
HyperNeutrino

1
@TheMatt muhtemelen sorunla ilgili değildir ancak varsayılan kabul edilebilir girdi yöntemlerinden biridir. Meta bakmayı deneyin, şu anda aramaya gitmek istemiyorum
HyperNeutrino


4

Cubix , 6 bayt

Wahoo 6 bayt!

wi?@oS

Cubified

  w
i ? @ o
  S
  • i girdi alır
  • ? yığınının üst kısmı
    • eğer negatif (EOI) durma wyerine geçen şerit değişikliğine yönlendirir@
    • 0 (boş) durursa, bu isabet olmamalıdır
    • eğer Sowyığına pozitif itme alanı varsa , çıkışın ve şeridi değiştirini

Çevrimiçi deneyin!


1
Tatlı, çok sık değildir bir Cubix programı bu kadar kısadır :-)
ETHproductions


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.