Tulis Program dalam Penyamaran [ditutup]


14

Tantangannya adalah membuat program yang memecahkan salah satu masalah HQ9 + sambil terlihat seperti bahasa lain.

Catatan : Ini bukan tantangan golf.

Aturan:

  • Program harus melakukan salah satu tugas berikut saat dijalankan.
    • Cetak "Halo, Dunia!"
    • Cetak seluruh sumbernya.
    • Cetak lirik untuk "99 Botol Bir di Dinding" (seperti yang terlihat di sini ).
  • Sepintas program harus terlihat seperti bahasa lain.

Grading

  • Program kerja yang memenuhi aturan. +3
  • Poin bonus jika "bahasa lain" dapat dijalankan (sintaks valid). +1
  • Bahkan lebih banyak poin jika "bahasa lain" dapat melakukan sesuatu yang bermanfaat. +3
  • Banyak poin bonus untuk program yang valid (dan bermanfaat) dalam lebih banyak bahasa. +5 untuk setiap bahasa lebih dari 2.

1
Bagaimana mereka dinilai? Anda membutuhkan kriteria objektif. Periksa di sini: codegolf.stackexchange.com/help/on-topic
MrZander

Oke, saya menambahkan sistem poin.
Kevin Cox

1
Jadi ... Anda mencari polyglot ?
Iszi

Iya. Tetapi dengan penekanan pada "menyembunyikan" fitur semua kecuali satu bahasa sampai batas tertentu.
Kevin Cox

4
print ("Hello, World");dengan sendirinya akan berjalan dalam banyak bahasa
marinus

Jawaban:



18

Ruby + C + Whitespace.

Program ini C tetapi nampak seperti (dan dijalankan sebagai) Ruby. Saya juga berhasil melempar spasi putih di sana.

C mencetak sumbernya sendiri (sayangnya tidak cukup quine). Ruby mencetak 99 botol bir dan ruang putih menyapa.

#include <stdio.h>  
#define def int          
#define beer main(int i){char b[1024];          
#define print(v) print(int v){            
#define end ;}                
#define if(x) fputs(b,stdout); fgets(b,1024,f); if(x){               
#define else ;} else{                       
#define puts                    
#define print        
#define open(fn) FILE *f = fopen(fn,"r");             
#define while(x) fgets(b,1024,f); while(!feof(f)){                      


def beer                
    # define beer      

    open("test.c")

   i=100;


    while ( i >= 0 )
        if ( i > 0 )
            print "#{i} bottle#{i==1&&''||'s'} of beer on the wall, "
            puts  "#{i} bottle#{i==1&&''||'s'} of beer."
            print "Take one down and pass it around, "
            puts  "#{i-1} bottle#{i==2&&''||'s'} of beer on the wall."
            puts
        else
            puts "No more bottles of beer on the wall, no more bottles of beer."
            puts "Go to the store and buy some more, 99 bottles of beer on the wall."
        end
        i -= 1
    end

    return 0      
end

beer

Dan karena SO tidak terlalu bagus untuk di sini ada tautan .


15

Golfscript / HQ9 +

9

Sebuah rujukan Golfscript yang juga berfungsi sebagai program HQ9 + yang mencetak lirik hingga 99 botol bir.

Saya tahu ini bukan tantangan golf, tetapi saya tidak bisa menahan keinginan untuk menjawab ini dengan satu karakter.


1
Dan saya cukup konyol untuk menganggap HQ9 + tidak bisa terlihat seperti bahasa lain: D
Kevin Cox

5
Iya! Dan dengan gila kelihatannya terletak angka "9".
Pierre Arlaud

7

Perl, 7 poin

