math.combinatorics: adding all-combinations? and all-permutations?.
							parent
							
								
									bd55cd3074
								
							
						
					
					
						commit
						d76f8d151d
					
				|  | @ -4,7 +4,7 @@ | ||||||
| USING: accessors arrays assocs binary-search classes.tuple | USING: accessors arrays assocs binary-search classes.tuple | ||||||
| combinators fry hints kernel kernel.private locals math | combinators fry hints kernel kernel.private locals math | ||||||
| math.order math.ranges memoize namespaces sequences | math.order math.ranges memoize namespaces sequences | ||||||
| sequences.private sorting strings ; | sequences.private sorting strings vectors ; | ||||||
| FROM: sequences => change-nth ; | FROM: sequences => change-nth ; | ||||||
| IN: math.combinatorics | IN: math.combinatorics | ||||||
| 
 | 
 | ||||||
|  | @ -17,6 +17,7 @@ IN: math.combinatorics | ||||||
| GENERIC: nths-unsafe ( indices seq -- seq' ) | GENERIC: nths-unsafe ( indices seq -- seq' ) | ||||||
| M: string nths-unsafe (nths-unsafe) ; | M: string nths-unsafe (nths-unsafe) ; | ||||||
| M: array nths-unsafe (nths-unsafe) ; | M: array nths-unsafe (nths-unsafe) ; | ||||||
|  | M: vector nths-unsafe (nths-unsafe) ; | ||||||
| M: iota-tuple nths-unsafe (nths-unsafe) ; | M: iota-tuple nths-unsafe (nths-unsafe) ; | ||||||
| M: object nths-unsafe (nths-unsafe) ; | M: object nths-unsafe (nths-unsafe) ; | ||||||
| 
 | 
 | ||||||
|  | @ -118,6 +119,9 @@ PRIVATE> | ||||||
| : all-permutations ( seq -- seq' ) | : all-permutations ( seq -- seq' ) | ||||||
|     [ ] map-permutations ; |     [ ] map-permutations ; | ||||||
| 
 | 
 | ||||||
|  | : all-permutations? ( ... seq quot: ( ... elt -- ... ? ) -- ... ? ) | ||||||
|  |     permutations-quot all? ; inline | ||||||
|  | 
 | ||||||
| : find-permutation ( ... seq quot: ( ... elt -- ... ? ) -- ... elt/f ) | : find-permutation ( ... seq quot: ( ... elt -- ... ? ) -- ... elt/f ) | ||||||
|     [ permutations-quot find drop ] |     [ permutations-quot find drop ] | ||||||
|     [ drop over [ permutation ] [ 2drop f ] if ] 2bi ; inline |     [ drop over [ permutation ] [ 2drop f ] if ] 2bi ; inline | ||||||
|  | @ -235,6 +239,9 @@ PRIVATE> | ||||||
| : all-combinations ( seq k -- seq' ) | : all-combinations ( seq k -- seq' ) | ||||||
|     [ ] map-combinations ; |     [ ] map-combinations ; | ||||||
| 
 | 
 | ||||||
|  | : all-combinations? ( ... seq k quot: ( ... elt -- ... ? ) -- ... ? ) | ||||||
|  |     combinations-quot all? ; inline | ||||||
|  | 
 | ||||||
| : find-combination ( ... seq k quot: ( ... elt -- ... ? ) -- ... elt/f ) | : find-combination ( ... seq k quot: ( ... elt -- ... ? ) -- ... elt/f ) | ||||||
|     [ combinations-quot find drop ] |     [ combinations-quot find drop ] | ||||||
|     [ drop pick [ combination ] [ 3drop f ] if ] 3bi ; inline |     [ drop pick [ combination ] [ 3drop f ] if ] 3bi ; inline | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue