Ciao mondo offuscato


123

Crea il programma offuscato più breve possibile che visualizzi il testo "Hello World".

Per essere considerato un programma offuscato, deve soddisfare almeno due dei seguenti requisiti:

  • Non contiene i caratteri: h, l, we din ogni caso
  • Non contiene i caratteri: e, o, r, 0, e 1in ogni caso
  • Non contiene i caratteri: 2o7

Input:
nessuno

Produzione:
Hello World


6
Immagino che importin Python non sia permesso.
Alexandru,

26
Queste regole si applicano anche alle parole chiave della lingua?
hallvabo,

8
sono quelle restrizioni insensibili al caso?
oenone,

20
Qualcuno potrebbe spiegare perché 2 e 7 non sono ammessi? Sono solo curioso perché non vedo perché quelli sono stati scelti in particolare.
Thomas Eding,

4
@trinithis, e altri, di caratteri ASCII 72è "H"che è il motivo per cui ho scelto quei due
Kevin Brown

Risposte:


51

GolfScript, 17 caratteri

'· S ““?? ß ???? “>' {~}%

Durante il test di questo invio, si prega di salvare il file come binario semplice, non UTF-8. Hai problemi a ricreare il file? Ecco il hexdump di esso:

00000000  27 b7 9a 93 93 90 df a8  90 8d 93 9b 27 7b 7e 7d  |'...........'{~}|
00000010  25                                                |%|

1
Anche se mi piacerebbe pensare che sia una soluzione ovvia, se non sei affatto chiaro su come funzioni questa voce, puoi leggere questo spoiler: chat.stackexchange.com/transcript/message/442257#442257 :-)
Chris Jester -Presso il

12
Non è ISO-8859-1, in realtà è Windows-1252.
Konrad Borowski,

@GlitchMr: In realtà sono abbastanza certo che l'invio contenga caratteri che sono anche al di fuori di Windows-1252. ;-)
Chris Jester-Young,

@xfix Non è nemmeno Windows-1252. Sebbene Windows-1252 abbia caratteri più validi di ISO-8859-1, la mia voce contiene caratteri, come 0x8D e 0x90, che non sono validi neanche in Windows-1252.
Chris Jester-Young,

Abbastanza giusto, ho dimenticato che alcuni caratteri non sono consentiti in Windows-1252.
Konrad Borowski il

171

Perl

