43 lines
		
	
	
	
		
			804 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			804 B
		
	
	
	
		
			C
		
	
	
	
	
	
// not uniq(1)
 | 
						|
 | 
						|
#include <stdint.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <ctype.h>
 | 
						|
 | 
						|
const char *unique(const char *str, const char **dup) {
 | 
						|
  const char *alphabet[26] = { NULL };
 | 
						|
 | 
						|
  for(; *str; str += 1) {
 | 
						|
    uint8_t pos = tolower(*str) - 'a';
 | 
						|
 | 
						|
    if(pos >= 0 && pos <= 25) {
 | 
						|
      if(alphabet[pos]) {
 | 
						|
        *dup = str;
 | 
						|
        return alphabet[pos];
 | 
						|
      } else {
 | 
						|
        alphabet[pos] = str;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return NULL;
 | 
						|
}
 | 
						|
 | 
						|
int main(int argc, char **argv) {
 | 
						|
  const char *str = "";
 | 
						|
 | 
						|
  if(argc > 1) {
 | 
						|
    str = argv[1];
 | 
						|
  }
 | 
						|
 | 
						|
  const char *dup = NULL;
 | 
						|
  const char *idx = unique(str, &dup);
 | 
						|
 | 
						|
  if(dup) {
 | 
						|
    uint8_t idx_spacing = (int) (idx - str) + 1;
 | 
						|
    uint8_t dup_spacing = (int) (dup - str) - idx_spacing + 1;
 | 
						|
    printf("%s\n%*s%*s\n", str, idx_spacing, "^", dup_spacing, "^");
 | 
						|
  }
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 |