Radzenie sobie z kolorami w językach bez znaczników często komplikuje sprawy. Chciałbym zobaczyć kilka wariantów używania kolorów w różnych językach.
Celem tego konkursu jest stworzenie „Hello World” w siedmiu kolorach tęczy.
Według Wikipedii jest to 7 kolorów.
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)
Zasady
- Program musi wypisać „Hello World”. (Nie musi to być tekst, ale musi być rozpoznawalny jako „Hello World”)
- Każda litera musi być innego koloru.
- Kolory mogą być w dowolnej kolejności.
- Musisz użyć każdego z siedmiu kolorów przynajmniej raz. (Możesz użyć więcej niż podane kolory)
- W żadnym wypadku nie można używać języków znaczników .
Zwycięzcą zostaje ten, kto ma najmniejszą liczbę znaków ORAZ przestrzega zasad
Bonus -1 znak, jeśli jest napisany w DART
Wyłonię zwycięzcę 11 stycznia (jeśli pamiętam; D).
Powodzenia
ZWYCIĘZCY
Popełniłem błąd D :, zaktualizowałem zwycięzców.
1. miejsce stranac - Python, 60 znaków
2. miejsce Ilmari - Karonen Perl + GD, 146 znaków
Najkrótsza długość przy zachowaniu wszystkich zasad.
Brownie wskazuje JiminP za odpowiedź DART.
źródło
H
jest drukowany przy użyciu kodu ucieczki dla koloru czarnego, więc nie jest widoczny na większości terminali.Matematyka
Wiem, wiem, to nie jest zgodne z zasadami .. ale musiałem spróbować bawić się funkcjami przetwarzania obrazu Mathematica.
Zrzut ekranu:
źródło
Haskell, 88 znaków
Zauważ, że używa to kolorów zacisków ANSI, których jest tylko 6 i mogą one nie pasować dokładnie do tych podanych (zależy to od ustawień terminala), więc tutaj trochę wyginam reguły.
Nieco dłuższa wersja z prawie poprawnymi kolorami, 107 znaków
Ta wersja używa kolorów xterm zamiast ANSI. Nie opiera się to na żadnych niestandardowych paletach i wykorzystuje najbliższe kolory, jakie mogłem znaleźć w 256-kolorowej palecie xterm.
źródło
Python, 261 znaków
Dokładnie implementuje specyfikację, generując obraz ppm. Oto wynik przekonwertowany na gif i powiększony o współczynnik 4:
źródło
n=255;C=((n,0,0),(n,127,0),(n,n,0),(0,n,0),(0,0,n),(111,0,n),(143,0,n))
Terminal Perl -> ANSI, 53 znaki
Daje to dokładnie taką samą wydajność jak rozwiązanie Hammar Haskell . Używa
say
, więc potrzebuje perla 5.10+ i-M5.010
(lub-E
). Dla starszych perls, wymienićsay
zprint
. Trywialną redukcję o jeden znak można osiągnąć zastępując\e
dosłowny znak ESC, ale znacznie utrudni to odczyt i edycję kodu.Edycja: Dodano dwa znaki, aby dokładnie pasowały do wyników Hammara i faktycznie pokazywały wszystkie sześć możliwych kolorów terminalu. (We wcześniejszej wersji jedynym znakiem wydrukowanym w kolorze 6 = cyjan była spacja).
Zrzut ekranu:
Edycja 2: Jeśli dozwolone jest używanie niestandardowej palety terminali (i podkreślenia dla spacji), mogę łatwo odtworzyć dokładne kolory podane w specyfikacji za pomocą zaledwie 50 znaków:
Zrzut ekranu:
źródło
Perl -> HTML, 99 znaków
Zrzut ekranu:
HTML prawdopodobnie nie przejdzie żadnych walidatorów, ale powinien być zrozumiany przez prawie wszystkie przeglądarki. Ten kod nie wyświetla dokładnie wymienionych kolorów RGB, ale jest bardzo blisko. W szczególności kolory liter to:
Wyjście wygląda o wiele ładniej na czarnym tle, ale wyraźne wydrukowanie
<body bgcolor=black>
kosztuje mnie 28 dodatkowych znaków. Zamiast tego możesz dostosować ustawienia przeglądarki, aby uzyskać ten sam efekt. :-)źródło
Perl + GD, 146 znaków
Zgodnie z komentarzami do mojej drugiej odpowiedzi , oto rozwiązanie, które bezpośrednio tworzy plik obrazu przy użyciu biblioteki GD:
A oto wynik:
Ponownie użycie czarnego tła wyglądałoby lepiej, ale kosztowałoby mnie 29 znaków (
$m->bgcolor(0,0,0);$m->clear;
).Edycja: nauczyłem się, jak ogolić 20 znaków przez (ab) przy użyciu pośredniej notacji obiektów i kilku innych poprawek. Nowy kod emituje ostrzeżenie, ale nadal działa poprawnie.
źródło
Postscript
155143Zależy to od zdolności Ghostscript do „stwierdzenia”, że Palatino jest skrótem od Palatino-Roman.
źródło
Niektóre różne podejścia do tego celu
Postscriptum
Po pierwsze: najkrótszy ( 89 ):
Bez golfa:
To ciągle zmienia kolor w kierunku x za pomocą przestrzeni kolorów hsb. (Pomysł użycia kolorów hsb i kshow przypisuje się luserowi droogowi - patrz jego wpis!) Nie używa dokładnie siedmiu kolorów podanych przez MrZandera.
Ograniczając się do kolorów MrZandera, docieram tam używając 141 znaków:
To koduje wartość odcienia kolorów MrZandera jako jeden bajt w drukowanym zakresie ASCII. Ten bajt jest tłumaczony na wartość odcienia w zakresie od 0 do 1, odejmując 32 i dzieląc przez 166. Po każdym znaku ciągu „Hello World” następuje jego zakodowana wartość odcienia.
Bez golfa:
DO ZROBIENIA : Coś jest nie tak z kolorami.
źródło
Trochę oszukiwania, ale rozwiązać problem
Bash + Ruby (potrzebuje
lolcat
klejnotu)źródło
Dart do HTML,
135134-1 = 133main(){for(var s="Hello World",i=0;i<11;print("<font color=#${'F00F60FB0FF06F00F00B606B00F60F90F'.substring(i*3,i*3+3)}>${s[i++]}"));}
Czy istnieje sposób pokolorowania tekstu bez użycia języka znaczników? Nie mogę testować płócien ...
źródło
Wiem, że jest napisane „bez znaczników w żadnym wypadku”, ale chciałbym przesłać ten CSS jeden na 468 znaków:
Żadna stylizacja nie jest wykonywana przy użyciu znaczników.
źródło
Rubin
242 bardziej proceduralny sposób:
Jeśli uda mi się wymyślić lepszy sposób na generowanie kolorów, zrobię to. Kilka środkowych zrobiłem trochę prób i błędów, aby zbliżyć kolory.
źródło