Alfanumeryczny Hello World [zamknięte]


43

Twoim celem jest napisanie „Witaj, świecie!” (minus cytaty). To , więc najwięcej głosów wygrywa. Długość kodu zostanie użyta do zerwania więzi.
Wszystko idzie, o ile jest zgodne z następującymi zasadami:

  • Wszystkie znaki muszą być literami lub cyframi, więc można używać tylko znaków w ciągu „abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789”.
  • Cały używany kod musi znajdować się w jednym pliku, z wyjątkiem importowanych modułów / klas / niezależnie od tego, jak są one nazywane w twoim ulubionym języku.
  • Dozwolone są tylko standardowe biblioteki / frameworki dla wybranego języka (na przykład moduł Math Pythona jest dozwolony, ale Numpy, Scipy i Pygame nie są). Pozwolę TkInter, ponieważ jest to de facto standard GUI w Pythonie.
  • Nie jest dozwolone wprowadzanie danych, czy to odczytywania ze standardowego wejścia, odczytywania pliku, wysyłania obrazu, czy odczytywania z Internetu.

+10 punktów brownie, jeśli dowiesz się, jak to zrobić w Javie bez zginania reguł.


Na swoje oceny, przygotuj się, koduj!

EDYCJA: nawiasy klamrowe ({}), nawiasy kwadratowe ([]) i nawiasy (()) są dozwolone, ponieważ byłoby to prawie niemożliwe w większości języków bez nich. Usuwam także zasadę limitu znaków. Mam nadzieję, że dzięki temu będzie ciekawiej.

EDYCJA ^ 2: dozwolona jest również biała spacja. Przepraszam, mój mózg nie działa poprawnie. >. <


1
Od ciebie zależy mi tylko na tym. Co z białymi znakami?
Geobits

1
Och, właściwa biała przestrzeń. Mój mózg najwyraźniej dzisiaj nie działa właściwie. To powinno być dozwolone. Chwileczkę, pozwól mi naprawić reguły.
wec

8
Więc nie ma operatorów? A co najważniejsze nie ;? Jak mogę coś napisać w C?
Oberon,


