5 decembrie 2013

Jucărioară în PL/SQL: Quine

Astăzi, plictiseală mare... Așa că m-am gândit să mă joc puțin în PL/SQL. Datele problemei sunt simple:

"Să se dezvolte un progrămel în PL/SQL care se afișează pe el însuși".

Este ceea ce în literatura de specialitate se cheamă quine.

Mai jos, soluția la care am ajuns:
declare c char(112):='declare c char(112):=;q char(1):=chr(39);begin dbms_output.put_line(substr(c,1,21)||q||c||q||substr(c,-91));end;';q char(1):=chr(39);begin dbms_output.put_line(substr(c,1,21)||q||c||q||substr(c,-91));end;

Quine-ul meu în PL/SQL are o lungime de 226 de caractere. Nu prea sunt mulțumit de rezultat. Un "quine" din-ăla "WOOOW" ar trebui să aibă o lungime cât mai mică. Normal, aici avem și limitările care țin de limbajul de programare, iar PL/SQL-ul, din păcate, este un limbaj destul de logoreic.

Câteva observații:
  • am folosit CHAR în loc de VARCHAR[2] pentru simplul fapt că VARCHAR are trei caractere în plus (ca sintaxă zic)
  • am renunțat la toate formatările. Spațiile lungesc inutil "quine"-ul.
  • evident, dacă rulăm în Sqlplus, ar trebui să avem SET SERVEROUTPUT ON.
  • m-am limitat la a folosi doar pachete Oracle standard. Aș fi putut folosi niște proceduri "wrapper" (spre exemplu, procedura "P" care invocă dbms_output.put_line), dar nu-i voie cu din-astea.
  • nu am mai pus "/"-ul de final. El are sens totuși dacă se rulează codul de mai sus în Sqlplus.

Acestea fiind zise, are cineva vreo idee de îmbunătățire?

0 commentarii: