Napisz program, który nie pobiera danych wejściowych i drukuje Hello, World!
na standardowe wyjście lub najbliższą alternatywę dla twojego języka. Problem polega na tym, że każda linia w twoim programie musi zawierać tylko drukowalne znaki ASCII i musi być uporządkowana leksykograficznie, inaczej sortowana.
Oto wszystkie 95 znaków ASCII do wydruku w kolejności:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Na przykład linia !!A0~
byłaby nieprawidłowa, ponieważ A
i 0
są w porządku. Linia !!0A~
byłaby ważna.
Każda linia w twoim programie może mieć dowolną długość i może być dowolna liczba linii. Puste linie są uważane za posortowane. Każda nowa linia w twoim programie musi być taka sama (bez miksowania \n
i \r\n
). Zakładki i inne niedrukowalne znaki ASCII są zabronione.
Ze względu na popularny popyt warunki wygranej zostały zmienione:
Zgłoszenie z najmniejszą liczbą linii wygrywa. Tiebreaker przechodzi do najkrótszego programu (znaki nowej linii liczą się jako pojedyncze znaki).
Hello, World!
Wyjściowy powinien być tylko opcjonalny znak nowej linii. Zauważ, że HQ9 + jest nieprawidłowy, ponieważ generuje dane wyjściowe hello, world
. Mogę zabronić używania języków podobnych do HQ9 +, które mają jeden znak „Witaj, świecie!” polecenia ze względu na ich trywialność.
Wskazówka:
Jest to zdecydowanie możliwe w Unary i Lenguage , choć niezbyt zwięźle.
źródło
Odpowiedzi:
Zagłówki , 1 linia, 366 bajtów
Headsecks to trywialna zamiana Brainfuck, w której jedyną rzeczą, która się liczy, jest punkt kodowy modulo 8. Odpowiednikiem Brainfuck jest jedynie
Na szczęście to naiwne podejście po prostu pasuje. Istnieje pewien potencjał do gry w golfa w dół bajtów, ale może to być trudne.
Testowane przy użyciu tego interpretera języka Python .
Generowanie kodu
źródło
/// , 7 linii, 22 bajty
Rzadka szansa na współzawodnictwo /// (o ile nikt nie zaczyna od Unary i Lenguage ...).
Kod najpierw napotyka a
/
i analizujejako instrukcja zamiany, która usuwa wszystkie nowe wiersze z pozostałej części programu. Następnie program po prostu czyta
który jest drukowany dosłownie, ponieważ nie zawiera żadnych dodatkowych ukośników.
źródło
JavaScript (
676662 linie,227269 bajtów)(Uwaga: testowane tylko na Firefox 36 i Safari 8, zawiera niewielkie funkcje ES6 (
Set
klasa))Powyższy kod zasadniczo wykonuje:
Oczywiście
alert
nie jest posortowane. Zamiast tego musimy wygenerować instrukcję jako ciąg znaków i „ewaluować” ją:Jak wygenerować ciąg? ES5 obsługuje kontynuację linii, dzięki czemu
Ale kod znakowy
\
pojawia się przed wszystkimi małymi literami, więc musimy wygenerować małe litery za pomocą innych metod.Pożyczamy tutaj pomysł na JSFuck . Małe litery użyte w oświadczeniach ostrzegawczych to:
wszystkie z nich można wyodrębnić ze znaków standardowych obiektów, które można wyrazić w postaci posortowanej sekwencji:
Jak oceniamy ciąg? Z pewnością nie możemy używać,
eval(s)
ponieważ nie jest posortowane. Alternatywnie możemy użyćFunction(s)()
, ale nie możemy użyć,Function
ponieważ nie jest również posortowane. JednakFunction
jest konstruktor wszystkich funkcji, co oznaczaSet.constructor === Function
.Dodanie identyfikatora
constructor
powoduje, że lista małych liter staje się:które na szczęście nadal mogą być generowane przez
"truefalseundefinedfunction"
:Po wstępnym sprawdzeniu powyższy kod powinien wyglądać następująco:
Aktualizacja: Zmiana nazwy
E
,L
,O
,R
,T
do różnych powtórzeniu$
zredukować 4 linie.źródło
=Z[3*7]
można zapisać jako,=Z[~-22]
że wystarczy tylko jeden podział linii zamiast dwóch.Bezsenność , 4 linie, 59 bajtów
Ten program jest generowany przez optymalizację pod kątem liczby linii.
10 linii, 43 bajty
Powyższy program jest generowany przez optymalizację liczby bajtów.
źródło
Cygwin bash, 16 linii, 60 bajtów
Działa to tylko z powodu nazwy pliku bez rozróżniania wielkości liter w systemie Windows oraz faktu, że Cygwin wyszukuje narzędzia bez rozróżniania wielkości liter, nawet jeśli nie ustawisz rozpoznawania ścieżki bez rozróżniania wielkości liter.
Zwróć na to uwagę
ECHO
na końcu.źródło
> <> , 6 linii, 111 bajtów
Mam problem z graniem w dodatkową linię, ale w każdym razie cieszę się, że pokonałem metodę 7-liniową.
Wyjaśnienie
> <> to oparty na stosie język 2D, w którym instrukcje są pojedynczymi znakami, a przepływ programu może być w górę, w dół, w lewo lub w prawo.
"
Instrukcja przełącza ciąg parsowania, pchanie znaki aż do zamknięcia"
jest spełniony, ale ze względu na charakter> <> nie ma czegoś takiego jak „multi-line ciąg parsowania” jak z ciągów CJam lub potrójnymi cudzysłowami Pythona. Okazało się to być poważnym problemem, ponieważ rozpoczynanie i kończenie linii za pomocą"
a posiadanie innych znaków między (np."some chars"
) Jest niedozwolone!Należy pamiętać, że
/
i\
odzwierciedla przebiegu programu, więc faktycznie wykonać pierwszą linię następnie wszystkie linie w odwrotnej kolejności, a większość linii są faktycznie wykonywane w kierunku do tyłu!Na marginesie, oto zabawna próba>> <> najmniej bajtów (23 wiersze, 47 bajtów):
źródło
CJam,
54 wiersze, 162 bajtyTaka sama liczba linii jak bezsenność! (ale o wiele więcej bajtów)
Wypróbuj online .
Wyjaśnienie
Następnie CJam automatycznie drukuje stos.
Dzięki @Optimizer za przypomnienie mi, że
Sc
działa, bo inaczej sięSX|
nie powiedzie (robi setwise lub zamiast tego, dając tablicę składającą się ze spacji i 1).źródło
> <> (Ryba) , 5 linii, wiele bajtów
Kod jest bardzo długi, kiedy mówię,
[6535529689086686142930090 '+' signs]
aw[6535529689086686142930090 'd' characters]
pierwszym wierszu kodu mam na myśli dosłownie6535529689086686142930090
znaki plus w rzędzie!(I w poniższych wierszach dodaj niezbędne spacje przedrostkowe.)
Krótsza, testowalna alternatywa, która drukuje tylko
Hi
:Metoda:
:1(?;:882**%:o-288**,
.(Za pomocą tej metody możemy wydrukować dowolny ciąg znaków o długości 2+).
źródło
[6535529689086686142930090 '+' signs]
i[6535529689086686142930090 'd' characters]
dosłownie w pierwszym wierszu kodu." (Jeśli niejasne, co rozumiem przez to, sprawdź drugą część kodu.)PHP (7/17 wierszy, 36/59 bajtów):
Ze względu na liczbę nieprawidłowych odpowiedzi przepisałem tę odpowiedź.
Wersja przeglądarki? Odszedł.
Ale mam 2 rozwiązania, oba oparte na bitowym
xor
(^
) ciągach w PHP.To niezwykle potężne rozwiązanie! Czasami pozwala zaoszczędzić dużo bajtów.
Po pierwsze, najkrótsza odpowiedź:
Wiem, wygląda okropnie, ale działa!
Następny zależy od nowego wiersza.
Tak, używa znaku nowej linii (
\n
wymagany jest styl / UNIX)!Nowe wiersze na tym są wymagane do działania.
To nie jest idealne, ale działa!
Obie odpowiedzi były oparte na @ MartinBüttner „s rozwiązania :
Specjalne podziękowania dla @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ , @CJDennis , @ MartinBüttner i @skagedal za wykrycie wszystkich moich błędów i za ich sugestie.
źródło
Hello , Wor l d !
. Zwróć uwagę na dodatkowe spacje! Niestety nie jest to prawidłowa odpowiedź.<?php
jest nieprawidłowa! Jednak wybaczę ci to! OK, właśnie przetestowałem,<?Php
który działa, więc właśnie dowiedziałem się, że znacznik początkowy nie rozróżnia wielkości liter!"!<br
- to nie jest posortowane. Drugi ma wiersz 10:."!
- nieposortowany.Pyth, 7 linii, 23 bajty
Całkiem proste, wystarczy użyć ciągu wielowierszowego i usunąć znaki nowej linii.
Wypróbuj tutaj.
źródło
Dalej, 41 linii, 143 bajty
Wypróbuj online.
Jestem z tego bardzo dumny. Wyciągnąłem to dość szybko, gdy znalazłem, że mogę to zrobić, ponieważ Google szukało języków bez rozróżniania wielkości liter i już znam Fortha przyzwoicie. Niemal na pewno można go skrócić, zarówno bajtów, jak i linii. Sugestie są mile widziane. :RE
Ten program zasadniczo wypycha wartość dziesiętną każdego znaku ASCII, a następnie drukuje każdy. Podczas pisania próbowałem zoptymalizować, dlatego jest mniej czytelny, niż bym chciał.
źródło
Emit
przewody nie działają, tak jaki
(105) jest mniejszy niżm
(109).Cudowny, 9 linii, 94 bajty
Sprawdź to online tutaj.
Using spaces for blank cells
musi zostać sprawdzone.Wizualna reprezentacja źródła:
Objaśnienie: Każda wartość szesnastkowa w tym programie przesuwa się w dół o każdy „tik” (chyba że jest włączony
\\
, w takim przypadku przesuwa się w prawo).++
zwiększy wartość,--
zmniejszy, nie~~
zastosuje bitów itp. Wartości, które spadają z dołu są drukowane jako znak ASCII.Na przykład: W
33
górnym rogu pojawi się(((0x33 +1 +1) << 1) +1 +1 = 0x6C (l)
.źródło
Perl, 17 linii
źródło
Rebol - 15 linii (51 bajtów)
Słowa REBOL-są niewłaściwe (np.
PRINT
,Print
Aprint
to wszystko wywołać tę samą funkcję).Powyższy kod posprzątał:
NB.
sp
zwraca znak spacji !źródło
{
nie może być wcześniejszy niż jakiekolwiek litery.{,}
. To jest terazSp + 12
(ponad 3 linie), co odpowiada znakowi spacji + 12 (tj. Przecinek)Unary , 1 linia, dużo bajtów
Każda postać w tym programie jest
0
. Źródło jest za długie, aby je tutaj wstawić, ale składa się z ciągu wielu zer:To jest reprezentacja dziesiętna dla tej liczby binarnej:
Który został stworzony z tego programu BrainF ***:
Zobacz, jak to wygenerowałem: http://ideone.com/lMT40p
źródło
Partia - 39 linii (202 bajty)
Chciałem zmniejszyć rozmiar, umożliwiając opóźnioną ekspansję, uruchamiając kod w
cmd
wywołaniu za pomocą/v on
przełącznika, ale nie mogłem ominąć wszystkich karatów.Bez nowych linii (i karatów, aby uciec przed nowymi liniami):
źródło
Ruby, 19 linii, 95 bajtów
Prawdopodobnie drugie najtrudniejsze ograniczenie kodu dla Ruby, jakie widziałem na tej stronie, po potworności tutaj .
Edycja dla wyjaśnienia: Jedyną posortowaną metodą wyjściową Ruby jest
<<
metoda STDOUT. Niestety, stała dla STDOUT jest$>
i>
jest wyższa niż ASCII niż większość symboli, więc tak naprawdę nie można wywołać dla niej metody. Potrzebujemy wieloliniowej instrukcji przypisania, aby przekształcić ją w bardziej zrozumiałą nazwę zmiennej$;
(średnik jest wciąż dość wysoki, ale większość zmiennych tej postaci jest albo nieprzypisywalna, albo może być tylko ciągiem znaków).Symbole (
:Wor
itp.) To najłatwiejszy sposób na dosłowność i nie widzę sposobu na usunięcie znaków nowej linii z łańcucha, więc potrzebuję wielu instrukcji drukowania. Spacja i interpunkcja nie mogą być literałami symboli, ale na szczęściechr
metoda na liczbach jest legalna, więc mogę uzyskać znak z jego wartości ASCII.::
jest alternatywnym sposobem wywoływania metod. Spacja jest trudna, ponieważ nie mogę pisać32
, więc odejmuję 1 od 33 i przypisuję ją do zmiennej.źródło
Siatkówka, 12 linii, 29 bajtów (niekonkurujące)
Język jest nowszy niż wyzwanie.
Wypróbuj online
źródło