Dal momento che la risposta ovvia usa uno spostamento di qualche tipo, mi sento obbligato a pubblicare qualcosa usando Acme :: EyeDrops , tuttavia con la potenza extra che pensavo dovesse essere un po 'più divertente.

                            ''=~('('."\?".
                        '{'.('`'|'%').('['^'-'
                    ).('`'|'!').  ("\`"|       ','
                 ).'"'.('['^'.').   (((           '['
              ))^'(').('`'|('%')).(                  '{'
            ^'[').('{'^'/').('`'|')')                  .+(
          '`'|'-').('`'|'%').':'.':'.(                   '`'
         ^'(').('`'|')').('{'^')').(                      '`'
       |((  '%'))).('['^'(').'\\'.'"'                       .+(
      '['   ^'.').('['^'(').("\`"|                           ','
     ).(    '`'|'%').('`'|"\%").(                             '['
    ^((      '+'))).'\\'.'"'.';'.                              (((
   (((        '\\')))))).('$').                                 '|'
   .((         '+')).'+'.(';').                                 (((
  (((           '\\'))))      )                                  ).+
  '$'            .'\\'.                                          '"'
 .((               '=')    ). "'".                                "'"
 .((                (';'))).       '\\'                           .((
'@'                   )).('`'|                                     '#'
).+                        '='                                     .+(
'`'                          |+    "\-").(                         '`'
|((                            '!'))).("\["^                       '+'
).+                              '\\'.'{'."\[".                    (((
(((                              '\\'))))))."\$".                  '_'
.((                             ',')).'\\'.'$'.('`'|               '*'
).+                             ','.('^'^('`'|('+'))).(            '^'
^+(                              '`'|'.')).'+'.('^'^('`'           |((
'+'                               )))).'*'.'\\'.('$').(            '`'
 |((                               '*'))).'+'.'+'.']'.            (((
 (((                                '\\'))))))."\}".(             '['
  ^((                                '('))).('['^'+')            .+(
  '`'                                |',').('`'|')')             .+(
   '['                                ^'/').('/').              '/'
   .((                                ',')).'\\'.               '"'
    .+(                               '`'^'(').                (((
     '`'                              ))|'%')                 .+(
      '`'                             |',').                 (((
       '`'                           ))|','                 ).(
         '`'                         |'/')                .+(
          '{'                        ^'['                ).(
            '{'                      ^((               ','
              )))                     .(  (          '`'
                 )|+                   ((         '/'
                    )))                        .+(
                        '['                ^((
                            ')'))).(('`')|

                            ',').('`'|'$')
                        .((        '\\')).'"'.
                    ';'       .  ('['^',').(('`')|
                 '('         ). ('`'|')').('`'|',').(
              '`'              |'%').'('.('^'^('`'|'/'))
            .((             ')')).'\\'.'{'.('`'|'-').('['^
          '"'             ).((   (  '\\'))).'$'.('`'|('*')).
         ';'             .+(      ( ( '`'))|'-').('['^('"')).
       '\\'              .+            '@'.('['^'(').'='.("\`"|
      '-').             ('`'|'!'           ).('['^'+').'\\'.'{'.
     "'".(             '{'^"\[").   ((     "'")).'\\'.'}'.('(').(
    '^'^(             '`'|'.')).'.'.'.'.('^'^('`'|'+')).('^'^('`'|
   '.'))            .')'.';'.('`'|'&').('`'|'/').('['^')').'('.'\\'
   .'@'            .('`'|'#').')'.'\\'.'{'.'\\'."\$".(   '['^"\(").
  '['              .'\\'.'$'.'_'.'-'.'>'.'['.('^'^('`'     |',') ).+
  ']'             .']'.'='.'\\'.'$'.'_'.'-'.'>'."\[".(      '^'^ (((
 '`'              ))|'.')).']'.('`'|')').('`'|('&')).        (((  (((
 (((             '\\'))))))))).'$'.'_'.'-'.'>'.'['.           +(  '^'
^+(              '`'|',')).']'.'<'.'='.('^'^('`'|         (    (   '+'
)))               ).('^'^('`'|'.')).';'.'\\'.'$'.'_'.     (    (   '-'
)).                '>'.'['.('^'^('`'|'/')).']'."\>".       (       (((
(((                  '\\')   )))))).'$'.'_'.'-'.'>'                .((
'['                           )).('^'^('`'|(','))).                ']'
.((                           '?')).'\\'.'$'.('`'|                 '*'
).((                          '+')).'+'.':'.'\\'.                  '$'
.('_').                        '-'.'>'.'['.('^'^                   (((
'`'))|','                       )).']'.'-'."\-".                   (((
'\\'))).+                       '}'.('['^'+').(                   '['^
 "\)").(                        '`'|')').("\`"|              (   '.')
 ).('['^                        '/').'\\'."\"".                   (((
  '\\'))                        ).'\\'.('['^')'    )             .((
  '\\')).                      '@'.('['^"\(").   ((              (((
   '\\'))                       ))).'"'.';'.(   '['        ^    '.'
   ).('['                        ^'(').('`'|    ((        (     ','
    )))).                         ('`'|'%')     .              (((
     '`')                         )|'%').(                    '['
      ^((                          '+')))                    .((
       '('                         )).                      (((
         '^'                                          )   )^(
          '`'                                         |  '/'
            )).                                       ('`'
              |((                                    '%'
                 )))                              .+(
                    '^'                        ^+(
                        '`'                |((
                            '+')))).(')').

                            ';'.('`'|',').
                        ('`'|'!').('['^    '('
                    ).('['^'/').(('{')^        '['
                 ).('`'|')').("\`"|    (          '&'
              )).'\\'.'$'.('`'|"\*").                '='
            .'='.'\\'.'@'.('`'|"\#").                  (((
          '\\'))).'}'.('['^'+').('['^  (                 ')'
         )).('`'|')').('`'|'.').('['^   (                 '/'
       )).'\\'.'"'.'\\'.'\\'.('`'      |+                   '.'
      ).'\\'.'"'.('!'^'+').'"'.'}'.   ')'                    );(
     $:)='.'^'~';$~='@'|'(';$^=')'^                           '['
    ;$/='`'|'.';$,='('^'}';$\="\`"|                            '!'
   ;$:=')'^'}';$~='*'|'`';$^=('+')^                             '_'
   ;($/)    ='&'|'@';$,='['&'~';$\                              =((
  "\,"))^    '|';$:  ='.'^'~'; $~                                =((
  '@'))|     "\(";    $^=')'^                                    '['
 ;($/)=      '`'|       '.';$,                                    =((
 '(')        )^+         '}';$\                                   =((
'`')          )|          "\!";      (           (                 $:)
)=')'         ^+        (   (         (                   (        '}'
))));          (           (          (                            $~)
))=(                    (   (    (        (                        '*'
))))                     )   |  ((      (                          '`'
)))                      ;     $^=         (                       '+'
)^+                       ((    ((  ((     '_'                     )))
)))                                          ;($/)                 =((
'&'                          ) )               |'@';               $,=
'['                                                                &((
 '~'                                      ))   ;                  $\=
 ','                                  ^"\|";  $:                  =((
  '.'                               ))^"\~"; $~=                 '@'
  |((                              '('));$^=')'^       (         '['
   );(                          $/)='`'|"\.";$,=    (           '('
   )^+                         '}';$\='`'|'!';$:                =((
    ')'                        ))^'}';$~='*'|'`'               ;$^
     =((                       '+'))^'_';$/='&'               |((
      '@'                      ));$,   =('[')&               '~'
       ;$\                              =','^               '|'
         ;$:                              =(      ((      '.'
          )))                                   ^+       '~'
            ;$~                               =(       '@'
              )|+                                    '('
                 ;$^                              =((
                    ')'                        ))^
                        '['                ;$/
                            ='`'|('.');#;#

