Halo Dunia! (Setiap karakter lain)


129

Tulis program yang mencetak "Halo, Dunia!". Tetapi juga, jika Anda hanya mengambil karakter pertama, ketiga, kelima, dll dari program Anda, program yang dihasilkan masih harus mencetak "Halo, Dunia!".

Jika program Anda adalah:

abc
def

Seharusnya menampilkan "Halo, Dunia!", Tetapi seharusnya demikian

acdf

Tidak ada solusi dengan kurang dari 2 karakter.


2
Bisakah ada spasi putih di sekitar output?
vroomfondel

18
Posting pertama yang luar biasa!
Adám

11
Melihat semua jawaban dengan "HHeelllloo" mengingatkan saya untuk berbicara Paus.
Brian Minton

32
Kiat pro untuk menghindari "Halo, Dunia!" built-in dalam tantangan seperti ini: gunakan string yang sedikit berbeda dengan kompleksitas yang sama seperti "Salam, Earthlings!"
Martin Ender

6
"Tidak ada solusi dengan kurang dari 2 karakter." Luar biasa.
Robert Grant

Jawaban:


195

Python 3 , 61 byte

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

Cobalah online!

Menyalahgunakan fakta itu print merupakan fungsi di Python 3 :)

Solusi paling tidak partisan Anda akan temukan di sini di PPCG.

Menjadi

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

48
Ini indah.
musicman523

1
@ musicman523 Tapi, Tidak REPL mengelilingi teks dengan tanda kutip tunggal dalam kasus itu.
officialaimm

1
@officialaimm Ya, saya kira begitu
musicman523

1
@ yamboy1 Coba hapus setiap surat lainnya
vroomfondel

1
Saya tidak tahu [:]benar - benar berhasil: o Bagus!
HyperNeutrino

56

Kardinal , 29 byte

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

Cobalah online!

Menghapus setiap karakter lain menghapus semua umpan baris, yang masih menghasilkan Hello, World!:

%"Hello, World!

Cobalah online!

Alasan ini berhasil adalah yang %menciptakan empat petunjuk instruksi, bergerak di masing-masing dari empat arah mata angin. IP yang meninggalkan kode sumber dihapus begitu saja. Jadi dalam kasus pertama, hanya IP selatan yang tersisa dan dalam kasus kedua, hanya IP timur akan tetap, semua yang lain hanya dijatuhkan. Dalam kedua kasus tersebut, program yang dijalankan adalah adil "Hello, World!. Itu" matikan mode string yang mana setiap sel hanya dicetak ke STDOUT. Kami tidak perlu mengakhiri string, karena meninggalkan kode sumber masih mengakhiri program.

