쓸모없는 통역사 구현하기


12

당신의 임무는 쓸모없는 언어로 통역사를 만드는 것 입니다.

기능 요구 사항은 다음과 같습니다.

  • 설명 된 모든 명령은 통역사가 승인해야합니다.
  • NO., NOOPINCLUDE-xxx영광해야합니다.
  • DONTUSEME(n) 테스트 목적에보다 합리적인 것으로 쉽게 구성 할 수있는 기준 날짜를 가져야합니다.
  • INCLUDE-xxx대략 같은 확률로 명령을 생성 할 수 있어야합니다. 그것이 a를 생성하면 DONTUSEME(n), n에 대해 작은 값을 무작위로 선택해야합니다.
  • DONTUSEME(n)창문은 NO.명령에서 살아남 아야합니다 . 팁 : 해당 창에 대한 새로운 프로세스를 생성하십시오.
  • BOOM!그리고 KABOOM!뭔가 나쁜 무서운을 수행해야하고, KABOOM!보다 더해야합니다 BOOM!. 그러나 이것은 가 취소 될 수 지나치게 중단 또는 하드 파괴적인 뭔가를하지 않아야하므로, 너무 심각하게. 제발 ,하지 않는 ,하지 않으며 이러한 지침이 실행되도록 rm -rf \명령을 포크 폭탄을 실행, 파일 시스템, 또는 게시물에 악성 코드, 손상된 데이터를 설치하거나 인터넷 또는 명확하게 학대 다른 일에서 부적절한 콘텐츠를 다운로드 할 수 있습니다.
  • TURINGVSALONZO실제로해야 할 일을하는 것처럼 실행해야합니다. 팁 : 임의의 시간 동안 또는 임의의 짧은 시간 동안 또는 영원히 잠을 자도록 무작위로 결정하십시오.
  • 다른 모든 미리 정의 된 명령은 상기 지시가 아닌 다른과 다른 다른 하나지만,보다 더 나쁜 결코 뭔가해야 BOOM!또는 KABOOM!. 그들이하는 일은 정확히 당신에게 달려 있지만 간단한 구현은 오류 메시지 또는 다른 텍스트를 출력합니다.
  • 사용자가 통역사가 실행할 프로그램을 제공 할 수있는 쉬운 방법을 제공해야합니다. 즉 파일에서 또는 일반 텍스트를 읽는 stdin것이 좋습니다. 인터넷 어딘가에서 암호화 된 파일에서 파일을 읽는 것은 아닙니다.

선택 과목:

  • 원하는 경우 새로운 명령을 발명 할 수도 있지만 다른 명령과 동일한 규칙을 따라야합니다. 의 제한을 회피하려면이 옵션을 사용하지 마십시오 BOOM!KABOOM!또는 패배를 DONTUSEME(n). 그리고 새로운 명령을 발명하면 그 명령을 설명하십시오.
  • 알 수없는 명령으로 입력을 받거나 해석 할 수없는 임의의 바이트가 횡설수설 인 경우 인터프리터가하는 일에 대해 생각해야합니다.
  • 아무 명령도 명령을 이기지 않아야하지만 DONTUSEME(n)킬 스위치를 추가 할 수 있습니다. 언어로 노출시키지 마십시오.

악용을 피하기 위해 몇 가지 비 기능적 요구 사항이 있습니다.

  • 출품작은 가능한 한 완전하고 자동적이어야합니다. 이것은 단순히 일종의 설치 프로그램이거나 명확하게 불완전한 프로그램이 아니어야 함을 의미합니다. 이런 식으로 maven central에서 jQuery 또는 패키지와 같은 라이브러리를 다운로드하여 사용하는 것은 괜찮지 만 사용자 정의 서버에서 임의의 코드 및 패키지를 다운로드하는 것은 아닙니다.
  • 여러분의 작품은 어떤 종류의 반성을 행하거나 다른 목적을 위해이 페이지 나이 페이지의 미러 나 사본에서 콘텐츠를 가져 와서는 안됩니다. 이것은 다른 참가자의이 질문에 대한 답변을 읽거나 어떤 식 으로든 질문에 대한 답변을 방해하려는 일부 프로그램을 피하기 위해 필수적입니다.
  • 통역사는 변경 불가능하며 입력 파일을 자체 수정하거나 수정해서는 안됩니다. 그러나 원본을 변경하지 않고 인터프리터 또는 입력 파일의 돌연변이 사본을 작성하는 것은 좋습니다.

