Befunge Quebra-cabeças

15

Introdução

Para quem quer saber exatamente o que é o Befunge , é uma linguagem bidimensional baseada em pilha, criada em 1993 por Chris Pressy. Fiz 7 quebra-cabeças que precisam ser resolvidos no Befunge-93 . Este é um desafio bastante experimental, mas achei que vale a pena tentar :). Uma lista completa de todos os comandos usados ​​no Befunge-93 pode ser encontrada aqui .

Como jogar?

A tarefa é um pouco como policiais e ladrões sem os policiais. É basicamente quebrar as submissões para ganhar pontos. Todo quebra-cabeça contém pontos de interrogação. Eles devem ser substituídos por qualquer caractere ascii imprimível no intervalo 32 - 127, que inclua espaço em branco. Veja o seguinte exemplo:

??????@

Dado é que a saída deve ser hi. Após algumas intrigantes, podemos descobrir que a solução foi:

"ih",,@

Mas! Você não dá a solução. Isso é para a prevenção de trapaça. Você não publica a solução, mas o hash . O hash é gerado com o seguinte snippet:

String.prototype.hashCode = function() { var namevalue = document.getElementById("inputname").value;  var namenumber = 123;for (var character = 0; character < namevalue.length; character++) {namenumber += namevalue.substring(0, 1).charCodeAt(0);}var hash = 123 + namenumber, i, chr, len;if (this.length === 0) {return 0;}for (i = 0, len = this.length; i < len; i++) {chr = this.charCodeAt(i);hash = ((hash << 5) - hash) + chr; hash |= 0; }hash = Math.abs(hash);if ((hash).toString(16).length < 20) {for (var rand = 123; rand < 199; rand++) {hash = hash * rand;if ((hash).toString(16).length >= 20) {  break; }}}return (hash).toString(16).substring(2, 12);};function placeHash() { var pretext = document.getElementById("inputhash").value; var resultinghash = pretext.hashCode(); document.getElementById("resulthash").innerHTML = 'Your hash: <span class="hashtext">' + resultinghash + "</span>";}
p {font-family: monospace;color: black;} .hashtext{color: red;font-weight:bold}
<div class="container"><p>Personal hash generator:<p><textarea id="inputhash" placeholder="Your submission" cols="40" rows="4"></textarea><br><textarea id="inputname" placeholder="Your name" cols="40" rows="1"></textarea><br><button class="hashbutton" onclick="placeHash()">Generate Hash!</button><br><p id="resulthash">Your hash:</p></div><!-- Created by Adnan -->

Como usar o snippet?

  • Primeiro, cole a solução na seção de envio
  • Segundo, digite seu nome de usuário (nada mais, isso será verificado depois do prazo)
  • Terceiro, pressione Gerar Hash! para obter seu hash pessoal .
  • Copie e cole o hash no seu envio.

Os quebra-cabeças

Quebra-cabeça 1 (Pontuação: 3)

 ??
???      ?
??????????
         @

Saída (observe o espaço em branco à direita):

1 2 3 4 5 6 7 8 9 10 

Quebra-cabeça 2 (Pontuação: 3)

 ????    ?
??????????
??       ?
         @

Resultado:

abcdefghijklmnopqrstuvwxyz

Quebra-cabeça 3 (Pontuação: 5)

  ?????????
    ?????  ???
    ?     ?
    ? ?   ?  ?
          ?
          ?  ?
  ??????  ?  ?
    ?     ?  ?
       ?  ?  @
  ??????? ?
    ?  ?
????  ??
?  ??

Resultado:

Hello World!

Quebra-cabeça 4 (Pontuação: 2)

??????@

Saída (observe o espaço em branco à direita):

123 

Quebra-cabeça 5 (Pontuação: 5)

    ?
  ?????
???@?????
 ??????
?????????

Resultado:

Befunge

Quebra-cabeça 6 (Pontuação: 5)

?    ?   ?
     ?
??????????
     ?
     ?
     ????????                         ??????????????
     ?????"floG edoC dna selzzuP gnimmargorP "??????
     @

Resultado:

###################################
 Programming Puzzles and Code Golf
###################################

Quebra-cabeça 7 (Pontuação: 3)

???? ?????
   ???????
  @???????

Resultado:

012345678910

  • Este é , a pessoa com a maior quantidade de pontos ganha!
  • Em caso de empate, a pessoa que enviou todas as inscrições primeiro vence.
  • O último dia para envio é 10 de janeiro UTC . Depois disso, você tem 2 dias para postar a solução completa, com os hashes já incluídos. Estes serão verificados :).

Como postar?

Use o seguinte snippet para postar seu envio:

#N solutions:

Puzzle 1: `[hash 1]`

Puzzle 2: `[hash 2]`

etc.

Não é necessário resolver os quebra-cabeças em ordem. Todos os programas foram testados aqui e serão usados ​​para verificação.

