Witaj świecie! (Każda inna postać)


129

Napisz program, który wypisze „Witaj, świecie!”. Ale również, jeśli weźmiesz tylko pierwszą, trzecią, piątą itd. Znaki swojego programu, wynikowy program powinien nadal drukować „Witaj, świecie!”.

Jeśli twój program to:

abc
def

Powinien on wypisać „Witaj, świecie!”, Ale tak też powinno być

acdf

Brak rozwiązań z mniej niż 2 znakami.


2
Czy wokół wydruku mogą być białe znaki?
vroomfondel

18
Niesamowity pierwszy post!
Adám

11
Widok wszystkich odpowiedzi z „HHeelllloo” przypomniał mi mówienie o wielorybie.
Brian Minton

32
Pro wskazówka dotycząca unikania „Witaj, świecie!” wbudowane w takie wyzwania: użyj nieco innego ciągu o podobnej złożoności, jak „Pozdrowienia, Ziemianie!”
Martin Ender

6
„Brak rozwiązań z mniej niż 2 znakami”. Niesamowity.
Robert Grant

Odpowiedzi:


195

Python 3 , 61 bajtów

rant="partisn't"
print(("HHeelllloo,,  WWoorrlldd!!"""[::2]))

Wypróbuj online!

Nadużywanie faktu, że printjest to funkcja w Pythonie 3 :)

Najmniej stronnicze rozwiązanie, które znajdziesz tutaj na PPCG.

Staje się

rn=print
rn("Hello, World!"[:])

48
To jest piękne.
musicman523

1
@ musicman523 Ale w takim przypadku tekst REPL nie otacza tekstu pojedynczymi cudzysłowami.
officialaimm

1
@officialaimm Tak, chyba tak
musicman523

1
@ yamboy1 Spróbuj usunąć każdy inny list
vroomfondel

1
Nie wiedziałem, że [:]faktycznie działa: o Fajnie!
HyperNeutrino,

56

Kardynał , 29 bajtów

%
"
H
e
l
l
o
,
 
W
o
r
l
d
!

Wypróbuj online!

Usunięcie każdej innej postaci powoduje usunięcie wszystkich linii, co nadal powoduje Hello, World!:

%"Hello, World!

Wypróbuj online!

Powodem tego jest to, że %tworzy cztery wskaźniki instrukcji, poruszające się w każdym z czterech głównych kierunków. Adresy IP, które opuszczają kod źródłowy, są po prostu usuwane. Tak więc w pierwszym przypadku pozostaje tylko IP na południe, aw drugim przypadku pozostaje tylko IP na wschód, wszystkie pozostałe są po prostu odrzucane. W obu przypadkach wykonany program jest wtedy sprawiedliwy "Hello, World!. W "przełącza się na tryb strun gdzie każda komórka jest po prostu drukowane na standardowe wyjście. Nie musimy kończyć łańcucha, ponieważ pozostawienie kodu źródłowego powoduje zakończenie programu.

