Merhaba Dünya Gökkuşağı


11

İşaretleme yapmayan dillerde renklerle uğraşmak genellikle işleri zorlaştırır. Rengin farklı dillerde nasıl kullanıldığına dair bazı varyasyonlar görmek istiyorum.

Bu yarışmanın amacı gökkuşağının yedi renginde “Merhaba Dünya” nın çıktısını almak.

Wikipedia'ya göre, bunlar 7 renk.

Red      #FF0000 (RGB: 255, 0, 0)
Orange   #FF7F00 (RGB: 255, 127, 0)
Yellow   #FFFF00 (RGB: 255, 255, 0)
Green    #00FF00 (RGB: 0, 255, 0)
Blue     #0000FF (RGB: 0, 0, 255)
Indigo   #6600FF (RGB: 111, 0, 255)
Violet   #8B00FF (RGB: 143, 0, 255)

Kurallar

  1. Programın çıktısı 'Hello World' olmalıdır. (Mutlaka metin olması gerekmez, ancak 'Merhaba Dünya' olarak ayırt edilebilir olmalıdır)
  2. Her harf farklı renkte olmalıdır.
  3. Renkler herhangi bir sırada olabilir.
  4. Yedi rengin her birini en az bir kez kullanmalısınız. (Verilen renklerden daha fazlasını kullanabilirsiniz)
  5. Hiçbir durumda biçimlendirme dilleri kullanılmaz .

Kazanan, en düşük karakter sayısına sahip olan VE kuralları takip eden kişidir

DART ile yazılmışsa Bonus -1 karakteri

Kazananı 11 Ocak'ta seçeceğim (hatırlarsam; D).

İyi şanslar

BİRİNCİ (lar)

Bir hata yaptım D :, kazananları güncelledi.

1 inci. stranac - Python, 60 karakter

2. Ilmari - Karonen Perl + GD, 146 karakter

Tüm kurallara uyulan en kısa uzunluk.

Brownie , DART cevabı için JiminP'ye işaret ediyor .

Yanıtlar:


7

Python, 60 karakter

Şimdi 7 renk ve "doğru" olanları kullanarak.

Ansi kaçış dizilerini kullanır. Alt çizgi orada değil bu yüzden görünmez bir alan değil.

Bu sürüm, python'un baskısının çalışma şekli nedeniyle bazı fazladan boşluklar yazdırıyor, ancak bu boşluklar birkaç karakterden tasarruf sağlıyor, bu yüzden orada olmalarında iyiyim.

for p in zip(range(7)*2,'Hello_World'):print'\033[3%im%s'%p,

Ve MrZander'ın istediği gibi bir ekran görüntüsü: resim açıklamasını buraya girin


Bir hata yaptım mı? Lütfen tüm renkleri doğru şekilde kullandığınızı kanıtlayan bir ekran görüntüsü gönderin. "Siyahtan beyaza 8 renk" gerekli 7 rengi kullandığı gibi ses çıkarmıyor.
MrZander

@MrZander: Cevabımı güncelledim ve umarım şimdi sizi memnun ediyor. Btw, sağladığınız 6. rengin doğru olduğundan emin misiniz? 7. ile hemen hemen aynı.
stranac

Hemen Wikipedia'dan aldım ... Ben renk uzmanı değilim haha.
MrZander

2
Bu, çalışmak için özel bir palete dayanır. Örneğin, Hsiyah için çıkış kodu kullanılarak yazdırılır, bu nedenle çoğu terminalde görünmez.
hammar

12

Mathematica

ImageMultiply[ColorNegate[Graphics[Text[Style["Hello World",30]],ImageSize->190]],ColorData["Rainbow","Image"]]

Biliyorum, biliyorum, kurallara uymuyor .. ama Mathematica'nın görüntü işleme fonksiyonları ile oynamayı denemek zorunda kaldım.

Ekran görüntüsü:

Selam Dünya!!!!!!!


10

Haskell, 88 karakter

f(c,n)=putStr$"\27["++show n++"m"++[c]
main=mapM_ f$zip"Hello World\n"$35:cycle[31..36]

Ekran görüntüsü

Bu, sadece 6 olan ANSI terminal renklerini kullandığını ve verilenlerle tam olarak eşleşmeyebileceğini (terminal ayarlarına bağlıdır) unutmayın, bu yüzden burada kuralları biraz büküyorum.

Neredeyse doğru renklerle biraz daha uzun versiyon, 107 karakter

Bu sürüm ANSI yerine xterm renkleri kullanır. Bu herhangi bir özel palete dayanmaz ve 256 renkli xterm paletinde bulabildiğim en yakın renkleri kullanır.

f(c,n)=putStr$"\27[38;5;"++show n++"m"++[c]
main=mapM_ f$zip"Hello World\n"$cycle[196,208,226,46,21,57,93]

