ó
    òÜj¸  ã                   ó|  • S r SSKrSSKrSSKr\R                  R                  \R                  R                  \5      5      r\R                  R                  \S5      r
SrSr1 SkrS rS rS	 rS
 r\4S jr\S:X  a�  \" 5       r\" \" \5      S5        \R.                  " S5      rS Ho  r\" \5      u  rr\" S \R;                  5        5       5      r\" S\S S\" \5      S S3SR                  \R?                  \\ " S\" \5      5      5      5      5        Mq     \R                  R                  \S5      r!Sr"S r#g)a-  nouns.py -- pictionary secrets: a random noun for a physical thing, how common it is decided by a d20 (Ivy, Oct 23 2026: "make the
guesses harder. Make it be a random noun" -> "It should roll a d20 to see how common the word it gets is" -> "Within reason" ->
"Barring critical failure").

The pool: WordNet nouns under 'physical object' (things, animals, plants, natural things -- something you could build), never under
'person' (keeps out slurs and job titles), lowercase single words or two-word names, each with its wordfreq Zipf frequency.
The roll: 20 = very common (Zipf ~5.2), down one band per point to 2 = uncommon but real (Zipf ~2.6); a natural 1 is a critical
failure -- an obscure noun (Zipf 1.5-2.3).

    python3 nouns.py            # build pict_nouns.json and show a roll of each
Written by Iris.é    Nzpict_nouns.json)znoun.artifactznoun.animalz
noun.plantz	noun.foodznoun.object)#ÚpenileÚpenisÚcondomÚdildoÚvibratorÚtamponÚ	brassierezbra Ú	jockstrapÚ	diaphragmÚpessaryÚiudÚsyringeÚ
hypodermicÚgunÚrifleÚpistolÚrevolverÚbombÚgrenadeÚnooseÚgallowszelectric chairÚswastikaÚcrackÚbongÚroachÚjointÚcasketÚcoffinÚcorpseÚcarcassÚfecesÚurinalztoilet paper>&   ÚareaÚbeefÚcellÚfoodÚgearÚitemÚmealÚmeatÚroomÚsiteÚunitÚgoodsÚplantÚspaceÚstuffÚthingÚtrackÚweedsÚanimalÚdeviceÚliquidÚobjectÚsupplyÚgarmentÚhousingÚpaddingÚshelterÚsurfaceÚbuildingÚclothingÚexteriorÚfacilityÚinteriorÚmaterialÚpropertyÚ	equipmentÚ	structureÚ	substancec                 óF   • U S:X  a  gU S:X  a  gSU S-
  S-  -   oS-
  US-   4$ )	zŸthe Zipf range a d20 roll draws from: 20 = anything at least as common as 'dog' (5.0+), down to 2 = uncommon but real;
