伪装编写程序[关闭]


14

面临的挑战是创建一个程序,以解决另一种 HQ9 +问题,同时又看起来像另一种语言。

注意:这不是高尔夫挑战。

规则:

  • 该程序在运行时必须执行以下任务之一。
    • 打印“你好,世界!”
    • 打印其整个来源。
    • 打印的歌词“在华尔街99瓶啤酒”(如看到这里)。
  • 乍一看,该程序应该看起来像另一种语言。

等级

  • 满足规则的工作程序。+3
  • 如果可以运行“其他语言”,则加分(语法有效)。+1
  • 如果“其他语言”可以做些有用的事情,则可以得到更多的积分。+3
  • 该程序在许多语言中都是有效的(并且非常有用)许多奖励积分。超过2种的每种语言+5

1
他们如何评分?您需要一个客观的标准。在此处查看:codegolf.stackexchange.com/help/on-topic
MrZander

好的,我要添加一个积分系统。
凯文·考克斯

1
所以...您在寻找通俗易懂的语言吗?
Iszi 2013年

是。但是要在一定程度上强调“隐藏”除一种语言以外的所有语言的特征。
Kevin Cox

4
print ("Hello, World");本身将以多种语言运行
marinus

Answers:



18

Ruby + C +空格。

该程序是C语言,但是看起来像Ruby(并且以Ruby身份运行)。我还设法在其中扔了一些空格。

C打印它自己的源(不幸的是,它并不十分成功)。Ruby打出99瓶啤酒和空白,问好。

#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

由于SO对ws不是很好,因此这里有一个链接


15

Golfscript / HQ9 +

9

一个Golfscript quine,可以兼作HQ9 +程序,可将歌词打印到99瓶啤酒上。

我知道这不是高尔夫挑战,但我无法抗拒用一个角色回答这个问题的愿望。


1
而且我很愚蠢,以为HQ9 +看起来不会像另一种语言:D
Kevin Cox

5
是! 疯狂地看起来是数字“ 9”。
皮埃尔·阿洛德

7

Perl,7分

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

这是一个Perl程序,可以打印Hello, World!

分数明细:

  • 遵守所有规则:+3
  • 是另一种语言的有效语法: +1
  • 在其他语言中做一些有趣的事情:+3

边注:

一旦知道了它的作用,它看起来就很“明显”,但这是愚蠢的。

下列:

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

将输出:

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

7

JavaScript,7分

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

在JavaScript中运行时,生成“ Hello,World!”。

当以HTML格式查看时,如下所示:

屏幕截图

计分

  • 满足规则的工作程序+3
  • 其他语言语法有效+1
  • 其他语言会做一些有用的事情(您可以在其中放入任何HTML)+3

微妙!不过,这假设进行评估的实现将最后一条语句的完成值打印到stdout。
FireFly

@FireFly是的,这就是eval所有控制台所做的。
门把手

eval不将其打印到标准输出;它返回它作为函数调用表达式的结果。但是,是的,我只是在挑剔。抱歉。:p
FireFly 2013年

6

C ++ / Python

#include <iostream>

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

print("Hello, World!")

将在Python(2.x和3.x)中运行,并在C ++中进行编译以打印(带有回车符):

你好,世界!


5

下面以HTML和“ Hello,World!”打印“ Hello,World”(和随机表)。在空白中

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

您可以在此处找到“ 99瓶”的版本99-bottles-of-beer.net/language-whitespace-154.html
Davio

5

PHP,HQ9 +,Brainfuck和Bash(我认为是23分)

看起来像PHP,但是...

滥用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?

它可以使用列出的所有语言运行并运行,但是看起来像(有点奇怪)PHP代码。

在Bash中,它仅打印“ Hello,World!”。(一路创建垃圾文件)。

在HQ9 +中,它将多次打印“ Hello World”(每次出现H或一次h)。

在Brainfuck中,它是一个“猫程序”-从标准输入中读取并将其输入输出到标准输出(><,[.,]>>)。

在PHP中,它输出一些文本:

>&_ @是什么“世界,您好!” 程序?

重击说明

>&_@被伪装成无害的文本代替了诅咒,但实际上它是STDERR到file的重定向_@,因此Bash不会抱怨这what不是有效的程序。它也吃了is a <?php一点和第一条评论。

第一个注释的末尾带有引号(引号用于防止<?php运行)。echo "Hello, World!";两种语言均可正常运行。下一条注释用于隐藏另一个引号,并且存在从STDERR到file的输出重定向are,以吃掉消息“ //:是目录”。

由于结尾?>处用引号引起来,所以它不会运行,并且会与第二条注释及其后面的内容一起被占用。


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

伪装错误配置的Web服务器的输出,例如PHP + HTML混乱。

这开始很小,但随着我试图使其作用(当评估为JS时)变得不那么明显而变得更大时,它可能变得比预期的任务更加混乱,对此感到抱歉。无论如何,我想包含的主要内容是我嵌入HTML的技巧(使其成为子集),以便它也是有效的JavaScript代码,这是在代码结尾处看到的内容。

编辑:哦,我应该提一下,当在网站上下文中运行时,代码将发出“ hello world”警报


啊哈,我喜欢美元符号变量。javascript html也很酷。
凯文·考克斯

呵呵,JavaScript HTML的诀窍是<和>是比较,/ ... /是正则表达式文字(因此,注释用三斜杠表示..),而JS不在乎类型。
FireFly

2

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

print("Hello, World!")

看起来像Python中的“ Hello,World”,但实际上是用PHP编写的一本quine。它也可以在JavaScript(SpiderMonkey),Lua,HQ9 +,Perl,Perl 6和Ruby中使用,以获得奖励积分。


2

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

看起来...嗯...混淆了PHP?

#!,[.,]
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"))
--[[*///]]--"""
  • 如果您在bash,JavaScript或Python中运行它,则会显示“ Hello,World!”。
  • 如果您在Lua中运行它,它将打印脚本的源代码(如果作为第一个参数提供给 lua)。
  • 如果使用PHP运行,它将打印99瓶啤酒的歌词
  • 如果您以Brainfuck的身份运行它,它将像上一样运行cat

得分:27

  • 遵循规则:3
  • 其他语言可以运行:1
  • 做一些有用的事情:3(cat程序)
  • 也可以在JS / Python 3 / Lua / bash中使用:20

我希望我不会过多地违反规则:)


0

用C ++编写的Java

#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;
}

得3分。


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

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

<!--''') # ASCII submarine

它看起来像Python 2,并且以Python 2运行,以Python字符串文字形式打印其自身的源代码,以及某种形式的代码简洁性得分!但是,当作为ES6运行时,它会显示“ Hello,world!”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.