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


14

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

Примітка . Це не проблема для гольфу.

Правила:

  • Програма повинна виконувати одне з наступних завдань під час запуску.
    • Друк "Привіт, світ!"
    • Роздрукуйте все його джерело.
    • Роздрукуйте тексти пісень до "99 пляшок пива на стіні" (як видно тут ).
  • На перший погляд програма повинна виглядати як інша мова.

Оцінка

  • Робоча програма, що відповідає правилам. +3
  • Бонусні бали, якщо "іншу мову" можна запустити (синтаксис дійсний). +1
  • Ще більше балів, якщо "інша мова" може зробити щось корисне. +3
  • Багато бонусних балів за те, що програма дійсна (і корисна) ще більшою мовою. +5 для кожної мови понад 2.

1
Як вони оцінюються? Вам потрібен об’єктивний критерій. Перевірте тут: codegolf.stackexchange.com/help/on-topic
MrZander

Гаразд, я додаю бальну систему.
Кевін Кокс

1
Отже ... ви шукаєте поліглот ?
Іссі

Так. Але з акцентом на "приховування" особливостей усіх, крім однієї мови, певною мірою.
Кевін Кокс

4
print ("Hello, World");сама по собі буде працювати на багатьох мовах
marinus

Відповіді:



18

Ruby + C + пробіл.

Ця програма є C, але схожа на (і працює як) Ruby. Мені також вдалося кинути туди пробіл.

C друкує власне джерело (на жаль, не зовсім квіне, на жаль). Рубі роздруковує 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

А оскільки ТАК не дуже приємно, тут є посилання .


15

Golfscript / HQ9 +

9

Голфскриптова квітка, яка виступає як програма 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

Sidenote:

Як тільки ви дізнаєтеся, що це робить, це може здатися "очевидним", де він бовтається, але це дура.

Наступні:

$_="`\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 створюється "Привіт, світ!"

Якщо розглядати як HTML, це виглядає приблизно так:

screenshot

Оцінка балів

  • Робоча програма, що відповідає правилам +3
  • Синтаксис іншої мови має значення +1
  • Інша мова робить щось корисне (ви можете помістити туди будь-який потрібний вам HTML) +3

Тонкі! Це передбачає, що оцінювальна ним реалізація виводить значення завершення останнього оператора stdout.
FireFly

@FireFly так, саме це evalі роблять усі консолі.
Дверна ручка

evalне друкує його до stdout; він повертає його як результат вираження виклику функції. Але так, я просто заїдаю; вибачте. : 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

Наступні друкує "Привіт, світ" (і випадкова таблиця) в HTML та "Привіт, світ!" в 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>

Ви можете знайти версію "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 це "програма для котів" - вона читає зі стандартного вводу та виводить свій вхід на стандартний вихід ( ><,[.,]>>).

У PHP він друкує текст:

що> & _ @ - це "Привіт, світ!" програма?

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, який ви бачите в кінці коду.

Редагувати: о, я повинен зазначити, що при запуску в контексті веб-сайту код попереджає "привіт світ" .


Ага, я люблю знак долара vars. HTML-код JavaScript також дуже класний.
Кевін Кокс

Так, хитрість з JavaScript JavaScript полягає в тому, що <і> є порівняння, /.../ - це літерал з регулярними виразками (отже, потрійні риски для коментарів ..) і JS не хвилює жодного біта про типи.
FireFly

2

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

print("Hello, World!")

Це схоже на "Привіт, світ" на Python, але насправді це квітка, написана на 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, він надрукує "Привіт, світ!"
  • Якщо запустити його в Lua, він надрукує вихідний код сценарію (якщо він наданий як перший аргумент для lua ).
  • Якщо запустити його в PHP, він надрукує текст 99 пляшок пива
  • Якщо запустити його як Brainfuck, воно буде працювати так cat.

Оцінка: 27

  • Дотримується правил: 3
  • Інша мова може працювати: 1
  • Чи щось корисне: 3 (програма для котів)
  • Також працює в JS / Python 3 / Lua / bash: 20

Я сподіваюся, що я не надто збиваю правила :)


0

Ява написана на 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 він друкує "Привіт, світ!".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.