Sua tarefa é reverter a ordem em que alguns prints
são executados.
Especificações:
seu código estará neste formato:
//some lines of code
/*code*/ print "Line1" /*code*/
/*code*/ print "Line2" /*code*/
/*code*/ print "Line3" /*code*/
/*code*/ print "Line4" /*code*/
//some lines of code
Você terá que print
(ou echo
, ou write
ou equivalente) as cadeias de caracteres do quarto ao primeiro.
Você decide quais linhas do seu programa devem ser
print
as strings, mas elas devem ser adjacentes ;Cada linha pode conter apenas um
print
e não pode exceder 60 bytes de comprimento;Como esse é um concurso de popularidade , seja criativo e evite escrever apenas um
goto
ou umfor(i){if(i=4)print"Line1";if(i=3)...}
A resposta mais votada em duas semanas ganha isso.
Sua saída deve ser
Line4 Line3 Line2 Line1
OULine4Line3Line2Line1
OULine4\nLine3\nLine2\nLine1
(onde\n
é uma nova linha), e deve ser gerada apenas por executar aquelesprints
para trás.
Feliz codificação!
UPDATE: O concurso acabou! Obrigado a todos :)
Respostas:
Commodore 64 BASIC
fonte
PHP
Abuso de precedência ... :-)
fonte
print
pode ser usado como uma expressão, como em perl, cujo valor de retorno é sempre1
.!1
retornabool(false)
, que quando digitado como uma string retorna a string vazia. Uma restrição mais apropriada para o PHP pode ser exigirecho
e nãoprint
; o acima é realmente apenas uma afirmação.print ("Line 1". !print ("Line2". !print ("Line 3". !print "Line4")));
- tudo o que está à direita de uma declaração impressa faz parte dela.print
é chamado primeiro, ele não termina de avaliar o que precisa imprimir até que o interior (inferior)print
já tenha sido chamado e avaliado completamente. E os!
são apenas para ocultar os 1s que seriam impressos de outra forma. Brilhante, @bwoebi!C
Comportamento indefinido é o tipo de comportamento mais emocionante!
A saída real pode variar dependendo do compilador, vinculador, sistema operacional e processador :)
fonte
Java
Usando reflexão
Resultado:
Uma explicação de por que isso funciona pode ser encontrada aqui .
fonte
C (e tipo de Python)
Nova versão, usando uma macro para ajustar-se perfeitamente ao formato da pergunta. Após o comentário de Quincunx, adicionei
return
para torná-lo melhor.Também funciona em Python, mas é impresso na ordem correta.
Versão original - os dois são praticamente os mesmos, após a substituição da macro:
fonte
#define } 0))));
(não sei exatamente como as macros funcionam em C). Dessa forma, você poderia apenas ter as instruções de impressão no método principal, nada mais.}
, mas você pode definirreturn
, o que eu fiz agora. Agora é quase um poliglota - aprint
sintaxe funciona em várias linguagens de script,#define
geralmente é um comentário, masmain(){..}
não funciona em nenhum idioma que eu pudesse encontrar.print
substituído por"\n",printf(
?ES6 (usando o modo reverso;)
Uau, parece que os designers do ECMAScript tiveram uma previsão incrível quando fizeram do modo reverso parte das especificações:
Resultado (avaliação, na verdade):
Observe que é exatamente da forma solicitada, com apenas uma pequena retro-justificação para ajustar a sintaxe do modo . Observe também que esse modo é suportado apenas nas versões recentes do Firefox no momento .
Nota final: Na verdade, não há modo inverso. Mas esse ainda é um script válido que roda no Firefox (copie a coisa toda). : D
ES6 "modo relaxado"
BÔNUS : Aqui está uma versão atualizada que não usa o modo reverso, mas usa o "modo lax" recém-especificado, em que o mecanismo JS apenas tenta adivinhar o que o código deve fazer, independentemente da adesão a qualquer sintaxe JS especificada ( basicamente a antítese do modo estrito):
Observe que o " modo lax " atualmente está disponível apenas no Firefox> = 34.; P
fonte
C
fonte
Rubi
Editar: Como alternativa,
fonte
ruby
com os blocos de código? pastebin.com/LDWpxKx8method_missing
é bastante Ruby-ish, no entanto.PHP
Eu sei, isso é loucura ...
fonte
goto
" ;-)Haskell
Isso é quase idiomático do Haskell, já que o programa agora parece uma composição de funções da direita para a esquerda. Se a função não fosse impressa, mas algo que retornasse um valor (útil), a declaração do operador seria desnecessária e o código seria algo que você veria nas bibliotecas.
fonte
(<<) = flip (>>)
<*
e*>
.<*
operador do aplicativo é diferente disso<<
:a <* b
é equivalente ado x<-a;b;return x
, ou seja, ele executaa
o efeito primeiroPerl
fonte
HTML + CSS
CSS:
Veja jsFiddle .
Editar:
Para se adequar melhor às regras, aqui está uma variante do XML que realmente usa
print
.onde style.css deve estar
HTML sem CSS
E para o que interessa, aqui está um sem CSS.
Violino .
fonte
p {float:right;}
div {float:left}
.C ++
(Variáveis locais são destruídas na ordem inversa da declaração.)
C ++ 11
(Muito parecido, mas usando lambdas e um membro de dados da matriz.)
fonte
std::function
e estava tentando me livrar dela. Agora eu não preciso porque você entendeu!Haskell
fonte
Javascript
fonte
1,2,3,4
como timeouts também funciona para mim. (No entanto, eu não sei se esse comportamento é padronizado em ECMAScript.)setTimeout
é padronizado em HTML5 / timers, não em ES. Além disso, ele especifica um tempo limite mínimo de 4ms :-)C
Tentando desafiar as dicas da pergunta da maneira mais criativa possível:
fonte
BF
Supõe quebra de célula.
Por que funciona
A primeira e a última linha compõem um loop que se repete quatro vezes (contador =
cell0
).Dentro do loop, há uma variável de contador (
cell1
) que é aumentada a cada execução.Cada linha verifica se a redução em quatro, três, dois ou um é igual a zero. Portanto, na primeira execução, o contador é um e a última linha é executada, na segunda execução, a terceira linha é executada etc.
Os
(line 1)
shows onde você deve fazer o texto impresso. As setas nos loops são alocadascell2
para esse fim. A[-]
limpezacell2
depois de você usá-lo.fonte
Bater
Em memória do reverenciado SleepSort e SleepAdd , apresento a você ... SleepReverse :
fonte
$1
e$2
:function print(){(sleep $((4-$2));echo "$1 $2";)&}; print Line 1
Java
Está tudo no momento certo ... ;-)
fonte
Python 3
fonte
Bater
Aí vem o script de dupla face:
fonte
tac
existia! Haha, obrigada.Lisp comum № 1
É fácil escrever uma
ngorp
macro que executa seus formulários na ordem inversa:Lisp comum № 2
Aqui está um que leva o problema muito literalmente; o código da pergunta aparece no programa sem modificação:
fonte
PHP
Outra
eval
variante:fonte
F #
Acabou de criar um operador personalizado que executa funções na ordem inversa.
fonte
(?) f g x
lê- se aproximadamente como(?)(f, g, x)
, nãof(g(x))
Go (Golang)
Experimente: http://play.golang.org/p/fjsJLwOFn2
fonte
Python3
Pode ser 6 bytes mais curto removendo todos os espaços na última linha.
fonte
Javascript
C ++ 11
fonte
std::reverse
estd::for_each
, simplesmente usarwhile (! functors.empty()) { functors.back()(); functors.pop_back(); }
Lote
fonte
C #
Em vez de chamar diretamente o método Run, estou criando um método dinâmico que contém uma cópia do bytecode IL da Run, exceto que os operandos opcode da string de carregamento são trocados. O que faz com que o novo método exiba as seqüências de caracteres na ordem inversa.
fonte
Pitão
ainda outra solução usando
eval()
não é muito complexo, mas fácil de entender.
fonte