#!/usr/bin/env runhaskell
import System.Environment (getArgs)
import System.Exit (exitSuccess)
import Control.Monad (forever, when)
-- la siguiente linea requiere incluir la biblioteca random-fu al ambiente donde se ejecute el script
-- eso se puede lograr con cabal build random-fu
import Data.Random (sample, randomElement)
-- forever hace que el programa nos vuelva a preguntar en vez de terminar luego de una respuesta
main = forever $ do
-- leemos los argumentos que le pasan al programa
rutaARespuestas <- head <$> getArgs
respuestas <- lines <$> readFile rutaARespuestas
-- usamos stdout para mostrar cosas por la consola
putStrLn "Preguntá algo:"
putStr "> "
-- y usamos stdin para leer la entrada
pregunta <- getLine
-- cuando la pregunta es el string "salir" cerramos el programa
when (pregunta == "salir") $ do
putStrLn "Hasta Luego!"
exitSuccess
respuesta <- sample $ randomElement respuestas
putStrLn respuesta
#!/usr/bin/env -S java --source 11
// el parámetro -S es para poder pasar parámetros a java, y --source se lo estamos pasando para decir que
// ejecute esto como java 11
// Para que el interprete de java ignore la línea con el #!, el archivo NO tiene que terminar en .java
import java.nio.file.Files;
import java.nio.charset.Charset;
import java.util.List;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.Random;
import java.util.Scanner;
// Al ejecutar un script de java, se va a usar el main de la primer clase que se encuentre
public class BolaMagica {
public static void main(String[] args) throws IOException {
// leemos los argumentos que le pasan al programa
String rutaALasRespuestas = args[0];
List<String> respuestas = Files.readAllLines(Paths.get(rutaALasRespuestas), Charset.defaultCharset());
Scanner scanner = new Scanner(System.in);
Random random = new Random();
// el while True es para que el programa nos vuelva a preguntar en vez de terminar
while(true) {
// usamos stdout para mostrar cosas por la consola
System.out.println("Preguntá algo:");
System.out.print("> ");
// y usamos stdin para leer la entrada
String pregunta = scanner.nextLine();
// agregamos una forma de salir del while para terminar el programa
if(pregunta.equals("salir")) {
System.out.println("Hasta luego!");
break;
}
String respuesta = respuestas.get(random.nextInt(respuestas.size()));
System.out.println(respuesta);
}
}
}
#!/usr/bin/env node
const fs = require('fs');
const readline = require('readline');
// leemos los argumentos del programa, recién a partir del tercero son los que se pasan como parámetro
const rutaALasRespuestas = process.argv[2];
const respuestas = fs.readFileSync(rutaALasRespuestas, 'utf-8').split('\n').filter(linea => linea.length != "");
const obtenerRespuesta = () => respuestas[Math.floor(Math.random() * respuestas.length)];
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// Como en node leer el input del usuario es una operación asincrónica,
// vamos a encararlo de forma diferente a como hicimos en los otros scripts.
// Usamos recursividad para que tras cada respuesta se vuelva a empezar
const preguntarYResponder = () => {
// usamos stdout para mostrar cosas por la consola
console.log("Preguntá algo:");
// y usamos stdin para leer la entrada
rl.question("> ", respuesta => {
// agregamos una forma de cortar la recursividad
if(respuesta == "salir") {
console.log("Hasta luego!");
rl.close();
} else {
console.log(obtenerRespuesta());
// si no vino "salir", llamamos de nuevo a la función recursivamente
preguntarYResponder();
}
})
}
// Lo de arriba fue la definición de la función, hay que llamarla
// una vez para que empiece el programa
preguntarYResponder();
#!/usr/bin/env -S kotlinc -script
// los scripts en kotlin se corren con kotlinc -script y tienen que terminar en .kts
import java.io.File
// leemos los argumentos que le pasan al programa
val rutaALasRespuestas = args[0]
val respuestas = File(rutaALasRespuestas).readLines()
// el while True es para que el programa nos vuelva a preguntar en vez de terminar
while(true) {
// usamos stdout para mostrar cosas por la consola
println("Preguntá algo:")
print("> ")
// Esta linea es necesaria porque si no el "> " no se iba a imprimir
// por pantalla hasta despues de pedir input al usuario :(
System.out.flush()
// y usamos stdin para leer la entrada
val pregunta = readLine()
// agregamos una forma de salir del while para terminar el programa
if(pregunta == "salir") {
println("Hasta luego!")
break
}
val respuesta = respuestas.random()
println(respuesta)
}
#!/usr/bin/env python
import sys
import random
# leemos los argumentos que le pasan al programa
archivo_de_respuestas = open(sys.argv[1])
respuestas = archivo_de_respuestas.readlines()
archivo_de_respuestas.close()
# el while True es para que el programa nos vuelva a preguntar en vez de terminar
while True:
# usamos stdout para mostrar cosas por la consola
print("Preguntá algo:")
# y usamos stdin para leer la entrada
pregunta = input(">")
# agregamos una forma de salir del while para terminar el programa
if(pregunta == "salir"):
print("Hasta luego!")
break
respuesta = random.choice(respuestas)
print(respuesta)
#!/usr/bin/env ruby
ruta_a_respuestas = ARGV[0] # leemos los argumentos que le pasan al programa
respuestas = File.readlines ruta_a_respuestas
# el while True es para que el programa nos vuelva a preguntar en vez de terminar
while true
# usamos stdout para mostrar cosas por la consola
puts "Preguntá algo:"
print "> "
# y usamos stdin para leer la entrada
pregunta = $stdin.gets.chomp
# agregamos una forma de salir del while para terminar el programa
if pregunta == "salir"
puts "Hasta luego!"
break
end
respuesta = respuestas.sample
puts respuesta
end