resim açıklamasını buraya girin


7

Python, 261 karakter

C=((255,0,0),(255,127,0),(255,255,0),(0,255,0),(0,0,255),(111,0,255),(143,0,255))
print'P3 67 5 255'
for i in range(335):print'%d %d %d'%(C+C[2:])[i%67/6]if 0x4f7c938a00e7df7d12208a8aa0220820a34413d154044105f7e8828a28808820828cf04f39100e0417d1>>i&1 else'0 0 0'

Bir ppm görüntüsü oluşturarak spesifikasyonu tam olarak uygular. İşte sonuç, gif'e dönüştürülmüş ve 4 kat büyütülmüştür:

resim açıklamasını buraya girin


Hehe, güzel. Anlamak için utanç verici derecede uzun bir an aldı.
cemper93

2
n=255;C=((n,0,0),(n,127,0),(n,n,0),(0,n,0),(0,0,n),(111,0,n),(143,0,n))
Steven Rumbalski

7

Perl -> ANSI terminali, 53 karakter

s//Hello World/;s/./\e[3${[5,(1..6)x2]}[pos]m$&/g;say

Bu Hammar'ın Haskell çözümü ile tam olarak aynı çıktıyı üretir . Kullanır say, bu yüzden perl 5.10+ ve -M5.010(veya -E) anahtarına ihtiyaç duyar . Eski Perls için, yerini sayile print. \eDeğişmez tek karakterli bir azalma, değişmez bir ESC karakteri ile değiştirilerek elde edilebilir , ancak bu, kodun okunmasını ve düzenlenmesini daha zor hale getirir.

Düzenleme: Hammar'ın çıktısını tam olarak eşleştirmek ve aslında altı olası terminal rengini göstermek için iki karakter eklendi. (Önceki sürümde, 6 = camgöbeği renginde yazdırılan tek karakter boşluktu.)

Ekran görüntüsü:

Selam Dünya


Düzenleme 2: Eğer özel bir terminali paleti kullanarak (ve uzay için bir alt çizgi) izin verilir, sonra kolayca sadece 50 karakter ile spec verilen tam renkleri üretebilir:

$_=Hello_World;s/./\e[3${[(0..6)x2]}[pos]m$&/g;say

Ekran görüntüsü:

Selam Dünya


3

Perl -> HTML, 99 karakter

@c=(("00")x5,77,(ff)x5,77)x2;print"<font color=#",@c[$i+8,$i+4,$i++],">$_"for split//,"Hello World"

Ekran görüntüsü:

Selam Dünya

HTML muhtemelen hiçbir doğrulayıcıyı geçmez, ancak hemen hemen tüm tarayıcılar tarafından anlaşılmalıdır. Bu kod, listelediğiniz tam RGB renklerini üretmez , ancak çok yakınlaşır. Özellikle, harflerin renkleri:

H  Red           #FF0000
e  Orange        #FF7700
l  Yellow        #FFFF00      
l  Chartreuse    #77FF00
o  Green         #00FF00
  (Spring green  #00FF77)
W  Cyan          #00FFFF
o  Sky blue      #0077FF
r  Blue          #0000FF
l  Indigo        #7700FF
d  Violet        #FF00FF

Çıktı siyah bir arka plan üzerinde çok daha hoş görünüyor, ama açıkça yazdırmak <body bgcolor=black>bana 28 ekstra karaktere mal olacaktı. Bunun yerine aynı efekti elde etmek için tarayıcı ayarlarınızı yapabilirsiniz. :-)


3
Kural 5 ile yeteri kadar açık olmayabilir. İşaretlemenin başka bir dille birlikte kullanıldığını da görmek istemiyordum. Ama her durumda, çok yaratıcı bir kod.
MrZander

3

Perl + GD, 146 karakter

Diğer cevabımın yorumlarına göre , GD kütüphanesini kullanarak doğrudan bir görüntü dosyası üreten bir çözüm:

use GD'Simple;move{$m=new GD'Simple 70,12}2,12;s//Hello World/;s/./fgcolor$m(((0)x5,127,(255)x5,127)x2)[$i+8,$i+4,$i++];string$m$&/eg;print$m->png

Ve işte çıktı:

Selam Dünya

Yine, siyah bir arka plan kullanmak daha iyi görünüyordu, ancak bana 29 karaktere ( $m->bgcolor(0,0,0);$m->clear;) mal olacaktı .

Düzenleme: Dolaylı nesne gösterimi ve diğer bazı tweaks kullanarak (ab) tarafından 20 karakter tıraş nasıl anladım. Yeni kod bir uyarı verir, ancak yine de iyi çalışır.


Bu daha çok benzer;)
MrZander

