Yararsız bir tercüman uygulayın [kapalı]


12

Göreviniz Yararsız dile bir tercüman oluşturmaktır :

İşlevsel gereksinimler şunlardır:

  • Açıklanan tüm komutlar tercüman tarafından kabul edilmelidir.
  • NO., NOOPVe INCLUDE-xxxonurlandırılmalıdır.
  • DONTUSEME(n) test amaçları için daha makul bir şeye kolayca yapılandırılabilmesi için temel tarihinin olması gerekir.
  • INCLUDE-xxxkabaca eşit olasılıkla herhangi bir komut üretebilmelidir. Eğer a DONTUSEME(n)üretirse, n için rastgele küçük bir değer seçmelidir.
  • DONTUSEME(n)pencereler NO.talimattan sağ çıkmalıdır . İpucu: bu pencereler için yeni bir süreç oluşturun.
  • BOOM!ve KABOOM!kötü ve korkutucu bir şey yapmalı ve KABOOM!bundan daha kötü olmalı BOOM!. Ama bu olmamalıdır bunun çözülmek olmak aşırı yıkıcı veya sert yıkıcı bir şey, olmamalı bu yüzden, çok fazla ciddiye alınacak. Lütfen, bu talimatları bir komut çalıştırmayın, çatal bomba çalıştırın, kötü amaçlı yazılım yükleyin, dosya sistemindeki verileri bozmayın veya internetten uygunsuz içerik yayınlamayın veya indirmeyin veya açıkça kötüye kullanılan başka bir şey yapmayın , yapmayın ve yapmayınrm -rf \ .
  • TURINGVSALONZOaslında yapması gerekeni yapıyormuş gibi çalışmalıdır. İpucu: Rastgele çok uzun bir süre mi yoksa rastgele kısa bir süre mi yoksa sonsuza dek uyup uymayacağına rastgele karar verin.
  • Diğer tüm önceden tanımlanmış talimatlar yukarıda belirtilen talimatlara dışında bir şey ve başka farklı bir, ama daha kötü asla bir şey yapmalıyım BOOM!ya KABOOM!. Tam olarak yaptıkları size kalmış, ancak basit bir uygulama sadece bir hata mesajı veya başka bir metin çıkarır.
  • Kullanıcının tercüman tarafından çalıştırılacak programı sağlaması için kolay bir yol sağlamalısınız. yani bir dosyadan veya birinden düz metin okumak stdintamam. İnternette bir yerde şifreli bir dosyadan okumak değil.

İsteğe bağlı:

  • İsterseniz bazı yeni komutlar icat edebilirsiniz, ancak diğer komutlarla aynı kurallara tabi olmalıdırlar. Bunu, kısıtlamaları aşmak BOOM!ve KABOOM!ya da yenmek için kullanmayın DONTUSEME(n). Ve yeni komutlar icat ederseniz, ne yaptıklarını açıklayın.
  • Tercümanın bilinmeyen komutlarla (veya tamamen ayrıştırılamaz rasgele bayt anlamsız) girdi alırsa ne yapacağını düşünmelisiniz.
  • Hiçbir komutun DONTUSEME(n)komutu yenmemesine rağmen, komut için bir kill anahtarı ekleyebilirsiniz. Sadece dilde gösterme.

Kötüye kullanımı önlemek için birkaç işlevsel olmayan gereksinimimiz var:

  • Girişiniz mümkün olduğunca eksiksiz ve otomatik olarak tutulmalıdır. Bu, sadece bir çeşit yükleyici veya açıkça eksik bir program olmaması gerektiği anlamına gelir. Bu şekilde, mQenery veya maven central'den paketler gibi kitaplıkları indirmek ve kullanmak tamamdır, ancak özel sunucunuzdan rastgele kod ve paketler indirmek uygun değildir.
  • Girişiniz, bir tür yansıma yapmak veya başka bir amaçla yapmak için bu sayfadan veya bu sayfanın bir kopyasından veya kopyasından içerik almamalıdır. Diğer katılımcıların bu soruya verdikleri cevapları okumaya çalışan ya da soruyu ya da cevapları herhangi bir şekilde bozmaya çalışan bazı programlardan kaçınmak için bu gereklidir.
  • Tercümanınız değişmez olmalı ve kendi girdi dosyasını değiştirmemeli veya değiştirmemelidir. Ancak, orijinali değiştirmeden yorumlayıcının veya giriş dosyasının mutant bir kopyasını oluşturmak tamamdır.

