Public feed #924001

Miscellany

public text v1 · immutable
Raw Edit
·published 2008-03-01 00:30 UTC
rendered paste body

nsfw { noop $$1 | say $replace($$1-,http://,nsfw://) }

cfix return $iif($$1 < 10,$+(0,$1),$1)
rb var %i 1, %out | while (%i <= $len($$1-)) { %out = $+(%out,$chr(3),$cfix($rand(2,14)),$replace($mid($1-,%i,1),$chr(32),$chr(160))) | inc %i } | say %out
internet {
  /say 0,5 0,4  0,4  0,4   0,7 0,8   0,7 0,8   0,3 0,9  0,9  0,9   0,2 0,12  0,12  0,12   0,6 0,13  0,13  0,13   0,5 0,4   0,5 0,4   0,7 0,8  0,8  0,8   0,3 0,9  0,9  0,9      
  /say   0,5 0,4     0,7 0,8  0,8 0,7 0,8     0,3 0,9     0,2 0,12       0,6 0,13   0,6 0,13   0,5 0,4  0,4 0,5 0,4   0,7 0,8         0,3 0,9        
  /say   0,5 0,4     0,7 0,8  0,8  0,8     0,3 0,9     0,2 0,12  0,12  0,12   0,6 0,13  0,13  0,13   0,5 0,4  0,4  0,4   0,7 0,8  0,8  0,8     0,3 0,9        
  /say   0,5 0,4     0,7 0,8  0,7 0,8 0,8     0,3 0,9     0,2 0,12       0,6 0,13   0,6 0,13   0,5 0,4  0,5 0,4 0,4   0,7 0,8         0,3 0,9        
  /say 0,5 0,4  0,4  0,4   0,7 0,8   0,7 0,8     0,3 0,9     0,2 0,12  0,12  0,12   0,6 0,13   0,6 0,13   0,5 0,4   0,5 0,4   0,7 0,8  0,8  0,8     0,3 0,9     0,2 0,12  
}

; /cl - circled letters! (doesn't work with multibyte text)
cl {
  var %res, %spc, %len = $len($1-), %i = 1
  while (%i <= %len) {
    var %chr = $mid($1-,%i,1), %asc = $asc(%chr)
    if (%asc == 32) { %spc = $true | inc %i | continue }
    ; A-J
    if (%asc isnum 65-74) {
      inc %asc 117
      %chr = $+($chr(226),$chr(146),$chr(%asc))
    }
    ; K-Z
    else if (%asc isnum 75-90) {
      inc %asc 53
      %chr = $+($chr(226),$chr(147),$chr(%asc))
    }
    ; a-z
    else if (%asc isnum 97-122) {
      var %asc = $calc($asc(%chr) + 47)
      %chr = $+($chr(226),$chr(147),$chr(%asc))
    }
    if (%spc) { %res = %res %chr | %spc = $false }
    else %res = %res $+ %chr | inc %i
  }
  say %res
}

; /flip <text> - Flips English text (letters and
; punctuation marks only). Can also flip back to the normal
; form. Requires $flipchr() and $utf8len().
flip {
  var %res, %spc, %len = $len($$1-), %i = 1
  while (%i <= %len) {
    var %chr = $mid($1-,%i,4), %chrlen = $utf8len(%chr)
    %chr = $left(%chr, %chrlen)
    if (%chr == $chr(32)) {
      %spc = $true | inc %i | continue
    }
    %chr = $flipchr(%chr)
    if (%spc) { %res = %chr %res | %spc = $false }
    else %res = %chr $+ %res | inc %i %chrlen
  }
  say %res
}
flipchr {
  if (($1 == l) || ($1 == o) || ($1 == s) || $&
    ($1 == x) || ($1 == z)) return $lower($1)
  var %p1 = b q
  var %p2 = d p
  var %p3 = n u
  var %p4 = a $+($chr(201),$chr(144))
  var %p5 = c $+($chr(201),$chr(148))
  var %p6 = e $+($chr(199),$chr(157))
  var %p7 = f $+($chr(201),$chr(159))
  var %p8 = g $+($chr(198),$chr(131))
  var %p9 = h $+($chr(201),$chr(165))
  var %p10 = i $+($chr(196),$chr(177))
  var %p11 = j $+($chr(201),$chr(190))
  var %p12 = k $+($chr(202),$chr(158))
  var %p13 = m $+($chr(201),$chr(175))
  var %p14 = r $+($chr(201),$chr(185))
  var %p15 = t $+($chr(202),$chr(135))
  var %p16 = v $+($chr(202),$chr(140))
  var %p17 = w $+($chr(202),$chr(141))
  var %p18 = y $+($chr(202),$chr(142))
  var %p19 = . $+($chr(203),$chr(153))
  var %p20 = $chr(91) $chr(93)
  var %p21 = ( )
  var %p22 = $chr(123) $chr(125)
  var %p23 = ? $+($chr(194),$chr(191))
  var %p24 = ! $+($chr(194),$chr(161))
  var %p25 = ' $chr(44)
  var %p26 = < >
  var %p27 = _ $+($chr(226),$chr(128),$chr(190))
  var %p28 = $chr(59) $+($chr(216),$chr(155))
  var %chr = $1, %i = 1
  while ($($+(%,p,%i),2)) {
    tokenize 32 $v1
    if ($1 == %chr) return $2
    if ($2 == %chr) return $1
    inc %i
  }
  return %chr
}

; $utf8len(buf) - Returns the size of the UTF-8 character
; started at the first byte of "buf". Only the first four
; bytes of "buf" make any difference. Returns 1 on error.
utf8len {
  if ($asc($1) < 128) return 1 | var %res = 1
  if (($v1 >= 194) && ($v1 <= 223)) %res = 2
  elseif (($v1 >= 224) && ($v1 <= 239)) %res = 3
  elseif (($v1 >= 240) && ($v1 <= 243)) %res = 4
  ; validate the other bytes
  var %i = 2
  while (%i <= %res) {
    if (($asc($mid($1,%i,1)) < 128) || ($v1 > 191)) {
      return 1
    } | inc %i
  } | return %res
}

deer {
  /say 1,1@@@@@@@@0,0@1,1@@0,0@1,1@
  /say 1,1@@@@@@@@0,0@1,1@@0,0@1,1@
  /say 1,1@@@@@@@@@0,0@@0,01,1@@
  /say 1,1@@@@@@@@4,4@0,0@@1,1@@
  /say 1,1@@@@@@@@@0,0@@1,1@@
  /say 1,1@@0,0@@@@@@@@@1,1@@
  /say 1,1@0,0@@@@@@@@@@1,1@@
  /say 1,1@0,0@@@@@@@@@@1,1@@
  /say 1,1@0,0@1,1@0,0@1,1@@@@0,0@1,1@0,0@1,1@@
  /say 1,1@0,0@1,1@0,0@1,1@@@@0,0@1,1@0,0@1,1@@
  /say 1,1@0,0@1,1@0,0@1,1@@@@0,0@1,1@0,0@1,1@@
}

; /age - shows exact age and time to next birthday.
age {
  ;--------------------------------------------------------
  ; Set this to your birthdate in dd/mm/yyyy hh:mm:ss format:
  ;
  var %birthdate = 01/01/1990 00:00:00
  ;
  ; Set the level of detail you want for time left for your next birthday.
  ;
  var %precision = 5
  ;
  var %msg = I'm AGE years old; I'll turn NEXT in LEFT.
  ;
  ;--------------------------------------------------------
  var %age = $agex($gettok(%birthdate,1,32),$gettok(%birthdate,2,32))
  var %nextage = $calc($floor(%age) +1)
  var %timeleft = $gettok($agex($gettok(%birthdate,1,32),$gettok(%birthdate,2,32)).nextbd,1- $+ $eval(%precision),32)
  say $replacecs(%msg,AGE,%age,NEXT,%nextage,LEFT,%timeleft)
}
; $agex(dd/mm/yyyy hh:mm:ss) - returns an exact Gregorian calendar
; age, based on the specified birthdate. If the "nextbd"
; property is used, returns time left to the next birthday.
agex {
  var %daymon = $+($gettok($1,1,47),/,$$gettok($1,2,47),/)
  var %midn = $iif($2,$2,00:00:00), %next_bd = $+(%daymon,$date(yyyy))
  var %last_bd = $+(%daymon,$calc($date(yyyy) -1))
  var %till_bd = $calc($ctime(%next_bd %midn) - $ctime)
  if (%till_bd <= 0) {
    %last_bd = %next_bd
    %next_bd = $+(%daymon,$calc($date(yyyy) +1))
    %till_bd = $calc($ctime(%next_bd %midn) - $ctime)
  }
  if ($prop == nextbd) return $duration(%till_bd)
  %last_bd = $ctime(%last_bd %midn)
  %next_bd = $ctime(%next_bd %midn)
  var %ageint = $calc(%last_bd - $ctime($1 %midn))
  %ageint = $round($calc(%ageint / 31556952),0)
  var %interv = $calc(%next_bd - %last_bd)
  var %agefrac = $calc(1- %till_bd / %interv)
  if (%agefrac == 1) %agefrac = 0.999999
  return $calc(%ageint + %agefrac)
}
tk run taskkill /f /im $$1 $+ .exe