Selam Dünya! (Diğer her karakter)


129

"Merhaba, Dünya!" Yazdıran bir program yazın. Ancak, programınızın yalnızca ilk, üçüncü, beşinci vb. Karakterlerini alırsanız, ortaya çıkan program hala "Merhaba, Dünya!" Şeklinde yazdırılmalıdır.

Programınız:

abc
def

"Merhaba, Dünya!" Yazmalı, ancak

acdf

2 karakterden az çözümü yok.


2
Çıktının çevresinde boşluk olabilir mi?
vroomfondel

18
Şaşırtıcı ilk gönderi!
Adám

11
"HHeelllloo" ile tüm cevapları görmek bana Balina konuşmayı hatırlattı.
Brian Minton

32
"Merhaba, Dünya!" Dan kaçınmak için profesyonel ipucu Bunun gibi zorluklarda yerleşik olanlar: "Selamlar, Dünyalılar!"
Martin Ender

6
Msgstr "" 2 karakterden az olan çözüm yok. " İnanılmaz.
Robert Grant,

Yanıtlar:


195

Python 3 , 61 bayt

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

Çevrimiçi deneyin!

printPython 3'teki bir fonksiyonun kötüye kullanılması :)

PPCG'de burada bulabileceğiniz en az partizan çözümü.

Oluyor

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

48
Bu güzel.
musicman523

1
@ musicman523 Ancak, REPL bu durumda metni tek tırnak işaretleriyle çevrelemez.
officialaimm

1
@officialaimm Evet, öyle olduğunu düşünüyorum
musicman523

1
@ yamboy1 Diğer tüm harfleri silmeyi deneyin
vroomfondel

1
[:]Gerçekten işe yaradığını bilmiyordum : o Güzel!
HyperNeutrino

56

Kardinal , 29 bayt

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

Çevrimiçi deneyin!

Diğer tüm karakterleri kaldırmak, hala sonuçlanan tüm satır beslemelerini kaldırır Hello, World!:

%"Hello, World!

Çevrimiçi deneyin!

Bunun çalışmasının nedeni %, dört kardinal yönün her birinde hareket eden dört talimat işaretçisi oluşturmaktır. Kaynak kodunu bırakan IP'ler basitçe kaldırılır. Böylece ilk durumda, yalnızca güneye giden IP kalır ve ikinci durumda, yalnızca doğudan giden IP kalır, diğerleri basitçe düşer. Her iki durumda da, yürütülen program daha sonra sadece "Hello, World!. "Her hücre basitçe STDOUT yazdırılır dize moduna geçiş yapar. Dizeyi sonlandırmamız gerekmiyor, çünkü kaynak kodunu bırakmak hala programı sonlandırıyor.