Ve son olarak, bunu göz önünde bulundurarak:

  • Cevaplardaki programların tamamen uyumlu olsa bile oldukça yararsız olması beklenmektedir;
  • Dil (kasten) çok az belirtilmiştir ve cevaplayanların alma özgürlüğü vardır ve bunları almaya teşvik edilmektedir;
  • Gereksinimler ve olası uygulamalar çok fazla öznel noktaya sahiptir;
  • Bunun amacı sadece biraz eğlence ve yaratıcılık elde etmektir.

O zaman, bu bir ve kurallara tam olarak uyan en güncel cevap kazanır! Yani, cevabınızı golf ya da gizlemenize gerek yoktur (ancak isterseniz bunu yapabilirsiniz). Sadece oyları hak etmek için orijinal ve yaratıcı bir şey paylaştığınızdan emin olun, yani lütfen topal sıkıcı girişler göndermeyin.


Şunu mu demek istediniz: rm -rf?
Simon Kuang

Yanıtlar:


8

TI-BASIC

Bir öldürme düğmesi var, DONTUSEMEhangisinin olduğunu anlayabilir misiniz? :)

:Lbl 1
:Input Str1
:If Str1="NO."
:Pause
:If Str1="FAIL"
:Disp "OBSOLETE. WHAT A FAIL."
:If Str1="NOT"
:Disp "USING NOT IS HIGHLY DISCOURAGED!"
:If Str1="NEVER"
:get(Police,911)
:If Str1="IDK"
:Disp LLLundefined
:If Str1="BOOM!"
:Disp "rm -rf \"
:If Str1="KABOOM!"
:send(virus)
:If Str1="QWAOZAPWQFUOA"
:Disp "SKIPPING QWAO... UNIMPLEMENTED"
:If Str1="WUT?"
:dayOfWk(1)
:If Str1="WHERE?"
:Disp "NON-EXISTENT. SKIPPED."
:If Str1="HOW?"
:++
:If sub(Str1,1,9)="DONTUSEME"
:Then
:While 1
:sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(e)
:End
:End
:If Str1="ILLEGAL"
:Archive X
:If Str1="GODEXISTS"
:Disp "GOD EXISTS, PROVEN BY LAW."
:If Str1="WINDOWS"
:Disp "UNABLE TO OPEN START MENU!"
:If Str1="NOOP"
:Lbl 0
:If sub(Str1,1,8)="INCLUDE-"
:sub(Str1,9,length(Str1-8))
:If Str1=Ans
:Then
:If not(rand)
:Goto 0
:End
:If Str1="TURINGVSALONZO"
:Then
:"+"→Str0
:randInt(5,10)
:While Ans
:Ans-1
:If fpart(Ans,4)4=3
:Str0+"+"→Str0
:If fpart(Ans,4)4=2
:Str0+"-"→Str0
:If fpart(Ans,4)4=1
:Str0+">"→Str0
:If fpart(Ans,4)4=0
:Str0+"."→Str0
:End
:Disp "0"
:"?utm_campaign=0"
:End
:Goto 1

2
Bu sadece bir operasyon olmadığı :Goto 1anlamına mı geliyor BOOM!?
Victor Stafusa

1
@VictorStafusa Evet. Biraz daha düşündükten sonra, bunu "rm -rf" olarak değiştirdim çünkü bana (değil) söyledin.
Timtech

Uyguladığınızı sanmıyorum INCLUDE-.
lirtosiast

9

HTML + Javascript + jQuery + jQuery Kullanıcı Arayüzü

Giriş, metin alanında verilmeli ve satırdaki her komut olarak biçimlendirilmelidir. Komutlar büyük / küçük harfe duyarlı değildir. Tüm komutlar tamamen uygulandı. Umarım beğenirsin.