Perhatikan bahwa ide yang sama bekerja di Beeswax , menggunakan *bukan %dan `bukan "(ini karena Beeswax sebagian besar terinspirasi oleh Cardinal tetapi menggunakan kisi heksagonal).

Cobalah online! (vertikal) | | Cobalah online! (horisontal)


49

C, 125 byte

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

Cobalah online!

Dengan karakter genap dihapus:

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

Cobalah online!


31

Sebenarnya , 2 byte

HH

Penjelasan:

H, seperti yang Anda harapkan, mendorong Hello, World!ke tumpukan.

Program utama ( HH) akan menemukan yang pertama Hdan mendorong Hello, World!ke tumpukan. Pada yang kedua H, bagaimanapun, ia akan mencoba menggunakan dua argumen (karena stack harus kosong untuk mendorong Hello, World!) dan gagal. Namun, kesalahan ini akan diabaikan dan kemudian Hello, World!akan dicetak secara implisit.

Program kedua ( H) akan mendorong Hello, World!sekali, dan itu akan dicetak secara implisit.

Ini mirip dengan jawaban 2-byte Fatalize, tetapi ini tidak benar-benar "menipu".

Cobalah online!


4
Solusi yang bagus, tapi saya pikir ini tidak masuk hitungan karena terlalu banyak seperti solusi satu karakter.
Leo Tenenbaum

32
@ LeoTenenbaum Mengapa tidak? Ini sesuai dengan aturan dengan sangat baik.
Okx

2
Yang Anda jelaskan bukan itu masalahnya, Hhanya akan mendorong Hello, World!tumpukan kosong, dan jika tumpukan tidak kosong, itu akan mengharapkan 2 argumen, jadi akan ada kesalahan, dan kesalahan diabaikan. Dan tidak Sebenarnya tidak secara implisit mencetak hanya elemen paling atas.
Erik the Outgolfer

@EriktheOutgolfer Ups. Akan memperbaiki.
Okx

Inilah sebabnya mengapa Sebenarnya adalah bahasa golf favorit saya. Ini pada tingkat bodoh yang sempurna.
RShields

22

Lua , 89 byte

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

Cobalah online!Seperti yang ditunjukkan oleh penyorotan sintaksis, ini adalah penyalahgunaan komentar masif.

Bergantian:

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

Cobalah online!

Dan untuk kenyamanan, program untuk mengonversi program ke dalam setiap bentuk karakter lain: Cobalah online!


Saya suka yang ini! Format komentar Lua tampaknya mirip dengan T-SQL, saya akan mencoba dan bekerja pada satu untuk bahasa itu.
BradC

3
Trik semacam ini harus bekerja untuk bahasa apa pun dengan komentar blokir dan komentar baris (C, JS, dll)
CalculatorFeline

2
CALCULATORFELINE: D: D
Riking

2
HHeelllloo WWoorrlldd!! agak membosankan: P
CalculatorFeline

19

Retina , 39 byte


HHeelllloo,,  WWoorrlldd!!


(.).x?
$1

Cobalah online!

Mengambil setiap karakter lain memberi:


Hello, World!
()x
1

Cobalah online!

Program pertama membuat string dengan salam digandakan. Kemudian itu menggantikan setiap pasangan karakter dengan karakter pertama. Ada juga tahap kosong yang menggantikan semua string kosong dengan string kosong di antaranya, tetapi itu tidak melakukan apa-apa. Program kedua gagal mencocokkan huruf "x" sehingga tidak menggantikan apa pun setelah membuat ucapan.

Mungkin yang lebih menggembirakan, jika tahap ketiga diubah sedikit, set karakter pertama tidak harus menjadi pesan yang sama. Hal ini dapat menyebabkan banyak solusi panjang yang identik seperti penuh dan dibelah dua .


17

Arang , 25 byte

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

Cobalah online!

Jika Anda menghapus karakter genap, Anda cukup menghapus perintah panah yang menunjukkan arah teks berikutnya, dan yang meninggalkan kode berikut:

Hello, World!

Cobalah online!

Itu juga mencetak salam.


17

Haskell , 85 byte

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

Cobalah online!

Setiap karakter kedua dihapus:

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

Cobalah online!

Ini mengeksploitasi dua format komentar di Haskell: {- -}untuk komentar in-line atau multi-line dan --untuk mengomentari sisa baris.


16

Javascript, 67 byte

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

Setiap huruf kedua dihapus:

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

Sama seperti jawaban Hasaik dari Laikoni, ini mengeksploitasi komentar.


Jawaban yang bagus, +1! Menyimpan 2 byte dengan membuat port jawaban Anda di Java 8 answer , dan byte tambahan ketika saya berubah // * /menjadi //**/(yang sayangnya tidak mungkin dalam kasus Anda karena /**/alert`Hello, World` jumlah byte yang aneh, bahkan tidak seperti dalam kasus saya) .
Kevin Cruijssen

14

Brachylog , 4 byte

Ḥ~wḤ

Cobalah online!

Penjelasan

~wmenulis variabel kanannya ke STDOUT, dan mengabaikan argumen kirinya. adalah "Hello, World!", jadi ini mencetakHello, World! .

Jika kita hanya mengambil karakter pertama dan ketiga, kita dapatkan Ḥw. Dalam hal ini wtulis variabel kiri dan abaikan variabel kanannya, sehingga ia juga mencetak Hello, World!.

2 byte

ḤḤ

Cobalah online!

Secara teknis ini adalah jawaban yang valid, tetapi ini menyatukan variabel output dari program alih-alih mencetak STDOUT, jadi saya kira program 4 byte lebih sesuai semangat tantangan.


Saya tidak berpikir jawaban 2 byte 'secara teknis' valid, karena tantangannya dicetak .
Okx

1
@Okx print, seperti di selembar kertas?
theonlygusti

@ theonlygusti Berarti mencetak ke STDOUT.
Okx

5
@theonlygusti Sigh ... itulah yang dimaksud dengan cetak secara default.
Okx

3
@Okx Anda mencoba menjadi pedantic untuk membatalkan solusi, tetapi sebenarnya tidak ada yang salah tentang hal itu. Tantangannya hanya mengatakan "output."
theonlygusti

11

Haskell, 102 byte

Program lengkap:

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

dan setiap karakter lainnya dihapus:

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

Anda dapat melepas 2 byte dengan menghapus spasi di antara p u t S t rdan \".
Sriotchilism O'Zaic

11

kode mesin x86, 162 byte

demo

PROG.COM Unduh dan jalankan dalam emulator MS-DOS , misalnya 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

setelah penghapusan MINI.COM Unduh

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

Bagaimana cara menjalankannya?

Instal DOSBox, untuk Ubuntu / Debian

sudo apt install dosbox

Menjalankannya

dosbox

Dalam DOSBOX

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

Bagaimana cara kerjanya?

Kode pengoperasian mesin mewakili instruksi bahasa rakitan .

Dalam MS-DOS untuk mencetak karakter Anda akan mengatur register dan membuat interupsi. Daftar AH akan menjadi 0x02, register DL berisi karakter Anda. Vektor interupsi adalah 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)

File kecil model MS-DOS COM adalah pilihan yang bagus, karena tidak memiliki header . Ini dibatasi oleh 64K, tetapi dalam kasus kami itu tidak masalah.

Untuk menghentikan program gunakan interupsi 0x20

int 0x20    ;0x20 interrupt     (CD 20)

Sihir

Jika Anda ingin menjalankan perintah 0xAB opcode dengan satu parameter 0xCD , Anda menulis

AB CD

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

Di MINI.COM

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

Ini sama dengan kode mesin, jika Anda tidak menggunakan register BL .

Generator

Konversi file teks dengan hex ke hex binary

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


Hapus semua `90 90` untuk -52 byte.
NieDzejkob

Juga nop di akhir tidak akan pernah tercapai.
NieDzejkob

10

Pyth , 31 byte

p% 2"HHeelllloo,,  WWoorrlldd!!

Cobalah online!

Menjadi

p "Hello, World!

Terima kasih kepada @CalculatorFeline karena menunjukkan kesalahan dan menghapus satu byte.


Karakter terus dimulai dari yang pertama, bukan yang kedua. Anda dapat menjatuhkan ruang terdepan.
CalculatorFeline

Ah, terima kasih @CalculatorFeline. Saya membaca "Ambil" sebagai "Hapus" di spec.
vroomfondel


7

05AB1E , 29 byte

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

Cobalah online!

Penjelasan

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

Setelah menghapus setiap karakter lain kita dibiarkan dengan kode

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

Cobalah online!

Penjelasan

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

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

Ia kembali "0H0e0l0l0o0,0 0W0o0r0l0d0!0" Null P0r0i0n0t0[0], dan mencetak Hello, World!sebagai efek samping. Ketika dijalankan sebagai program (bukan di REPL), nilai pengembalian tidak akan dicetak.

Setelah menghapus setiap karakter lain:

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

Ia kembali Null ol! rn[Hlo], dan mencetak Hello, World!.


7

Jelly , 26 25 byte

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

Cobalah online!

Setelah menghapus setiap karakter kedua, kita pergi dengan kode berikut.

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

Cobalah online!

Bagaimana itu bekerja

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

Secara kubik v2.1 , 222 byte

+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

Cobalah online!

Setiap surat lainnya:

+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

Cobalah online!



6

Tolong, WarDoq! , 2 byte

Hi

Cobalah online!

Hcetakan Hello, World!, iadalah no-op.

Tolong, WarDoq! dapat menambahkan dua angka dan menguji bilangan prima, sehingga dianggap sebagai bahasa pemrograman yang valid per posting meta ini .


mengapa ini diturunkan?
Uriel

NOP dan ruang besar menentang semangat.
RShields

1
+1 karena kebaruan tentang bagaimana kode sumber yang dihasilkan menekankan kembali pesan yang mendapat keluaran.
TOOGAM


6

PHP, 53 byte

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

Dengan setiap karakter lain dihapus:

#eh ae
echo'Hello, World!';

6

Oktaf, 49 45 byte

Disimpan 4 byte sejak Oktaf tidak memerlukan tanda kurung untuk melakukan pengindeksan.

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

Cobalah online!

Dan yang berkurang:

'Hello, World!'(:    )'

Cobalah online!

Penjelasan:

Kode awal memiliki duplikat huruf-huruf dalam string, sehingga kita dibiarkan Hello, World!ketika setiap detik dihapus. Beberapa ruang ditambahkan untuk memastikan tanda kurung dan apostrof disimpan.

Pengindeksan benar-benar 1:2:end. Ada 27 karakter, dan kita tidak bisa menggunakan endatau 27karena kita harus menghapus satu karakter, jadi kita gunakan 3 ^ 3saja. Ketika kami menghapus setiap karakter ketiga, pengindeksan menjadi (:)(dan beberapa spasi tambahan).

(:)berarti "meratakan dan berubah menjadi vektor vertikal" . Jadi, kita perlu memindahkannya, menggunakan '. Kita tidak perlu mengubah urutan string dalam kode asli, tetapi bekerja transposing ganda, jadi string pertama ditransposisikan dua kali menggunakan '', dan yang kedua ditransposisikan sekali saja.


6

APL (Dyalog) , 35 34 byte

-1 terima kasih kepada Martin Ender.

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

Cobalah online!

'0H0e0l0l0o0,0 0W0o0r0l0d0!0' pesan dengan nol sebagai karakter pengisi dilepas

~ kecuali

 diformat (stringified)

0 angka nol

Hanya menyisakan karakter aneh, ini menjadi 'Hello, World!' .


5

T-SQL, 75 byte

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

Penyalahgunaan komentar single dan multi-line, terinspirasi oleh versi LUA CalculatorFeline .

Setelah menghapus semua karakter genap, beberapa di antaranya adalah jeda baris:

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

5

Javascript, 73 byte

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

Buat string adengan konten a0l0e0r0t0`0H0e0l0l0o0,0 0W0o0r0l0d0!0`0/0/, lalu hapus semua 0untuk diberikan alert`Hello, World!`//, yaitu eval'd.

Mengambil setiap karakter lain dari program memberi

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

peringatan yang Hello, Worldmenggunakan sintaks string template dengan cara yang sama seperti apa yang telah dievaluasi dalam program lengkap, kemudian menyimpan hasil panggilan adan termasuk komentar yang berwawasan //;vlarpae//,').


5

> <> , 47 byte

Asli:

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

~o<< ;!!!? l

Dengan setiap karakter kedua dihapus:

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

Cobalah secara online: asli , dimodifikasi

Program asli mendorong karakter "Hello, World!" ke tumpukan (dalam urutan terbalik) diselingi dengan spasi, lalu secara bergantian mencetak karakter dan menghapus satu sampai panjang tumpukan nol. Program kedua melakukan hal yang sama, kecuali instruksi penghapusan~ tidak ada.

Jika Anda tidak keberatan berhenti dengan kesalahan, kita dapat mengambil daun dari buku Kardinal Martin Ender : kode yang dimodifikasi adalah

\"!dlroW ,olleH"!#o#

dan aslinya sama tetapi dengan baris baru disisipkan di antara semua karakter, untuk 39 byte. Cobalah secara online: asli , dimodifikasi .


5

,,,, 34 byte

 2"Hteoltlaol,l yWhourmladn!! "⟛

Untuk menghapus karakter bernomor genap ...

 "Hello, World!"

Penjelasan

Dengan semua karakter:

 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

Tanpa karakter genap:

 "..."

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

5
Ini menyiratkan Anda tidak perlu mengatakan ini tidak bersaing.
FryAmTheEggman

2
Tapi Anda seharusnya menjaga semua karakter genap diindeks ... (0-diindeks) ...
HyperNeutrino

Ups, diperbaiki. Cukup tambahkan karakter lain lol.
totallyhuman

4

Brainfuck, 155 byte

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

Cobalah online!

Setiap karakter kedua dihapus:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.