"Halo, Dunia!" (Setiap karakter lain, Bagian 2)


18

Sebagai semacam bagian 2 dari Hello, World! (Setiap karakter lain) , tulis sebuah program sedemikian rupa sehingga ketiga program ini mencetak "Halo, Dunia!": Seluruh program, karakter ke-1, ke-3, ke-5, dll. Dari program Anda, dan ke-2, ke-4, ke-6, dll.

Jika program Anda adalah:

abc
def

Seharusnya menampilkan "Halo, Dunia!", Tetapi begitu juga seharusnya

acdf

Dan

b
e

Tidak ada solusi dengan "Hello, World!" Bawaan.


6
Kenapa tidak ganti teks saja dari "Halo, Dunia!" untuk sesuatu yang lain?
Conor O'Brien

1
Saya pikir itu cukup menghindari celah dan "Halo, Dunia!" adalah kanonik.
Leo Tenenbaum

24
Aku akan senang melihat string yang berbeda dari "Halo, Dunia!" sesekali (itu hanya pendapat saya)
Conor O'Brien

1
Apakah spasi putih dan baris baru dihitung sebagai karakter?
officialaimm

6
@ ConorO'Brien Dengan efek samping yang menyenangkan bahwa sangat sedikit bahasa akan memiliki built-in untuk setiap string lainnya.
Dennis

Jawaban:


24

kode mesin x86, 378 byte

demo

PROG.COM Unduh dan jalankan dalam emulator MS-DOS , misalnya DOSBox .

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

Anda juga dapat mengunduh LEFT.COM dan RIGHT.COM

Cara kerjanya dan cara menjalankannya

Lihat jawaban untuk bagian satu

Sihir

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

Sihir

Generator

Jalankan kode, dapatkan hex. Konversikan ke biner

cat prog.hex | xxd -r -p > PROG.COM


13

Python 3 , 115 byte

print=="partisn't";
"ran" >="partisn't" ;
print((""" "HHeelllloo,,  wwoorrlldd!! """[" ) #2">"1":: 3- 1] [ 1:-1 ]))

Setiap karakter aneh

pit=print;"a">"ats'";pit(" Hello, world! "[  2>1: -1  :1])

Setiap karakter genap

rn="ats'"
rn =print 
rn("""Hello, world!""")#""":3 ][1- )

Cobalah online!

Ini mungkin bisa menjadi jauh lebih pendek, tapi saya senang saya berhasil membuatnya bekerja dengan Python. Mirip dengan jawaban vroomfondel pada bagian pertama.

Membosankan jawaban 93 byte

""""""
print("Hello, world!")
""""""#
""""

pprriinntt((""HHeelllloo,,  wwoorrlldd!!""))
#"""

Setiap karakter aneh

"""pit"el,wrd"
"""
""
print("Hello, world!")#"

Setiap karakter genap

"""
rn(Hlo ol!)"""#""
print("Hello, world!")
""

Cobalah online!


9

> <> , 45 byte

