Cops: Make a regex - Make a snake

Dacă tot m-a făcut @horia141 să intru astăzi pe codegolf, atunci vă las și eu o provocare de week-end! :slight_smile:

(Detaliile sunt aici: http://codegolf.stackexchange.com/q/112299/66648)


Ah, și nu uitați să dați și voi un vot UP! :stuck_out_tongue:

1 Like

Fara o legatura cu postul\concursul in sine, ca sa nu crezi ca vizez postul tau:

Si cand stapaneam destul bine, cred eu, expresiile regulate, tot nu-mi placeau.
E ceva mirositor la ele. Sunt greu de citit si greu de mentenat. Ha, damn it, suna deja ca un antipatern.
Indiferent de cata placere simtim (mmmmmmmmmm baby) cand scriem chestii d’astea, ca orice nerd, cred ca ar trebui evitate, pe cat posibil.

Am mai pus o abordare (deși pare că nu-i nimeni interesat :smiley:).

sau macar:

# Match a 20th or 21st century date in yyyy-mm-dd format
(19|20)\d\d                # year (group 1)
[- /.]                     # separator
(0[1-9]|1[012])            # month (group 2)
[- /.]                     # separator
(0[1-9]|[12][0-9]|3[01])   # day (group 3)

dar da, in proiecte “normale” un regex trantit aiurea este un code-smell. Legat de partea de “oh, yeah” se poate satisface usor in vim :slight_smile:

1 Like

Am publicat soluțiile la problemele de mai sus.

Prima (originalul e o linie; aici e formatată cât de cât): (explicații detaliate)
orice caracter este permis în codul sursă în afară de '"\d{v;<$_~|&A-Z

<?php
if (
  @extract([x=>(object)[s=>[],i=>+false]])
    and
  @define(n,compact(arg.chr(ord(u)+true))[arg.chr(ord(u)+true)][+true]?:+true)
    and
  @define(un,chr(ord(a)-true-true))
    and
  @define(s,(a.rray.un.chunk)(range(+true,pow(n,true+true)),n))
) while (
  (@compact(x)[x]->s[]=s[@compact(x)[x]->i++])
    and
  (@compact(x)[x]->s[]=(a.rray.un.re.chr(ord(u)+true).erse)(s[@compact(x)[x]->i++]))
    and
  (n>@compact(x)[x]->i)

    or

  (@die((json.un.encode)((a.rray.un.filter)(@compact(x)[x]->s))))
)
?>

A doua: (explicații detaliate)
oricare 4 caractere la început și sfârșit, în rest doar astea: -"$%&*+:;=?{}a-zMZ

<?=
$t=$i=+true;
$f=$s=$t-$t;
$n=$argv{$t};
a:++$i==$n*$n+$t&&die;
$b=$i%$n?:$n;
$m=-$b-$b+$n+$t;
print"M"&"+";
$i%$n==$t&&print"Z"&"*";
print$i+$m*$s;
$s=$i%$n?$s:-$t*$s+$t;
goto
a?>