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.
code-golf
string
source-layout
hello-world
radiation-hardening
Leo Tenenbaum
źródło
źródło
Odpowiedzi:
Python 3 , 61 bajtów
Wypróbuj online!
Nadużywanie faktu, że
print
jest to funkcja w Pythonie 3 :)Najmniej stronnicze rozwiązanie, które znajdziesz tutaj na PPCG.
Staje się
źródło
[:]
faktycznie działa: o Fajnie!Kardynał , 29 bajtów
Wypróbuj online!
Usunięcie każdej innej postaci powoduje usunięcie wszystkich linii, co nadal powoduje
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)
źródło
C, 125 bajtów
Wypróbuj online!
Po usunięciu parzystych znaków:
Wypróbuj online!
źródło
Właściwie 2 bajty
Wyjaśnienie:
H
, jak można się spodziewać, wypychaHello, World!
na stos.Główny program (
HH
) napotka pierwszyH
i pchaHello, World!
na stos. Z drugiej stronyH
spró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ępnieHello, World!
niejawnie wydrukowany.Drugi program (
H
) naciskaHello, World!
raz, a to zostanie domyślnie wydrukowane.Jest to podobne do 2-bajtowej odpowiedzi Fatalize, ale tak naprawdę nie „oszukuje”.
Wypróbuj online!
źródło
H
popchnie tylkoHello, 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.Lua , 89 bajtów
Wypróbuj online! Jak pokazuje podkreślanie składni, jest to masowe nadużywanie komentarzy.
Alternatywny:
Wypróbuj online!
Dla wygody program do konwersji programu na każdą inną postać: Wypróbuj online!
źródło
HHeelllloo WWoorrlldd!!
jest trochę nudny: PSiatkówka , 39 bajtów
Wypróbuj online!
Wzięcie każdej innej postaci daje:
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ę .
źródło
Węgiel , 25 bajtów
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:
Wypróbuj online!
To także drukuje powitanie.
źródło
Haskell , 85 bajtów
Wypróbuj online!
Co druga usunięta postać:
Wypróbuj online!
Wykorzystuje to dwa formaty komentarzy w Haskell:
{- -}
do komentarzy w linii lub wielu linii oraz--
do komentowania reszty linii.źródło
JavaScript, 67 bajtów
Co druga litera usuwana:
Podobnie jak odpowiedź Haskell Laikoni, ta wykorzystuje komentarze.
źródło
// * /
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 .Brachylog , 4 bajty
Wypróbuj online!
Wyjaśnienie
~w
zapisuje swoją prawą zmiennąSTDOUT
i ignoruje lewy argument.Ḥ
jest"Hello, World!"
, więc to drukujeHello, World!
.Jeśli weźmiemy tylko pierwszy i trzeci znak, otrzymamy
Ḥw
. W takim przypadkuw
zapisuje 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.źródło
Haskell, 102 bajty
Pełny program:
i po usunięciu każdej innej postaci:
źródło
p u t S t r
i\"
.kod maszynowy x86, 162 bajty
PROG.COM Pobierz i uruchom go w emulatorze MS-DOS , na przykład DOSBox .
po usunięciu Pobieranie MINI.COM
Jak biegać?
Zainstaluj DOSBox dla Ubuntu / Debian
Uruchom
W DOSBOX
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.
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
magia
Jeśli chcesz wykonać polecenie opcode 0xAB z jednym parametrem 0xCD , piszesz
W PROG.COM
W MINI.COM
Są to równe kody maszynowe, jeśli nie korzystasz z rejestru BL .
Generator
Konwertuj plik tekstowy z szesnastkowego na szesnastkowy binarny
Pokaż fragment kodu
źródło
Pyth , 31 bajtów
Wypróbuj online!
Staje się
Dzięki @CalculatorFeline za wskazanie błędu i usunięcie jednego bajtu.
źródło
V , 32 bajty
Zauważ, że
<esc>
jest to pojedynczy znak, np0x1b
Wypróbuj online!
Usunięcie każdej innej postaci daje:
Wypróbuj online!
źródło
05AB1E , 29 bajtów
Wypróbuj online!
Wyjaśnienie
Po usunięciu każdego innego znaku zostaje nam kod
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica, 62 bajty
Zwraca
"0H0e0l0l0o0,0 0W0o0r0l0d0!0" Null P0r0i0n0t0[0]
i drukujeHello, World!
jako efekt uboczny. Gdy zostanie uruchomiony jako program (nie w REPL), zwracana wartość nie zostanie wydrukowana.Po usunięciu każdej innej postaci:
Zwraca
Null ol! rn[Hlo]
i drukujeHello, World!
.źródło
Galaretka ,
2625 bajtówWypróbuj online!
Po usunięciu co drugiego znaku zostaje nam następujący kod.
Wypróbuj online!
Jak to działa
źródło
Cubically v2.1 , 222 bajtów
Wypróbuj online!
Każda inna litera:
Wypróbuj online!
źródło
CJam , 32 bajty
Wypróbuj online!
Wzięcie każdej innej postaci daje:
Wypróbuj online!
źródło
Pomoc, WarDoq! , 2 bajty
Wypróbuj online!
H
odbitkiHello, World!
,i
nie 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 .
źródło
/// , 25 bajtów
Wypróbuj online!
Po usunięciu każdej innej postaci:
źródło
PHP, 53 bajty
Po usunięciu każdej innej postaci:
źródło
Oktawa,
4945 bajtówZapisano 4 bajty, ponieważ Octave nie wymaga nawiasów do indeksowania.
Wypróbuj online!
A zredukowany:
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ćend
albo27
ponieważ musimy usunąć znak, więc idziemy ze3 ^ 3
zamiast. 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.źródło
APL (Dyalog) ,
3534 bajtów-1 dzięki Martinowi Enderowi.
Wypróbuj online!
'0H0e0l0l0o0,0 0W0o0r0l0d0!0'
wiadomość z zerami jako usuwalne znaki wypełniające~
z wyjątkiem⍕
sformatowany (łańcuchowy)0
liczba zeroPozostaje tylko dziwne postacie
'Hello, World!'
.źródło
T-SQL, 75 bajtów
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:
źródło
JavaScript, 73 bajty
Konstruuje ciąg
a
z zawartościąa0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/
, a następnie usuwa wszystko , co0
dajealert`Hello, World!`//
, czylieval
„d.Biorąc każdą inną postać programu daje
który ostrzega
Hello, World
przy 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łaniaa
i zawiera wnikliwy komentarz//;vlarpae//,')
.źródło
> <> , 47 bajtów
Oryginał:
Z każdą sekundą usuwaną:
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
a oryginał jest taki sam, ale z nowymi liniami wstawionymi między wszystkimi znakami, dla 39 bajtów. Wypróbuj je online: oryginalne , zmodyfikowane .
źródło
,,, 34 bajty
Po usunięciu parzystych znaków ...
Wyjaśnienie
Ze wszystkimi postaciami:
Bez znaków parzystych:
źródło
Brainfuck, 155 bajtów
Wypróbuj online!
Co druga usunięta postać:
źródło
Galaretka , 32 bajty
Wypróbuj online!
-2 bajty dzięki odpowiedzi @ całkowicieludzkiej
Teraz mój jest dupe>. <
Idź do góry, głosuj również: D
źródło