Escribe un programa disfrazado [cerrado]


14

El desafío es crear un programa que resuelva cualquiera de los problemas de HQ9 + mientras se ve como otro idioma.

Nota : Esto no es un desafío de golf.

Reglas:

  • El programa debe realizar una de las siguientes tareas cuando se ejecuta.
    • Imprimir "¡Hola, mundo!"
    • Imprime toda su fuente.
    • Imprime la letra de "99 Botellas de cerveza en la pared" (como se ve aquí ).
  • A primera vista, el programa debería parecerse a otro idioma.

Calificación

  • Programa de trabajo que cumple las normas. +3
  • Puntos de bonificación si se puede ejecutar el "otro idioma" (sintaxis válida). +1
  • Aún más puntos si el "otro idioma" puede hacer algo útil. +3
  • Muchos puntos de bonificación para que el programa sea válido (y útil) en incluso más idiomas. +5 por cada idioma superior a 2.

1
¿Cómo se clasifican? Necesitas un criterio objetivo. Consulte aquí: codegolf.stackexchange.com/help/on-topic
MrZander

Bien, estoy agregando un sistema de puntos.
Kevin Cox

1
Entonces ... ¿estás buscando un políglota ?
Iszi

Si. Pero con énfasis en "ocultar" las características de todos menos uno de los idiomas hasta cierto punto.
Kevin Cox

44
print ("Hello, World");por sí mismo se ejecutará en un montón de idiomas
marinus

Respuestas:



18

Ruby + C + Espacio en blanco.

Este programa es C pero parece (y se ejecuta como) Ruby. También me las arreglé para tirar un poco de espacio en blanco allí.

C imprime su propia fuente (desafortunadamente no es una quine). Ruby imprime 99 botellas de cerveza y el espacio en blanco dice hola.

#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

Y dado que SO no es muy bueno para ws aquí hay un enlace .


15

Golfscript / HQ9 +

9

Una línea de Golfscript que funciona como un programa HQ9 + que imprime la letra en 99 botellas de cerveza.

Sé que esto no es un desafío de golf, pero no pude resistir el deseo de responder a esto con un personaje.


1
Y fui lo suficientemente tonto como para suponer que HQ9 + no podría verse como otro idioma: D
Kevin Cox

55
¡Si! Y locamente parece mentir el número "9".
Pierre Arlaud

7

Perl, 7 puntos

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

Este es un programa Perl que imprime Hello, World!.

Desglose del puntaje:

  • Sigue todas las reglas: +3
  • Es una sintaxis válida en otro idioma: +1
  • Hace algo interesante en el otro idioma: +3

Nota al margen:

Una vez que sabes lo que hace, puede parecer "obvio" dónde está pasando el rato, pero esto es un engaño.

El seguimiento:

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

dará salida:

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

7

JavaScript, 7 puntos

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

Cuando se ejecuta en JavaScript, produce "¡Hola, mundo!"

Cuando se ve como HTML, se ve así:

captura de pantalla

Puntuación

  • Programa de trabajo que cumple las reglas +3
  • La sintaxis de otro idioma es válida +1
  • Otro lenguaje hace algo útil (puedes poner el HTML que quieras allí) +3

¡Sutil! Sin embargo, esto supone que la implementación que lo evalúa imprime el valor de finalización de la última instrucción para stdout.
FireFly

@FireFly sí, eso es lo que hacen evaltodas las consolas.
Pomo de la puerta

evalno lo imprime en stdout; lo devuelve como resultado de la expresión de llamada de función. Pero sí, solo estoy jugando; lo siento. : p
FireFly

6

C ++ / Python

#include <iostream>

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

print("Hello, World!")

Se ejecutará en Python (2.x y 3.x) y se compilará en C ++ para imprimir (con retorno de carro):

¡Hola Mundo!


5

Lo siguiente imprime "Hello, World" (y una tabla aleatoria) en HTML y "Hello, World!" en espacios en blanco .

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