Şimdiye kadar, bu noktaya kadar tüm kuralları izleyen en düşük karakter sayısıdır.
Ocak'ta MrZander

3

Dipnot 155 143

Bu, Ghostscript'in Palatino'nun Palatino-Roman kısaltmasını "anlama" yeteneğine dayanır.

/h{c 1 1 sethsbcolor}def/c 0 def
200 400 moveto/Palatino 36 selectfont
h{32 ne{/c c .14 add dup 1 gt{1 sub}if def}if pop
h}(Hello World!)kshow

1
Sanýrým "Times" daha kýsa, ama ... ugh.
luser droog

Fikirlerinizden bazılarını çaldı ...
Thomas W.

3

Bunu yapmak için bazı farklı yaklaşımlar

PostScript

İlk olarak: En kısa olan ( 89 ):

9 9 moveto/Courier 9 selectfont
0{pop pop 
dup 1 1 sethsbcolor
.07 add}( Hello World)kshow

Oluşturulan sonuç

Un-golfed:

9 9 moveto
/Courier 9 selectfont
0                       % hue
{                       % hue c1 c2
  pop pop               % hue
  dup 1 1 sethsbcolor   % hue
  .07 add               % newHue
}( Hello World)kshow

Bu, hsb renk boşluğunu kullanarak sürekli x yönünde renk değiştiriyor. (HSb renklerini ve kshow'u kullanmak fikri akıl almaz droog'a yatırılır - girişine bakın!) MrZander tarafından verilen tam yedi rengi kullanmaz.

Kendimi MrZander'ın renkleri ile sınırlarken, 141 karakter kullanarak oraya gidiyorum :

9 9 moveto/Courier 9 selectfont(H e*l4l4oI  WIosrsl{d~)dup
0 2 20{2 copy
1 add get 32 sub 166 div 1 1 sethsbcolor
1 getinterval show
dup}for

Oluşturulan sonuç

Bu, MrZander renklerinin ton değerini yazdırılabilir ASCII aralığında bir bayt olarak kodlar. Bu bayt, 32 çıkartılarak ve 166'ya bölünerek 0 ile 1 arasında bir ton değerine çevrilir. "Hello World" dizesinin her karakterini, kodlanmış ton değeri izler.

Un-golfed:

9 9 moveto
/Courier 9 selectfont
(H e*l4l4oI  WIosrsl{d~)dup     % string string
0 2 20{                         % string string index
  2 copy                        % string string index string index
  1 add get                     % string string index hueChar
  32 sub 166 div                % string string index hueValue
  1 1 sethsbcolor               % string string index 
  1 getinterval                 % string substring
  show                          % string
  dup                           % string string
}for

YAPILACAKLAR : Renklerle ilgili bir şey doğru değil.


2

Bazı hile ama sorunu çözmek

Bash + Ruby ( lolcatmücevher gerekir)

echo Hello World | lolcat -p 0.25

Gökkuşağı Merhaba Dünya


1

HTML'ye dart, 135 134-1 = 133

main(){for(var s="Hello World",i=0;i<11;print("<font color=#${'F00F60FB0FF06F00F00B606B00F60F90F'.substring(i*3,i*3+3)}>${s[i++]}"));}

Biçimlendirme dili kullanmadan metinleri renklendirmenin bir yolu var mı? Tuvalleri test edemiyorum ...


Oooo ... HTML ile bile +1
MrZander

1

"Hiçbir durumda biçimlendirme yok" dediğini biliyorum, ancak bu CSS'yi 468 karakterden biriyle göndermek istiyorum:

<style>b{font-weight:normal}i{font-style:normal}u{text-decoration:none}b:after{content:'e';color:orange}b:before{content:'H';color:red}i:after,i:before{content:'l'}i:before{color:#ff0}i:after{color:#0f0}u:before{content:'o ';color:#66f}u:after{content:'W';color:blue}s{text-decoration:none}s:before{content:'o';color:#006}s:after{content:'r';color:#60f}p{display:inline}p:before{content:'l';color:#8b00ff}p:after{content:'d'}</style><b></b><i></i><u></u><s></s><p></p>

Şekillendirmenin hiçbiri biçimlendirme ile yapılmaz.


0

Yakut

242 daha usulsel yol:

require 'paint'

s = "HelloWorld"
out = ""
[
  '#FF0000',
  '#FF7F00',
  '#FFFF00',
  '#00FF00',
  "#00FFFF",
  "#5555FF",
  '#0000FF',
  '#000077',
  '#6600FF',
  '#8B00FF'
].each_with_index { |c, i| out << "#{Paint[s[i], c.dup]}" }
puts out

Eğer renkleri üretmek için daha iyi bir yol düşünmeyi başarırsam. Orta olanlar birkaç ben sadece renkleri yakın almak için bazı deneme yanılma yaptım.

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.