Palindrome Halo, Dunia


29

Tugas Anda adalah membuat program yang mencetak "Salam, Planet!" tepatnya ke konsol. Tampaknya cukup sederhana, bukan? Nah, inilah triknya. Kode harus berupa palindrome, artinya dibaca dari kanan ke kiri sama seperti di kiri ke kanan. Celah standar TIDAK diperbolehkan.


Ini sepertinya bukan "halo dunia".
Erik the Outgolfer

4
@ ΈρικΚωνσταντόπουλος Ini sama dengan Hello World untuk semua maksud dan tujuan. Tujuannya adalah untuk mencetak string pendek yang terdiri dari dua kata dengan tanda baca yang umum dalam program Hello World juga. Terlepas dari built-in yang mencetak Hello World, solusi akan benar-benar identik (terlepas dari string yang sebenarnya) terlepas dari string yang sebenarnya sedang dicetak. (Dan saya berasumsi frasa "Salam, Planet!" Dipilih secara khusus untuk membuat built-in tidak berguna.)
Martin Ender

1
@ MartinBüttner Saya pikir itu Hello, world!dan Hello World!satu-satunya output yang diizinkan untuk program halo-dunia .
Erik the Outgolfer

Jawaban:



16

TI-BASIC, 67 byte

"!tenalP ,sgniteerG"
"Greetings, Planet!"

Ini berfungsi karena baris terakhir dari sebuah program ditampilkan di layar, sedangkan string pertama pada dasarnya diperlakukan sebagai komentar.

Setiap huruf kecil disimpan sebagai 2 byte, dan karakter yang tersisa adalah 1 byte. Jika saya membengkokkan aturan dan mencetak dalam huruf kapital semua, itu akan menjadi 41 byte :

"!TENALP ,SGNITEERG"
"GREETINGS, PLANET!"

Bisakah Anda menggunakan edan i(angka) untuk mengurangi jumlah byte lebih lanjut?
Addison Crump

1
@ VTCAKAVSMoACE Saya menganggap itu, tetapi mereka dicetak miring, sehingga mereka terlihat, sedikit berbeda.
NinjaBearMonkey

Agar jelas, baris pertama bukan komentar, tetapi disimpan ke variabel jawaban.
Julian Lachniet

12

Saya tahu ini agak terlambat (dan agak rewel), tapi ...

> <> (Ikan), 47 45 47 Bytes (benar-benar 43 45, jika saya tidak menggunakan arah acak)

x"!tenalP ,sgniteerG"!|o|!"Greetings, Planet!"x

Jawaban-jawaban ini sedikit berbeda satu sama lain; ada kemungkinan salah satu arah dari kode dieksekusi.

Jadi, dengan "mencetak ke konsol", saya berasumsi Anda bermaksud mencetak ke stdout. Ini menimbulkan kesalahan; kesalahan dilemparkan ke stderr SETELAH string dicetak ke stdout.

Untuk membuktikan bahwa ini bekerja dua arah, saya menggunakan direktur "arah acak", "x". Fish adalah bahasa dua dimensi, jadi, tidak peduli ke arah mana sutradara menunjuk, kode itu masih (pada akhirnya) akan dieksekusi.

Dengan asumsi bahwa sutradara pertama menunjuk ke kanan, karakter dimuat ke "tumpukan" dalam urutan terbalik, kemudian kebalikan dari kebalikan (atau teks normal) dicetak.

Dengan asumsi bahwa kedua direktur menunjuk ke kiri, karakter, sekali lagi, dimuat ke "tumpukan" dalam urutan terbalik (karena kode memuatnya ke belakang di sini, arah adalah ke kiri), kemudian kebalikan dari kebalikan (atau teks normal) dicetak.

Jika direktur acak menunjuk ke atas atau ke bawah, ini tidak masalah - fish tahu untuk mengulang ke bagian bawah atau di luar kode, menunjuk kembali ke pengacak. Dengan cara ini, ia akan terus mengulang dengan pengacak sampai menunjuk ke dalam, menuju kode untuk dieksekusi.

The !|o|!bit melakukan berikut, dari kedua belah pihak:

  • !lewati instruksi berikutnya (akan selalu terlewati |)

  • |adalah reflektor; itu menunjuk ke dalam kembali ke arah o.

  • o mengeluarkan item saat ini dari stack ke konsol sebagai karakter dan menghilangkannya dari stack.

Jadi, pada dasarnya, ini adalah trik "dua cermin di kamar mandi yang ditekan bersama", di mana saya menghasilkan sampai saya tidak bisa lagi.

Sekarang menggunakan emoji kucing. >o<mengalihkan output ke dalam tanpa batas, masih melempar kesalahan, tapi saya bisa lolos dengan tidak menggunakan lompatan ke refleksi.