Aynı fikrin Balmumu içinde , *bunun yerine %ve `yerine kullanarak çalıştığını unutmayın "(bunun nedeni, Balmumu'nun büyük ölçüde Kardinal'den ilham alması ancak altıgen bir ızgara kullanmasıdır).

Çevrimiçi deneyin! (dikey) | | Çevrimiçi deneyin! (yatay)


49

C, 125 bayt

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

Çevrimiçi deneyin!

Hatta karakter kaldırıldı:

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

Çevrimiçi deneyin!


31

Aslında 2 bayt

HH

Açıklama:

HBeklediğiniz gibi, Hello, World!yığına iter .

Ana program ( HH) ilkiyle karşılaşacak Hve Hello, World!yığına itecektir . HBununla birlikte, ikincisinde , iki argüman kullanmaya çalışacak (yığının basması için boş olması gerektiğinden Hello, World!) ve başarısız. Ancak, bu hata yoksayılacak ve sonra Hello, World!örtük olarak basılacaktır.

İkinci program ( H) bir Hello, World!kez basacaktır ve bu dolaylı olarak basılacaktır.

Bu, Fatalize'in 2 baytlık cevabına benzer, ancak bu gerçekten "hile" değildir.

Çevrimiçi deneyin!


4
Güzel bir çözüm, ancak tek karakterli bir çözüme çok fazla benzemesi nedeniyle bunun sayılmaması gerektiğini düşünüyorum.
Leo Tenenbaum

32
@LeoTenenbaum Neden olmasın? Kurallara tamamen uygundur.
Okx

2
Açıkladığınız şey durum değil, Hyalnızca Hello, World!boş bir yığını zorlardı ve yığın boş değilse, 2 argüman bekler, bu nedenle bir hata olur ve hatalar göz ardı edilir. Ve hayır, aslında yalnızca en üstteki öğeyi örtük olarak yazdırmaz.
Outgolfer Erik,

@EriktheOutgolfer Oops. Düzeltecek.
Okx,

Bu yüzden aslında en sevdiğim golf dili. Mükemmel aptallık düzeyinde.
RShields,

22

Lua , 89 bayt

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

Çevrimiçi deneyin! Sözdizimi vurgulama gibi, bu büyük yorum kötüye.

Alternatif:

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

Çevrimiçi deneyin!

Ve kolaylık olması için, bir programı diğer karakter formlarına dönüştüren bir program: Çevrimiçi deneyin!


Bunu beğendim! Lua'nın yorum formatı T-SQL'e benziyor, o dil için bir tane üzerinde çalışacağım.
BradC

3
Bu tür bir hile, hem blok yorumlu hem de satır yorumlu (C, JS, vb.) Herhangi bir dilde çalışmalıdır
CalculatorFeline

2
HESAP
MAKİNESİ

2
HHeelllloo WWoorrlldd!!biraz sıkıcı: P
CalculatorFeline

19

Retina , 39 bayt


HHeelllloo,,  WWoorrlldd!!


(.).x?
$1

Çevrimiçi deneyin!

Diğer her karakteri alarak şunları verir:


Hello, World!
()x
1

Çevrimiçi deneyin!

İlk program selamlama çoğaltılmış bir dize oluşturur. Sonra her karakter çiftini ilk karakterle değiştirir. Ayrıca, tüm boş dizeleri aralarındaki boş dizelerle değiştiren boş bir aşama vardır, ancak bu hiçbir şey yapmaz. İkinci program "x" harfiyle eşleşemez, bu nedenle selamlamayı yaptıktan sonra hiçbir şeyin yerini almaz.

Belki de daha eğlenceli, eğer üçüncü aşama biraz değiştirilirse, ilk karakter grubunun aynı mesaj olması gerekmez. Bu, tam ve yarı gibi birçok özdeş uzunluk çözümlerine yol açabilir .


17

Kömür , 25 bayt

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

Çevrimiçi deneyin!

Çift karakterleri kaldırırsanız, bir sonraki metnin yönünü belirten ve aşağıdaki kodu bırakan ok komutlarını kaldırmanız yeterlidir:

Hello, World!

Çevrimiçi deneyin!

Bu da selamlamayı basar.


17

Haskell , 85 bayt

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

Çevrimiçi deneyin!

Her ikinci karakter kaldırıldı:

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

Çevrimiçi deneyin!

Bu, Haskell'deki iki yorum biçiminden yararlanır: {- -}satır içi veya çok satırlı yorumlar için ve satırın --kalanına yorum yapar.


16

Javascript, 67 bayt

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

Her ikinci harf kaldırıldı:

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

Laikoni'nin Haskell'in cevabı gibi, bu da yorumları kullanıyor.


Güzel cevap, +1! İle ilgili cevabınız bir port oluşturarak 2 bayt Kaydedilen benim Java 8 cevap ve ek bayt ben değişince // * /için //**/maalesef nedeniyle sizin durumda mümkün değildir ki ( /**/alert`Hello, World` yerine bile benim durumumda olduğu gibi, bayt garip bir miktar olmak .
Kevin Cruijssen

14

Brachylog , 4 bayt

Ḥ~wḤ

Çevrimiçi deneyin!

açıklama

~wsağ değişkenini yazar ve STDOUTsol argümanını yok sayar. yani "Hello, World!", bu yazdırır Hello, World!.

Sadece birinci ve üçüncü karakterleri alırsak, alırız Ḥw. Bu durumda wsol değişkenini yazar ve sağ değişkenini yok sayar, bu nedenle de yazdırır Hello, World!.

2 bayt

ḤḤ

Çevrimiçi deneyin!

Bu teknik olarak geçerli bir cevaptır, ancak program yazdırmak yerine programın çıktı değişkenini birleştirir STDOUT, bu yüzden 4 baytlık programın zorlukla karşı karşıya olduğunu düşünüyorum.


Ben 2 bayt cevap meydan devletler olarak, 'teknik olarak' geçerli olduğunu düşünmüyorum baskı .
Okx

1
@Ox baskı, bir kağıda basılmış gibi mi?
theonlygusti

@ theonlygusti Bu, STDOUT'a yazdırmak anlamına gelir.
Okx

5
@ theonlygusti Sigh ... varsayılan olarak baskı ile kastedilen budur .
Okx

3
@Okx bir çözümü geçersiz kılmak için bilge olmaya çalışıyorsunuz, ama aslında bu konuda geçersiz bir şey yok. Mücadelede sadece "çıktı" yazıyor.
theonlygusti

11

Haskell, 102 bayt

Tam 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

ve diğer her karakter kaldırılmış olarak:

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

p u t S t rVe arasındaki boşlukları kaldırarak 2 bayt çıkarabilirsiniz \".
Sriotchilism O'Zaic 16:18

11

x86 makine kodu, 162 bayt

gösteri

PROG.COM indirin ve çalıştırın , MS-DOS , emülatörü DOSBox örneğin.

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

MINI.COM kaldırıldıktan sonra İndir

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

Nasıl koşulur?

Ubuntu / Debian için DOSBox programını kurun.

sudo apt install dosbox

Koş

dosbox

DOSBOX'ta

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

Nasıl çalışır?

Makine çalışma kodları , montaj dili talimatlarını gösterir .

MS-DOS'da char'ı yazdırmak için kayıtları ayarlayıp kesinti yapacaksınız. AH kaydı 0x02, DL kaydı char'unuzu içerir. Kesme vektörü 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)

MS-DOS COM dosyası minik modeli iyi bir seçimdir, çünkü herhangi bir başlığı yoktur . 64 K ile sınırlıdır, ancak bizim durumumuzda önemli değildir.

Programı durdurmak için 0x20 kesmesi kullanın

int 0x20    ;0x20 interrupt     (CD 20)

sihirli

0xAB opcode komutunu tek bir 0xCD parametresiyle çalıştırmak istiyorsanız ,

AB CD

In 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)

In MINI.COM

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

BL register kullanmıyorsanız , aynı makine kodlarıdır .

Jeneratör

Metin dosyasını hex ile onaltılık ikiliye dönüştürün

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


-52 bayt için tüm 90 90`ları kaldırın.
NieDzejkob,