Avvertimento

Dalla versione 5.18 di Perl, il meccanismo che consente l'esecuzione di questo codice è diventato così potente che è stato disabilitato per impostazione predefinita per impedire l'uso improprio. Pertanto, nelle versioni 5.18+ è possibile aggiungere use re 'eval';all'inizio dello script oppure, se lo script è denominato, world.plè possibile eseguirlo come perl -Mre=eval world.pl. È un peccato che questi personaggi sgradevoli debbano essere aggiunti, ma c'est la vie. (Nota: voglio sottolineare che abilitando questa funzione non si utilizza alcuna libreria o componente aggiuntivo, il codice visualizzato è un codice Perl valido, il meccanismo semplicemente non è più abilitato per impostazione predefinita).


1
L'ho provato ed è semplicemente fantastico! +1
Tomas,

2
@TomasT. grazie, è stato divertente da fare, e in realtà ci è voluto del golf per farlo funzionare in sole 3 foto!
Joel Berger,

1
Cordiali saluti Usa la funzione regexp Perl (?{ code })per valutare il codice Perl personalizzato durante la corrispondenza regexp. Il codice Perl personalizzato stampa il messaggio. È bello perché non viola nessuna delle regole.
punti

5
Signore, siete il ciao re del mondo!
recursion.ninja,

1
Wow! Eeeek !!! Ora ho bisogno di imparare il Perl solo per vedere come mai l'hai fatto.
Gryphon,

69

C # (175 caratteri)

È stato piuttosto difficile farlo in C # perché le restrizioni precludono qualsiasi uso di molte delle parole chiave comuni. In C # è possibile utilizzare sequenze di escape Unicode \ uxxxx negli identificatori, ma sfortunatamente non nelle parole chiave.

Sospetto che questa soluzione funzioni solo se compilata su .NET 4.0. Vedi la spiegazione del perché.

using System;struct a{static int Main(){object[]c={"\u0048e\x6c\x6co "+(C\u0068ar)(86+1)+"or\x6c\x64"};typeof(Conso\u006ce).GetMet\u0068o\u0064s()[101].Invoke(c,c);return 0;}}

Spiegazione

// I won’t be able to get anywhere without using “System”.
// Even if I write it as “Syst\u0065m”, it still violates rule 2.
// Therefore, that is the rule we’ll violate.
using System;

// Thus, we can’t use: H L W D 2 7
// We can’t write “class”, so the Main type must be a struct.
struct a
{
    // We can’t write “void”, so Main needs to return an int.
    static int Main()
    {
        // We can’t write “new”, but we can instantiate an array
        // using the initialisation syntax.
        object[] c = {
            "\u0048e\x6c\x6co " + (C\u0068ar) (86 + 1) + "or\x6c\x64"
        };

        // We can use the character escape sequence to write “Console”, but not
        // “Write” because W is \u0057, which contains a 7. Therefore, we have to
        // use Reflection to get it. This relies on the fact that Console.Write(string)
        // is the 102nd method of the type Console in my copy of the framework.
        // Also, the first argument to Invoke can be anything for a static method
        // (needn’t be null). The second one is the actual argument to Console.Write.
        typeof(Conso\u006ce).GetMet\u0068o\u0064s()[101].Invoke(c, c);

        // Since Main returns int, we have to return something.
        return 0;
    }
}

Puoi usare Uriinvece di objectper b. È possibile utilizzare \xHHnelle stringhe invece di \u00HHdove è inequivocabile ( \xè di lunghezza variabile). Ripensandoci, non è necessario be puoi semplicemente riutilizzarlo ccome primo argomento Invoke. MSDN afferma che per i metodi statici il primo argomento viene ignorato. Questo lo porta a 175 per me.
Joey,

@Joey: Whoa, grazie! Anche se il primo argomento Invokepuò essere qualcosa, non dovrebbe nemmeno essere c, potrebbe essere 0... :)
Timwi