Zauważ, że ten sam pomysł działa w wosku pszczelim , używając *zamiast %i `zamiast "(to dlatego, że wosk pszczeli był w dużej mierze inspirowany przez kardynała, ale używa sześciokątnej siatki).

Wypróbuj online! (pionowo) | | Wypróbuj online! (poziomy)


49

C, 125 bajtów

xpxuxtxs( ) { }xuxs ( ) { } main( ) {puts ( "Hello, World!" ) ; } mxaxixn ( ) {xpxuxtxs ( " H e l l o ,   W o r l d ! " ) ; }

Wypróbuj online!

Po usunięciu parzystych znaków:

xxxx(){}us(){}mi(){us("el,Wrd");}main(){puts("Hello, World!");}

Wypróbuj online!


31

Właściwie 2 bajty

HH

Wyjaśnienie:

H, jak można się spodziewać, wypycha Hello, World!na stos.

Główny program ( HH) napotka pierwszy Hi pcha Hello, World!na stos. Z drugiej strony Hspróbuje użyć dwóch argumentów (ponieważ stos musi być pusty, aby wypychać Hello, World!) i nie powiedzie się. Ten błąd zostanie jednak zignorowany, a następnie Hello, World!niejawnie wydrukowany.

Drugi program ( H) naciska Hello, World!raz, a to zostanie domyślnie wydrukowane.

Jest to podobne do 2-bajtowej odpowiedzi Fatalize, ale tak naprawdę nie „oszukuje”.

Wypróbuj online!


4
Dobre rozwiązanie, ale myślę, że to nie powinno się liczyć, ponieważ jest zbyt podobne do rozwiązania jednoznakowego.
Leo Tenenbaum

32
@LeoTenenbaum Dlaczego nie? Jest w pełni zgodny z zasadami.
Okx

2
To, co wyjaśnisz, nie jest prawdą, Hpopchnie tylko Hello, World!pusty stos, a jeśli stos nie będzie pusty, oczekiwałby 2 argumentów, więc wystąpi błąd, a błędy zostaną zignorowane. I tak naprawdę nie drukuje domyślnie tylko najwyższego elementu.
Erik the Outgolfer

@EriktheOutgolfer Ups. Naprawię.
Okx

Dlatego właściwie to mój ulubiony język golfowy. Jest na idealnym poziomie głupoty.
RShields

22

Lua , 89 bajtów

--- [ [
print("Hello, World!")
--[[ ] ]
pCrAiLnCtU(L"AHTeOlRlFoE,L IWNoEr:lDd !:"D)
---]]

Wypróbuj online! Jak pokazuje podkreślanie składni, jest to masowe nadużywanie komentarzy.

Alternatywny:

--[[pit"el,Wrd"
-[]]print("Hello, World!")--]

Wypróbuj online!

Dla wygody program do konwersji programu na każdą inną postać: Wypróbuj online!


Podoba mi się ten! Format komentowania Lua wydaje się podobny do T-SQL, spróbuję pracować nad jednym dla tego języka.
BradC

3
Ten rodzaj sztuczki powinien działać w każdym języku z komentarzami blokowymi i komentarzami liniowymi (C, JS itp.)
CalculatorFeline

2
CALCULATORFELINE: D: D
Riking

2
HHeelllloo WWoorrlldd!!jest trochę nudny: P
CalculatorFeline

19

Siatkówka , 39 bajtów


HHeelllloo,,  WWoorrlldd!!


(.).x?
$1

Wypróbuj online!

Wzięcie każdej innej postaci daje:


Hello, World!
()x
1

Wypróbuj online!

Pierwszy program tworzy ciąg z powielonym powitaniem. Następnie zastępuje każdą parę znaków pierwszym znakiem. Istnieje również pusty etap, który zastępuje wszystkie puste łańcuchy pustymi łańcuchami pomiędzy nimi, ale to nic nie robi. Drugi program nie pasuje do litery „x”, więc nic nie zastępuje po utworzeniu powitania.

Być może bardziej zabawne, jeśli trzeci etap zostanie nieznacznie zmieniony, pierwszy zestaw znaków nie musi być tym samym komunikatem. Może to prowadzić do wielu rozwiązań o identycznej długości, takich jak pełne i o połowę .


17

Węgiel , 25 bajtów

H→e→l→l→o→,→ →W→o→r→l→d→!

Wypróbuj online!

Jeśli usuniesz znaki parzyste, po prostu usuniesz polecenia strzałek wskazujące kierunek następnego tekstu i pozostawi następujący kod:

Hello, World!

Wypróbuj online!

To także drukuje powitanie.


17

Haskell , 85 bajtów

{--}main=putStr"Hello, World!"--} m a i n = p u t S t r " H e l l o ,   W o r l d ! "

Wypróbuj online!

Co druga usunięta postać:

{-mi=uSrHlo ol!-}main=putStr"Hello, World!"

Wypróbuj online!

Wykorzystuje to dwa formaty komentarzy w Haskell: {- -}do komentarzy w linii lub wielu linii oraz --do komentowania reszty linii.


16

JavaScript, 67 bajtów

/**/alert`Hello, World`// * / a l e r t ` H e l l o ,   W o r l d `

Co druga litera usuwana:

/*aetHlo ol`/*/alert`Hello, World`

Podobnie jak odpowiedź Haskell Laikoni, ta wykorzystuje komentarze.


Dobra odpowiedź, +1! Zapisałem 2 bajty, tworząc port twojej odpowiedzi w mojej odpowiedzi Java 8 i dodatkowy bajt, kiedy zmieniłem // * /na //**/(co niestety nie jest możliwe w twoim przypadku z powodu /**/alert`Hello, World` bycia nieparzystą ilością bajtów, zamiast nawet jak w moim przypadku .
Kevin Cruijssen

14

Brachylog , 4 bajty

Ḥ~wḤ

Wypróbuj online!

Wyjaśnienie

~wzapisuje swoją prawą zmienną STDOUTi ignoruje lewy argument. jest "Hello, World!", więc to drukuje Hello, World!.

Jeśli weźmiemy tylko pierwszy i trzeci znak, otrzymamy Ḥw. W takim przypadku wzapisuje lewą zmienną i ignoruje prawą zmienną, więc drukuje również Hello, World!.

2 bajty

ḤḤ

Wypróbuj online!

Jest to technicznie poprawna odpowiedź, ale ujednolica zmienną wyjściową programu zamiast drukowania STDOUT, więc wydaje mi się, że 4 bajtowy program jest bardziej w duchu wyzwania.


Nie sądzę, aby odpowiedź 2-bajtowa była „technicznie” poprawna, ponieważ drukowane są stany wyzwania .
Okx

1
@Okx print, jak na kartce papieru?
theonlygusti

@ thehelylygusti Oznacza wydruk do STDOUT.
Okx

5
@ thehelylygusti Westchnienie ... to domyślnie oznacza druk .
Okx

3
@Okx, próbujesz być pedantyczny, aby unieważnić rozwiązanie, ale tak naprawdę nie ma w tym nic nieważnego. Wyzwanie mówi tylko „wynik”.
theonlygusti

11

Haskell, 102 bajty

Pełny program:

main= putStr"Hello, World!";;
putSt   x ="p u t S t r  \" H e l l o ,   W o r l d !\"";
mmaaiin = main

i po usunięciu każdej innej postaci:

mi=ptt"el,Wrd";ptt x=putStr "Hello, World!";main=mi

Możesz usunąć 2 bajty, usuwając spacje między p u t S t ri \".
Sriotchilism O'Zaic

11

kod maszynowy x86, 162 bajty

próbny

PROG.COM Pobierz i uruchom go w emulatorze MS-DOS , na przykład DOSBox .

90 B3 B4 B4 02 90 90 B3 B2 B2 48 90 90 B3 CD CD 21 90 90 B3 B2 B2 65 90 
90 B3 CD CD 21 90 90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 2C 90 90 B3 CD CD 21 90 
90 B3 B2 B2 20 90 90 B3 CD CD 21 90 90 B3 B2 B2 77 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 72 90 90 B3 CD CD 21 90 
90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 B2 B2 64 90 90 B3 CD CD 21 90 
90 B3 B2 B2 21 90 90 B3 CD CD 21 90 90 B3 CD CD 20 90

po usunięciu Pobieranie MINI.COM

90 B4 02 90 B2 48 90 CD 21 90 B2 65 90 CD 21 90 B2 6C 90 CD 21 90 CD 21 
90 B2 6F 90 CD 21 90 B2 2C 90 CD 21 90 B2 20 90 CD 21 90 B2 77 90 CD 21 
90 B2 6F 90 CD 21 90 B2 72 90 CD 21 90 B2 6C 90 CD 21 90 B2 64 90 CD 21 
90 B2 21 90 CD 21 90 CD 20

Jak biegać?

Zainstaluj DOSBox dla Ubuntu / Debian

sudo apt install dosbox

Uruchom

dosbox

W DOSBOX

mount c /home/user/path/to/your/directory
c:
PROG.COM
MINI.COM

Jak to działa?

Kody operacji maszyny reprezentują instrukcje języka asemblera .

W MS-DOS, aby wydrukować znak , ustawisz rejestry i przerwiesz. Rejestr AH będzie 0x02, rejestr DL zawiera twój znak. Wektor przerwania to 0x21.

mov ah,0x2  ;AH register to 0x2 (B4 02)
mov dl,0x48 ;DL register to "H" (B2 48)
int 0x21    ;0x21 interrupt     (CD 21)

Mały model pliku MS-DOS COM jest dobrym wyborem, ponieważ nie ma żadnych nagłówków . Jest ograniczony przez 64 KB, ale w naszym przypadku nie ma to znaczenia.

Aby zatrzymać program, użyj przerwań 0x20

int 0x20    ;0x20 interrupt     (CD 20)

magia

Jeśli chcesz wykonać polecenie opcode 0xAB z jednym parametrem 0xCD , piszesz

AB CD

W PROG.COM

90 B3 AB AB CD 90
nop         ; No operation (90)
mov bl,0xb4 ; BL register to AB (B3 AB)
AB CD command (AB CD)
nop         ; No operation (90)

W MINI.COM

90 AB CD
nop         ; No operation (90)
AB CD command (AB CD)

Są to równe kody maszynowe, jeśli nie korzystasz z rejestru BL .

Generator

Konwertuj plik tekstowy z szesnastkowego na szesnastkowy binarny

cat hex_file | xxd -r -p > exec.com


Usuń wszystkie „90 90” dla -52 bajtów.
NieDzejkob,

Również nop na samym końcu nigdy nie zostanie osiągnięty.
NieDzejkob,

10

Pyth , 31 bajtów

p% 2"HHeelllloo,,  WWoorrlldd!!

Wypróbuj online!

Staje się

p "Hello, World!

Dzięki @CalculatorFeline za wskazanie błędu i usunięcie jednego bajtu.


Znaki przechowywane zaczynają się od pierwszego, a nie drugiego. Możesz upuścić wiodącą przestrzeń.
CalculatorFeline

Ach, dzięki @CalculatorFeline. W specyfikacji czytam „Weź” jako „Usuń”.
vroomfondel


7

05AB1E , 29 bajtów

”™ ,ï‚‚ï ! ”# ¦2 ä ø¨øJð ý

Wypróbuj online!

Wyjaśnienie

”™ ,ï‚‚ï ! ”                # push the string "Weekly Hello , Changed World ! "
               #               # split on spaces
                               # RESULT: ['Weekly','Hello',',','Changed','World','!','']
                ¦              # remove the first element (Weekly)
                 2ä            # split in 2 parts
                               # RESULT: [['Hello', ',', 'Changed'], ['World', '!', '']]
                   ø           # zip
                               # RESULT: [['Hello', 'World'], [',', '!'], ['Changed', '']]
                    ¨          # remove the last element
                     ø         # zip
                               # RESULT: [['Hello', ','], ['World', '!']]
                      J        # join each inner list
                       ðý      # join on space

Po usunięciu każdego innego znaku zostaje nam kod

”Ÿ™,‚ï!” 2äøøðý

Wypróbuj online!

Wyjaśnienie

”Ÿ™,‚ï!”       # push the string "Hello, World!"
        2ä     # split in 2 parts
               # RESULT: ['Hello, ', 'World!']
          ø    # zip, as the string has an odd length the space is lost
               # RESULT: ['HW', 'eo', 'lr', 'll', 'od', ',!']
           ø   # zip again
               # RESULT: ['Hello,', 'World!']
            ðý # join on space

7

Mathematica, 62 bajty

P0r0i0n0t0@0"0H0e0l0l0o0,0 0W0o0r0l0d0!0"Print@"Hello, World!"

Zwraca "0H0e0l0l0o0,0 0W0o0r0l0d0!0" Null P0r0i0n0t0[0]i drukuje Hello, World!jako efekt uboczny. Gdy zostanie uruchomiony jako program (nie w REPL), zwracana wartość nie zostanie wydrukowana.

Po usunięciu każdej innej postaci:

Print@"Hello, World!"rn@Hlo ol!

Zwraca Null ol! rn[Hlo]i drukuje Hello, World!.


7

Galaretka , 26 25 bajtów

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »

Wypróbuj online!

Po usunięciu co drugiego znaku zostaje nam następujący kod.

“3a;»“3ḅaė;œ»

Wypróbuj online!

Jak to działa

““3ḅaė;œ»ḷ“ 3 ḅ a ė ; œ »  Main link.

““3ḅaė;œ»                  Index into Jelly's dictionary to yield
                           ["", "Hello, World!"]. 
          “ 3 ḅ a ė ; œ »  Index into Jelly's dictionary to yield.
                          " FullERebitingBEfluffiest adoptable".
         ḷ                 Take the left result.
“3a;»“3ḅaė;œ»  Main link.

“3a;»          Index into Jelly's dicrionary to yield " N-".
               Set the argument and the return value to the result.
     “3ḅaė;œ»  Index into Jelly's dicrionary to yield "Hello, World!".
               Set the return value to the result.

7

Cubically v2.1 , 222 bajtów

+0503 @@6 :22 //1 +050501 @@6 :55 +0502 @@6@6 :33 //1 +050502 @@6 :55 +03 //1 +04 @@6 :55 //1 +03 @@6 :55 +01 //1 +0504 @@6 :33 //1 +050502 @@6 :55 +01 //1 +050502 @@6 :55 +0502 @@6 :11 //1 +050501 @@6 :55 +01 //1 +03 @@6

Wypróbuj online!

Każda inna litera:

+53@6:2/1+551@6:5+52@66:3/1+552@6:5+3/1+4@6:5/1+3@6:5+1/1+54@6:3/1+552@6:5+1/1+552@6:5+52@6:1/1+551@6:5+1/1+3@6

Wypróbuj online!



6

Pomoc, WarDoq! , 2 bajty

Hi

Wypróbuj online!

Hodbitki Hello, World!, inie ma możliwości.

Pomoc, WarDoq! można dodać dwie liczby i przetestować liczby pierwsze, dlatego jest uważany za prawidłowy język programowania dla tego postu .


dlaczego to zostało odrzucone?
Uriel

NOP i ogromne przestrzenie są przeciwko duchowi.
RShields

1
+1 ze względu na nowość, w jaki sposób wynikowy kod źródłowy ponownie podkreśla komunikat, który otrzymuje wynik.
TOOGAM


6

PHP, 53 bajty

#
echo date(
$e_c_h_o='\H\e\l\l\o\,\ \W\o\r\l\d\!
');

Po usunięciu każdej innej postaci:

#eh ae
echo'Hello, World!';

6

Oktawa, 49 45 bajtów

Zapisano 4 bajty, ponieważ Octave nie wymaga nawiasów do indeksowania.

'HHeelllloo,,  WWoorrlldd!! ' (1:2 : 3 ^ 3)''

Wypróbuj online!

A zredukowany:

'Hello, World!'(:    )'

Wypróbuj online!

Wyjaśnienie:

Kod początkowy ma zduplikowane litery w ciągu, więc zostajemy z Hello, World! po usunięciu każdej sekundy. Dodano pewne spacje, aby zachować nawiasy i apostrofy.

Indeksowanie jest naprawdę 1:2:end. Istnieje 27 znaków i nie może używać endalbo 27ponieważ musimy usunąć znak, więc idziemy ze 3 ^ 3zamiast. Kiedy usuwamy co trzeci znak, indeksowanie staje się (:)(i kilka dodatkowych spacji).

(:)oznacza „spłaszcz i zamień w wektor pionowy” . Musimy to przetransponować, używając '. Nie musimy transponować łańcucha w oryginalnym kodzie, ale podwójna transpozycja działa, więc pierwszy łańcuch jest transponowany dwukrotnie za pomocą '', a drugi transponowany tylko raz.


6

APL (Dyalog) , 35 34 bajtów

-1 dzięki Martinowi Enderowi.

'0H0e0l0l0o0,0 0W0o0r0l0d0!0'~  0

Wypróbuj online!

'0H0e0l0l0o0,0 0W0o0r0l0d0!0' wiadomość z zerami jako usuwalne znaki wypełniające

~ z wyjątkiem

 sformatowany (łańcuchowy)

0 liczba zero

Pozostaje tylko dziwne postacie 'Hello, World!' .


5

T-SQL, 75 bajtów

---
PRINT 'Hello, World!'
/*
-P-R-I-N-T-'-H-e-l-l-o-,- -W-o-r-l-d-!-'
---*/

Nadużywanie komentarzy w jednym i wielu wierszach, zainspirowane wersją LUA Kalkulatora .

Po usunięciu wszystkich znaków parzystych, z których niektóre są łamaniem linii:

--PIT'el,Wrd'/
PRINT'Hello, World!'--/

5

JavaScript, 73 bajty

a ='a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/';eval(a.replace(/0/g,''))

Konstruuje ciąg az zawartością a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/, a następnie usuwa wszystko , co 0daje alert`Hello, World!`//, czyli eval„d.

Biorąc każdą inną postać programu daje

a=alert`Hello, World!`//;vlarpae//,')

który ostrzega Hello, Worldprzy użyciu składni ciągu szablonu w taki sam sposób, jak to, co zostało sprawdzone w pełnym programie, a następnie zapisuje wynik wywołania ai zawiera wnikliwy komentarz //;vlarpae//,').


5

> <> , 47 bajtów

Oryginał:

| v~" H e l l o ,   W o r l d ! "

~o<< ;!!!? l

Z każdą sekundą usuwaną:

|v"Hello, World!"
o<;!?l

Wypróbuj je online: oryginalne , zmodyfikowane

Oryginalny program popycha znaki „Witaj, świecie!” do stosu (w odwrotnej kolejności) przeplatanego spacjami, a następnie na przemian drukuje znak i usuwa go, aż długość stosu wyniesie zero. Drugi program robi to samo, z wyjątkiem instrukcji usuwania~ zniknęły.

Jeśli nie masz nic przeciwko zatrzymaniu się z błędem, możemy wyciągnąć liść z książki kardynała Martina Endera : zmodyfikowany kod to

\"!dlroW ,olleH"!#o#

a oryginał jest taki sam, ale z nowymi liniami wstawionymi między wszystkimi znakami, dla 39 bajtów. Wypróbuj je online: oryginalne , zmodyfikowane .


5

,,, 34 bajty

 2"Hteoltlaol,l yWhourmladn!! "⟛

Po usunięciu parzystych znaków ...

 "Hello, World!"

Wyjaśnienie

Ze wszystkimi postaciami:

 2"..."⟛

               no-op
 2             push 2 to the stack
  "..."        push "Hteoltlaol,l yWhourmladn!! " to the stack
       ⟛      pop 2 and the string and push every 2nd character of the string
               implicit output

Bez znaków parzystych:

 "..."

               no-op
 "..."         push "Hello, World!" to the stack
               implicit output

5
To oznacza, że nie trzeba powiedzieć, że to nie jest konkurencyjne.
FryAmTheEggman

2
Ale powinieneś zatrzymać wszystkie znaki o indeksie parzystym ... (0-indeksowany) ...
HyperNeutrino

Ups, naprawione. Wystarczy dodać kolejną postać lol.
całkowicie ludzki,

4

Brainfuck, 155 bajtów

- - < - < < + [ + [ < + > - - - > - > - > - < < < ] > ] < < - - . < + + + + + + . < < - . . < < . < + . > > . > > . < < < . + + + . > > . > > - . < < < + .

Wypróbuj online!

Co druga usunięta postać:

--<-<<+[+[<+>--->->->-<<<]>]<<--.<++++++.<<-..<<.<+.>>.>>.<<<.+++.>>.>>-.<<<+.

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.