3
+1 za wymyślenie, jak w naturalny sposób wykluczyć J: 72 101 108 108 111 44 32 87 111 114 108 100 33{a.wymaga końca okresu do końca, a ścieżka przez u:podobnie wymaga dwukropka. Bez .i :jesteśmy niczym.
algorytm

Odpowiedzi:


103

Perl

Niektórzy twierdzą, że perl jest językiem pełnym ascii noise i przypadkowych symboli, takich jak $... To nieprawda: P

s zzHelloq worldmz and s zqzchr 44ze and s zmzchr 33ze and print

Podzielmy to na podwyrażenia:

(s zzHelloq worldmz) and (s zqzchr 44ze) and (s zmzchr 33ze) and (print)
Powinno być oczywiste, że wykonuje się od lewej do prawej, o ile każde wyrażenie zwraca wartość true. Ale czym, u licha, jest s zqzchr 44ze?

W Perl, istnieje grupa „kosztorys przypominające operatorów” , która obejmuje q(str), qw(li st), /regex/, s/from/to/między innymi. Okazuje się, że wszystkie te operatory mogą używać prawie dowolnego znaku jako ogranicznika, z kilkoma osobliwościami: otwieranie paretez musi być zamykane przez pasujący nawias zamykający, a jeśli chcesz użyć litery jako ogranicznika , musisz wstawić spację po literze operatora (aby ujednoznacznić ją od samego słowa).

W tym przypadku widzimy trzy zastosowania s///operatora (podstawienie wyrażenia regularnego):

s//Helloq worldm/
s/q/chr 44/e
s/m/chr 33/e
Wszystko ograniczone przez znak z. /eFlaga na dwóch ostatnich powoduje zastąpienie należy interpretować jako kod zostać ocenione, a dosłownego tekstu.

Dość dobrze znanym faktem o perlu jest to, że większość operacji domyślnie działa na $_wbudowanej zmiennej, chyba że określono inaczej. Wszystkie te trzy podstawienia i printdziałają $_w tym przypadku, więc najpierw wstawiamy słowa Hello world do zmiennej, następnie poprawiamy interpunkcję za pomocą liczbowych wartości ascii znaków, a następnie drukujemy zawartość zmiennej.


46
+1 Nie wiem, co tu się do diabła dzieje, ale działa!
piskliwy kostnica

95
@ squeamishossifrage To może być motto perla
mniip

6
Gdybyś mógł, czy dodałbyś małe wyjaśnienie?
ace_HongKongIndependence

10
W żadnym wypadku nie jestem ekspertem, ale w perlu zwykle zamiennik jest wskazywany przez s/PATTERN/REPLACEMENT/FLAGS, ale w rzeczywistości możesz użyć większości wszystkiego, co chcesz zamiast ukośników. W tym przypadku kod używa „z” zamiast ukośników i zmienia (nic) w „Helloq Worldm”, a następnie zastępuje „q” dla chr 44 (używając flagi \ e do oceny WYMIANY aka „chr 44” jako wyrażenia), która jest „, „. Następnie zamienia „m” na chr 33, a „!” I drukuje.
Amory

3
@ace w operatorze cytując jak, na przykład q//, każdy ogranicznik może być stosowane q!! q** q\\ q;;. Kilka wyjątków są takie, że aby zamknąć (użyć ), q() q[] q{} q<>i że użycie alfanumeryczne jako ogranicznik, powinno być oddalone od operatora, aby uniemożliwić niejasności, np q qq, q 66. Te same sztuczki dotyczą innych operatorów podobnych do cytatów.
mniip

73

do

int main(void) {
  if (putchar(72))
    if (putchar(101))
      if (putchar(putchar(108)))
        if (putchar(111))
          if (putchar(44))
            if (putchar(32))
              if (putchar(87))
                if (putchar(111))
                  if (putchar(114))
                    if (putchar(108))
                      if (putchar(100))
                        if (putchar(33)) 
                        {
                        }
}

4
Niesamowite! Można to zrobić w C. I myślałem, że wygrałem ...
Level River St

2
@ace Tylko jeśli masz zdefiniowane przypadki. Możesz łatwo przepisać to jako switch(putchar(72)){}switch(putchar(101)){}itd.
Comintern

27
+1 zaputchar(putchar(108))
Ilmari Karonen

2
Brakuje tylko „if (putchar (44))” dla przecinka.
Desty

1
Dobrze zauważony, nie jestem pewien, jak przegapiłem przecinek w pytaniu. Naprawiony.
mattnewport

49

(edytuj - BBC basic przeniósł się do osobnej odpowiedzi zgodnie z sugestią. Większość głosów w tej sprawie zdecydowanie dotyczy odpowiedzi LOGO).

LOGO

Tłumacz na http://www.calormen.com/jslogo/#

TO h        pd  fd 100 rt  90  pu  fd 50  rt 90  pd  fd 100  rt 180 fd 50  lt 90  fd 50  rt 90  pu END 
TO e        pu  fd 25  rt  90  pd  fd 25  rt 90  arc 270 25  lt 90  fd 25  lt 90  pu END  
TO l        pd  fd 100 pu  END  
TO o        rt  45 fd  35  pd  arc 360 25  lt  45  pu END 
TO comma    pd  rt 90  arc 90  15  lt  90  pu END 
TO w         l  rt 180 l   pd  lt  135 fd  35  rt  90  fd 35  lt 135  l  END  
TO r        pd  fd 25  rt  90  pu  fd  25  rt 180  arc 180 25 rt 90 END 
TO d         o  rt 135 fd  35  lt  135  l  END      
TO exclaim arc 360 5   fd  10  l  END 

clearscreen  
setpencolor 4 pu 
setxy 0 150      h 
setxy 100 150    e  
setxy 200 150    l 
setxy 250 150    l 
setxy 300 150    o 
setxy 350 150    comma  
setpencolor 1 
setxy 0 0        w 
setxy 100 0      o 
setxy 200 0      r  
setxy 300 0      l 
setxy 350 0      d 
setxy 450 0      exclaim 
fd 100

Wyjście (zielony trójkąt to kursor żółwia)

wprowadź opis zdjęcia tutaj


2
Powinieneś podzielić tę odpowiedź na dwie części.
Justin

@WallyWest Prawie nie znam języka, ale było to narzędzie do pracy. Możesz także wydrukować tekst (na rysunku jest to etykieta), ale potrzebujesz do tego cudzysłowu (myślę, że wymagany jest tylko cytat otwierający, a cytat zamykający jest opcjonalny.)
Level River St

1
+1 za narysowanie go zamiast drukowania słów.
wec

@steveverril Drugi cytat byłby właściwie błędem składni.
Tomsmeding

29

Jabłkowy

Brak nawiasów [], nawiasów klamrowych {}lub nawiasów ()w tym:

set s to ASCII character 72
set s to s as list
set end of s to ASCII character 101
set end of s to ASCII character 108
set end of s to end of s
set end of s to ASCII character 111
set end of s to ASCII character 44
set end of s to space
set end of s to ASCII character 87
set end of s to item 5 of s
set end of s to ASCII character 114
set end of s to third item of s
set end of s to ASCII character 100
set end of s to ASCII character 33
display dialog s as text

Dane wyjściowe to: wprowadź opis zdjęcia tutaj


10
Nie do wiary! (Mam na myśli napisanie słowa „znak” w całości!) Teraz rozumiem, co oznaczają, że Jabłka są drogie. Tylko żartuję, +1 za coś innego :-)
Level River St

10
AppleScript jest absurdalnie gadatliwy, ale w rezultacie jest to jeden z najbardziej zrozumiałych języków programowania dla laika.
Jonathan Van Matre

3
@JathanathanVanMatre Trudne do napisania, łatwe do odczytania
Cyfrowa trauma

2
nawet C jest łatwiejszy do odczytania ...
Sarge Borsch

1
@Cruncher - To proste. Polecenie set s to s as listprzekształca się "H"w {"H"}(listę). W innych językach, takich jak Java, jest to o wiele bardziej skomplikowane.
Nicolas Barbulesco

24

Grzmotnąć

Ten rodzaj działa, jeśli zmrużysz oczy:

echo NN i NN i i i iNN NNi i i i i i i NN i NN i i i i i i i NNi i i NN NN
echo NN i NNi i i i NN NN i i i i i i iNN i NN i i i i i i i NN i i iNN NN
echo NN i NN iNNNNi NN NN iNNNNi i i i NN i NN iNNNNi NN NN iNN iNNN NN NN
echo NNNNNNN NN iNN NN NN NN iNN i i i NN i NN NN iNN NNN iN NN NN iNNN N
echo NN i NN NNNNNN NN NN NNi NN i i i NN N NN NNi NN NN i i NN NNi iNN N
echo NN i NN NN i i NN NN NN iNN i i i NNN NNN NN iNN NN i i NN NN i NN
echo NN i NN iNNNi iNN NN iNNNNi N i i NN i NN iNNNNi NN i i NN iNNNN N NN
echo i i i i i i i i i i i i i i N

1
działa to również w pliku bat / cmd systemu Windows
phuclv

banner Hello Worldlubfiglet Hello World

2
@professorfish Najtrudniejszą częścią tego wyzwania jest zdobycie ,i !. W przeciwnym razie użyłbym zwykłego starego echo.
Digital Trauma

@DigitalTrauma och, przepraszam, nie widziałem tego ... trochę wolno

19

base64

SGVsbG8sIFdvcmxkIQ

Spełnia oryginalne zasady.


2
Czy base64 jest językiem? A jaka jest twoja produkcja? Czy ma poprawną wielkość liter?
Level River St

23
Jasne, że to język, po prostu nie jest kompletny w Turinga. Również base64decode.org
Kendall Frey

1
Ha ha. W przypadku tej odpowiedzi daj +1 komentarzowi, ale nie swojej odpowiedzi. Może twoja odpowiedź później, jeśli mi się spodoba.
Level River St

2
@ Nee, którego użyłeś"
mniip

2
@KendallFrey Zgodnie z tą logiką, base10 to język: 1234567890.
Cole Johnson

19

Pyton

Więc zakładamy, że wszyscy czytają poziomo? Dla tych użytkowników, którzy lubią czytać w pionie:

print chr(72) 
print chr(101)
print chr(108)
print chr(108)
print chr(111)
print chr(44)
print chr(32)
print chr(87)
print chr(111)
print chr(114)
print chr(108)
print chr(100)
print chr(33)

+1 i hahaha! To pytanie miało na początku tyle głosów negatywnych, ponieważ ludzie wierzyli, że jest to niemożliwe. Nie znam Pythona, ale biorąc pod uwagę wszystkie jęki, nie mogłem uwierzyć, że to takie łatwe w tak powszechnym języku.
Level River St

1
Właśnie napisałem dokładnie ten sam kod przed opublikowaniem tej odpowiedzi.
Odświeżiłem się,

1
@steveverrill Jęczenie nie było bez powodu. Nie ma tu ani jednej odpowiedzi, która byłaby
zgodna

1
@grovesNL Jeśli to sprawia, że ​​czujesz się lepiej, jest to pierwsza rzecz, do której kiedykolwiek użyłem Pythona. Spędziłem trochę czasu, przeczesując dokumenty, próbując dowiedzieć się, czy istnieje jakiś możliwy sposób, aby połączyć je w jedną linię przed opublikowaniem.
Geobits

@Geobits sys.stdout.writeto standardowy sposób wyświetlania tekstu bez znaków nowej linii w większości wersji Pythona (zachowanie w wersji 3.0 zostało nieco zmienione). Nie możemy tego zrobić tutaj z powodu okresów.
gajeNL

19

Polyglot: HQ9 +, H9 +, HQ9 ++, CHIQRSX9 +, HQ9 + B i HQ9 + 2D (1 bajt)

H

Dziękuję @victor za listę języków.


5
To jest poliglot. Działa również w H9 +, HQ9 ++, CHIQRSX9 +, HQ9 + B i HQ9 + 2D.
Victor Stafusa,

Jestem prawie pewien, że działa również w Hello.
wec

5
Działa w każdym wymyślonym przez Ciebie języku.
Zero Fibre

2
Nic nie wymyśliłem ...
Ismael Miguel

6
Niestety, wynikiem jest „hello, world” ( esolangs.org/wiki/HQ9%2B ) lub zgodnie z tym tłumaczem „Hello world”. ( almnet.de/esolang/hq9plus.php ) Aby uzyskać „Witaj, świecie!” może być konieczne kilkukrotne zwiększenie akumulatora.
tttppp

17

OMGROFL

Jestem wielkim fanem ezoterycznych języków. Na szczęście OMGROFL jest alfanumeryczny:

lol iz 72
rofl lol
lol iz 101
rofl lol
lol iz 108
rofl lol
rofl lol
lool iz 111
rofl lool
loool iz 44
rofl loool
loool iz 32
rofl loool
loool iz 87
rofl loool
rofl lool
lool iz 114
rofl lool
rofl lol
lol iz 100
rofl lol
lol iz 33
rofl lol
stfu

izPolecenie ustawia wartość zmiennej, w tym przypadku lol, looli looolsłużyć jako zmienne ...

Te roflecha polecenie odchodzący ASCII równoważne ilości przechowywanego w zmiennej.

stfuKomenda kończy program;)


haha, miło! Chciałem wypróbować wersję LOLCODE, ale język wymaga używania dwukropka i cudzysłowów do wymuszania znaków na znaki.
Jonathan Van Matre

17