Http://jsfiddle.net/bCBfk/ adresinden deneyebilirsiniz.

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
    <title>Useless interpreter</title>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
    <style type="text/css">
      textarea { height: auto; }
      .badshit { color: red; }
      .ui-dialog-titlebar-close { display: none; }
    </style>
    <script type="text/javascript">
      String.prototype.startsWith = function(x) {
        return this.substring(0, x.length) === x;
      };
      String.prototype.endsWith = function(x) {
        return this.substr(this.length - x.length, x.length) === x;
      };

      var npe = "<pre>java.lang.NullPointerException\n"
          + "       at org.esolangs.wiki.useless.memorymodel.ExistentObjectPool.findObject(ExistentObjectPool.java:684)\n"
          + "       at org.esolangs.wiki.useless.interpreter.WhereInstruction.visit(WhereInstruction.java:29)\n"
          + "       at org.esolangs.wiki.useless.interpreter.UselessProgram.run(UselessProgram.java:413)\n"
          + "       at org.esolangs.wiki.useless.interpreter.Main.main(Main.java:53)</pre>";

      var wut = navigator.userAgent + " - " + navigator.language + " - " + navigator.platform + " - Ii?".toLocaleUpperCase();

      var wut2 = "";
      for (var c = wut.length - 1; c >= 0; c--) {
          wut2 += wut.charAt(c);
      }

      var popupMasterMind;
      function killIt() {
        clearInterval(popupMasterMind);
        $(".dontuseme").remove();
        popupMasterMind = null;
      }

      function spawn() {
        var x = $("<div class='dontuseme' title=''><p></p></div>");
        $("body").append(x);
        x.dialog();
        var bw = $("body").innerWidth();
        var bh = $("body").innerHeight();
        if (bh < 500) bh = 500;
        var xw = x.width();
        var xh = x.height();
        x.parent().css({left: Math.random() * (bw - xw) + "px", top: Math.random() * (bh - xh) + "px"});
      }

      function dontuseme() {
        if (popupMasterMind) return;
        spawn();
        popupMasterMind = setInterval(spawn, 700);
      }

      var hasOutput = false;
      function clearOutput() {
        $("#output").empty();
        hasOutput = false;
        $("#cc").hide();
      }

      function out(a) {
        $("#output").append($(a));
        hasOutput = true;
      }

      function finish() {
        $("#running").hide();
        $("#bt").show();
        if (hasOutput) $("#cc").show();
      }

      var annoyingUser = false;
      function swap() {
        annoyingUser = true;
        $("#everything").toggle();
        setTimeout(swap, 800);
      }

      function randomString() {
        var r = "";
        var f = Math.floor(Math.random() * 12) + 8;
        for (var i = 0; i < f; i++) {
          r += "ABCDEFGHIJKLMNOPQRSTUVWXYZ.!?0123456789".charAt(Math.floor(Math.random() * 39));
        }
        return r;
      }

      var instructions;
      function includeInstruction(name) {
        name = name.toUpperCase();
        if (instructions[name]) return; // Do not add it twice or overwrite existing instructions.
        var array = [];
        for (var e in instructions) {
          array.push(e);
        }
        var rand = Math.floor(Math.random() * array.length);
        //alert(name + ": " + array[rand]);
        instructions[name] = instructions[array[rand]];
      }

      // DONTUSEME(n) are special cases handled elsewhere.
      instructions = {
        "FAIL": function() { out("<p class='badshit'>Warning: The &lt;blink&gt; tag is obsolete.</p>"); if (!annoyingUser) swap(); return "next"; },
        "NOT": function() { out("<p class='badshit'>Warning: The NOT instruction is discouraged because it breaks yor Useless program.</p>"); return "quit"; },
        "NEVER": function() { out("<pre>Wild MISSINGNO. appeared!</pre>"); return "next"; },
        "IDK": function() { out("<pre>" + {}.idk + "</pre>"); return "next"; },
        "BOOM!": function() { $("#everything").empty(); return "quit"; },
        "KABOOM!": function() { window.location = "http://answers.yahoo.com/question/index?qid=20110816062515AANqygl"; return "quit"; },
        "NO.": function() { finish(); return "quit"; },
        "QWAOZAPWQFUOA": function() { out("<p class='badshit'>Sorry, I could not understand <a href='https://www.google.com.br/#q=women+psychology+and+behaviour'>this</a>.</p>"); return "next"; },
        "WUT?": function() { out("<p>" + wut2 + "</p>"); return "next"; },
        "WHERE?": function() { out(npe); return "next"; },
        "HOW?": function() { out("<p class='badshit'>Regular expression parser failed for HTML. Cause: \"ZALGO\"</p>"); return "next"; },
        "ILLEGAL": function() { out("<pre>codegolfer is not in the sudoers file.  This incident will be reported</pre>"); return "next"; },
        "GODEXISTS": function() { out("<p>'GOD' spelled backwards is 'DOG'. A DOG is an animal that does not exists, and by backwarding this, we conclude that GOD exists and is not an animal.</p>"); return "next"; },
        "WINDOWS": function() { out("<p><img width='640' height='400' src='http://upload.wikimedia.org/wikipedia/commons/3/3b/Windows_9X_BSOD.png' alt='Sorry, this optional instruction was not implemented. Please, install the service pack.'></p>"); return "next"; },
        "NOOP": function() { return "next"; },
        "TURINGVSALONZO": function() {
          var r = Math.random() * 10;
          if (r < 2) return "next";
          if (r < 7) return "t" + (Math.random() * 14 + 1) * 1000;
          if (r < 9) return "t" + (Math.random() * 50 + 10) * 60 * 1000;
          return "quit";
        },
        "42": function() {
          out("<p>Calculating the answer of the life, the universe and everything.</p>");
          out("<p>Estimated time is 7.5 million years.</p>");
          out("<p>Don't you want to briefly take a coffe while you wait? It will not take long, I promise.</p>");
          return "quit";
        },

        // This is special, as it needs a (surprising) useless parameter, it can't be acessed directly without prior processing, this is why it is lowercase.
        "dontuseme": function() { dontuseme(); return "next"; },

        // This is special. If the INCLUDE-xxx generates a INCLUDE-yyy instruction, the yyy instruction will have an unknown random generated name.
        // Since yyy is random and unknown, it probably won't appear in the input source code, but implement it regardless.
        "include-random": function() { includeInstruction(randomString()); return "next"; }
      };

      function bad(line) {
        //alert(line);
        out("<p class='badshit'>Syntax error: </p>");
      }

      function beyondEnd() {
        out("<p class='badshit'>Unrecoverable error: Tried to execute code beyond the end or program.</p>");
      }

      function interpretInstruction(lines, idx) {
        if (idx >= lines.length) { beyondEnd(); return; }

        // The toUpperCase serves two purposes: Making the language case-insensitive and hiding private implementations as lowercase instructions.
        ins = lines[idx].trim().toUpperCase();

        var result;

        // Special handling for parsing DONTUSEME(n)
        if (ins.startsWith("DONTUSEME(") && ins.endsWith(")")) {
          try {
            parseInt(ins.substring("DONTUSEME(".length, ins.length - 1));
          } catch (e) {
            bad(ins);
            return;
          }
          ins = "dontuseme";

        // Special handling for INCLUDE-xxx
        } else if (ins.startsWith("INCLUDE-") && ins.length > 8) {
          var name = ins.substring(8);
          includeInstruction(name);
          ins = "NOOP"; // Already executed, follow-up as noop.
        }

        // Execute the instruction.
        var f = instructions[ins];
        if (!f) { bad(ins); return; }
        var result = f();

        // Move on.
        if (result === "quit") return;
        var toWait = result === "next" ? 0 : parseInt(result.substring(1));
        var ii = idx + 1;
        setTimeout(function() {
          interpretInstruction(lines, ii);
        }, toWait);
      }

      function startInterpreter() {
        $("#bt").hide();
        $("#cc").hide();
        $("#running").show();
        var src = $("#input").val();
        var lines = src.split('\n');
        interpretInstruction(lines, 0);
      }

      $(document).ready(function() {
        $("#bt").click(startInterpreter);
        $("#cc").click(clearOutput);
      });
    </script>
  </head>
  <body>
    <div id="everything">
      <p>Type here your program input:</p>
      <textarea id="input" style="width: 400px; height: 150px;"></textarea>
      <p>
        <button id="bt">Run the program</button>
        <span id="running" style="display: none;">Running the program...</span>
      </p>
      <p>Here is the program output:</p>
      <p id="output" class="useless"></p>
      <button id="cc" style="display: none;">Clear the output</button>
    </div>
  </body>
