fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. enum {
  6. SIZE = 8192
  7. };
  8.  
  9. size_t count(const char *s, int c)
  10. {
  11. size_t r;
  12.  
  13. for (r = 0; *s; r += *s++ == (char) c)
  14. ;
  15. return r;
  16. }
  17.  
  18. size_t max_strcspn(const char *s, int c)
  19. {
  20. size_t max, tmp;
  21.  
  22. for (max = tmp = 0; *s; s++) {
  23. if (*s != (char) c) {
  24. tmp++;
  25. continue;
  26. }
  27. if (tmp > max)
  28. max = tmp;
  29. tmp = 0;
  30. }
  31. return max;
  32. }
  33.  
  34. char *fill(char *to, size_t longest, size_t lines, const char *from)
  35. {
  36. char *save = to;
  37. size_t n;
  38.  
  39. for (n = longest; lines; from++)
  40. if (*from == '\n') {
  41. memset(to, ' ', n);
  42. to += n;
  43. n = longest;
  44. lines--;
  45. } else {
  46. *to++ = *from;
  47. n--;
  48. }
  49. return save;
  50. }
  51.  
  52. char *readall(FILE *iop)
  53. {
  54. char buf[SIZE];
  55. size_t a = 0, n;
  56. char *r, *tmp;
  57.  
  58. for (r = 0; (n = fread(buf, 1, SIZE, iop)) == SIZE; r = tmp) {
  59. if (!(tmp = realloc(r, a + SIZE))) {
  60. free(r);
  61. return 0;
  62. }
  63. memcpy(tmp + SIZE, buf, SIZE);
  64. a += SIZE;
  65. }
  66. if (!(tmp = realloc(r, a + n + 1))) {
  67. free(r);
  68. return 0;
  69. }
  70. memcpy(tmp + a, buf, n);
  71. tmp[a + n] = '\0';
  72. return tmp;
  73. }
  74.  
  75. int main(void)
  76. {
  77. size_t lines, longest;
  78. char *ptr, *s;
  79.  
  80. if (!(s = readall(stdin))
  81. || !(ptr = malloc((lines = count(s, '\n')) *
  82. (longest = max_strcspn(s, '\n'))))) {
  83. free(s);
  84. return EXIT_FAILURE;
  85. }
  86. fill(ptr, longest, lines, s);
  87. for (size_t i = 0; i < longest; i++) {
  88. for (size_t n = 0; n < lines; n++)
  89. putchar(ptr[longest * n + i]);
  90. puts("");
  91. }
  92. free(s);
  93. free(ptr);
  94. }
Success #stdin #stdout 0s 1968KB
stdin
The quick brown fox
jumped over the
lazy retoids.
stdout
Tjl
hua
emz
 py
qe 
udr
i e
cot
kvo
 ei
brd
r s
ot.
wh 
ne 
   
f  
o  
x