COBOL

   ID DIVISION 
   DATA DIVISION 
   01  HELLOWORLDBINARY 
       05  HE                       COMP    PIC 9999 
       05  LL                       COMP    PIC 9999 
       05  OCOMMA                   COMP    PIC 9999 
       05  SPACEW                   COMP    PIC 9999 
       05  ORTEXT                   COMP    PIC 9999 
       05  LD                       COMP    PIC 9999 
       05  EXCLAMATION              COMP    PIC 9999 
   01  FILLER REDEFINES HELLOWORLDBINARY 
       05  HELLOWORLDTEXT                   PIC XXXXXXXXXXXXX
       05  FILLER                           PIC X 
   PROCEDURE DIVISION 
       MOVE 51333                   TO HE 
       MOVE 37779                   TO LL 
       MOVE 38507                   TO OCOMMA 
       MOVE 16614                   TO SPACEW 
       MOVE 38553                   TO ORTEXT 
       MOVE 37764                   TO LD 
       MOVE 23104                   TO EXCLAMATION 
       DISPLAY HELLOWORLDTEXT 
       GOBACK 

Wymagało pewnych zmian, aby stać się prawdziwie alfanumerycznym źródłem.

ID programu można usunąć. Otrzymasz wygenerowaną nazwę programu (patrz komunikaty).

PRZECHOWYWANIE-PRZECHOWYWANIE można upuścić. Znów kompilator jęczy.

Ponieważ w obu tych liniach wcześniej brakowało kropek / kropek, które nie są już istotne, ponieważ opisy zostały całkowicie pominięte, liczba komunikatów o błędach jest taka sama jak poprzednio i nadal nie wpływa na generowany kod dla programu.

Przy zmianie COMP-5 na COMP klauzule WARTOŚĆ nie są już dozwolone, ponieważ COMP 9999 ma tylko cztery cyfry dziesiętne, podczas gdy COMP-5 jest dwubajtowym plikiem binarnym z wszystkimi dostępnymi wartościami bitowymi.

Wartości w MOVE są wartościami dziesiętnymi, które dają wartości binarne, które dają pary znaków.

Mimo że pola COMP mają cztery cyfry i nie pozwalają na klauzule VALUE zawierające więcej niż cztery cyfry, możesz użyć więcej cyfr w MOVE o wartości dosłownej bez obcięcia w tym momencie ... nie pytaj mnie dlaczego. Opcja kompilatora DIAGTRUNC (którą wyłączyłem) wygeneruje dla nich diagnostykę ostrzegawczą.

Opcja kompilatora TRUNC (BIN) może być używana do traktowania COMP jako COMP-5, ale MOVE są innym sposobem na zrobienie tego.

Ponieważ jest to COBOL, wyjście musi być w DUŻYM PRZYPADKU (kłamstwo, ale dla zabawy).

HELLO WORLD!

OK, ustąpił, teraz produkuje:

Hello, World!

Które, ponieważ jest nieparzystą liczbą znaków, wymagało pewnych dalszych zmian, ponieważ w tym kompilatorze nie możemy mieć pól binarnych o nieparzystej liczbie bajtów. Spójrz na tę linię 13 Xs! Zwykle byłby zapisany jako X (13), ale może być tak, jak pokazałem ...

A ORTEXT jest potrzebny (lub nie OR, w każdym razie) jako nazwa, ponieważ OR jest słowem zastrzeżonym dla kompilatora (to znaczy OR, oczywiście).

Są to wartości EBCDIC, a nie ASCII, ponieważ działa on na pudełku obsługującym EBCDIC i Big Endian.

Och, COBOL wymaga wielu kropek / kropek. Zostawiłem je (są zbanowane), więc otrzymałem wiele kompilowanych wiadomości. Po prostu powiedział kompilatorowi, żeby wygenerował kod (żaden z komunikatów nie dotyczy kodu obiektowego).

Nawet bez DIAGTRUNC wiadomości mają teraz maksymalnie 17 ...

  1  IGYDS1003-E   A "PROGRAM-ID" paragraph was not found. 
  Program-name "CBLNAM01" was assumed. 

  2  IGYDS1082-E   A period was required.  A period was assumed 
  before "DATA". 

  3  IGYDS1082-E   A period was required.  A period was assumed 
  before "01". 

                   Same message on line:     11 

  3  IGYDS1040-E   A data item was found in the "DATA DIVISION" 
                   before a section header was encountered. 
                   "WORKING-STORAGE SECTION" was assumed. 

  4  IGYDS1082-E   A period was required.  A period was assumed 
  before "05". 

                   Same message on line:      5      6      7      8
                   9     10     12     13 

 14  IGYDS1082-E   A period was required.  A period was assumed 
 before "PROCEDURE". 

 15  IGYPS2145-E   A period was required.  A period was assumed 
 before "MOVE". 

 23  IGYSC1082-E   A period was required.  A period was assumed 
 before "END OF PROGRAM". 

1
Nie sądzę, że -jest to dozwolone
mniip

1
Słuszna uwaga. Ustalenie. Zwyczaje.
Bill Woodger

@mniip Mmmm .... trochę trudniejsze ... Będę musiał naprawić PAMIĘĆ PRACY później. Muszę teraz wyjść ...
Bill Woodger