Ayrıca en sondaki boşluğa asla ulaşılamayacak.
NieDzejkob

10

Pyth , 31 bayt

p% 2"HHeelllloo,,  WWoorrlldd!!

Çevrimiçi deneyin!

Oluyor

p "Hello, World!

Bir hatayı işaret etmek ve bir byte'ı silmek için @CalculatorFeline sayesinde.


Karakterler birinciden başlar, ikinciden değil. Baştaki boşluğu bırakabilirsiniz.
CalculatorFeline

Ah, teşekkürler @CalculatorFeline. Spec "Kaldır" olarak "Take" okudum.
vroomfondel


7

05AB1E , 29 bayt

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

Çevrimiçi deneyin!

açıklama

”™ ,ï‚‚ï ! ”                # 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

Diğer karakterleri çıkardıktan sonra kodla kalırız.

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

Çevrimiçi deneyin!

açıklama

”Ÿ™,‚ï!”       # 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 bayt

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

Dönüyor "0H0e0l0l0o0,0 0W0o0r0l0d0!0" Null P0r0i0n0t0[0]ve Hello, World!yan etki olarak yazdırıyor . Bir program olarak çalıştırıldığında (REPL'de değil), dönüş değeri yazdırılmaz.

Diğer her karakteri çıkardıktan sonra:

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

Dönüyor Null ol! rn[Hlo]ve yazdırıyor Hello, World!.


7

Jöle , 26 25 bayt

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

Çevrimiçi deneyin!

Her ikinci karakteri çıkardıktan sonra, aşağıdaki kodla bırakıldık.

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

Çevrimiçi deneyin!

Nasıl çalışır

““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

Kübik olarak v2.1 , 222 bayt

+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

Çevrimiçi deneyin!

Diğer her harf:

+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

Çevrimiçi deneyin!



6

Yardım, WarDoq! , 2 bayt

Hi

Çevrimiçi deneyin!

Hyazdırır Hello, World!, ibir ameliyat değildir.

Yardım, WarDoq! İki sayı ekleyebilir ve primeları test edebilir, bu nedenle bu meta yazı için geçerli bir programlama dili olarak kabul edilir .


Bu neden indirildi?
Uriel

NOP ve büyük alanlar ruha aykırıdır.
RShields,

1
Elde edilen kaynak kodun çıktı alan iletiyi nasıl yeniden vurguladığına dair yenilik nedeniyle +1.
TOOGAM


6

PHP, 53 bayt

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

Diğer tüm karakterlerin kaldırılmasıyla:

#eh ae
echo'Hello, World!';

6

Octave, 49 45 bayt

Octave, indeksleme yapmak için parantez gerektirmediğinden 4 byte kurtarıldı.

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

Çevrimiçi deneyin!

Ve azaltılmış olanı:

'Hello, World!'(:    )'

Çevrimiçi deneyin!

Açıklama:

İlk kod, dizedeki harflerin çoğaltılmış harflerini içerir, böylece Hello, World!her saniye silindiğinde bırakacağız. Parantezlerin ve kesme işaretlerinin tutulmasını sağlamak için bazı boşluklar eklenmiştir.

İndeksleme gerçekten 1:2:end. 27 karakter var ve kullanamıyoruz endya da 27bir karakteri silmemiz gerektiğinden, onunla devam ediyoruz 3 ^ 3. Her üçüncü karakteri kaldırdığımızda, indeksleme (:)(ve bazı ek boşluklar) olur.

(:)"düzleştirmek ve dikey bir vektöre dönüşmek" anlamına gelir . Bu yüzden, onu kullanarak transpoze etmemiz gerekiyor '. Diziyi orijinal kodda çevirmemize gerek yoktur, ancak çift geçiş işlemleri çalışır, bu nedenle ilk dize iki kez kullanılarak ''ve ikincisi yalnızca bir kez çevrilir.


6

APL (Dyalog) , 35 34 bayt

Martin Ender'e -1 teşekkürler.

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

Çevrimiçi deneyin!

'0H0e0l0l0o0,0 0W0o0r0l0d0!0' çıkarılabilir dolgu karakteri olarak sıfır içeren mesaj

~ dışında

 biçimlendirilmiş (yaylı)

0 sıfır numara

Sadece garip karakterleri bırakarak, bu olur 'Hello, World!' .


5

T-SQL, 75 bayt

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

CalculatorFeline'ın LUA sürümünden ilham alan tek ve çok satırlı yorum kötüye kullanımı .

Bazıları numaralandırılmış karakterlerin kaldırılmasından sonra, bazıları satır sonlarıdır:

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

5

Javascript, 73 bayt

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

Bir dize oluşturur aiçerikli a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/, o zaman tüm kaldırır 0'vermek s alert`Hello, World!`//olan evald'.

Programın diğer her karakterini alarak verir

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

Bu Hello, World, şablon dizesi sözdizimini kullanarak, programın tamamında değerlendirilen ile aynı şekilde uyarır , daha sonra çağrının sonucunu saklar ve içgörülü yorumları aiçerir //;vlarpae//,').


5

> <> , 47 bayt

Orijinal:

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

~o<< ;!!!? l

Her ikinci karakter çıkarıldığında:

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

Onları çevrimiçi deneyin: orijinal , değiştirilmiş

Orijinal program "Merhaba, Dünya!" Karakterlerini zorluyor boşluklarla serpiştirilmiş yığına (ters sırayla), ardından sırayla bir karakter yazdırır ve yığının uzunluğu sıfır olana kadar birini siler. İkinci program aynıdır, silme talimatları bitmez ~.

Bir hatayı durdurmaktan sakıncası yoksa, Martin Ender'in Kardinal kitabından bir sayfa çıkarabiliriz : değiştirilen kod

\"!dlroW ,olleH"!#o#

ve orijinal aynıdır ancak 39 bayt için tüm karakterlerin arasına eklenen yeni satırlar. Onları çevrimiçi deneyin: orijinal , değiştirilmiş .


5

,,,, 34 bayt

 2"Hteoltlaol,l yWhourmladn!! "⟛

Numaralandırılmış karakterleri kaldırırken ...

 "Hello, World!"

açıklama

Tüm karakterlerle:

 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

Numaralandırılmış karakterler olmadan:

 "..."

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

5
Bu , bunun rekabet edici olmadığını söylemenize gerek olmadığını gösterir.
FryAmTheEggman

2
Ama tüm çift indeksli karakterleri tutman gerekiyor ... (0 indeksli) ...
HyperNeutrino

Hata! Sabit. Sadece başka bir karakter lol ekleyin.
tamamen insan

4

Brainfuck, 155 bayt

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

Çevrimiçi deneyin!

Her ikinci karakter kaldırıldı:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.