Schreibe ein Programm in Verkleidung


14

Die Herausforderung besteht darin, ein Programm zu erstellen, das eines der HQ9 + -Probleme löst und dabei wie eine andere Sprache aussieht.

Hinweis : Dies ist keine Golfherausforderung.

Regeln:

  • Das Programm muss beim Ausführen eine der folgenden Aufgaben ausführen.
    • "Hallo, Welt!"
    • Die gesamte Quelle drucken.
    • Drucken Sie die Texte zu "99 Flaschen Bier an der Wand" (wie hier zu sehen ).
  • Auf den ersten Blick sollte das Programm wie eine andere Sprache aussehen.

Bewertung

  • Arbeitsprogramm, das den Regeln entspricht. +3
  • Bonuspunkte, wenn die "andere Sprache" ausgeführt werden kann (Syntax gültig). +1
  • Noch mehr Punkte, wenn die "andere Sprache" etwas Nützliches kann. +3
  • Viele Bonuspunkte für das Programm, das in noch mehr Sprachen gültig (und nützlich) ist. +5 für jede Sprache über 2.

1
Wie werden sie bewertet? Sie benötigen ein objektives Kriterium. Überprüfen Sie hier: codegolf.stackexchange.com/help/on-topic
MrZander

Okay, ich füge ein Punktesystem hinzu.
Kevin Cox

1
Also ... Sie suchen nach einer Polyglotte ?
Iszi

Ja. Aber mit dem Schwerpunkt darauf, die Merkmale aller Sprachen bis auf eine zu einem gewissen Grad zu "verbergen".
Kevin Cox

4
print ("Hello, World");allein wird in vielen Sprachen laufen
marinus

Antworten:



18

Ruby + C + Whitespace.

Dieses Programm ist C, sieht aber wie Ruby aus (und wird als Ruby ausgeführt). Ich habe es auch geschafft, etwas Leerzeichen hineinzuwerfen.

C gibt eine eigene Quelle aus (leider keine Quine). Ruby druckt 99 Flaschen Bier und sagt Hallo.

#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

Und da SO nicht sehr nett zu ws ist hier ein Link .


15

Golfscript / HQ9 +

9

Eine Golfscript-Quine, die gleichzeitig als HQ9 + -Programm fungiert und die Texte auf 99 Flaschen Bier druckt.

Ich weiß, dass dies keine Golf-Herausforderung ist, aber ich konnte dem Wunsch, dies mit einem Charakter zu beantworten, nicht widerstehen.


1
Und ich war albern genug anzunehmen, dass HQ9 + nicht wie eine andere Sprache aussehen könnte: D
Kevin Cox

5
Ja! Und verrückt sieht es aus, als lüge die Zahl "9".
Pierre Arlaud

7

Perl, 7 Punkte

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

Dies ist ein Perl-Programm, das druckt Hello, World!.

Aufschlüsselung der Punkte:

  • Befolgt alle Regeln: +3
  • Ist gültige Syntax in einer anderen Sprache: +1
  • Hat etwas Interessantes in der anderen Sprache: +3

Randnotiz:

Sobald Sie wissen, was es tut, scheint es vielleicht "offensichtlich", wo es rumhängt, aber das ist ein Betrug.

Folgende:

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

wird ausgeben:

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

7

JavaScript, 7 Punkte

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

Wenn es in JavaScript ausgeführt wird, wird "Hello, World!"

Wenn es als HTML angezeigt wird, sieht es so aus:

Bildschirmfoto

Wertung

  • Arbeitsprogramm, das die Regeln +3 erfüllt
  • Eine andere Sprachsyntax ist gültig +1
  • Eine andere Sprache macht etwas Nützliches (Sie können dort jedes gewünschte HTML einfügen) +3

Subtil! Dies setzt jedoch voraus, dass die Implementierung, die es auswertet, den Vervollständigungswert der letzten Anweisung an stdout ausgibt.
FireFly

@FireFly ja, das ist was evalund alle Konsolen tun.
Türknauf

evaldruckt es nicht nach Standard aus; es gibt es als Ergebnis des Funktionsaufrufausdrucks zurück. Aber ja, ich picke nur rum; Es tut uns leid. : p
FireFly

6

C ++ / Python

#include <iostream>

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

print("Hello, World!")

Läuft in Python (2.x und 3.x) und kompiliert in C ++ zum Drucken (mit Wagenrücklauf):

Hallo Welt!


5

Die folgenden Drucke "Hallo, Welt" (und eine zufällige Tabelle) in HTML und "Hallo, Welt!" in 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>

Eine Version von "99 Bottles" finden Sie hier 99-bottles-of-beer.net/language-whitespace-154.html
Davio