Sì, ho notato che quando ho cercato di inline c(che purtroppo non funziona poiché newrichiede un eed .Split('x')è troppo lungo (uscito a 177).
Joey

Non avevo idea che ciò fosse possibile. +1
Igby Largeman

1
Cosa molto intelligente con cui hai fatto GetMethods. +1
Soham Chowdhury,

51

BrainFuck, 106 colpi

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.

Soddisfa tutte le regole ed è sicuramente offuscato.


2
Penso di poter ancora giocare a golf un po ', ma dovrò aspettare fino a quando non riuscirò a dormire.
R. Martinho Fernandes,

34
BrainFuck non è offuscato dalla sua definizione?
mbx,

18
Qualsiasi programmatore BF competente sarebbe in grado di riconoscere questo ...
Mehrdad,

Ciò infrange entrambe le regole 1 e 2: D
Thomas Eding,

8
Brah, protetto dalla comunità , qualunque sia, ++++++++++[>++++++>+++<<-]>++++++++++++.---.+++++++..+++.>++.<++++++++.--------.+++.------.--------.è solo 100 colpi, il mio è meglio del tuo
OverCoder

44

Javascript, 2595

Questo infrange solo la regola 2.

゚ω゚ノ=/`m´)ノ~┻━┻//*´∇`*/['_'];o=(゚ー゚)=_=3;c=(゚Θ゚)=(゚ー゚)-(゚ー゚);(゚Д゚)=(゚Θ゚)=(o^_^o)/(o^_^o);(゚Д゚)={゚Θ゚:'_',゚ω゚ノ:((゚ω゚ノ==3)+'_')[゚Θ゚],゚ー゚ノ:(゚ω゚ノ+'_')[o^_^o-(゚Θ゚)],゚Д゚ノ:((゚ー゚==3)+'_')[゚ー゚]};(゚Д゚)[゚Θ゚]=((゚ω゚ノ==3)+'_')[c^_^o];(゚Д゚)['c']=((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)-(゚Θ゚)];(゚Д゚)['o']=((゚Д゚)+'_')[゚Θ゚];(゚o゚)=(゚Д゚)['c']+(゚Д゚)['o']+(゚ω゚ノ+'_')[゚Θ゚]+((゚ω゚ノ==3)+'_')[゚ー゚]+((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)]+((゚ー゚==3)+'_')[゚Θ゚]+((゚ー゚==3)+'_')[(゚ー゚)-(゚Θ゚)]+(゚Д゚)['c']+((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)]+(゚Д゚)['o']+((゚ー゚==3)+'_')[゚Θ゚];(゚Д゚)['_']=(o^_^o)[゚o゚][゚o゚];(゚ε゚)=((゚ー゚==3)+'_')[゚Θ゚]+(゚Д゚).゚Д゚ノ+((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)]+((゚ー゚==3)+'_')[o^_^o-゚Θ゚]+((゚ー゚==3)+'_')[゚Θ゚]+(゚ω゚ノ+'_')[゚Θ゚];(゚ー゚)+=(゚Θ゚);(゚Д゚)[゚ε゚]='\\';(゚Д゚).゚Θ゚ノ=(゚Д゚+゚ー゚)[o^_^o-(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ+'_')[c^_^o];(゚Д゚)[゚o゚]='\"';(゚Д゚)['_']((゚Д゚)['_'](゚ε゚+(゚Д゚)[゚o゚]+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚)+(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)+(o^_^o))+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)+(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚)+(゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚ー゚)+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚)+(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+((゚ー゚)+(o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)-(゚Θ゚))+((゚ー゚)+(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+((゚ー゚)+(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)+(o^_^o))+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚ー゚)+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚)+(゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚o゚])(゚Θ゚))('_');

13
L'ho provato su UglifyJS ma ha salvato -2574 byte.
Konrad Borowski,

12
Non ho idea di cosa sto guardando qui.
Bob,

6
@Bob = Javascript offuscato. Suggerimento: inizia assegnando un'espressione regolare letterale (ovvero '/ ` m´) ノ ~ ┻━┻ /') a una variabile con il nome `゚ ω ゚ ノ. That's followed by a comment and the expression ['_']` in un contesto vuoto. Quindi alla variabile o(insieme a _e (゚ー゚)) viene assegnato il valore 3. Continua in quella vena, facendo un sacco di lavoro extra innocuo che è effettivamente no-ops e usando modi rotondi per fare il lavoro previsto (chiamata alert("Hello world")) in modo non ovvio moda.
Mark Reed,


40

Befunge-93 - blocco 10x9

va:)/v<>#<
9A:)."c:P^
>"iqwt\%"^
bv"Mjq"<.<
c>v<-"x^x]
(C:,3>>^:(
$,9^;)|:O]
>5-^-.--.-
^<_#?>@_@<

Scusate. : D

Non stavo andando per le piccole dimensioni qui, stavo cercando di OBFUSCARE davvero il codice includendo quante più faccine e rumori possibili! : D

Dovrebbe andare con le regole 2 e 3.


18
"@_@" Risi.
Wug

35

Golfscript - 17 caratteri

Più facile da copiare / incollare di Chris '

'Ifmmp!Xpsme'{(}%

Fondamentalmente una cifra di Cesare che si sposta di 1 carattere


4
+1 Bello per essere più semplice da copiare. Il mio ha il vantaggio di non infrangere nessuna delle regole e anche (probabilmente, a seconda che i caratteri high-bit contino come simboli) soddisfino anche il golf dei simboli. :-)
Chris Jester-Young,

In che modo questo infrange una regola?
d -_- b

11
@sims, ha un econtenuto
gnibbler,

2
DUE dei tre. : D
Rob,

30

Pitone

Regola I e III (34 caratteri)

print'Uryyb Jbeyq'.decode('rot13')

Regola I e III, alternativa (39 caratteri)

print"\110e\154\154o %cor\154\144"%~-88

Regola II e III (37 caratteri)

input("H\x65ll\x64 W\x64%cld"%(3*38))

Regola I e II (50 caratteri)

input('\x48\x65\x6c\x6c\x6f \x57\x6f\x72\x6c\x64')

Tutte e tre le regole (58 caratteri)

input("\x48\x65\x6c\x6c\x6f %c\x6f%c\x6c\x64"%(84+3,3*38))