</html>

Yeni bir komutu var:

Öyle 42hayatın, evrenin ve her şeyin cevabı hesaplar komut. Tek tuhaflık bitirmek 7.5 milyon yıl alıyor.

Diğer spoiler:

Bu girişin çeşitli özellikleri vardır:

  • Komuttan gerçekten nefret edeceksin FAIL.
  • BOOM!size "yürütme birimi" berbat edecek. En azından pencereler bundan DONTUSEME(n)sağ çıkabiliyor.
  • KABOOM! kötü yönlerden dünya için gerçekten tehlikelidir.
  • DONTUSEME(n)her zaman 0,8 saniyede bir olmak üzere sonsuz kapatılamaz boş pencereler açar. Ama gizli bir öldürme anahtarı var.
  • DONTUSEME(n)Survives NO., FAILve hatta BOOM!. KABOOM!Gerçi hayatta kalmasını sağlayamadım . Bunun nedeni, açılır pencerelerin bir tıklamanın sonucu olmadığı için (ve diğer yollarla oluşturulan açılır pencerelerin tüm büyük tarayıcılarda uzun süre yasaklandığı) ve aynı menşe politikasının ihlali nedeniyle iframe'leri kullanamamasıdır. .
  • INCLUDE-xxxDONTUSEME(n)veya başka bir INCLUDE-yyytalimat da dahil olmak üzere herhangi bir talimat oluşturabilir .
  • Bir komut INCLUDE-xxxoluşturursa INCLUDE-yyy, yyyad rastgele oluşturulur. Oluşturulan komutun adını kundakçı veya benzeri bir şeyle yakalarsanız, kullanabilirsiniz.
  • Hatalı oluşturulmuş sözdizimini ve eksik veya boş girişi işler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.