1
Śmiałem się z „Ponieważ jest to COBOL, wyjście musi być w DUŻYM PRZYPADKU”. Dobra robota!
Jonathan Van Matre

15

Ruby (używając tylko alnumów i białych znaków)

putc 72
putc 101
putc 108
putc 108
putc 111
putc 44
putc 32
putc 87
putc 111
putc 114
putc 108
putc 100
putc 33

Wynik: Hello, World!


15

JavaScript

with (function SGVsbG8sIFdvcmxkIQ(){}) atob(name)

Testuj za pomocą konsoli przeglądarki.


14

JavaScript

with (String) with ([]) {
    push(fromCharCode(72))
    push(fromCharCode(101))
    push(fromCharCode(108))
    push(fromCharCode(108))
    push(fromCharCode(111))
    push(fromCharCode(44))
    push(fromCharCode(32))
    push(fromCharCode(87))
    push(fromCharCode(111))
    push(fromCharCode(114))
    push(fromCharCode(108))
    push(fromCharCode(100))
    push(fromCharCode(33))
    alert(join([]))
}

1
ARGH! Uderzyłem w to samo rozwiązanie, ale zdecydowałem, że ponieważ jest druga w nocy, powinienem iść do łóżka i wysłać to rano. Uznanie dla ciebie!
DocMax

12

ferNANDo

h E R
e I S
h E
l L O
w O
r L
d U S
i N G
o N L
y L E
t T E
r S

H e L L o W O R
L d h E L l O w
O r l D h e L L
O w o R l d H E
L l o W o r l d
H E l L o w O R
L D h E L L O W
O r L d H e l l
O w o R l d h e
L l o w O R l D
H e l L o w O R
L d h E L l O W
O R l D H E L l
O w O
r L d

Brakuje przecinka i!
VoronoiPotato

@VoronoiPotato: działa tutaj dobrze
marinus

ups przepraszam: X
VoronoiPotato

12

Rebol

Rozwiązanie tylko alfanumeryczne:

prin quote Hello prin add space 12 prin space prin quote World print add space 1

Powyżej znajduje się aktualizacja, która korzysta z doskonałej sugestii Dr Rebmu add space 1(która produkuje !), aby dostać się do wszystkich postaci.

Poniżej znajduje się oryginalna wersja:

prin quote Hello prin pick mold system 264 prin space prin quote World print pick mold system 12

Krótsza wersja ze wspornikami:

print rejoin [quote Hello pick mold system 264 space quote World pick mold system 12] 

I jeszcze krótsza wersja z szelkami:

print join {Hello} join pick mold system 264 join { World} pick mold system 12

I najkrótsza wersja z nawiasami klamrowymi:

print rejoin [{Hello} pick mold system 264 { World} pick mold system 12]

Rebol używa nawiasów klamrowych {}do cytowania w wielu wierszach. Tak całkowicie zgodne ze zmianami zasad, ale niezupełnie w duchu (IMHO), jak moje pierwsze dwie odpowiedzi powyżej.


NB. Drukowanie !było uciążliwe!

Rebol zezwala i używa znaków interpunkcyjnych rutynowo dla nazw funkcji i typów danych. Tak więc opcje takie jak to-char 33lub to char! 33nie byłyby dozwolone zgodnie z zasadami (nawet jeśli te interpunkcje nie są operatorami jako takie).

Na szczęście znalazłem bezczelny sposób, zmieniając obiekt systemu Rebol: make object! [...]w sznurek i wiśnię go !z niego wybieram :)

Aktualizacja: A teraz również wybrałem przecinek z tekstu licencji w obiekcie systemowym.


1
!jest zabronione
gajeNL

2
@grovesNL - Rozwiązanie nie używa -lub !Więc może teraz usunąć głos w dół
draegtun

1
Brakuje przecinka
marniip

1
@mniip - Dzięki, przegapiłem to! Naprawiono teraz.
draegtun

1
Całkiem trudne, ale mogłeś po prostu dodać miejsce, by zdobyć postacie ... ;-) Zobacz rozwiązanie Rebmu , które włącza 46 znaków ...
Dr. Rebmu

12

do

Używa tylko znaków alfanumerycznych, spacji i nawiasów klamrowych {}, nawiasów kwadratowych [] i nawiasów ().

main()
{
        if(printf((long long []){0x202c6f6c6c6548}))
                if(printf((long long []){0x21646c726f57})){}
}