1
cancellata la mia risposta, penso che la tua sia più completa.
st0le

+ 1, ottimo pezzo ma nessuna sorpresa ti ho visto giocare a golf :-)
Quixotic

È necessario import codecsprima di potercodecs.decode
gatto

Puoi rimuovere le parentesi nella prima soluzione
Cyoce,

23

JavaScript, 366 caratteri

Dopo aver visto la soluzione Perl di Joel Berger, mi sono sentito obbligato a fare un po 'di bellezza artistica ASCII da solo ... JavaScript, non usa alfanumerici e, contrariamente all'output di JSFuck, in realtà è di dimensioni ragionevoli.

                   $$
                  =-~-
                 ~[];$_
                =$$+ $$;
               _$=$$+$$+-
              ~[];_=-~[];$
             =!![]+[];__={}
            +[];$$_=/\\ /+[]
           _$$=(![]+[])[_]+(!
          []+[])[$$]+$[$_+~[]]
         +$[_]+$[+[]];$=__[_$]+
        __[_]+($[$]+[])[_]+(![]+
       [])[$_+~[]]+$[+[]]+$[_]+$[
      $$]+__[_$]+$[+[]]+__[_]+$[_]
     _=$$_[_]+-~[];$[$][$](_$$+'("'
    +_+-~[]+-[]+_+$_+_$+_+_$+$_+_+_$
   +$_+_+_$+[$$+_$]+$$_[-~[]]+$_+-[]+
  _+$$+[$$+_$]+_+_$+[$$+_$]+_+[$$+$_]+
                $$+ _+_$
                +$_+_+$_
                +$_+'")'
                  )($)

potresti visualizzare il numero di caratteri nel codice nell'intestazione? Sono curioso di vedere quanti
ce l'