Ternyata saya benar pertama kali - upaya kedua bukan palindromik , tetapi reflektif .

Fish (tanpa mencetak ke stderr), 64 Bytes (ew)

x"!tenalP ,sgniteerG"!;oooooooooooooooooo;!"Greetings, Planet!"x

Bung ini sedikit lebih lama.

Ini memiliki fungsi panah acak yang sama (untuk membuktikan itu berfungsi dua arah) dan tidak mencetak ke stderr.

Perbedaannya di sini jelas; Saya benar-benar mencetak setiap item dalam tumpukan, lalu mengakhiri eksekusi dengan; .

Itu !;tidak segera mengakhiri eksekusi, seperti !melompati item berikutnya (end exec, dalam kasus ini) dan berlanjut sampai menyentuh sisi lain, yang bertindak sebagai;! , di mana ia mengakhiri eksekusi sebelum melewatkan apa pun.

Ini mengikuti pola arah acak yang sama dengan jawaban yang lebih pendek.


Saya pikir Anda harus memanggil bahasa> <> untuk membedakannya dari cangkang Ikan
Aaron

@ Harun Secara umum diasumsikan bahwa Ikan di sini berarti> <>, tapi saya pernah mengalami masalah itu sebelumnya - saya akan menambahkannya. Terima kasih!
Addison Crump

seperti yang saya duga, tidak dapat diprediksi apakah kode lengkap akan dikeluarkan atau tidak. Bagaimana jika penghitung program terjebak di antara dua instruksi arah acak, atau hanya terjebak di salah satu instruksi arah acak, misalnya, ternyata turun, mencapai bagian bawah, kembali ke instruksi itu dan mulai dari awal?

@ GLASSIC Program hanya akan menampilkan sekali, dan seluruh kode tidak akan pernah dieksekusi.
Addison Crump

11

Bubblegum , 38 byte

0000000: 73 2f 4a 4d 2d c9 cc 4b 2f d6 51 08 c8 49 cc 4b 2d 51 04  s/JM-..K/.Q..I.K-Q.
0000013: 04 51 2d 4b cc 49 c8 08 51 d6 2f 4b cc c9 2d 4d 4a 2f 73  .Q-K.I..Q./K..-MJ/s

10

Macaroni 0,0.2 , 52 byte

print "Greetings, Planet!""!tenalP ,sgniteerG" tnirp

Solusi yang tidak menggunakan komentar. (Sebagian besar karena Macaroni tidak memiliki komentar ...)


15
Macaroni tidak punya komentar? ಠ_ಠ
Alex A.



6

JavaScript, 56 byte

Ini dapat berjalan di browser apa pun.

alert("Greetings, Planet!")//)"!tenalP ,sgniteerG"(trela

Mengganti print/tnirpdengan alert/trela, itu bekerja di mesin lain juga.
ETHproduk

@ ETHproductions tidak percaya saya tidak memikirkan itu, terima kasih!
Downgoat


@ jrich your're right, alert`Greetings, Planet!`//`!tenalP ,sgniteerG`trelaadalah 52 byte
Aᴄʜᴇʀᴏɴғᴀɪʟ

5

GolfScript, 41 byte

"Greetings, Planet!":"!tenalP ,sgniteerG"

Lihat bu, jangan-jangan! Cobalah online di Web GolfScript .

Bagian kedua dari kode sumber menyimpan string dalam string kedua.

"Greetings, Planet!":"!tenalP ,sgniteerG"
"!tenalP ,sgniteerG"

akan dicetak

Greetings, Planet!Greetings, Planet!

5

C ++, 129 byte

Mencoba melakukan ini tanpa komentar menuntun saya ke mimpi buruk preprosesor yang dalam dan gelap tanpa jalan keluar yang bisa saya lihat. Alih-alih, saya hanya bertujuan untuk membuatnya sesingkat mungkin.

/**/
#include<cstdio>
int main(){puts("Greetings Planet!");}//*/
/*//};)"!tenalP sgniteerG"(stup{)(niam tni
>oidtsc<edulcni#
/**/

5

Python 3, 57 byte

print('Greetings, Planet!')#)'!tenalP ,sgniteerG'(tnirp

Saya memperbaiki masalah dengan kurung.

Python 2, 53 byte

print'Greetings, Planet!'#'!tenalP ,sgniteerG'tnirp

Saya menggunakan keuntungan dari kurangnya tanda kurung dan spasi yang diperlukan dalam Python 2, tetapi tidak ada perbedaan besar.


5

Jelly, tidak bersaing

25 byte Jawaban ini tidak bersaing, karena tantangan mendahului pembuatan Jelly.

»1ị“RsẈḄ,#ʠU“Uʠ#,ḄẈsR“ị1»