! """!!ddllrrooWW  oolllleeHH"!!"" >~o <> o <

Atau hanya karakter genap:

 "!dlroW olleH"!">o<  

Atau hanya karakter aneh:

!""!dlroW olleH!" ~ >o<

Cobalah secara online: orisinal , genap , peluang .

Versi asli mendorong " !!ddllrrooWW oolllleeHH" ke tumpukan, kemudian ikan memantul di antara >~o <, yang menghapus surat, mencetak dua, menghapus dua, mencetak dua, menghapus dua, dll. Kedua program setengah adalah program pencetakan string yang cukup standar. Bagian yang sulit adalah menggabungkan "dan !beralih masuk dan keluar dari mode string di ketiga program dengan benar.


7

Befunge-98 , 43 byte

120 x""!!ddllrrooWW  ,,oolllleeHH""cckk,,@@

Cobalah online!

Hanya yang aneh:

10x"!dlroW ,olleH"ck,@

Cobalah online!

Hanya yang genap:

2 "!dlroW ,olleH"ck,@

Cobalah online!

Penjelasan

Program lengkap:

120               Push 1, push 2, push 0.
x                 Pop 0 (y) and 2 (x) and set the instruction pointer's movement
                  delta to (x,y). That is, run the remainder of the code
                  by skipping every other cell.
"!dlroW ,olleH"   Push the code points of the output.
ck,               Print 13 characters from the top of the stack.
@                 Terminate the program.

Dalam program ganjil, 2hilang, sehingga 10xbenar - benar tidak melakukan apa-apa (itu menetapkan delta (1,0)yang merupakan defaultnya). Sisa dari program ini kemudian sama.

Dalam program genap, kita hanya mendorong 2bagian awal yang bisa kita abaikan sepenuhnya. Sisa dari program ini sama seperti sebelumnya.



5

Mathematica, 65 byte

PPrriinntt[[""HHeelllloo,,  WWoorrlldd!!""]]Print@"Hello, World!"

Itu melempar beberapa peringatan, cetakan Hello, World!, dan kembaliNull PPrriinntt[["" HHeelllloo, Null, "" WWoorrlldd!!]] . Ketika dijalankan sebagai program (bukan di REPL), nilai kembali tidak akan dicetak.

Setelah menghapus karakter genap:

Print["Hello, World!"]Pit"el,Wrd"

Mencetak Hello, World!, dan kembali"el,Wrd" Null Pit.

Setelah menghapus karakter aneh:

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

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


5

kode mesin x86, 73 byte

Terinspirasi oleh solusi Евгений Новиков , saya pikir itu seharusnya bisa dilakukan dengan sedikit trik, yaitu, hanya melompat-lompat ke kode "disjoint" yang lain untuk ketiga varian. Saya masih mencoba dengan varian cerdas yang digunakan lodsb; lodsbsebagai titik pusat (jadi hanya satu string konstan yang diperlukan untuk semua varian)

EB 14 00 00 8A 8A 17 16 01 01 B4 B4 09 09 CD CD
21 21 CD CD 20 20 8A 1f 01 B4 09 CD 21 CD 20 48
65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 00 48 48 65
65 6c 6c 6c 6c 6f 6f 2c 2c 20 20 57 57 6f 6f 72
72 6c 6c 64 64 21 21 00 00

Jika saya ingat dengan benar dari masa kecil saya, model mungil COM dimulai dengan DS=CS=SSdan kodenya dimuat mulai dari CS:0100h. Saya tidak menganggap itu dijamin bahwa kode tersebut dimuat ke dalam blok memori memusatkan perhatian (jika dijamin, saya bisa menjatuhkan dua byte).

Seharusnya pembongkaran kode panjang

  JMP *+14h
  ; 20 irrelevant bytes
  MOV DX,message
  MOV AH,09h
  INT 21h;  print string pointed to by DS:DX
  INT 20h;  exit program
message:
  DB "Hello, World!\0"
  DB "HHeelllloo,,  WWoorrlldd!!\0\0"

Pembongkaran kode aneh

  JMP *+00h
  MOV DX,message
  MOV AH,09h
  INT 21h;  print string pointed to by DS:DX
  INT 20h;  exit program
  ; some irrelevant bytes
message:
  DB "Hello, World!\0"

Pembongkaran kode genap:

  ADC AL,00h
  MOV DX,message
  MOV AH,09h
  INT 21h;  print string pointed to by DS:DX
  INT 20h;  exit program
  ; some irrelevant bytes
message:
  DB "Hello, World!\0"

Kerja bagus! Dalam program DOSBox tidak berfungsi. Saya tidak tahu mengapa com file dengan sistem kode beku ini pada awalnya.
Евгений Новиков

Uji kode Anda lain kali. Sebaliknya, 8Adi 0116 seharusnya BA, dan string diakhiri oleh $, bukan NULL.
NieDzejkob

4

Retina , 48 byte

G |`

HHeelllloo,,  WWoorrlldd!!
$_&

(.)\1t?
$1

Cobalah online!

Posisi ganjil:

G|
Hello, World!
_
()1?$

Cobalah online!

Posisi genap:

 `
Hello, World!$&
.\t
1

Cobalah online!

Penjelasan

Program lengkap:

G |`

Ini tidak melakukan apa-apa. Ini |bukan opsi konfigurasi yang ada. Itu Gmembuat ini menjadi tahap grep, tetapi benar-benar tidak ada yang harus dipahami dan regex kosong, jadi ini tidak melakukan apa-apa. Tujuan dari tahap ini adalah untuk memiliki dua umpan garis di depan utama "Halo, Dunia!" baris sehingga salah satu dari mereka selalu selamat reduksi. Alasan untuk membuat ini menjadi rusa grep adalah bahwa kita perlu mengimbangi paritas garis, dan tahapan grep hanya membutuhkan satu garis.


HHeelllloo,,  WWoorrlldd!!

Ini mengubah string kerja (kosong) menjadi output yang diperlukan dengan setiap karakter digandakan.

$_&

Ini tidak melakukan apa-apa. Regex mencoba untuk mencocokkan a _dan &setelah akhir string yang tentu saja tidak mungkin. Kami akan membutuhkan karakter-karakter itu dalam versi yang diperkecil, sekali lagi untuk berurusan dengan kesalahan lineishing yang hilang.

(.)\1t?
$1

Akhirnya, kami menghapus karakter duplikat dengan menggantinya (.)\1dengan $1. Ini t?tidak pernah digunakan tetapi akan diperlukan lagi dalam versi yang dikurangi.

Program aneh:

G|
Hello, World!

Tidak Gdapat mencocokkan input kosong, tapi itu sebabnya kami memiliki |untuk mengizinkan pencocokan kosong alternatif. Ini mengubah string kerja kosong menjadi output yang diinginkan.

_
()1?$

Ini menggantikan garis bawah dengan ()1?$, tetapi tidak ada garis bawah dalam string, jadi ini tidak apa-apa.

Program genap:

 `
Hello, World!$&

The `hanya menunjukkan string konfigurasi kosong, jadi kita lagi menggunakan regex kosong untuk menggantikan string bekerja dengan output. Kali ini kami juga menyisipkan $&tapi itu pertandingan itu sendiri, yang kosong, tentu saja, jadi tidak ada apa-apa.

.\t
1

Ini akan menggantikan karakter apa pun yang diikuti oleh tab dengan 1, tetapi kami tidak memiliki tab, jadi ini juga no-op.




2

PHP, 70 byte

"";echo'Hello, World!'.""//pprriinntt''HHeelllloo,,  WWoorrlldd!!''
;;

Karakter ganjil:

";coHlo ol!."/print'Hello, World!';

Karakter genap:

"eh'el,Wrd'"/print'Hello, World!'
;

2

Haskell , 92 byte

{---- }

mmaaiinn==ppuuttSSttrr""HHeelllloo,,  WWoorrlldd!!""----}main=putStr"Hello, World!"

Cobalah online! Sepertinya penyalahgunaan komentar terlalu banyak untuk ditangani oleh penyorotan sintaks. {- ... -}adalah komentar inline atau multi-line, sedangkan --memulai komentar baris.

Karakter ganjil:

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

Cobalah online!

Karakter genap:

-- 
main=putStr"Hello, World!"--}anptt"el,Wrd"

Cobalah online!


2

Zsh , 54 byte

<<<Hello\ world!||eecchhoo  HHeelllloo\\  wwoorrlldd!!

Cobalah online!

Program utama berhasil mengeksekusi pernyataan pertama, sehingga pernyataan setelah boolean ||diabaikan.

Untuk aneh / bahkan, yang <<<Hello\ world!menjadi salah seorang terselesaikan <<heredocatau <filedisediakan di stdin. Either way, ||menjadi |, dan jadi apa pun yang dihasilkan oleh perintah pertama disalurkan ke dan diabaikan oleh echo.


1

LOGO , 71 byte

;;\\
pr[Hello, World!]er "|

pprr[[HHeelllloo,,  WWoorrlldd!!]]
;;\\
|

(program memiliki baris tambahan)

Dua versi yang dihapus:

;\p[el,Wrd]r"
pr[Hello, World!]
;\|

dan

;\
rHlo ol!e |
pr[Hello, World!];\

(program memiliki baris tambahan)

Untuk penjelasan apa prdan apa yang erharus dilakukan, lihat posting ini . Dalam hal ini, eradalah feed dengan kata menentukan nama prosedur.

Itu \ adalah karakter escape dalam Logo, yang akan keluar dari baris baru setelah akhir komentar, oleh karena itu buat baris kedua ( rHlo ol!e |) dari program yang dihapus kedua sebagai komentar.


1

Javascript, 68 byte

//**
alert`Hello, World`//**//aalleerrtt``HHeelllloo,,  WWoorrlldd``

Karakter Ganjil:

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

Karakter genap:

/*
lr`el,Wrd/*/alert`Hello, World`

Versi modifikasi dari jawaban saya pada yang lain.


1
Mengapa Anda membutuhkan ruang di awal?
CalculatorFeline

Ini sepertinya tidak valid secara sintaksis ketika Anda mengambil karakter ke-1, ke-3, dll. Juga, ada yang hilang ldi HHeelllloo.
Arnauld

@ CalculatorFeline, @ Arnauld diperbaiki
SuperStormer


1

BotEngine , 180 178 byte

Berdasarkan jawaban saya untuk pertanyaan ini .

 vv 
 v < 
 eHH 
 eee 
 ell 
 ell 
 eoo 
 e,, 
 e   
 eWW 
 eoo 
 err 
 ell 
 edd 
 e!! 

>>P          e     e     e     e     e     e     e     e     e     e     e     e     e P

Karakter ganjil (perhatikan beberapa spasi tambahan di baris terakhir):

 v
v<
eH
ee
el
el
eo
e,
e 
eW
eo
er
el
ed
e!
>P                                          

Karakter genap:

v     H  e  l  l  o  ,     W  o  r  l  d  ! 
>     e  e  e  e  e  e  e  e  e  e  e  e  eP  

0

Pesona Rise , 52 byte

 L @""H!edlllroo,W  W,oorlllde!H"" ~@"!dlroW ,olleH"

Cobalah online!

Runic biasanya tidak terlalu baik dalam berurusan dengan radiasi karena memiliki karakter kontrol aliran dihapus secara acak membuat eksekusi penelusuran menjadi sangat besar, tetapi radiasi yang dapat diprediksi seperti setiap karakter lainnya? Mudah, kami hanya menyandikan dua program yang dibalik satu sama lain dan disisipkan, kemudian tempelkan salinan ketiga untuk eksekusi dasar dan kontrol yang mana dijalankan dengan satu karakter. Dalam program 2, salinan ketiga adalah sampah yang tidak pernah dilihat, dan dalam program 3 itu mempertahankan tanda kutip, memungkinkan untuk muncul tanpa mencetaknya.

Program 1 hanya menjalankan bagian ini:

 L                                  @"!dlroW ,olleH"

Program 2 hanya menjalankan bagian ini:

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

Seperti ini:

  "Hello, World!" @!lo olH

Cobalah online!

Program 3 hanya menjalankan bagian ini:

 L @ " ! d l r o W   , o l l e H " ~ " d r W , l e "

Seperti ini:

L@"!dlroW ,olleH"~"drW,le"

Cobalah online!

The "drW,le"porsi dijalankan, tetapi ~segera muncul itu dari tumpukan, melestarikan output yang diinginkan.

Secara naif akan muncul bahwa konversi jawaban> <> akan menghasilkan program yang lebih pendek, dengan bobot 45 byte:

! ```!!ddllrrooWW  oolllleeHH`!!`` R~$ LR $ L

Namun, Runic memiliki satu batasan yang> <> tidak memiliki: ukuran stack maksimum 10 + IP mana (yang awalnya 10). Dan !!ddllrrooWW oolllleeHHberisi 24 karakter, menyebabkan IP berdarah mana sampai habis sebelum menjalankan Rperintah, sehingga tidak ada output untuk program dasar.

Cobalah online!

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.