@Eliseod'Annunzio ecco, ho dimenticato che questo era il golf di codice. La lunghezza è data con uno spazio bianco rimosso e l'ultimo ($)trasformato in ()(perché l'ho aggiunto $per simmetria).
FireFly

Grazie per i tuoi consigli ... Ho dovuto ridimensionare il mio codice per tenere conto della "W" e poi ridimensionarlo usando il tuo consiglio ...
WallyWest

21

rot13 - 11 caratteri

Uryyb Jbeyq

2019/2/12: questa risposta viene conservata per motivi storici e non è più una risposta valida ai sensi delle attuali regole del sito.


3
Rot13 è una lingua? : /
Santosh Kumar il

3
si e posso creare il suo interprete: P
oddcoder

6
Tecnicamente, rot13 è solo una cifra . È tanto una lingua quanto un codice Vigenère.
XiKuuKy

19

Bash, 30 25 caratteri

tr G-t F-s<<<Ifmmp\ Xpsme

Grazie a Peter Taylor per il suo utilizzo.


2
Puoi salvare 5 caratteri usando una stringa qui:tr G-t F-s<<<Ifmmp\ Xpsme
Peter Taylor,

18

Scala, 39

Soluzioni come print ("Qnuux)` x {um "map (_- 9 toChar)) (35 caratteri) falliscono nelle regole 1 e 2 (" toChar "contiene sia" h "che" r "), il che rende questo un un po 'difficile.

Alla fine è arrivato questo:

print("䠀攀氀氀漀 圀漀爀氀搀"map(_.reverseBytes))

Suggerimenti per un miglioramento benvenuto


18

TeX, 95 byte

Rompe la terza regola.

\^^5pp^^%^^2^^#^^!^^3^^%{^^(}^^%^^,^^,^^/
\^^5pp^^%^^2^^#^^!^^3^^%{^^7}^^/^^2^^,^^$!
\^^%^^.^^$

Esegui con tex filename.texper ottenere un output DVI o pdftex filename.texper ottenere un pdf.


1
Wow, non ho mai saputo che TeX potesse essere così offuscato!
gar

14

> <> , 2 × 20 = 40 caratteri

'mu{x`)xuunQ'>9-o?v;
            ;^?o-9< 

Viola la Regola II, dal momento che non posso produrre un personaggio senza usare o.


11

Windows PowerShell, 91 95 97 98

($OFS='')+('Qnuux)`x{um'|% t*y|%{"[convert]::"+([convert]|gm -s t*r).name+"($($_-9))"|iex})

Viola solo la Regola II.

È molto malvagio che charviola già due regole da solo.

E yike, questo è stato difficile far funzionare.

  • La prima riga è impostata $OFSsu ''così quando si esegue il cast di un array in una stringa senza spazi tra gli elementi.
  • Fare il casting per chardavvero è stata la parte più difficile di tutte e passo un giorno alla ricerca di un modo. Tutto il resto ha funzionato bene, ma una volta che ho fatto i calcoli su di essi ho ints, non chars. Rimetterli in una stringa era un po 'difficile.
  • Ho trovato un modo per invocare Invoke-Expressionsenza aver bisogno eanche del:

    &(gcm i?x)
    

    ma mancavano ancora gli argomenti. E ho già gettato via il mio obiettivo di saturare tutte e tre le regole. Inoltre non mi ha aiutato particolarmente nel casting char.

  • Abbreviato un po 'con una versione più recente di PowerShell. Purtroppo, tuttavia, non è emerso un utile modo diverso di creare il risultato.


Ci sono ancora molte "o" e "e" qui, e una "r". Tuttavia, non sono sicuro che avrei avuto molta più fortuna a ripulirlo. Potrebbe ancora provarci qualche volta.
Iszi,

Rileggi le regole: solo due dei tre set di regole necessari sono stati soddisfatti e questo si qualifica. Bello spettacolo! Sarebbe fantastico se potessimo inventarne uno che richiede 3/3, ma dubito che sia molto possibile.
Iszi,

Mi ci è voluto un sacco di tempo per arrivare a questo punto, e dubito ancora che sia possibile seguire tutte le regole.
Joey,

10

PHP (16 byte)

Ho notato che il mio precedente esempio di PHP non era abbastanza offuscato, quindi vediamo esempi più palesemente offuscati (attenzione, offuscamento!). Inoltre, copiando palesemente l'esempio di GolfScript, tranne per renderlo più piccolo (è persino possibile?). Questa voce richiede PHP 5.4 o short_open_tagabilitata. Nessuna regola è stata infranta durante questa operazione. In effetti, questa voce non contiene lettere o cifre ASCII.

Questo esempio non infrange nessuna delle regole. Divertiti. Per generare il file, eseguire il comando seguente.

printf "<?=~\xb7\x9a\x93\x93\x90\xdf\xa8\x90\x8d\x93\x9b;" > obfus.php

Oppure, nel caso in cui non ti fidi dell'esecuzione del printfcomando, ho preparato il dump Base64 del file.

PD89freak5OQ36iQjZObOw==

Se pensi che entrambi i metodi per generarlo rompano le regole, ho anche generato il file su Dropbox .

E per eseguirlo.

php obfus.php

Il file risultante dovrebbe avere 16 byte. Divertiti a gestirlo. Si noti che se sono E_NOTICEabilitati gli avvisi, verrà visualizzato un avviso. Ignoralo e aggiustarlo sprecherebbedue personaggiun personaggio ( @dopo tutto posso usare l' operatore) e renderebbe Base64 meno attraente.


9

Spazio bianco (167 caratteri)

Per ottenere il programma WS, sostituire un carattere Space, Tab o Linefeed con S, T, L, rispettivamente, nella seguente stringa:

SSSTSSTSSSLTLSSSSSTTSSTSTLTLSSSSSTTSTTSSLTLSSSSSTTSTTSSLTLSSSSSTTSTTTTLTLSSSSSTSSSSSLTLSSSSSTSTSTTTLTLSSSSSTTSTTTTLTLSSSSSTTTSSTSLTLSSSSSTTSTTSSLTLSSSSSTTSSTSSLTLSSLLL

oppure scarica il programma "raw" per soli spazi bianchi nel file di testo hello.ws .

Quando eseguito da questo interprete WS , questo programma stampa "Hello World".

Spiegazione (ignora qui gli spazi bianchi!):

SSS TSSTSSSL TLSS  <-- output H (ascii code 72 in decimal, 1001000 in binary) 
SSS TTSSTSTL TLSS  <-- output e (ascii code 101 in decimal, 1100101 in binary) 
SSS TTSTTSSL TLSS  <-- etc
SSS TTSTTSSL TLSS
SSS TTSTTTTL TLSS
SSS TSSSSSL TLSS
SSS TSTSTTTL TLSS
SSS TTSTTTTL TLSS 
SSS TTTSSTSL TLSS 
SSS TTSTTSSL TLSS
SSS TTSSTSSL TLSS 
LLL                <-- end the program

Le stringhe "centrali" (ad es. TSSTSSSL) Sono i codici ASCII (in binario, con S0 che Tindica 1 , che indica 1) per le lettere successive in "Hello World". Il prefisso SSSinserisce il numero che lo segue (terminato da un L) nello stack. TLSSgenera il carattere il cui codice ascii è in cima allo stack. Infine, secondo questo tutorial , un programma deve terminare con LLLun'uscita pulita dall'interprete.

NB: Sto inserendo questo come una risposta separata, perché l'altra voce del programma WS è un programma di 1287 caratteri che stampa "Ciao, mondo degli spazi!" invece del richiesto "Hello World".


8

Rubino - 63 caratteri

puts [%w{G d k k n},%w{V n q k c}].map{|l|l.map(&:succ)*''}*' '

rompe # 1, però
John Dvorak il

E ancora più breve: puts "Gdkkn~Vnqkc".split("").map(&:succ)*''- 43
Biketire

7

C, 160 caratteri

Funziona solo su macchine little-endian con int a 4 byte:

main(){int a='a',b=a/a,c=b+b,f=c+c,g=f+f,i=g+g,j=i*i,k=j*j,m=a+g+b+c,n=m+b+c;int p[]={a+g-b+(a+f)*j+m*k*(j+b),n+i*c*j+k*(n+g+n*j),a+i+b+m*j+(a+f-b)*k};puts(p);}

Soddisfa tutte e tre le regole.


1
Potresti usare solo costanti numeriche senza 0,1,2,7: p[];main(){p={(5*5*5*5*5*64+96696)*(443+5688),(5*3*4*3+4-3)*(66*45*6-6*6-4+3)*8‌​3*(3+4),6544494+36868};puts(p);}- 111 caratteri.

1
Vena simile (in realtà ha affrontato il problema in diversi modi prima di accontentarsi di questo). x[]={45483*39994-3958,48465*38543-5584,6584695-3333};main(){puts(x);}- 69 caratteri. Sono sicuro di potermi radere un po 'di più, dato più tempo per meditare ancora un po' i letterali. Comunque è stato un modo divertente di passare un paio d'ore :)
Cole Cameron,

7

PHP, 28 byte

Non esattamente offuscato, ma molto breve ed evidente :). Dimostrando che anche quando si limitano i caratteri è possibile seguire facilmente i programmi. Seguirono i vincoli 1 e 3. Il vincolo 2 è stato abusato.

<?=str_rot13('Uryyb Jbeyq');

Nota che questo richiede di short_open_tagessere impostato, a meno che tu non stia utilizzando PHP 5.4 o versioni successive. Forse alcuni esempi sono più brevi, ma penso che questo esempio sia piuttosto breve.


7

bash 28 caratteri:

printf 'p|ɹ°M ο||ǝ%b'"\x48"

p | MοM ο || ǝH

in alternativa con / bin / echo (18 caratteri) *) vedere la discussione di seguito.

