mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 16:50:58 +00:00 
			
		
		
		
	 00f9f0c056
			
		
	
	
		00f9f0c056
		
	
	
	
	
		
			
			note that sortmain.go has been run through hg gofmt; only the formatting of the day initializers changed. i'm happy to revert that formatting if you'd prefer. stop on error in doc/progs/run R=r CC=golang-dev https://golang.org/cl/850041
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // $G $F.go && $L $F.$A && ./$A.out
 | |
| 
 | |
| // Copyright 2009 The Go Authors. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style
 | |
| // license that can be found in the LICENSE file.
 | |
| 
 | |
| package main
 | |
| 
 | |
| type T chan uint64
 | |
| 
 | |
| func M(f uint64) (in, out T) {
 | |
| 	in = make(T, 100)
 | |
| 	out = make(T, 100)
 | |
| 	go func(in, out T, f uint64) {
 | |
| 		for {
 | |
| 			out <- f*<-in
 | |
| 		}
 | |
| 	}(in, out, f)
 | |
| 	return in, out
 | |
| }
 | |
| 
 | |
| 
 | |
| func min(xs []uint64) uint64 {
 | |
| 	m := xs[0]
 | |
| 	for i := 1; i < len(xs); i++ {
 | |
| 		if xs[i] < m {
 | |
| 			m = xs[i]
 | |
| 		}
 | |
| 	}
 | |
| 	return m
 | |
| }
 | |
| 
 | |
| 
 | |
| func main() {
 | |
| 	F := []uint64{2, 3, 5}
 | |
| 	var n = len(F)
 | |
| 	OUT := []uint64{
 | |
| 		2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36,
 | |
| 		40, 45, 48, 50, 54, 60, 64, 72, 75, 80, 81, 90, 96, 100, 108, 120, 125,
 | |
| 		128, 135, 144, 150, 160, 162, 180, 192, 200, 216, 225, 240, 243, 250,
 | |
| 		256, 270, 288, 300, 320, 324, 360, 375, 384, 400, 405, 432, 450, 480,
 | |
| 		486, 500, 512, 540, 576, 600, 625, 640, 648, 675, 720, 729, 750, 768,
 | |
| 		800, 810, 864, 900, 960, 972, 1000, 1024, 1080, 1125, 1152, 1200, 1215,
 | |
| 		1250, 1280, 1296, 1350, 1440, 1458, 1500, 1536, 1600}
 | |
| 
 | |
| 	x := uint64(1)
 | |
| 	ins := make([]T, n)
 | |
| 	outs := make([]T, n)
 | |
| 	xs := make([]uint64, n)
 | |
| 	for i := 0; i < n; i++ {
 | |
| 		ins[i], outs[i] = M(F[i])
 | |
| 		xs[i] = x
 | |
| 	}
 | |
| 
 | |
| 	for i := 0; i < len(OUT); i++ {
 | |
| 		for i := 0; i < n; i++ {
 | |
| 			ins[i] <- x
 | |
| 		}
 | |
| 
 | |
| 		for i := 0; i < n; i++ {
 | |
| 			if xs[i] == x {
 | |
| 				xs[i] = <-outs[i]
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		x = min(xs)
 | |
| 		if x != OUT[i] {
 | |
| 			println("bad: ", x, " should be ", OUT[i])
 | |
| 			panic("235")
 | |
| 		}
 | |
| 	}
 | |
| }
 |