Dengar, tidak ada komentar! Cobalah online!

Bagaimana itu bekerja

»1ị“RsẈḄ,#ʠU“Uʠ#,ḄẈsR“ị1»  Main link. No arguments.

   “        “        “  »  Decompress all three strings; yield a list of strings.
    RsẈḄ,#ʠU               (decompresses to 'Greetings, Planet!')
             Uʠ#,ḄẈsR      (decompresses to ' WafdkmC Posited,')
                      ị1   (decompresses to 'Taarhus')

»1                         Take the maximum of the default argument (0) and 1.
  ị                        Select the string at the index to the left.

4

Terjebak , 41 Bytes

"Greetings, Planet!"p"!tenalP ,sgniteerG"

Cukup mirip dengan jawaban CJam, kecuali di Terjebak jika perintah cetak dikeluarkan, pencetakan tumpukan otomatis ditekan.


3

Mathematica, 52 byte

Print@"Greetings, Planet!""!tenalP ,sgniteerG"@tnirP

Juga menghasilkan Null "!tenalP ,sgniteerG"[tnirP]yang tidak bisa dicetak.


1
FYI, banyak jawaban Anda (termasuk yang ini) telah dilemparkan ke dalam antrian Kualitas Rendah karena hanya berupa judul / skor dan kode. Meskipun tidak ada yang salah dengan hal itu, Anda dapat mempertimbangkan untuk menambahkan lebih banyak teks (seperti penjelasan) agar tidak ditandai secara otomatis.
Mego

@Mego Oke, pikir mereka cukup jelas.
LegionMammal978

1
Saya tidak mengatakan bahwa kurangnya penjelasan adalah hal yang buruk (meskipun jawaban dengan penjelasan cenderung mendapat lebih banyak suara positif), saya hanya memberi tahu Anda bahwa jawaban Anda (yang sah) ditandai secara otomatis karena panjangnya. :)
Mego

2
Anda dapat menyimpan 2 byte dengan Echodi v10.3.
shrx

3

Fission , 45 43 byte

Terima kasih kepada jimmy23013 untuk menghemat 2 byte.

;"!tenalP ,sgniteerG"R"Greetings, Planet!";

Cobalah online!

Rmenginisialisasi atom yang bergerak ke kanan. "matikan mode string yang hanya mencetak string yang diinginkan ke STDOUT sebelum memukul ;, yang menghancurkan atom dan mengakhiri program. Paruh pertama tidak pernah dieksekusi.


@ jimmy23013 Saya tidak tahu, jujur ​​saja. Terima kasih.
Martin Ender

3

05AB1E , 16 byte

Kode:

”!º¥,ÁÙ””ÙÁ,¥º!”

Penjelasan:

”!º¥,ÁÙ”          # Compressed string which results in "! Crm, Everywhere".
        ”ÙÁ,¥º!”  # Compressed string which results in "Greetings, Planet!".
                  # Top of stack is implicitly outputted.

Cobalah online!


2

STATA, 52 byte

di "Greetings, Planet!"//"!tenalP ,sgniteerG" id

Versi yang sedikit lebih panjang (53 byte) yang tidak menggunakan komentar adalah:

#d
di "Greetings, Planet!";"!tenalP ,sgniteerG" id
d#

#d [something]mengubah pembatas (awalnya carriage return) menjadi ;kecuali [sesuatu] adalah cr, jadi perintah pertama mengubah pembatas ;, yang kedua mencetak string, dan yang ketiga (yang berlanjut sampai akhir) tampaknya tidak ada, meskipun saya tidak punya tahu kenapa. Saya akan menduga bahwa ini akan menimbulkan kesalahan (perintah tidak dikenal "! TenalP, sgniteerG" atau sesuatu), tetapi ternyata tidak.


2

Japt , 29 byte

Bahasa pemrograman ini dibuat setelah pertanyaan diposting, tetapi tidak dibuat untuk pertanyaan ini.

`!t?ÓP ,?Ä>ÎG`;`GÎ>Ä?, PÓ?t!`

Cobalah online!

Masing ?- masing adalah karakter Unicode yang tidak dapat dicetak: U + 0082, U + 000F, U + 000F, dan U + 0082, masing-masing.

Fakta menyenangkan: Jika Japt diterbitkan sebulan lebih cepat, itu akan memenangkan tantangan ini secara sah.


2

APL, 41 byte

'Greetings, Planet!'⍝'!tenalP ,sgniteerG'

Di APL, nilai terakhir dicetak dan karakter lampu (⍝) memulai komentar.


Halo, dan selamat datang di PPCG! Jawaban bagus!
NoOneIsHere


2

TCL, 80 Bytes