/bin/echo -e 'p|ɹοM ο||ǝ\0110'

Test di autoverifica:

echo "printf 'p|ɹοM ο||ǝ%b' "\x48"" | egrep -i "[^hlwd27eor01]"

Più duro di teppista! Strumenti, per capovolgere le parole, gli strumenti pensano che una 'H' o 'o' capovolta sia meglio visualizzata come H o o. Ciò sarebbe in conflitto con il gruppo 1 (Hlwd: 27: eor01) rispettivamente 3.

H può essere visualizzato con

echo -e "\0127"

ma anche 01 e 2 sono avvelenati. Gee! Ma l'eco bash-buildin non ha solo la possibilità di visualizzare valori ascii ottali, ma anche esadecimali:

echo -e "\x48"

Ma se usiamo bash come linguaggio di programmazione, il comando echo fa parte del programma, che non solo conta per il conteggio dei caratteri, ma contiene anche i caratteri avvelenati (hlwd: 27: eor01) eho dei gruppi 1 e 3.

Quindi questo è il momento in cui l'eco è morta. Fortunatamente, c'è printf, che conosce "% b" da visualizzare.

R è l'unico personaggio problematico in printf e appartiene al gruppo 3. Dato che 'o' è nell'ultimo gruppo, potremmo lasciarlo in Hello and in World, ma possiamo usare l'omicron ο che assomiglia a una o, oppure ° &deg;.

link:


Voterei questo, ma la tua reputazione è troppo lasciva.
Konrad Borowski il

@GlitchMr: ora puoi - ho votato in basso e dovrei essere ribassato 500N. :)
utente sconosciuto

dl.dropbox.com/u/63913412/stilltooleet.png . Inoltre, le domande di downvoting non riducono la reputazione. Il downvoting delle risposte lo fa comunque.
Konrad Borowski il

@GlitchMr: Ah, questo è tutto! :)
utente sconosciuto

6

C (94)

Su piccole macchine Endian:

main(){int i[]={1819043144,((0x1bc5c81b|1<<0x14)*4)+3,0xa646c00|(0x39<<1),0};printf("%s",i);}

Viola la regola II, ma soddisfa il resto.


6

JavaScript - 132 caratteri

(_=(_=[][(f=!!(_='')+_)[3]+(b=({}+_)[(I=-~(z=_-_))])+($=(c=(d=!_+_)[I])+d[z])])())[f[I]+'l'+(a=d[3])+$]("H"+a+'ll'+b+' W'+b+c+'ld')

Regola di infrazione I

Utilizzo :

  • Incolla "javascript: [script]" nella barra degli indirizzi del browser
  • Crea una pagina html vuota, incolla lo script in un tag

Infrange sia la regola 1 che 2. Stai usando il numero 1 per gli array.
Kevin Brown,

È possibile sostituire 1da !![]+![]e 0per ""-""per non infrange la Regola # 2.
HoLyVieR,

Grazie @ Bass5098 e @HoLyVieR, ho perso l'1 e lo 0 quando ho minimizzato lo script. Ho sostituito 0 con z = _-_ e 1 con I = - ~ z, potrei anche usare ++ z, ma - ~ sembra più bello :)
m0sa

3
Eh? !![]+![]? Perché non solo 4-3?
Timwi

4
@Timwi: più offuscamento
Thomas Eding,

6

Dis , 102 83 caratteri

Srotolato il ciclo del codice poiché le lettere possono essere generate con meno di cinque operazioni consecutive. Hai salvato alcuni caratteri riutilizzando il valore dell'accumulatore: due lsono consecutivi, SPACEpossono essere generati oe dgenerati da l.