Puede encontrar una versión de "99 Botellas" aquí 99-bottles-of-beer.net/language-whitespace-154.html
Davio

5

PHP, HQ9 +, Brainfuck y Bash (23 puntos, creo)

Parece PHP, pero ...

Abuso de la redirección y cotizaciones de 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?

Esto se ejecuta y hace cosas en todos los idiomas enumerados, pero parece un código PHP (un poco extraño).

En Bash, simplemente imprime "¡Hola, mundo!" (creando archivos basura en el camino).

En HQ9 +, imprime Hello World varias veces (una vez por cada aparición de Ho h).

En Brainfuck, es un "programa cat": lee desde la entrada estándar y envía su entrada a la salida estándar ( ><,[.,]>>).

En PHP, imprime algo de texto:

lo que el> & _ @ es un "¡Hola Mundo!" ¿programa?

Explicación de Bash

>&_@está disfrazado de texto inofensivo que sustituye a una maldición, pero de hecho es una redirección de STDERR al archivo _@, para que Bash no se queje de que whatno es un programa válido. También se come elis a <?php bit y el primer comentario.

El primer comentario tiene una cita al final (las citas están ahí para evitar que <?phpse ejecuten). echo "Hello, World!";funciona normalmente en ambos idiomas. El siguiente comentario sirve para ocultar otra cita, y hay una redirección de salida de STDERR al archivo are, para comer el mensaje "//: es un directorio".

Dado que el cierre ?>está entre comillas, no se ejecuta y se come junto con el segundo comentario y un poco después.


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

Enmascara la salida de un servidor web mal configurado, como (algo que a primera vista parece) PHP + HTML mess.

Esto comenzó pequeño pero se hizo más grande a medida que traté de hacer menos obvio lo que hace (cuando se evalúa como JS) ... podría haberse vuelto más ofuscado que la tarea prevista, lo siento. De todos modos, lo principal que quería incluir era mi truco para incrustar (un subconjunto de) HTML, de modo que también sea un código JavaScript válido, que es lo que ves al final del código.

Editar: oh, debo mencionar, cuando se ejecuta en el contexto de un sitio web, el código alerta "hola mundo" .


Ajá me encantan los signos de dólar vars. El html de JavaScript también es realmente genial.
Kevin Cox

Jeje, el truco con el HTML de JavaScript es que <y> son comparaciones, /.../ es un literal regex (de ahí las barras diagonales triples para comentarios ...) y JS no se preocupa un poco por los tipos.
FireFly

2

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

print("Hello, World!")

Esto se parece a "Hola, Mundo" en Python, pero en realidad es una frase escrita en PHP. También funciona en JavaScript (SpiderMonkey), Lua, HQ9 +, Perl, Perl 6 y Ruby, para obtener puntos de bonificación.


2

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

Esto se parece a ... Umm ... ¿PHP ofuscado?

#!,[.,]
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"))
--[[*///]]--"""
  • Si lo ejecuta en bash, JavaScript o Python, imprimirá "¡Hola, mundo!"
  • Si lo ejecuta en Lua, imprimirá el código fuente del script (si se proporciona como primer argumento para lua ).
  • Si lo ejecuta en PHP, imprimirá la letra de 99 botellas de cerveza
  • Si lo ejecutas como Brainfuck, funcionará como cat.

Puntuación: 27

  • Sigue las reglas: 3
  • Se puede ejecutar otro idioma: 1
  • Hace algo útil: 3 (programa cat)
  • También funciona en JS / Python 3 / Lua / bash: 20

Espero no estar doblando las reglas demasiado :)


0

Java escrito en 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;
}

Consigue 3 puntos.


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

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

<!--''') # ASCII submarine

¡Esto se parece a Python 2, y se ejecuta como Python 2, imprimiendo su propia fuente en forma literal de cadena de Python, así como un puntaje de concisión de código de algún tipo! Sin embargo, cuando se ejecuta como ES6, imprime "¡Hola, mundo!".

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.