a natural 1 (critical failure) = obscureé   )ç      ø?gÍÌÌÌÌÌ@é   )gffffff@g      "@g333333@é   g™™™™™™¹?gš™™™™™É?© )ÚdÚcs     Ú+/home/ivy/projects/brick_reef/reef/nouns.pyÚbandrR      s9   € ð 	ˆAƒv�hØˆBƒw�xØˆq�1‰u˜Ñ"Ñ"€A¨s©7°A¸±GÐ+;Ð$;ó    c                  óò  • 0 n [        [        R                  R                  [        R                  R	                  [
        5      SSS5      5      R                  5       R                  5       SS  Ht  nUR                  S5      n[        U5      S:¼  d  M%  [        US   5      [        US	   5      US
   R                  5       4XS   R                  5       R                  5       '   Mv     U $ ! [         a     M‡  f = f)zÃBrysbaert, Warriner & Kuperman (2014), 'Concreteness ratings for 40 thousand generally known English word lemmas':
word -> (concreteness 1-5, share of raters who knew it, dominant part of speech)ÚnotesÚdatazbrysbaert.txtrJ   NÚ	é	   rM   é   é   r   )ÚopenÚosÚpathÚjoinÚdirnameÚHEREÚreadÚ
splitlinesÚsplitÚlenÚfloatÚstripÚlowerÚ
ValueError)ÚoutÚlineÚfs      rQ   Ú_normsrl      s¿   € ð €CÜ”R—W‘W—\‘\¤"§'¡'§/¡/´$Ó"7¸À&È/ÓZÓ[×`Ñ`Ób×mÑmÓoÐpqÐprÓsˆØ�J‰J�tÓˆÜˆq‹6�Q�;Ü.3°A°a±D«k¼5ÀÀ1Á»;ÈÈ!ÉÏ
É
ËÐ-U��q‘T—Z‘Z“\×'Ñ'Ó)Ó*ñ tð
 €Jøô Ó#štÐ#ús   ÂAC(Ã(
C6Ã5C6c                  óì  ^^^• [        5       qSSKJm  SSKJn   [        TR                  S5      R                  S 5      5      TR                  S5      1-  n[        5       0 p2[        TR                  S5      R                  S 5      5      U-
  nU GH9  nXQ;   d  UR                  5       S;   a  M  UR                  5        GH  nUR                  5       R                  S	S
5      mTU;   df  TR                  5       (       aQ  [        S TR                  5        5       5      (       a,  [!        TR                  5       5      S:”  d  [!        T5      S:  a  M’  UR#                  T5        TR%                  TR                  S
S	5      SS9nU(       aH  US   U;  d?  TR'                  TR                  S
S	5      S5      =(       d    TR                  S	S
5      T:w  a  GM  US   R                  5       [(        ;  a  GM3  [+        U4S j[,         5       5      (       a  GMT  T[.        ;   a  GMa  TR                  S
S	5      mUU4S jnU" S5      U" S5      U" S5      -   U" S5      -   U" S5      -   :  a  GMª  [        R1                  T5      n	U	(       a  U	S   S:  d  U	S   S:  d	  U	S   S;  a  GMä  U " TS5      n
U
S:¼  d  GMö  [3        U
S5      UT'   GM     GM<     [4        R6                  " U[9        [:        S5      5        U$ )Nr   )Úwordnet)Úzipf_frequencyzperson.n.01c                 ó"   • U R                  5       $ ©N©Úhyponyms©Úss    rQ   Ú<lambda>Úbuild.<locals>.<lambda>/   s
   € ¸A¿J¹J¼LrS   zobject.n.01c                 ó"   • U R                  5       $ rq   rr   rt   s    rQ   rv   rw   1   s
   € ¸Q¿Z¹Z¼\rS   )znoun.personz	noun.bodyz
noun.groupÚ_Ú c              3   ó@   #   • U  H  oR                  5       v •  M     g 7frq   )Úisalpha)Ú.0Úps     rQ   Ú	<genexpr>Úbuild.<locals>.<genexpr>6   s   é € Ð6VÊIÀq·y±y·{°{ÊIùs   ‚rM   é   Ún©Úposc              3   ó,   >#   • U  H	  oT;   v •  M     g 7frq   rN   )r}   ÚbÚws     €rQ   r   r€   =   s   øé € Ð)¢5˜a˜–6¢5ùs   ƒc                 óJ   >• [        U4S jTR                  TU S9 5       5      $ )Nc              3   ó¸   >#   • U  HO  oR                  5         H8  o"R                  5       R                  5       T:X  d  M&  UR                  5       v •  M:     MQ     g 7frq   )ÚlemmasÚnamerg   Úcount)r}   Ús_ÚlÚkeys      €rQ   r   Ú*build.<locals>.<lambda>.<locals>.<genexpr>@   sF   øé € Ð!Ò6N°×XaÑXa×XcÐST×gmÑgmÓgo×guÑguÓgwÐ{~Ñg~£) !§'¡'§) )ÑXc¡)Ò6Nùs
   ƒ8A¿Arƒ   )ÚsumÚsynsets)r„   r�   Úwns    €€rQ   rv   rw   @   s   ø€ œcÔ!°b·j±jÀÈ#°jÑ6NÓ!ÔrS   ÚvÚaru   Úrg      @rJ   gffffffî?)ÚNounÚ0ÚenrK   r‡   )rl   ÚNORMSÚnltk.corpusrn   Úwordfreqro   ÚsetÚsynsetÚclosureÚlexnamerŠ   r‹   ÚreplaceÚislowerÚallrc   rd   Úaddr’   ÚmorphyÚKEEPÚanyÚBLOCKÚVAGUEÚgetÚroundÚjsonÚdumpr[   ÚPOOL)ro   ÚpersonÚseenri   Úobjectsru   rŽ   ÚfirstÚcntr‚   Úzr�   r‡   r“   s              @@@rQ   Úbuildrµ   *   sd  ú€ ä‹H€EÝ)Ý'Ü�—‘˜=Ó)×1Ñ1Ñ2HÓIÓJÈbÏiÉiÐXeÓNfÐMgÑg€FÜ“�rˆ#Ü�"—)‘)˜MÓ*×2Ñ2Ñ3IÓJÓKÈfÑT€GÜˆØ‹;˜!Ÿ)™)›+Ð)SÓSÑU]Ø—‘—ˆAØ—‘“× Ñ   cÓ*ˆAØ�D‹y §	¡	§¡´3Ñ6VÈAÏGÉGÌIÓ6V×3VÑ3VÔZ]Ð^_×^eÑ^eÓ^gÓZhÐklÓZlÔpsÐtuÓpvÐyzÓpzñ  }EØ�H‰H�QŒKð —J‘J˜qŸy™y¨¨cÓ2¸�JÐ<ˆEÞ˜E !™H¨GÓ3¸¿	¹	À!Ç)Á)ÈCÐQTÓBUÐWZÓ8[×8`Ð_`×7iÑ7iÐjmÐorÓ7sÐwxÓ7xò  {CØ�Q‰x×ÑÓ!¬Ó-ªxÜÔ)¥5Ó)×)Ñ)ª8Ø”E‹zš8Ø—)‘)˜C Ó%ˆCÝˆCÙ�3‹x™#˜c›(¡S¨£XÑ-±°C³Ñ8¹3¸s»8ÑCÓCÂXô —	‘	˜!“ˆAÞ˜˜!™˜s›
 a¨¡d¨T£k°Q°q±TÀÓ5NÒPXÙ˜q $Ó'ˆAØ�CŽx¤%¨¨1£+˜˜Qœô) ñ ô. 	‡I‚Iˆc”4œ˜c“?Ô#Ø€JrS   c                  ó¬   • [         R                  R                  [        5      (       a#  [        R
                  " [        [        5      5      $ [        5       $ rq   )r\   r]   Úexistsr®   r¬   Úloadr[   rµ   rN   rS   rQ   Úpoolr¹   L   s.   € Ü$&§G¡G§N¡N´4×$8Ñ$8Œ4�9Š9”Tœ$“ZÓ ÐE¼e»gÐErS   c                 ó  • U R                  SS5      n[        5       n[        U5      u  p4[        R                  R                  [        5      (       a#  [        R                  " [        [        5      5      O0 R                  5        VVs1 s H  u  pVUS:X  d  M  UiM     nnnUR                  5        VVs/ s H   u  pXX8s=::  a  U::  d  M  O  M  XW;  d  M  UPM"     n	nnU R                  U	5      oQXRU   4$ s  snnf s  snnf )z(d20, noun, zipf)rJ   rL   r©   )Úrandintr¹   rR   r\   r]   r·   Ú
VAGUE_FILEr¬   r¸   r[   ÚitemsÚchoice)
ÚrngrO   ÚPÚloÚhir‡   r”   Úvaguer´   Úwordss
             rQ   ÚrollrÅ   O   s¿   € à�‰�A�rÓ€A¤£˜A´°a³©¨Ü;=¿7¹7¿>¹>Ì*×;UÑ;UœDŸIšI¤d¬:Ó&6Ô7Ð[]×dÑdÔfÔwÒf‘4�1ÐjkÐovÑjv�QÑf€EÑwØŸ7™7œ9ÔIš9‘4�1¨­°2©‹Q©‰Q¸!¹.�Q™9€EÑIØ�
‰
�5Ó€A Q¨!© *Ð,ùó xùÛIs$   ÂC5ÂC5Â4C;Ã
C;ÃC;ÃC;Ú__main__Únounsé   )rJ   rM   é   é
   é   é   rL   c              #   ó`   #   • U  H$  u  p[         Us=::  a  [        ::  d  M  O  M   Uv •  M&     g 7frq   )rÁ   rÂ   )r}   r‡   r´   s      rQ   r   r   Z   s    é € Ð%O²I©D¨AÄÀqÅÌBÁ£aÁ§a²Iùs   ‚.¡.¥	.zd20=Ú2z: Ú5z nouns, e.g.ú, rZ   zpict_vague.jsona!  Pictionary with Lego: a builder makes a small Lego model of a word and a friend has to guess the word. For each word below, answer KEEP if a stranger could plausibly name EXACTLY that word from a good small model or sketch of it (a specific, recognisable thing: giraffe, drum, helmet, rowboat), or VAGUE if it is a category, a material, a place, an abstract or catch-all word, or a thing with no one recognisable shape (product, room, material, gear, supply). Answer ONLY with JSON: {"<word>": "KEEP" | "VAGUE", ...} covering every word.
Words: c                 óD  • SSK nSSKnUR                  R                  S[        R                  R                  [        R                  R                  [        5      S5      5        [        R                  R                  SS5        SSK
n0 n[        S[        U 5      S5       H÷  nXUS-    nUR                  [        SR                  U5      -   / S5      u  pxUR                  S	XrR                   5      o™(       a%  ["        R$                  " U	R'                  S5      5      O0 n
UR)                  U Vs0 s H\  n[+        U
R-                  US
5      5      R/                  5       S;   d  M2  U[+        U
R-                  US
5      5      R/                  5       _M^     sn5        Mù     U$ s  snf )z9{word: 'KEEP'|'VAGUE'} from Haiku, one call per 100 wordsr   NÚ	favoritesÚHAIKUzclaude-haiku-4-5-20251001éd   rÐ   iÄ	  z\{.*\}Ú )r¦   r©   )ÚsysÚrer]   Úinsertr\   r^   r_   r`   ÚenvironÚ
setdefaultÚhaikuÚrangerd   ÚaskÚSCREEN_QÚsearchÚSr¬   ÚloadsÚgroupÚupdateÚstrrª   Úupper)rÄ   rÖ   r×   ÚHri   ÚiÚchunkÚtry   Úmr•   r‡   s               rQ   Úscreenrë   f   s6  € çØ‡H�H‡O�O�A”r—w‘w—|‘|¤B§G¡G§O¡O´DÓ$9¸;ÓGÔHÌ"Ï*É*×J_ÑJ_Ð`gð  jEô  KFÛØ
€CÜ�1”c˜%“j #Ö&ˆØ˜˜C™Ð ˆØ�u‰u”X §	¡	¨%Ó 0Ñ0°"°dÓ;‰ˆØ�I‰I�i §D¡DÓ)ˆÍ¬t¯zªz¸!¿'¹'À!»*Ô/EÐPR¨1Ø�
‰
¹%Órº%°QÄ3ÀqÇuÁuÈQÐPRÃ|ÓCT×CZÑCZÓC\Ð`qÑCqÓ0�A”s˜1Ÿ5™5  B›<Ó(×.Ñ.Ó0Ò0¹%ÑrÖsñ	 'ð
 €Jùò ss   Ä-1F
Å".F
)$Ú__doc__r\   r¬   Úrandomr]   r_   ÚabspathÚ__file__r`   r^   r®   r¦   r¨   r©   rR   rl   rµ   r¹   rÅ   Ú__name__rÀ   Úprintrd   ÚRandomr–   rO   rÁ   rÂ   Úsortedr½   ÚwsÚsampleÚminr¼   rÞ   rë   rN   rS   rQ   Ú<module>r÷      s9  ðñ
÷ Ó Ø	‡w�w‡��r—w‘w—‘ xÓ0Ó1€¸"¿'¹'¿,¹,ÀtÐM^Ó:_°4àQ€ð	D€ò	A€ò<ò	ò òDFð ô -ð ˆzÓÙ‹€A‘‘s˜1“v˜wÔ'Ø�Š�aÓ€AÛ&ˆÙ�a“‰ˆˆB™vÑ%O°A·G±G´IÓ%OÓO˜"Ù��Q�q�E˜™C ›G A˜; lÐ3°T·Y±Y¸q¿x¹xÈÉCÐPQÑSVÐWYÓSZËOÓ?\Ó5]Ö^ñ 'ð �W‰W�\‰\˜$Ð 1Ó2€
ðN€órS   