Andy

joined 2 years ago
MODERATOR OF
[–] Andy@programming.dev 3 points 2 years ago (1 children)

If you want, you could use Telegram without your real phone number by either getting a virtual number from Google Voice or another service, or you could buy a Telegram-only number from their fragment site.

[–] Andy@programming.dev 1 points 2 years ago (1 children)

Great! If you get a chance, I'd be interested to hear about your rtx complaints.

[–] Andy@programming.dev 2 points 2 years ago

I know not what I talk about, but maybe daScript?

[–] Andy@programming.dev 50 points 2 years ago* (last edited 2 years ago) (2 children)

No Zsh support for now, and maybe no user fonts?

And a warning: it's got telemetry on by default.

[–] Andy@programming.dev 1 points 2 years ago

And more on the same subject from the same author: Factor makes you write better code

[–] Andy@programming.dev 2 points 2 years ago* (last edited 2 years ago)

Factor on github (with comments and imports):

! hand: "A23A4"
! card: 'Q'
! hand-bid: { "A23A4" 220 }

: card-key ( ch -- n ) "23456789TJQKA" index ;

: five-kind?  ( hand -- ? ) cardinality 1 = ;
: four-kind?  ( hand -- ? ) sorted-histogram last last 4 = ;
: full-house? ( hand -- ? ) sorted-histogram { [ last last 3 = ] [ length 2 = ] } && ;
: three-kind? ( hand -- ? ) sorted-histogram { [ last last 3 = ] [ length 3 = ] } && ;
: two-pair?   ( hand -- ? ) sorted-histogram { [ last last 2 = ] [ length 3 = ] } && ;
: one-pair?   ( hand -- ? ) sorted-histogram { [ last last 2 = ] [ length 4 = ] } && ;
: high-card?  ( hand -- ? ) cardinality 5 = ;

: type-key ( hand -- n )
  [ 0 ] dip
  { [ high-card? ] [ one-pair? ] [ two-pair? ] [ three-kind? ] [ full-house? ] [ four-kind? ] [ five-kind? ] }
  [ dup empty? ] [
    unclip pick swap call( h -- ? )
    [ drop f ] [ [ 1 + ] 2dip ] if
  ] until 2drop
;

:: (hand-compare) ( hand1 hand2 type-key-quot card-key-quot -- <=> )
  hand1 hand2 type-key-quot compare
  dup +eq+ = [
    drop hand1 hand2 [ card-key-quot compare ] { } 2map-as
    { +eq+ } without ?first
    dup [ drop +eq+ ] unless
  ] when
; inline

: hand-compare ( hand1 hand2 -- <=> ) [ type-key ] [ card-key ] (hand-compare) ;

: input>hand-bids ( -- hand-bids )
  "vocab:aoc-2023/day07/input.txt" utf8 file-lines
  [ " " split1 string>number 2array ] map
;

: solve ( hand-compare-quot -- )
  '[ [ first ] bi@ @ ] input>hand-bids swap sort-with
  [ 1 + swap last * ] map-index sum .
; inline

: part1 ( -- ) [ hand-compare ] solve ;

: card-key-wilds ( ch -- n ) "J23456789TQKA" index ;

: type-key-wilds ( hand -- n )
  [ type-key ] [ "J" within length ] bi
  2array {
    { { 0 1 } [ 1 ] }
    { { 1 1 } [ 3 ] } { { 1 2 } [ 3 ] }
    { { 2 1 } [ 4 ] } { { 2 2 } [ 5 ] }
    { { 3 1 } [ 5 ] } { { 3 3 } [ 5 ] }
    { { 4 2 } [ 6 ] } { { 4 3 } [ 6 ] }
    { { 5 1 } [ 6 ] } { { 5 4 } [ 6 ] }
    [ first ]
  } case
;

: hand-compare-wilds ( hand1 hand2 -- <=> ) [ type-key-wilds ] [ card-key-wilds ] (hand-compare) ;

: part2 ( -- ) [ hand-compare-wilds ] solve ;
[–] Andy@programming.dev 1 points 2 years ago* (last edited 2 years ago)

Day 07 (Factor)

  • It works, but I'm not clever so:
    • ~~part 2 is slow~~
    • ~~part2 duplicates stuff from part1~~
    • you can see some changes in the git history
  • on github
  • on programming.dev
[–] Andy@programming.dev 3 points 2 years ago (1 children)

Konsole is my second favorite terminal app. Wezterm may be your holy grail.