*>|||{>|||{>||{{>|{|||{>||{>|{>|||{>||{||{!!>**_!!}|_}!^__}|__>*__}|_}|_>!!|_}!^__!

Vecchia versione

^}!>^^_^!__!>_^!^^**_^!^^**_
^_!{**_^__!{>_^__{>>!^_!{**_
^_!>^*_^!^^**_^_^^**_*______
___________>||||{^

Con i commenti qui sotto. Sta usando una sequenza di cinque operazioni identiche per generare tutti i caratteri in Hello World: una rotazione e quattro sottrazioni.

^     (move code pointer to data pointer value '^')
}!>^^ (store 'H' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
!__!> (store 'e' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
!^^** (store 'l' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
!^^** (store 'l' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
_!{** (store 'o' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
__!{> (store ' ' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
__{>> (store 'W' in accumulator)
!     (program termination)
^     (data pointer value used by code pointer jump)
_!{** (store 'o' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
_!>^* (store 'r' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
!^^** (store 'l' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
_^^** (store 'd' in accumulator)
_     (no-op)
*     (data pointer value used by code pointer jump to reach '!' between 'W' and 'o')
________________ (no-ops)
_     (no-op, address '^')
>|||| (rotate data value and perform four subtractions)
{     (print value in accumulator)
^     (move code pointer to data pointer value '^' except for the last jump '*')

6

C: 162 caratteri (escluse le nuove righe non necessarie)

Ho optato per la leggibilità e la trasparenza durante la scrittura di questo.

a[3],b;main(){b=99
+9;b+=b<<8;b=b<<8|
97|4;b=b<<8|64|8;a
[3^3]=b;b=78+33<<8
;b+=87;b=b<<8|35^3
;b=b<<8|64|47;a[5^
4]=b;b=97+3<<8;b+=
99+9;b=b<<8|66|48;
a[6^4]=b;puts(a);}

Soddisfa tutti e tre i requisiti.


1
Mi piace questo, ma purtroppo non soddisfa tutte le regole, perché contiene la cifra 7, violando la regola n. 3. Ma sarebbe facile liberarsene 7. Inoltre aggiungendo qualche ints, aggiungendo alcune parentesi extra e aggiungendo int puts(int*);all'inizio, si compila gcc -ansi -W -Wallsolo con un singolo avvertimento: il controllo raggiunge la fine della funzione non nulla .
Punti

5

Bash, 24 20 caratteri

Devi aver installato il pacchetto "bsdgames".

rot13<<<Uryyb\ Jbeyq

Grazie gnibbler :)


5

PostScript, 41 caratteri

<64><~+BNK%C]~><48656c6c6f>3{print}repeat

Uso: $ gs -q -dNOPROMPT -dNODISPLAY filename.ps


1
potresti anche eseguirlo come:gsnd -q -- filename.ps
luser droog

5

JavaScript, 66 caratteri

Un'altra soluzione JavaScript, questa volta infrangendo la regola # 2.

top[(U=unescape)('a%6cert')](U('%48e%6c%6co %5'+(6+1)+'or%6c%64'))

Quanto sopra segue il concetto alla base della risposta di Hallvabo. Prima di afferrare quell'approccio, avevo la versione probabilmente più offuscata:

top[8680439[n='toString'](30)]((16+1)[n](z=8*4)[u='toUpperCase']()
+15960[n](33)+'o '+z[n](33)[u]()+1155505[n](36))

che infrange anche la regola n. 2 e arriva a 114 caratteri. (Rimuovere il ritorno a capo in questa seconda soluzione in quanto è lì solo per la leggibilità.)


4
Ho letto che come R unescape.
Mateen Ulhaq,

@MateenUlhaq L'ho sempre letto come R unescape, e ho giocato solo un anno più di un decennio fa ... Cosa c'è che non va in me?
Mwr247,

5

Haskell, 38

Seguirono i vincoli 1 e 3.

main=putStr$map succ"G\x64kkn\USVnqkc"

4

Fourier, 39 byte

8*9a99^^a+6^aa~q+3a33va86^aq+3a+3aqa-8a

Fourier è sempre offuscato. Questo segue tutte le regole.

Abbattersi:

8*9a    Set the accumulator to 8, multiply it by 9, and print the 
        corresponding ASCII code.

99^^a   Set the accumulator to 99, increment it twice, and print the
        corresponding ASCII code.

+6^aa   Add 6 to the accumulator, increment it, and print the
        corresponding ASCII code twice.

~q      Set the variable q to the current value of the accumulator.

+3a     Add 3 to the accumulator and... I think you get the idea.

33va    Set the accumulator to 33, decrement it, and print ASCII.

86^a    Yes, okay, I think it's obvious by this point.

q+3a    Set the accumulator to the value of q (earlier set to 108),
        add 3, and print ASCII.

+3a     ...

qa      Invoke q again and print ASCII.

-8a     Subtract 8 from the accumulator and print ASCII.

Questo potrebbe forse essere raffinato un po '.


Woah, ho appena realizzato che qualcun altro ha usato Fourier: D Nice one, +1
Beta Decay
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.