Votre tâche consiste à inverser l'ordre dans lequel certains prints
sont exécutés.
Spécifications:
Votre code sera sous cette forme:
//some lines of code
/*code*/ print "Line1" /*code*/
/*code*/ print "Line2" /*code*/
/*code*/ print "Line3" /*code*/
/*code*/ print "Line4" /*code*/
//some lines of code
Vous devrez print
(ou echo
, ou write
, ou équivalent) ces chaînes du quatrième au premier.
Vous décidez quelles lignes de votre programme doivent
print
les chaînes, mais elles doivent être adjacentes ;Chaque ligne ne peut en contenir qu'une seule
print
et ne peut dépasser 60 octets de long.Comme il s’agit d’un concours de popularité , soyez créatif et évitez d’écrire simplement un
goto
oufor(i){if(i=4)print"Line1";if(i=3)...}
La réponse la plus votée en 2 semaines a gagné.
Votre sortie DOIT être
Line4 Line3 Line2 Line1
ORLine4Line3Line2Line1
ouLine4\nLine3\nLine2\nLine1
(où\n
est une nouvelle ligne), et elle doit être générée uniquement en les exécutant à l'prints
envers.
Bonne codage!
MISE À JOUR: Le concours est terminé! Merci à tous :)
Réponses:
Commodore 64 BASIC
la source
PHP
Abus de préséance ... :-)
la source
print
peut être utilisé comme une expression, comme en Perl, dont la valeur de retour est toujours1
.!1
retournebool(false)
ce qui, lorsqu'il est saisi sous forme de chaîne, renvoie la chaîne vide. Une restriction plus appropriée pour PHP pourrait être d'exigerecho
plutôt que deprint
; ce qui précède n’est en réalité qu’une déclaration.print ("Line 1". !print ("Line2". !print ("Line 3". !print "Line4")));
- tout ce qui se trouve à droite d'une déclaration print en fait partie.print
est appelé en premier, il ne termine pas l’évaluation de ce dont il a besoin pour imprimer avant que les éléments internes (inférieurs)print
aient déjà été appelés et pleinement évalués. Et les!
s sont juste pour cacher les 1 qui imprimeraient autrement. Brillant, @bwoebi!C
Un comportement indéfini est le type de comportement le plus excitant!
La sortie réelle peut varier en fonction du compilateur, de l'éditeur de liens, du système d'exploitation et du processeur :)
la source
Java
En utilisant la réflexion
Sortie:
Une explication de pourquoi cela fonctionne peut être trouvée ici .
la source
C (et sorte de Python)
Nouvelle version, utilisant une macro pour s'adapter parfaitement au format de la question. Suite au commentaire de Quincunx, j’ai ajouté
return
pour le rendre plus agréable.Cela fonctionne également en Python, mais l’impression se fait dans le bon ordre.
Version originale - les deux sont pratiquement les mêmes, après substitution de macro:
la source
#define } 0))));
(je ne sais pas exactement comment les macros fonctionnent en C). De cette façon, vous pouvez simplement avoir les instructions print dans la méthode principale, rien d’autre.}
, mais vous pouvez définirreturn
, ce que j'ai maintenant fait. C'est presque un polyglotte maintenant - laprint
syntaxe fonctionne dans plusieurs langages de script,#define
est souvent un commentaire, maismain(){..}
ne fonctionne dans aucun langage que j'ai pu trouver.print
pour être remplacé par"\n",printf(
?ES6 (en mode arrière;)
Wow, il semblerait que les concepteurs d'ECMAScript aient fait preuve d'une clairvoyance incroyable en intégrant le mode arrière dans la spécification:
Résultat (évaluation, vraiment):
Notez que c'est exactement de la forme demandée, avec seulement une légère rétro-information pour correspondre à la syntaxe du mode . Notez également que ce mode est pris en charge dans les versions récentes de Firefox au moment .
Note finale: En fait, il n'y a pas de mode arrière. Mais ceci est toujours un script valide qui tourne dans Firefox (copiez le tout). :RÉ
ES6 "mode lax"
BONUS : Voici une version mise à jour qui n'utilise pas le mode précédent, mais utilise le "mode laxiste" nouvellement spécifié, dans lequel le moteur JS essaiera simplement de deviner ce que le code est censé faire, quelle que soit la syntaxe spécifiée par JS ( fondamentalement l'antithèse du mode strict):
Veuillez noter que le " mode lax " est actuellement disponible uniquement dans Firefox> = 34.; P
la source
C
la source
Rubis
Edit: Alternativement,
la source
ruby
compliqué avec des blocs de code? pastebin.com/LDWpxKx8method_missing
c'est joli Ruby-ish lui-même, cependant.PHP
Je sais, c'est de la folie ...
la source
goto
" ;-)Haskell
Ceci est presque idiomatique en Haskell, car le programme ressemble maintenant à une composition de fonctions de droite à gauche. Si la fonction n'était pas imprimée, mais que quelque chose renverrait une valeur (utile), la déclaration de l'opérateur ne serait pas nécessaire et le code serait quelque chose que vous verriez dans les bibliothèques.
la source
(<<) = flip (>>)
<*
et*>
.<*
opérateur applicatif est différent de celui-ci<<
:a <* b
est équivalent àdo x<-a;b;return x
, c'est- à -dire qu'il exécutea
l'effet en premierPerl
la source
HTML + CSS
CSS:
Voir jsFiddle .
Edit:
Pour mieux se conformer aux règles, voici une variante en XML, qui utilise réellement
print
.où style.css devrait être
HTML sans CSS
Et pour le plaisir, en voici un sans CSS.
Violon .
la source
p {float:right;}
div {float:left}
.C ++
(Les variables locales sont détruites dans l'ordre inverse de la déclaration.)
C ++ 11
(Le même principe, mais utilisez plutôt lambdas et un membre de données de tableau.)
la source
std::function
, et j'essayais de m'en débarrasser. Maintenant, je n'ai pas besoin parce que tu l'as!Haskell
la source
Javascript
la source
1,2,3,4
comme délais d'attente fonctionne également pour moi. (Cependant, je ne sais pas si ce comportement est normalisé dans ECMAScript.)setTimeout
est normalisé dans HTML5 / timers, pas dans ES. En outre, il spécifie un délai d'expiration minimal de 4 ms :-)C
Essayer de défier les astuces de la question de la manière la plus créative possible:
la source
BF
Suppose que les cellules sont emballées.
Pourquoi ça marche
Les première et dernière lignes composent une boucle qui se répète quatre fois (counter =
cell0
).Dans la boucle, il existe une variable de compteur (
cell1
) qui est augmentée à chaque exécution.Chaque ligne vérifie si elle diminue de quatre, trois, deux ou un égal à zéro. Par conséquent, lors de la première exécution, le compteur est égal à un et la dernière ligne est exécutée, lors de la deuxième exécution, la troisième ligne est exécutée, etc.
La
(line 1)
montre où vous devez faire le texte qui est imprimé. Les flèches dans les boucles allouéescell2
à cette fin. Le[-]
nettoiecell2
après que vous l'utilisez.la source
Frapper
En mémoire du vénérable SleepSort et SleepAdd , je vous présente ... SleepReverse :
la source
$1
et$2
:function print(){(sleep $((4-$2));echo "$1 $2";)&}; print Line 1
Java
Tout est dans le bon timing ... ;-)
la source
Python 3
la source
Frapper
Voici le script à double face:
la source
tac
existé! Haha merci.Common Lisp № 1
Il est facile d'écrire une
ngorp
macro qui exécute ses formulaires dans l'ordre inverse:Common Lisp № 2
En voici un qui prend le problème très littéralement; le code de la question apparaît dans le programme sans modification:
la source
PHP
Une autre
eval
variante:la source
F#
Vient de créer un opérateur personnalisé qui exécute les fonctions dans l’ordre inverse.
la source
(?) f g x
lit comme suit à peu près comme(?)(f, g, x)
nonf(g(x))
Go (Golang)
Essayez-le: http://play.golang.org/p/fjsJLwOFn2
la source
Python3
Peut être plus court de 6 octets en supprimant tous les espaces de la dernière ligne.
la source
Javascript
C ++ 11
la source
std::reverse
etstd::for_each
, utilisez simplementwhile (! functors.empty()) { functors.back()(); functors.pop_back(); }
Lot
la source
C #
Au lieu d'appeler directement la méthode Run, je crée une méthode dynamique qui contient une copie du bytecode IL de Run, à la différence près que les opérandes d'opcode de chaîne de chargement sont échangés. Ce qui entraîne la nouvelle méthode pour afficher les chaînes dans l'ordre inverse.
la source
Python
encore une autre solution en utilisant
eval()
ce n'est pas très complexe, mais facile à comprendre.
la source