99 <?php
for($i='no more',$_="`\2l\";7hF'`-{9\17p\t\2ZY\14fE\25T\133J`\35l\"76~\x3";
99>${2}="$i bottle".(${$i+=1}<'))'?+s?:s:!'((').' of beer';
${3}="
Take one down and pass it around, ${1}.

".ucfirst("${1}, ${2}.${3}"))${1}=$i||${2}?"${2} on the wall":'?;\'';
print substr("${1}, ${2}.${3}".
($_^"jE\3\2OXH2O\5\15\10M$_").", ${2} on the wall.",3,13*$i*$i);

Ini adalah program Perl yang mencetak Hello, World!.

Rincian skor:

  • Mengikuti semua aturan: +3
  • Apakah sintaks yang valid dalam bahasa lain: +1
  • Lakukan sesuatu yang menarik di bahasa lain: +3

Sidenote:

Setelah Anda tahu apa fungsinya, itu mungkin terlihat 'jelas' di tempat nongkrongnya, tetapi ini adalah penipuan.

Pengikut:

$_="`\2l\";7hF'`-{9\17p\t\2ZY\14fE\25T\133J`\35l\"76~\x3";
print$_^"jE\3\2OXH2O\5\15\10M$_"

akan menampilkan:

Go to the store and buy some moreET[J`l"76~

7

JavaScript, 7 poin

<!--
h='Hello, World!'
-->

/******<br>

<b>Hello, World!</b><br>

*******<br>

This is my <i>awesome</i> Hello World page<br>

*******<br>

Look I can make images I'm so good at HTML:<br>
<img src='http://pieisgood.org/images/slice.jpg' alt='awwww you cannot see my amazing image' /><br>
<hr>

These are the things this page has:<br>
<ul>
<li>Bold</li>
<li>Italics</li>
<li>Images</li>
<li>Lists</li>
</ul><br>

I like random characters! That's what this page will finish with:<br>
;37!&$89]"]0(!)89^!&8*/81+-0;h

Saat dijalankan dalam JavaScript, menghasilkan "Halo, Dunia!"

Ketika dilihat sebagai HTML, terlihat seperti ini:

tangkapan layar

Mencetak gol

  • Program kerja yang memenuhi aturan +3
  • Sintaks bahasa lainnya valid +1
  • Bahasa lain melakukan sesuatu yang bermanfaat (Anda dapat meletakkan HTML apa pun yang Anda inginkan di sana) +3

Halus! Ini mengasumsikan bahwa implementasi yang mengevaluasinya mencetak nilai penyelesaian dari pernyataan terakhir ke stdout.
FireFly

@FireFly ya, itulah yang evaldan semua konsol lakukan.
Gagang Pintu

evaltidak mencetaknya ke stdout; mengembalikannya sebagai hasil dari ekspresi panggilan fungsi. Tapi ya, saya hanya nitpicking; Maaf. : p
FireFly

6

C ++ / Python

#include <iostream>

#define print(a) int main() {std::cout << a << std::endl;}

print("Hello, World!")

Akan berjalan dalam Python (keduanya 2.x dan 3.x) dan mengkompilasi dalam C ++ untuk mencetak (dengan carriage return):

Halo Dunia!


5

Cetakan berikut ini "Halo, Dunia" (dan tabel acak) dalam HTML dan "Halo, Dunia!" di Whitespace .

<html>             
<head>  
<title>                     
Hello,World!    
</title>                      
<body>  
<p>                       
Hello,World!    
</p>                            
<table> 
<caption>                 
Summary 
</caption>           
<tbody> 
<tr>                            
<th>Year</th>   
<th>Revenue</th>                            
</tr>   
<tr>                     
<td>2012</td>   
<td>$100,000</td>                     
</tr>   
</tbody>                  
</table>    
<footer>                
HTML5!  
</footer>  
<!--Comment-->
</html>

Anda dapat menemukan versi "99 Botol" di sini 99-bottles-of-beer.net/language-whitespace-154.html
Davio

5

PHP, HQ9 +, Brainfuck dan Bash (23 poin, saya pikir)

Sepertinya PHP, tapi ...

Penyalahgunaan pengalihan dan kutipan STDERR.

what the >&_@ is a "<?php
//Boring, really ( ;[ ). This just prints Hello World!"
echo "Hello, World!"; //]&> are random characters that I like putting in"
?>" program?

Ini berjalan dan melakukan hal-hal dalam semua bahasa yang terdaftar, tetapi terlihat seperti kode PHP (agak aneh)

Di Bash, itu hanya mencetak "Halo, Dunia!" (membuat file sampah di sepanjang jalan).

Di HQ9 +, ia mencetak Hello World beberapa kali (satu kali untuk setiap kemunculan Hatau h).

Di Brainfuck, ini adalah "program kucing" - ia membaca dari input standar dan mengeluarkan inputnya ke output standar ( ><,[.,]>>).

Di PHP, ia mencetak beberapa teks:

apa> & _ @ adalah "Halo, Dunia!" program?

Penjelasan Bash

>&_@disamarkan sebagai teks yang tidak berbahaya menggantikan kutukan, tetapi sebenarnya merupakan pengalihan STDERR ke file _@, sehingga Bash tidak mengeluh bahwa whatitu bukan program yang valid. Ini juga memakanis a <?php bit dan komentar pertama.

Komentar pertama memiliki kutipan di bagian akhir (kutipan ada untuk mencegah <?phpagar tidak dijalankan). echo "Hello, World!";berjalan secara normal dalam kedua bahasa. Komentar berikutnya berfungsi untuk menyembunyikan kutipan lain, dan ada pengalihan output dari STDERR ke fileare , untuk memakan pesan "//: Is a directory".

Karena penutupan ?>dalam tanda kutip, itu tidak dijalankan, dan dimakan bersama dengan komentar kedua dan sedikit setelahnya.


4

JavaScript, 3p

<!--
$res = Array();
$ks  = Array("", "", "");

function convert($x) { return $x["toString"](36); }
for ($i=0; $i < 1000000; $i++) {
  this[convert($i)] = $i;

  if ($i == 626 || $i == 777 || $i == 865 || $i == 1176 || $i == 35761)
    $res[$res.length] = convert($i);

  if ($i == 381  || $i == 19145) $ks[0] += convert($i);
  if ($i == 19   || $i == 31775) $ks[1] += convert($i);
  if ($i == 1033 || $i == 27893) $ks[2] += convert($i);
}
this[$ks[0]]($res[$ks[1]]("")[$ks[2]](1)[$ks[1]](" "));
-->

yay

<h1>hi</h1>   /// heading
<p>lol</p>    /// content

Menyamarkan output dari server web yang salah konfigurasi, seperti (sesuatu yang sekilas tampak seperti) PHP + HTML mess .

Ini dimulai dari kecil tetapi tumbuh lebih besar ketika saya mencoba untuk membuatnya tidak terlalu jelas apa yang dilakukannya (ketika dievaluasi sebagai JS) ... itu mungkin telah menjadi lebih dikaburkan daripada tugas yang dimaksudkan, maaf tentang itu. Pokoknya, hal utama yang ingin saya sertakan adalah trik saya untuk menyematkan (subset dari) HTML sehingga itu juga kode JavaScript yang valid, yang adalah apa yang Anda lihat di akhir kode.

Sunting: oh, saya harus menyebutkan, ketika dijalankan dalam konteks situs web kode mengingatkan "hello world" .


Aha saya suka dolar tanda vars. HTML javascript juga sangat keren.
Kevin Cox

Hehe, trik dengan javascript HTML adalah bahwa <dan> adalah perbandingan, / .../ adalah regex literal (maka triple-slash untuk komentar ..) dan JS tidak peduli sedikit pun tentang jenisnya.
FireFly

2

Python / PHP / Lua / Perl / Perl 6 / Ruby / JavaScript / HQ9 + (37 poin)

print("Hello, World!")

Ini terlihat seperti "Hello, World" dengan Python, tetapi sebenarnya quine yang ditulis dalam PHP. Ini juga berfungsi di JavaScript (SpiderMonkey), Lua, HQ9 +, Perl, Perl 6 dan Ruby, untuk poin bonus.


2

JavaScript / Python 3 / PHP / Lua / Brainfuck / bash

Ini terlihat seperti ... Umm ... PHP dikaburkan?

#!,[.,]
echo = --[[0] ] [0][0] //1#>/dev/null;echo Hello, World!;exit # ]]0
--[[0] ] [0][0] //1#<?php for ($i = 99; $i > 1;) { printf("%d bottles of beer on the wall, %d bottles of beer.\nTake one down and pass it around. %d bottle%s of beer on the wall.\n\n", $i, $i, --$i, ($i != 1 ? "s" : "")); } print("1 bottle of beer on the wall, 1 bottle of beer.\nTake on e down and pass it around. No more bottles of beer on the wall.\n\nNo more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more. 99 bottles of beer on the wall.\n"); die(); ?>
2//2; print("Hello world!"); exit();"""
console.log("Hello, World!");/*]]
f = io.open(arg[0])
print(f:read("*a"))
--[[*///]]--"""
  • Jika Anda menjalankannya dalam bash, JavaScript atau Python, ia akan mencetak "Halo, Dunia!"
  • Jika Anda menjalankannya di Lua, itu akan mencetak kode sumber skrip (jika disediakan sebagai argumen pertama lua).
  • Jika Anda menjalankannya dalam PHP, itu akan mencetak lirik 99 botol bir
  • Jika Anda menjalankannya sebagai Brainfuck, itu akan berfungsi seperti cat.

Nilai: 27

  • Mengikuti aturan: 3
  • Bahasa lain dapat dijalankan: 1
  • Melakukan sesuatu yang bermanfaat: 3 (program kucing)
  • Juga berfungsi di JS / Python 3 / Lua / bash: 20

Saya harap saya tidak membengkokkan aturan terlalu banyak :)


0

Java ditulis dalam C ++

#include <stdio.h>

typedef char* String;

class P{
public:
    static void println(String s){
        puts(s);
    }
};

class S{
public:
    P out;
};


int main()
{
    S System;
    System.out.println("Hello world!");
    return 0;
}

Skor 3 poin.


0
print`open(__file__).read()`, 1000 // len('''
/* Calculate code conciseness score for some random JavaScript */

function print() {
    console.log('Hello, world!');
}

<!--''') # ASCII submarine

Ini terlihat seperti Python 2, dan berjalan sebagai Python 2, mencetak sumbernya sendiri dalam bentuk literal string Python, serta skor keringkasan kode dari beberapa jenis! Ketika dijalankan sebagai ES6, ia mencetak "Halo, dunia!".

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.