5

PHP, HQ9 +, Brainfuck und Bash (23 Punkte, denke ich)

Sieht aus wie PHP, aber ...

Missbrauch von STDERR-Weiterleitungen und -Anführungszeichen.

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

Dies läuft und erledigt Dinge in allen aufgelisteten Sprachen, sieht aber aus wie (etwas seltsamer) PHP-Code.

In Bash wird lediglich "Hello, World!" (Erstellen von Junk-Dateien auf dem Weg).

In HQ9 + wird Hello World einige Male gedruckt (einmal bei jedem Auftreten von Hoder h).

In Brainfuck ist es ein "Katzenprogramm" - es liest von der Standardeingabe und gibt seine Eingabe an die Standardausgabe aus ( ><,[.,]>>).

In PHP wird folgender Text ausgegeben:

Was ist das> & _ @ ein "Hallo, Welt!" Programm?

Bash Erklärung

>&_@wird als harmloser Text getarnt, der einen Fluch ersetzt, es ist jedoch eine Umleitung von STDERR in die Datei _@, sodass Bash sich nicht beschwert, dass whates sich nicht um ein gültiges Programm handelt. Es frisst auch das is a <?phpBit und den ersten Kommentar.

Am Ende des ersten Kommentars steht ein Anführungszeichen (die Anführungszeichen sollen verhindern, dass <?phpsie ausgeführt werden). echo "Hello, World!";läuft normalerweise in beiden Sprachen. Der nächste Kommentar dient dazu, ein anderes Zitat auszublenden, und es erfolgt eine Ausgabeumleitung von STDERR in die Datei are, um die Meldung "//: Ist ein Verzeichnis" zu lesen .

Da das Closing ?>in Anführungszeichen steht, wird es nicht ausgeführt und zusammen mit dem zweiten Kommentar und dem Bit danach verzehrt.


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

Maskiert die Ausgabe eines falsch konfigurierten Webservers als (auf den ersten Blick) PHP + HTML- Chaos.

Das fing klein an, wurde aber größer, als ich versuchte, weniger klar zu machen, was es tut (wenn es als JS bewertet wird) ... es könnte verschwommener geworden sein als die beabsichtigte Aufgabe. Das Wichtigste, was ich einschließen wollte, war mein Trick zum Einbetten (einer Teilmenge von) HTML, sodass es auch gültigen JavaScript-Code gibt, den Sie am Ende des Codes sehen.

Edit: oh, ich sollte erwähnen, wenn in einem Website-Kontext der Code "Hallo Welt" warnt .


Aha, ich liebe die Dollarzeichen. Das Javascript HTML ist auch wirklich cool.
Kevin Cox

Hehe, der Trick mit dem Javascript-HTML ist, dass <und> Vergleiche sind, /.../ ein Regex-Literal ist (daher die dreifachen Schrägstriche für Kommentare ..) und JS kümmert sich kein bisschen um die Typen.
FireFly

2

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

print("Hello, World!")

Dies sieht aus wie "Hallo Welt" in Python, ist aber eigentlich eine Quine, die in PHP geschrieben wurde. Es funktioniert auch in JavaScript (SpiderMonkey), Lua, HQ9 +, Perl, Perl 6 und Ruby für Bonuspunkte.


2

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

Das sieht aus wie ... Ähm ... Verschleiertes 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"))
--[[*///]]--"""
  • Wenn Sie es in Bash, JavaScript oder Python ausführen, wird "Hello, World!"
  • Wenn Sie es in Lua ausführen, wird der Quellcode des Skripts gedruckt (sofern als erstes Argument angegeben lua).
  • Wenn Sie es in PHP ausführen, werden die Texte von 99 Flaschen Bier gedruckt
  • Wenn Sie es als Brainfuck ausführen, funktioniert es wie folgt cat.

Prüfungsergebnis: 27

  • Befolgen Sie die Regeln: 3
  • Andere Sprache kann ausgeführt werden: 1
  • Hat etwas Nützliches: 3 (Katzenprogramm)
  • Funktioniert auch in JS / Python 3 / Lua / bash: 20

Ich hoffe, dass ich die Regeln nicht zu sehr verbiege :)


0

Java in C ++ geschrieben

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

Erziele 3 Punkte.


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

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

<!--''') # ASCII submarine

Dies sieht aus wie Python 2 und wird als Python 2 ausgeführt, wobei eine eigene Quelle in Python-String-Literal-Form sowie eine Art Code-Prägnanz-Score gedruckt wird! Bei der Ausführung als ES6 wird jedoch "Hallo Welt!"

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.