printf () akceptuje char * jako argument, ale ponieważ nie możemy użyć cudzysłowów ("), typecast ciąg znaków jako długą długą tablicę. Wartości tutaj widoczne to ciągi ASCII, w małym endianie (0x48 = H, 0x65 = e, 0x6c = l itd.) Przerzucam go na długi [], ponieważ w ten sposób mogę przekazać 8-bajtowy argument, a zatem użyć tylko dwóch wywołań printf () zamiast czterech.


To łamie zasadę nr 1
Timtech

1
Znaki, liczby, spacje i {} () [] są dozwolone.
pank4j

możesz rzucić int dosłowny na tablicę? Nigdy wcześniej tego nie widziałem
phuclv

Co to robi?
Nicolas Barbulesco

@ LưuVĩnhPhúc Tablica jest wskaźnikiem. Wskaźnik jest liczbą całkowitą.
patrz

11

BBC BASIC

Emulator na bbcbasic.co.uk

Oddzielić od mojej odpowiedzi LOGO.

Łatwa droga

Liczby po prawej to tylko kody ASCII. To jest tak samo jak drukowanie. Gdybym miał przecinek, mógłbym to zrobić w jednym wierszu ( VDU 72,101,108,etc.)

   10 VDU 72
   20 VDU 101
   30 VDU 108
   40 VDU 108
   50 VDU 111
   55 VDU 44
   60 VDU 32
   70 VDU 87
   80 VDU 111
   90 VDU 114
  100 VDU 108
  110 VDU 100
  120 VDU 33

Bardziej kreatywny sposób

    5 MODE 6
   10 READ B
   12 WHILE B
   15   PROC1(B)
   16   PRINT
   17   READ B
   18 ENDWHILE
   20 END

REM procedure prints first square on line, 
REM then calls itself recursively with A DIV 2 to print the next
REM VDU 17 tell VDU controller we want to change colour
REM Next line changes background colour. 
REM Then following line VDU 32 prints a space in that background colour.

  110 DEFPROC1(A)
  115 VDU 17
  120 IF A AND 1 THEN VDU VPOS DIV 6 EOR 133 ELSE VDU 128
  125 VDU 32
  130 IF A THEN PROC1(A DIV2)
  140 ENDPROC

REM binary bitmap data for each row, least significant at left
  150 DATA 463221
  160 DATA 332053
  170 DATA 332151
  180 DATA 332053
  190 DATA 2586485
  200 DATA 1048576
  210 DATA 4395895
  220 DATA 4527447
  230 DATA 4526935
  240 DATA 333143
  250 DATA 4420981
  260 DATA 0

wprowadź opis zdjęcia tutaj



11

DC

DC to idealne narzędzie do pracy.

5735816763073854918203775149089P

PKomenda DC wysyła jedną liczbę ze stosu i wysyła surową reprezentację komputera do STDIO. Widząc jako 5735816763073854918203775149089 = 0x48656C6C6F2C20576F726C6421, który jest reprezentowany jako 0x21, 0x64, 0x6C... = 'H', 'e', 'l'...w architekturze little-endian, wyprowadza Hello, World!.


Jak to działa? Czy mógłbyś dodać wyjaśnienie?
wec

1
Ani trochę. Wyjaśnienie zostanie dodane wkrótce.
Fors

2
+1. Możesz to zrobić heksadecymalnie, aby zaoszczędzić kilka znaków:16i48656C6C6F2C20576F726C6421P
Cyfrowa trauma

9

JavaScript!

I powiedzieli, że nie da się tego zrobić ... Żadnych operatorów przypisań, żadnych konkatenatorów, żadnych cytatów! Aaaa!

Nie bój się ... Siła jest withtobą ...

function w(x){
    with(document){
        with(String){
            write(fromCharCode(x))
        }
    }
}
w(72)
w(101)
w(108)
w(108)
w(111)
w(44)
w(32)
w(87)
w(111)
w(114)
w(108)
w(100)
w(33)

Output (on browser screen): Hello, World!

Powiedział „Bonus, jeśli możesz to zrobić w Javie”, a nie Javascript.
Almo

@Almo Nie zamierzałem tego robić w Javie ... Skupiłem się na JavaScript, który jest moją główną siłą tutaj na tej stronie ...
WallyWest

Ale powiedziałeś „I powiedzieli, że nie da się tego zrobić”, co, jak sądzę, odnosi się do układanki z premią za robienie tego w Javie. Wiele osób wciąż myli Javę z Javascriptem.
Almo

@Almo, użyłem tylko ogólnego powiedzenia ... A kiedy mam na myśli "JavaScript", zamierzam użyć JavaScript ... Zaufaj mi, nie planowałem iść na bonus ...
WallyWest

9

JavaScript

Aktualizacja: Udało się wyciąć grupę postaci, wprowadzając również funkcję Świata.

Kolejne rozwiązanie JavaScript, które zapisuje do pliku console.log:

function World() { with (World) return name }
function Hello() {}
with (console)
with (String)
with (Hello)
with (name)
with (concat(fromCharCode(44)))
with (concat(fromCharCode(32)))
with (concat(World()))
log(concat(fromCharCode(33)))

Inspirowany tym wpisem .

Najpierw definiuję funkcje o nazwie Hello and World. Zostanie to wykorzystane później.

Następnie zaczynam łańcuch zagnieżdżonych z. with (console)I with (String)są wykorzystywane tak, że mogę później invoke console.logi String.fromCharCodebez użycia kropki.

Plan polega na zbudowaniu łańcucha Hello, World!przez nadużywanie zagnieżdżonych za pomocą. Za każdym razem, gdy wywołuję concat (), wynikowy ciąg znaków będzie kontekstem w następnym with-block. Skracam się, aby szybko uzyskać "Hello"dostęp do namewłaściwości Hellofunkcji. Następnie łączę znaki przecinka i spacji za pomocą String.fromCharCode.

Następną sztuczką jest zdobycie "World"części ciągu. Nie mogę użyć tej samej metody, którą otrzymałem Hello, ponieważ nie mogę wywołać World.name. Zamiast tego umieściłem tę logikę w metodzie World i wywołałem ją.

Na koniec dołączam końcowy wykrzyknik i wysyłam wynik bezpośrednio do funkcji dziennika, którą jest oczywiście console.log.


7

Perl

W nowoczesnym Perlu (5.10 lub nowszym):

print q{Hello} and print chr 44 and print q{ World} and say chr 33

W starszym Perlu:

print q{Hello} and print chr 44 and print q{ World} and print chr 33 and print chr 10


Oba powyższe rozwiązania wykorzystują qoperator podobny do cytatu Perla i umożliwiają selektywne ograniczniki do cytowania łańcucha, np. q{} q[] q() q//

To rozwiązanie wymaga zmiany reguły, która zezwala na nawiasy klamrowe, nawiasy klamrowe lub pareny. Więc chociaż całkowicie poprawna, uważam, że mniipdoskonała odpowiedź Perla jest bardziej zgodna z duchem zasad (+1).

Jednak bez mniipodpowiedzi moje rozwiązanie można napisać w następujący sposób:

print q xHellox and print chr 44 and print q x Worldx and say chr 33

i choć trudniejsze dla oka działa.


1
Brakuje przecinka
marniip

1
@mniip - Jeszcze raz dziękuję. Dodałem teraz brakujący przecinek.
draegtun

Wygląda jak AppleScript bez gadatliwości
Ming-Tang

Na moim Macu pierwsza i trzecia linia Perla nie działają, działa tylko druga linia Perla. Mam Perla 5.16.2.
Nicolas Barbulesco

syntax error at -e line 1, near "say chr"
Nicolas Barbulesco

7

Perl

print chr hex for qw z48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21z

6

Pyton:

import antigravity 

powoduje „Witaj, świecie!” pojawiać się na ekranie. Nie wierzysz mi? Wypróbuj to sam! Ponadto tak naprawdę nie korzysta z sieci, otwiera przeglądarkę, która może wyszukać stronę internetową.


1
Mam ekran o wysokości 768 pikseli, więc „Witaj, świecie!” nie pojawia się na moim ekranie.
Olivier Grégoire

1
To nie pisze: „Witaj, świecie!” gdziekolwiek w moim polu widzenia. Ale to otwiera xkcd.com/353/ w Safari!
Nicolas Barbulesco

Nie używam teraz Internetu. Piszę w przeglądarce, która może połączyć się ze stroną internetową.
Nicolas Barbulesco

sciyoshi.com/2008/12/import-antigravity Kod wymaga pojawienia się Pythona 3, ale nie będzie działał w Pythonie 3 (chyba że zostało to przeniesione).
Marzec Ho

6

Biała przestrzeń

Okej, możemy użyć białych znaków. Używa tylko Space, Tab, LineFeedi ignoruje wszelkie inne znaki.

   	  	   
	
     		  	 	
	
     		 		  
	
     		 		  
	
     		 				
	
     	 		  
	
     	     
	
     			 			
	
     		 				
	
     			  	 
	
     		 		  
	
     		  	  
	
     	    	
	
  


Z komentarzem: S, Tlub Lśrodków Space, Tablub LineFeedodpowiednio.

S S S T S S T   S S S L
T   L
S S S S S T T   S S T   S T L
T   L
S S S S S T T   S T T   S S L
T   L
S S S S S T T   S T T   S S L
T   L
S S S S S T T   S T T   T   T   L
T   L
S S S S S T S T T   S S L
T   L
S S S S S T S S S S S L
T   L
S S S S S T T   T   S T T   T   L
T   L
S S S S S T T   S T T   T   T   L
T   L
S S S S S T T   T   S S T   S L
T   L
S S S S S T T   S T T   S S L
T   L
S S S S S T T   S S T   S S L
T   L
S S S S S T S S S S T   L
T   L
S S L
L
L

Z wyróżnieniem: http://en.wikipedia.org/wiki/Whitespace_(programming_language )#Sample_code


5

dc, (26 bajtów dla golfistów)

Białe spacje i []nawiasy są teraz dozwolone:

[Hello]n44P[ World]n33P[]p

Wynik:

$ dc <<< "[Hello]n44P[ World]n33P[]p"
Hello, World!
$ 

5

Rebmu , 46 znaków

pnUPPqHELLO01pnADsp12pnSPpnUPPqWORLD01pnADsp01

Silnie paraleluje rozwiązanie @ dragetun w Rebol (Ponieważ Rebmu jest narzędziem nauczania Rebol / Red, które jest „dialektem”, którego celem jest zwrócenie uwagi na języki poprzez kołysanie w Code Golf. :-P)

Jednak aby zdobyć brakujące postacie, zrobiłem coś bardziej oczywistego. Właśnie dodałem do przestrzeni, zamiast iść i przeglądać ciągi systemowe. Możesz dostać spację 1, aby uzyskać literę znaku # "!" i dodaj spację 12, aby uzyskać literę znaku # ",".

Jeśli uruchomimy to, możemy zobaczyć, że jest „unmushed”:

>> rebmu/debug/stats "pnUPPqHELLO01pnADsp12pnSPpnUPPqWORLD01prADsp01"
Original Rebmu string was: 46 characters.
Rebmu as mushed Rebol block molds to: 46 characters.
Unmushed Rebmu molds to: 62 characters.
Executing: [pn upp q hello 1 pn ad sp 12 pn sp pn upp q world 1 pr ad sp 1]
Hello, World!

Co jest dość logiczne:

; print with no newline the result of doing an uppercase/part
; on the quoting of the symbolic word hello, of only the first
; N characters (where N is 1)
pn upp q hello 1

; print the character you get when you add 12 to the space
; character literal, a.k.a. comma...again no newline
pn ad sp 12

; print a space, no newline
pn sp

; do the same trick of printing the quoted word hello with the
; first letter converted to uppercase
pn upp q world 1

; print the character you get when you add 1 to the space
; character literal, a.k.a. exclamation point...with newline now
pr ad sp 1

4

T-SQL, 52

Ach, tak jest lepiej! Bezpośrednia konwersja binarna, tylko 52 znaki.

SELECT CAST(0x48656C6C6F2C20576F726C6421 AS VARCHAR)

Poprzednio...

Istnieje o wiele bardziej sprytne i bardziej golfowe rozwiązanie, które działałoby , gdybyśmy mogli użyć =i +(wyszukiwanie standardowych danych wbudowanych w msdb i używanie ich do konstruowania ciągu zapytania zgodnego z EXEC)

Ale skoro nie możemy, masz takie naiwne podejście:

SELECT CHAR(72)SELECT CHAR(101)SELECT CHAR(108)SELECT CHAR(108)SELECT CHAR(111)SELECT CHAR(44)SELECT CHAR(32)SELECT CHAR(87)SELECT CHAR(111)SELECT CHAR(114)SELECT CHAR(108)SELECT CHAR(100)SELECT CHAR(33)

1
Wiem, że zabijają mnie operatorzy konkatenacji ... Próbuję wymyślić, jak to zrobić za pomocą JavaScript ...
WallyWest

1
Tak, chociaż to wyzwanie wydaje się przynosić głównie naiwne odpowiedzi, z pewnością zainspirowało do ciekawych zwrotów akcji w celu znalezienia ciekawych podejść niekonkatenatywnych.
Jonathan Van Matre

Możesz zrobić lepiej. Użyj DRUKUJ zamiast WYBIERZ. I niejawnie rzutowane za pomocą LTRIM () lub RTRIM (). Robię coś podobnego tutaj .
Muqo

4

Pyton:

Pfff, kto potrzebuje części numerycznej alfanumerycznej?

from string import lowercase
from string import uppercase
from string import punctuation
print uppercase[len(str([[[len(str())]]]))]
print lowercase[len(str([[]]))]
print lowercase[len(str([[[[[len(str())]]]]]))]
print lowercase[len(str([[[[[len(str())]]]]]))]
print lowercase[len(str([[[[[[[]]]]]]]))]
print punctuation[len(str([[[[[len(str())]]]]]))]
print
print uppercase[len(str([[[[[[[[[[[]]]]]]]]]]]))]
print lowercase[len(str([[[[[[[]]]]]]]))]
print lowercase[len(str([[[[[[[[len(str())]]]]]]]]))]
print lowercase[len(str([[[[[len(str())]]]]]))]
print lowercase[len(str([len(str())]))]
print punctuation[len(str())]

Jest to zależne od regionu, więc twój przebieg może się różnić. Jeśli jednak naprawdę chcesz zreplikować ten wynik, możesz użyć następujących instrukcji zamiast instrukcji importu:

lowercase="abcdefghijklmnopqrstuvwxyz"
uppercase="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
punctuation="!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"

(to nie jest część mojego zgłoszenia, to po prostu udostępnianie moich mieszkańców w celu odzyskania)


4

J - 73 char

W końcu można to zrobić!

72 101 108 108 111 44 32 87 111 114 108 100 33{do 1 8{show 0 def 0
take
)

Oto kwestia J. Większość prymitywów to interpunkcja ASCII, po której następują maksymalnie dwie kropki lub dwukropki. Te prymitywy, które nie są wykonane z interpunkcji, są znakami alfanumerycznymi, po których następują dwie kropki lub dwukropki. Więc nie wolno nam nic z tych, z wyjątkiem { } [ ]. [i ]są czasownikami tożsamości i dlatego są bezużyteczne.

Na szczęście {indeksuje tablice, więc jeśli mielibyśmy, powiedzmy, ciąg znaków z każdym pojedynczym znakiem ASCII ( a.zwanym Alfabetem ), moglibyśmy wyciągnąć litery według ich punktów kodowych ASCII. Mamy również zapasowy sposób tworzenia ciągów , 0 : 0a potem rzeczy i potem samotny ); jelita grubego, w którym ma alias w standardowym biblioteki def.

Następnie w standardowej bibliotece znajduje się czasownik show, który daje wewnętrzną reprezentację czasownika, jeśli podasz mu nazwę jako ciąg. Jest inny czasownik do, który ewaluuje ciąg. Więc jeśli możemy wyciągnąć a.z jakiejkolwiek takiej reprezentacji, możemy to sprawdzić i wyciągnąć Hello, World!.

Nasz wybawca ma formę takealiasu, {.który ma aswoją nazwę. show'take'wróci take=: {., więc mamy nasze, a.a tym samym rozwiązanie.

Możemy się go pozbyć {, używając zasadniczo odpowiednika pickze standardowej biblioteki, ale nie można uniknąć paren na samym końcu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.