[–] Andy@programming.dev 1 points 2 years ago

Day 06 (Uiua), by /u/mykl@lemmy.world

[–] Andy@programming.dev 2 points 2 years ago* (last edited 2 years ago)

Factor on github (with comments and imports):

I didn't use any math smarts.

: input>data ( -- races )
  "vocab:aoc-2023/day06/input.txt" utf8 file-lines     
  [ ": " split harvest rest [ string>number ] map ] map
  first2 zip                                           
;

: go ( press-ms total-time -- distance )
  over - *
;

: beats-record? ( press-ms race -- ? )
  [ first go ] [ last ] bi >
;

: ways-to-beat ( race -- n )
  dup first [1..b)          
  [                         
    over beats-record?      
  ] map [ ] count nip       
;

: part1 ( -- )
  input>data [ ways-to-beat ] map-product .
;

: input>big-race ( -- race )
  "vocab:aoc-2023/day06/input.txt" utf8 file-lines             
  [ ":" split1 nip " " without string>number ] map
;

: part2 ( -- )
  input>big-race ways-to-beat .
;
[–] Andy@programming.dev 1 points 2 years ago* (last edited 2 years ago) (2 children)
 

This is not my work, but the author (same author as zsh-abbr) posted it elsewhere and it looks good to me.

In his words:

What is zsh-test-runner? A simple testing framework for zsh, and to a degree —thanks to zsh's emulation of other shells— csh, ksh, and sh.

The immediately noticeable difference between zsh-test-runner and other shell script unit test frameworks is it doesn't have a DSL. zsh-test-runner relies entirely on the shell's own testing. For those familiar with other frameworks: nothing like ShellSpec's Describe … When call … The output should, or shUnit2's assertEquals, or ZUnit's assert; zsh-test-runner is closer to Bats if you were to restrict yourself to core and not use helper libraries (there's nothing like bats-assert's assertEquals or bats-file's assert_dir_exists).

Why no special syntax? It means there's little new to learn— For example, if you know how to test numeric equality in your shell, you know how to test equality in zsh-test-runner; if you don't, there are community resources available. It means every possible test is supported equally out of the box— zsh-test-runner is a newcomer, but there are no "shoot my assertion method isn't supported" blockers. It means the cost of porting homegrow framework-less tests to zsh-test-runner is about as low as can be— generally speaking, my_cool_test_code becomes ztr test 'my_cool_test_code'. It means tests can live comfortably in one LOC, making zsh-test-runner pleasant to use in the terminal.

 

Hello!

I'm still using X11, and one of the things that's keeping me there is that I make heavy use of a launch-or-focus script, so that I hit a certain hotkey and no matter what a browser/chat/editor/terminal/file-manager/etc. shows up focused on my current desktop.

In the world of Wayland, this isn't so easy. If this can be recreated at all, I think it'll have to be made to rely on some sort of interface to Kwin.

I don't think it's possible now, but might it be in the future?

Here's my script, let's see if the lemmy interface mangles it (EDIT: yes, the last character should be an ampersand, not &amp;):

#!/bin/zsh -ex

# -- Usage --
# ./toggle_window.zsh LAUNCH_CMD [ WM_CLASS [ CHECK_CMD ] ]

# -- Defaults --
# WM_CLASS and CHECK_CMD each default to the value of LAUNCH_CMD

# -- Examples --
# ./toggle_window.zsh dolphin
# ./toggle_window.zsh wezterm-gui org.wezfurlong.wezterm
# ./toggle_window.zsh firefox firefox firefox-bin
# ./toggle_window.zsh \
#   'flatpak run --branch=stable --arch=x86_64 --command=telegram-desktop --file-forwarding org.telegram.desktop' \
#   telegram-desktop telegram-deskto
# Yes, "telegram-deskto" without a final p. Hmm.

# -- Dependencies --
# - procps (pgrep)
# - wmctrl
# - x11-utils (xprop)
# - xdotool

# -- TODO --
# - wayland

launch_cmd=(${(z)1})
wm_class=${2:-$1}
check_cmd=${3:-$1}

if [[ $(xprop -id $(xdotool getactivewindow) WM_CLASS) =~ \"$wm_class\" ]] {
  xdotool getactivewindow windowminimize
} else {
  wmctrl -xR $wm_class || true
}

pgrep -u $USER -x $check_cmd || exec $launch_cmd &amp;
 

It also supports Forth and Nim, which can be written in a somewhat concatenative style, too.

view more: ‹ prev next ›