마지막으로 다음을 고려하십시오.

  • 답변의 프로그램은 완전히 준수하더라도 매우 쓸모가 없을 것으로 예상됩니다.
  • 언어는 (의도적으로) 매우 구체적으로 지정되지 않았으며, 응답자들은 많은 자유를 가지고 있으며 그것을 받아 들일 동기가 있습니다.
  • 요구 사항과 가능한 구현에는 많은 주관적인 점이 있습니다.
  • 이것의 목표는 단지 ​​재미와 창의성을 얻는 것입니다.

그런 다음 이것은 이며 규칙에 완전히 부합하는 가장 큰 답은 승리합니다! 따라서 골프를 치거나 답을 혼란스럽게 할 필요는 없습니다 (그러나 원하는 경우 그렇게 할 수도 있습니다). 공감할만한 가치가있는 독창적이고 독창적 인 것을 게시하십시오. 즉, 지루한 지루한 게시물은 게시하지 마십시오.


`rm -rf`를 의미합니까?
Simon Kuang

답변:


8

TI-BASIC

에 대한 킬 버튼이 있습니다.이 버튼 DONTUSEME이 무엇인지 알아낼 수 있습니까? :)

: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
그합니까 :Goto 1수단 BOOM!단지 어떤 조합입니다을?
Victor Stafusa

1
@VictorStafusa 그래. 좀 더 고려한 후에는`rm -rf`로 변경했습니다.
Timtech

나는 당신이 구현했다고 생각하지 않습니다 INCLUDE-.
lirtosiast 2016 년

9

HTML + 자바 스크립트 + jQuery + jQuery UI

입력은 텍스트 영역에 제공되어야하며 한 줄에 각 명령으로 형식화되어야합니다. 명령은 대소 문자를 구분하지 않습니다. 모든 명령이 완전히 구현되었습니다. 나는 당신이 즐기시기 바랍니다.

http://jsfiddle.net/bCBfk/ 에서 시도해보십시오

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

새로운 명령이 하나 있습니다.

42생명, 우주 및 모든 것의 답을 계산 하는 명령입니다. 유일한 단점은 완료하는 데 750 만 년이 걸린다는 것입니다.

다른 스포일러 :

이 항목에는 몇 가지 기능이 있습니다.

  • 당신은 정말로 FAIL명령을 싫어할 것 입니다.
  • BOOM!"실행 단위"를 망칠 것입니다. 최소한 창문은 DONTUSEME(n)이것에서 살아남을 수 있습니다.
  • KABOOM! 여러 가지 나쁜 방법으로 세상에 정말 위험합니다
  • DONTUSEME(n)항상 0.8 초마다 하나씩 무한한 빈 창을 엽니 다. 그러나 숨겨진 킬 스위치가 있습니다.
  • DONTUSEME(n)살아남 NO., FAIL심지어 BOOM!. 나는 그것이 살아남을 수는 없었습니다 KABOOM!. 그 이유는 클릭의 결과가 아니기 때문에 팝업 창이 작동하지 않기 때문에 (다른 방법으로 만든 팝업은 모든 주요 브라우저에서 오랫동안 금지되어 있으며) 동일한 출처 정책 위반으로 인해 iframe을 사용할 수 없기 때문입니다. .
  • INCLUDE-xxxDONTUSEME(n)또는 다른 INCLUDE-yyy명령어를 포함한 모든 명령어를 만들 수 있습니다 .
  • 경우 INCLUDE-xxx합니까이 생성 INCLUDE-yyy명령의 yyy이름은 무작위로 생성됩니다. firebug 또는 이와 유사한 것으로 생성 된 명령의 이름을 가져 오면 사용할 수 있습니다.
  • 형식이 잘못된 구문과 불완전하거나 빈 입력을 처리합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.