proc unknown args {puts "Hello World!"}
}"!dlroW olleH" stup{ sgra nwonknu corp

PENJELASAN: TCL mengeksekusi proc global unknown ketika menemukan panggilan ke perintah yang tidak ditentukan, baris pertama mendefinisikan ulang proc itu menjadi program "hello world" yang sederhana.

Aturan mengutip TCL cukup halus, tanda kurung terbuka memulai kata yang dikutip yang meluas ke tanda kurung tutup yang cocok berikutnya , memungkinkan kata-kata bertingkat yang dikutip. Kawat gigi diperlakukan sebagai karakter normal. lima kata: }"!dlroW olleH", stup{, sgra, nwonknudan corp. Tidak ada perintah yang bernama yang }"!dlroW olleH"didefinisikan, jadi undefinedproc dari baris pertama dipanggil sebagai gantinya.

Pertanyaan serupa telah diposting di StackOverflow of kuno; yang sejak itu ditutup dan dihapus. Saya menggunakan solusi saya sebagai lidah di sampel TCL pipi dalam jawaban ini , dan sekarang saya mendapatkan komentar meminta penjelasan, jadi saya membuat ulang jawaban saya di sini.



1

Vitsy , 41 Bytes

Bahasa pemrograman ini dibuat setelah pertanyaan diposting, tetapi tidak dibuat untuk pertanyaan ini.

"! tenalP, sgniteerG" Z "Salam, Planet!"

The Zkarakter output segala sesuatu di tumpukan ke stdout.

Cobalah online!


1

Membatalkan 98 - 49 byte

"!tenalP ,sgniteerG<DC1>"k,@,k"<DC1>Greetings, Planet!"

Kode di atas berisi dua karakter yang tidak patut dicetak dengan kode 17 (kontrol perangkat 1) diwakili oleh <DC1>.


1

MSM , 73 byte

GGreetings, Planet!.................,.................!tenalP ,sgniteerGG

Paruh pertama tepat sebelum tengah ,membangun string salam terbalik termasuk tambahan Gdi bagian paling kanan. Bagian tengah ,menjatuhkannya dan sisanya adalah program "Halo / Ucapan / apa pun" kanonik. Karakter tambahan di kedua ujung diperlukan, karena pesan berisi a ,. Yang kiri dieksekusi dan menjatuhkan s. Keduanya ,dan smembutuhkan pengganti untuk titik-titik konkatasi kiri, maka Gs. Di ,sebelah kanan tidak dieksekusi, tetapi membangun ke string terakhir.


1

CoffeeScript, 53 byte

Mirip dengan Ruby dan Lua dan hampir semua varian di sini.

alert 'Greetings, Planet!'#'!tenalP ,sgniteerG' trela


1

Bash, 52 48 byte

echo Greetings, Planet!||!tenalP ,sgniteerG ohce

Juga bekerja di ksh, zsh, yash, dash. Tapi bukan tcsh.

$ cat x.sh
echo Greetings, Planet!||!tenalP ,sgniteerG ohce
$ bash x.sh
Greetings, Planet!
$ ksh x.sh
Greetings, Planet!
$ zsh x.sh
Greetings, Planet!
$ yash x.sh
Greetings, Planet!
$ dash x.sh
Greetings, Planet!
$ tcsh x.sh
tenalP: Event not found.
$

1
Hapus semua kutipan.
manatwork

1
Oh sayang, jawaban bash lebih pendek dari python = /. Kembali ke papan gambar!
Ashwin Gupta

1

Lua, 52 Bytes

print"Greetings, Planet!"--"!tenalP ,sgniteerG"tnirp

Di terminal Lua, hanya 44 byte dengan

="Greetings, Planet!"--"!tenalP ,sgniteerG"=

Salahku. Terima kasih atas peringatannya!
Digital Veer

Hapus semua tanda kurung. Untuk fungsi dengan parameter string tunggal, mereka opsional.
manatwork

Lua 5.3 tidak memerlukan =di terminal, jadi itu adalah 2 byte di sana. Saya pikir itu ada pada tahun 2015, tidak yakin ya.
val berkata Reinstate Monica

1

Bima Sakti 1.5.10 , 43 41 39 byte

"Greetings, Planet!"!tenalP ,sgniteerG"

Penjelasan

"Greetings, Planet!"                       # push the string to the stack
                    !                      # output the TOS
                     tenalP ,sgniteerG"    # throws an error and exits

Pemakaian

python3 milkyway.py <path-to-code>

Apakah Anda benar - benar membutuhkan komentar? Jika ini berbasis stack (tanpa output tersirat), maka hanya mengeluarkan stack akan berfungsi.
Addison Crump

Kamu benar! Terima kasih. @FlagAsSpam
Zach Gates
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.