Написать замаскированную программу [закрыто]


14

Задача состоит в том, чтобы создать программу, которая решает любую из проблем HQ9 +, но выглядит как другой язык.

Примечание : это не соревнование в гольф.

Правила:

  • Программа должна выполнить одну из следующих задач при запуске.
    • Распечатать "Привет, мир!"
    • Напечатайте весь его источник.
    • Напечатайте текст песни «99 бутылок пива на стене» (как показано здесь ).
  • На первый взгляд программа должна выглядеть как другой язык.

Оценивание

  • Рабочая программа, удовлетворяющая правилам. +3
  • Бонусные баллы, если «другой язык» может быть запущен (синтаксис действителен). +1
  • Еще больше очков, если «другой язык» может сделать что-то полезное. +3
  • Множество бонусных баллов за программу действительны (и полезны) на еще большем количестве языков. +5 за каждый язык свыше 2.

1
Как они оцениваются? Вам нужен объективный критерий. Проверьте здесь: codegolf.stackexchange.com/help/on-topic
MrZander

Хорошо, я добавляю систему баллов.
Кевин Кокс

1
Итак ... ты ищешь полиглот ?
Изи

Да. Но с акцентом на «сокрытие» возможностей всех языков, кроме одного, в некоторой степени.
Кевин Кокс

4
print ("Hello, World");само по себе будет работать на многих языках
marinus

Ответы:



18

Руби + С + Пробелы.

Эта программа на C, но выглядит (и работает как) Ruby. Мне также удалось выбросить немного пробелов.

C печатает свой собственный источник (к сожалению, не совсем quine). Руби печатает 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

Quine Golfscript, который также является программой HQ9 +, которая печатает текст песни на 99 бутылках пива.

Я знаю, что это не вызов для гольфа, но я не мог удержаться от желания ответить на это одним персонажем.


1
И я был настолько глуп, чтобы предположить, что HQ9 + не может выглядеть как другой язык: D
Кевин Кокс

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

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

Следующее печатает «Hello, World» (и случайную таблицу) в HTML и «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
Давио

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 он просто печатает «Привет, мир!» (создание ненужных файлов по пути).

В HQ9 + он печатает Hello World несколько раз (по одному разу для каждого случая Hили h).

В Brainfuck это «программа cat» - она ​​читает со стандартного ввода и выводит свой ввод в стандартный вывод ( ><,[.,]>>).

В PHP он печатает некоторый текст:

что такое> & _ @ "Hello, World!" программа?

Bash Объяснение

>&_@замаскирован как безвредный текст, заменяющий проклятие, но на самом деле это перенаправление STDERR в файл _@, так что Bash не будет жаловаться, что whatэто недопустимая программа. Это также ест is a <?phpбит и первый комментарий.

Первый комментарий имеет кавычку в конце (кавычки предназначены для предотвращения <?phpзапуска). echo "Hello, World!";работает нормально на обоих языках. Следующий комментарий служит для того, чтобы скрыть еще одну цитату, и существует перенаправление вывода из файла STDERR в файл 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

Маскирует вывод неправильно настроенного веб-сервера как (то, что на первый взгляд выглядит) беспорядок PHP + HTML .

Это началось с малого, но стало больше, когда я попытался сделать менее очевидным то, что он делает (если его оценивать как JS) ... возможно, он стал более запутанным, чем предполагалось, извините за это. В любом случае, главное, что я хотел включить, это мой трюк для встраивания (подмножества) HTML, так что это также допустимый код JavaScript, который вы видите в конце кода.

Изменить: о, я должен упомянуть, когда запускается в контексте веб-сайта код предупреждает "Привет мир" .


Ага я люблю знак доллара варя. Javascript HTML тоже очень круто.
Кевин Кокс

Хе-хе, хитрость с javascript HTML заключается в том, что <и> являются сравнениями, /.../ является литералом регулярных выражений (отсюда тройная косая черта для комментариев ...) и JS не заботится о типах.
FireFly

2

Python / PHP / Lua / Perl / Perl 6 / Ruby / JavaScript / HQ9 + (37 баллов)

print("Hello, World!")

Это выглядит как "Hello, World" в Python, но на самом деле это quine, написанный на PHP. Он также работает в 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 (кошачья программа)
  • Также работает в JS / Python 3 / Lua / Bash: 20

Я надеюсь, что я не слишком нарушаю правила :)


0

Java написана на 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;
}

Оценка 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!».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.