Programando el juego Wordle en SAS

Programando el juego Wordle en SAS


Creé este proyecto como un ejercicio divertido para emular el popular juego de lenguaje SAS Wordle. Me inspiré en esta historia sobre un usuario de GitHub que implementó Wordle en un shell bash. (Consulte el script de bash aquí. Lea los comentarios: es un flujo increíble de versiones mejoradas, incluye diferentes lenguajes de programación y «código de golf» para reducir las líneas de código).

Al desarrollar mi solución SAS, creó una encuesta de Twitter para preguntar cómo podrían manejarlo otros programadores de SAS.

encuesta de Twitter
Siempre han sido arreglos para mí, porque eso es con lo que estoy más familiarizado. Me encantaría idear un enfoque de objeto hash o incluso usar SAS/IML, pero me llevaría demasiado tiempo entenderlo. Elegir la función de expresiones regulares PRX* es un poco complicado: las expresiones regulares parecen un ajuste natural (¡coincidencia de patrones!), pero Wordle tiene matices que hacen que las expresiones regulares sean menos elegantes de lo que podría pensar. refutarme!

Dos usuarios de SAS de Japón, aparentemente inspirados por mi encuesta, ¡cada uno implementó sus propios juegos! He incluido enlaces a su trabajo al final de este artículo.

Cómo codificar Wordle a SAS

Puedes ver mi código SAS completo para el juego aquí: sascommunities/wordle-sas.

Los aspectos interesantes de mi versión del juego incluyen:

  • Utiliza las listas de palabras «oficiales» del New York Times, seleccionadas por cfreshman. Encontré estos mientras examinaba la versión del script bash. Usé PROC HTTP para obtener esta lista dinámicamente.
  • También verifica las conjeturas como «válidas» con la lista de conjeturas permitidas, que a su vez es seleccionada por cfreshman. Sabes que no puedes adivinar 5 caracteres al azar, ¿verdad? Esta es una parte importante del juego.
  • Utiliza la matriz de pasos de DATOS para probar conjeturas contra la palabra de respuesta.
  • Utilice el método de objeto DATA Step para crear una salida rasterizada del tablero de juego. ¡Gracias a mis amigos de SAS en Japón por esta idea!

He agregado una captura de pantalla de un juego de ejemplo a continuación. Esto fue capturado en SAS Studio ejecutándose en SAS Viya.

Ejemplo de juego con salida

Ejemplo de juego para mi Wordle en SAS

Cómo jugar Wordle en SAS

Jugar:

  1. Envíe el programa wordle-sas.sas a su sesión de SAS. Este programa debería funcionar en PC SAS, SAS OnDemand for Academics, SAS Enterprise Guide y SAS Viya.

    El programa recupera listas de palabras de GitHub y las inserta en conjuntos de datos. También definirá dos macros que usarás para jugar.

  2. Inicie un juego ejecutando:
     %startGame;
    

    Esto seleccionará una palabra aleatoria de la lista de palabras como la palabra «rompecabezas» y la almacenará en una macro variable SAS (¡no mire a escondidas!).

  3. Opcionalmente, establezca una coincidencia en una palabra conocida usando un parámetro de palabra opcional de 5 dígitos:
     %startGame(crane);
    

    Esto crea la palabra del rompecabezas («grúa» en este ejemplo). Es útil para hacer pruebas. Vea una serie de «sesiones» de prueba en wordle-sas-tests.sas

  4. Envíe una suposición inicial ejecutando:
    %guess(adieu);
    

    Esto comparará la suposición con la palabra del acertijo y dará un informe con el «estado» conocido: letras que aparecen en la palabra (amarillo) y en la posición correcta (verde). También informará si la suposición no es una palabra supuesta válida, y no contará eso en su contra como una de sus 6 suposiciones permitidas.

Utilizar el %adivinar() Macro (uno por uno) para enviar conjeturas adicionales. El programa realiza un seguimiento de sus conjeturas y cuando las resuelve, comparte el familiar mensaje de felicitación que marca el final de una sesión de Wordle. ¿Listo para jugar de nuevo? Utilizar el %Empezar juego restablecer macros.

Comienza un nuevo juego con las funciones de Git

Si no desea ver o copiar/pegar el código del juego, puede usar las funciones de Git en SAS para traer el programa a su sesión de SAS y jugar. (Estas funciones de Git requieren al menos SAS 9.4 Maint 6 o SAS Viya).

options dlcreatedir;
%let repopath=%sysfunc(getoption(WORK))/wordle-sas;
libname repo "&repopath.";
data _null_;
    rc = gitfn_clone( 
      "https://github.com/sascommunities/wordle-sas", 
      "&repoPath." 
    ); 
    put 'Git repo cloned ' rc=; 
run;
%include "&repopath./wordle-sas.sas";
 
/* start a game and submit first guess */
%startGame;
%guess(adieu);

¿Sugerencias?

Sé que mi programa podría ser más eficiente… quizás a expensas de la legibilidad. También es posible que tenga algunos errores restantes, aunque probé y solucioné bastantes en el camino. consejo profesional: ¡El depurador de pasos DATA (disponible en SAS Enterprise Guide y en la versión SAS Viya de SAS Studio) fue una herramienta muy útil para mí!

Sus comentarios/mejoras son bienvenidos. Siéntase libre de comentar aquí o en el proyecto de GitHub.

Juegos de palabras en SAS por otras personas

Los usuarios de SAS en Japón implementaron rápidamente sus propias versiones de juegos similares a Wordle. Mírala:



Related post

La opción de conjunto de datos ADDROWID conserva el orden de sus datos cuando ejecuta un paso DATA en SAS® Cloud Analytic Services (CAS).

La opción de conjunto de datos ADDROWID conserva el…

Esta publicación explica: cómo puede diferir el orden de sus datos cuando ejecuta un paso DATA con una declaración BY en…
Ultimechs, el juego de deportes de arena VR gratuito, llegará el próximo mes

Ultimechs, el juego de deportes de arena VR gratuito,…

El juego deportivo con tecnología mecánica estará disponible el 15 de septiembre para los auriculares Meta Quest 2, PC VR y…
SAS se asocia con el Instituto Hunt para ayudar a los estados a mitigar el impacto de COVID-19 en las pérdidas de aprendizaje

SAS se asocia con el Instituto Hunt para ayudar…

El siguiente blog fue escrito en colaboración por Melody Schopp, PhD de SAS, y Javaid Siddiqi, PhD, presidente y director ejecutivo…

Leave a Reply

Tu dirección de correo electrónico no será publicada.