Boa sorte!

Adnan
fonte
Suponho que seja bom remover o espaço em branco à direita (no caso de substituirmos qualquer espaço à direita ?)?
Martin Ender
Tem certeza de que há uma solução única para cada quebra-cabeça?
KSFT
@KSFT Importa se as soluções são únicas?
Martin Ender
@ MartinBüttner Se não for único e alguém fornecer uma solução diferente, o hash não corresponderá.
KSFT
@KSFT Os hashes não coincidem, porque o nome do usuário faz parte do hash. O objetivo do hash é apenas verificar quem encontrou uma solução funcional primeiro.
Martin Ender

Respostas:

5

7 soluções, 26 pontos

Estou digitando isso no meu telefone, porque não tenho acesso ao meu computador atualmente. Na verdade, eu tive que elaborar o Puzzle 6 com caneta e papel.

Quebra-cabeça 1 (Pontuação 3 ):4f52d5b243

 1v
v:<      <
>.1+:56+-|
         @

Este é bastante direto. Coloque um 1na pilha e imprima-incremente-compare-loop até 11ser atingido.

Quebra-cabeça 2 (Pontuação 3 ):85226eba20

 "`"     v
v"z":,:+1<
>-       |
         @

Basicamente, o mesmo que o anterior, apenas com caracteres em vez de números. Utilizou uma rota IP diferente.

Quebra-cabeça 3 (Pontuação 5 ):1ff5bcb1d9

  "!dlroW"v
    >,,,,  ,,v
    ,     "
    , ?      ,
          o
          l   
  ??,???  l   
    ,     e   
       ?  "  @
  ??^,"H" <
    ?  ?
????  ??
?  ??

Aqui eu falei um pouco. Empurre a sequência para a pilha e imprima caracteres manualmente, navegando pelos espaços. Eu tinha muito espaço extra, então deixei a maioria dos pontos de interrogação. Observe os espaços finais nas linhas 6 a 8, não os removi ao calcular o hash.

Quebra-cabeça 4 (Pontuação 2 ):f8b7bdf741

"{".  @

Realmente simples, basta pegar o caractere com o código correto e imprimir como um número, com dois espaços livres.

Quebra-cabeça 5 (Pontuação 5 ):c4db4b6af9

    v
  ??"??
#,_@e">>:
 <"B"<^
ung"<^"ef

Foi divertido de acertar. Pode não funcionar corretamente em alguns intérpretes devido a quebra de cordas e saltos, funciona no vinculado. Basicamente, o código pressiona a sequência de saída e entra no loop de impressão padrão, envolvendo as laterais.

Quebra-cabeça 6 (Pontuação 5 ):356e912eec

1        v
     #
     v??v_

     5
      75<^                              p15:-1g15,:*
     >5+:,"floG edoC dna selzzuP gnimmargorP ">:#,_@
     @

Agora esta foi a "obra-prima". Eu realmente tomou um pedaço de papel e passou algum tempo com isso. (Na verdade, fiz um trabalho extra, perdendo o espaço na sequência ao copiar.) Observe os espaços à direita na linha 4, não os removi ao calcular o hash.

O código funciona pressionando primeiro um para entrar no loop principal. O loop usa o #na segunda linha como um contador e imprime e pressiona um #em cada iteração. Depois disso, uma nova linha é impressa e enviada por push. Em seguida, a sequência especificada é pressionada. Finalmente, o código entra em um loop de impressão, que imprime tudo na pilha ao contrário, o que significa a sequência, a nova linha e, finalmente, os restantes #s.

Quebra-cabeça 7 (Pontuação 3 ):0881fc2619

"0"> :,1+v
   |-":":<
  @>"10",,

Isso é quase o mesmo que o Puzzle 2, mas com uma rota diferente, caracteres de saída diferentes, um adicional 01no final e uma quebra rápida para finalizar.

PurkkaKoodari
fonte
Haha, eu deveria ter pensado um pouco mais sobre o quebra-cabeça 3 e 4. Tudo parece bom :) #
1128 Adnan
3

4 soluções, 15 pontos

Espero não ter atrapalhado o espaço em branco em qualquer lugar ao gerar os hashes.

Quebra-cabeça 1 (Pontuação 3 ):de1de4c4c8

 v
v<       >
>1+:.:9`!|
         @

Quebra-cabeça 3 (Pontuação 5 ):071cad0879

  "!dlroW"v
    >,,,,  ,,v
    ,     "
    ,        ,
          o
          l
    ,     l
    ,     e
          "  @
    ^,"H" <

Quebra-cabeça 4 (Pontuação 2 ):531940bc43

"{".  @

Quebra-cabeça 5 (Pontuação 5 ):5bafaed8e9

    ^
  v >,,
n"<@,, ,"
 "e"^>,
uge"<^"Bf
Martin Ender
fonte