Как стать автором
Обновить

Комментарии 92

Непонятно, что вы хотите сказать?
Такой же вопрос и к вам.
Текст программы вполне самодокументируемый и интересный. Добавил небольшой комментарий.
Это отличная пятничная шутка для программистов. Да она простая. Но вполне себе прикольная. Само стихотворение рекурсивное, и просто просится в код. Я думаю шутка удалась. Однако автору сочуствую.
Название музыкальной группы исполняющей песню «Джек» текст которой содержит слова применённые вами.

Извините, но я не программист и не понял, что Вы хотите сказать. Много лет на хабре, но такого не видал. Обычно авторы поясняют и разжёвывают.
Программный вывод всем известного текста.

Прикольный код, зачем минуса-то летят? На статью не тянет?
наверно потому, что подзаголовок «сообщество разработчиков» уже не имеет никакого отношения к habr'у.
Ну вы не будьте столь категоричны. Взять меня к примеру — не разработчи, но связист и местный житель.

Как Вы воспримите статью с таким скромным содержанием:
Инспектируем трафик локалки и внешки
ip inspect name INSPECT_OUT dns
ip inspect name INSPECT_OUT icmp
ip inspect name INSPECT_OUT ntp
ip inspect name INSPECT_OUT tcp router-traffic
ip inspect name INSPECT_OUT udp router-traffic
ip inspect name INSPECT_OUT icmp router-traffic
Я последние 13 лет слишком далек от настроек цисок, так что оценить не смог бы.
Как Вы воспримите статью
Я бы промотал ленту и забыл, что такая статья существует.
Меня зацепило, то что код для программиста лёгкий, да и я сам его вроде читаю, но нетпонимаю полноценно, как работает. А описания никакого нет. Ну и полез задавать вопросы.
Ну раз такое дело, помогите понять…
1. Инициализация программы функцией main()
2. Switch() — не знаю что делает.
3. Case () — какое-то пред-удсловие, если так можно выразиться?
4. Printf () — выводит на экран.
5. Break — похоже на то что не даёт printf сделать свою работу сразу.
6. If () — в итоге я не понял условие и, что оно выполняет.

Вижу, что до 7го case-а включительно используется break, потом case-ы идут с 9го по убывающей и в конце программа ждёт исполнения условия с аргументом (s++<9) возвращает в main(s)?

Только как это в итоге выведет н экран я не понимаю. Знаю, что могу покопать интернет по каждой функции, но раз такая пляска было интересно почитать вашу интерпретацию кода.

Пишу с мобилы, извините за ошибки.
Ну, это еще целая статья будет, а меня так заминусовали, что вряд ли я смогу ее выложить ((
А вдруг, если вы толково начнёте комментировать, наплюсуют?
:)
Switch/case — это оператор множественного ветвления; сама программа представляет собой несложную рекурсию.
Спасибо. Но было бы приятней в рамках этой статьи в деталях понять механизм.
Эм… Это несет какой то глубокий смысл? Или объясняет тонкости работы какого то механизма? Какую это практическую пользу несет?
Just for fun.
жуть какая — прямо в Совок вернули — «Чему учит данное произведение?»
Но если очень хочется, то как учебный пример, для начинающего учить программирование, очень даже.
Имхо, это все же не уровень хабра. Я тут выбирал из тем «разобрать работу под капотом какого нибудь хитрого класса из android SDK», или «варианты архитектуры обменов приложения под андроид на kotlin с беком на 1с с описанием плюсов и минусов» и решил что они обе слишком простенькие, подожду еще писать пока что поинтереснее не придет в голову, а тут такое…

А какое такое? Простое? А вы разобрали пример? Вы поняли почему эта программа распечатает весь текст стихотворения? Вы видели много сишных программ с рекурсией функции main? — все-таки раздел «ненормальное пронраммирование». И если хотите вызов, напишите программу, которая распечатает весь текст стихотворения, и при этом будет короче (можно на другом языке).

В том и проблема что ничего хитрого не увидел и понял сразу, хотя на C не писал почти. P.S. Оно конечно прикольно да, второй switch оригинально сделан, в связке с рекурсией, но слишком как то все просто в итоге. Не говоря уж что в продакшен код я бы такой точно не выпустил. Он вроде простой, но с первого взгляда может не распознаться, соответственно возможно ошибку допустить.
В продакшен был бы тупо выложен сам текст стихотворения, чего уж там.
Мне кажется если бы вы именно в формате статьи для новичков в программировании пост написали с описанием как это работает — он бы зашел, но в таком виде непонятна его ЦА. Программистам с опытом квайны и такого рода головоломки, имхо, скучны уже, а новички без описания скорее всего не разберутся.
Я например — конечно догадался что она весь текст красиво выводит на экран, но как не понял. Думаю окей. Давай в комментах вместе с ребятами пофантазирую. Бестолку — заминусовали)
В том и проблема. Человек знающий операторы применяемые быстро поймет что к чему, решение пусть местами элегантное, но простое. А без знаний операторов — вряд ли.
Решение элегантное.
Но проблема в том, что выложить код не значит написать статью.
К тому же, если уж говорить о «Не нормальном программировании», то уровень статей Хабра — это не рекурсивный вызов main, а представление данной функции как массива.
Да, так можно.
Да, такое делали.
Нет, так делал не я, и нет, я написать такую статью не смогу.
Если голову включить над кодом, то забавно, програмка прокручивает себя 8 раз и прекращает работу.
За это время она успевает сгенерить стихотворение.
Но Хабр это посты в которых тебе разжёвывают от и до, а в конце ты такой «вау!» и просветлился, а эта заметка, это просто анекдот.
Надо было прикрутить подводку (интро) про авто-генерацию стихов что ли.
Даже не понятно зачем читатель на него время потратил.
Еще прикольнее рекурсию сделать через system("./путь_к_бинарнику") или как это в си? Автору плюс, жаль что заминусовали.
да, прикольно.
Уже забыл Си, но если задача сделать короче, то почему не нельзя как-то так (псевокод)
main (int s){
if (s=1) print("Вот дом,\n");
if (s=2) print("\nА это пшеница,\n");
if (s=3) print("\nА это весёлая птица-синица,\n");
if (s=4) print("\nВот кот,\n");
if (s=5) print("\nВот пёс без хвоста,\n");
if (s=6) print("\nА это корова безрогая,\nЛягнувшая");
if (s=7) print("\nА это старушка, седая и строгая,\n");
if (s=8) print("\nА это ленивый и толстый пастух,\n");
goto s;
9: print("\nВот два петуха,\nКоторые будят того пастуха,\n");
8: print("Который бранится с коровницей строгою,\n");
7: print("Которая доит корову безрогую,\nЛягнувшую");
6: print(" старого пса без хвоста,\n");
5: print("Который за шиворот треплет кота,\n");
4: print("Который пугает и ловит синицу,\n");
3: print("Которая часто ворует пшеницу,\n");
2: print("Которая в темном чулане хранится\nВ доме,\n");
1: print("Который построил Джек.\n");
if (s++<9) main(s);
}

НЛО прилетело и опубликовало эту надпись здесь
так можно на бейсике, например, но там не пройдет номер с рекурсией и понадобится цикл, в итоге надо написать работающий пример, чтобы понять короче он или нет.
Можно и без меток обойтись
for(s=1;s<10;s++){
  if (s=1) print("Вот дом,\n");
  if (s=2) print("\nА это пшеница,\n");
  if (s=3) print("\nА это весёлая птица-синица,\n");
  if (s=4) print("\nВот кот,\n");
  if (s=5) print("\nВот пёс без хвоста,\n");
  if (s=6) print("\nА это корова безрогая,\nЛягнувшая");
  if (s=7) print("\nА это старушка, седая и строгая,\n");
  if (s=8) print("\nА это ленивый и толстый пастух,\n");
  if (s>8) print("\nВот два петуха,\nКоторые будят того пастуха,\n");
  if (s>7) print("Который бранится с коровницей строгою,\n");
  if (s>6) print("Которая доит корову безрогую,\nЛягнувшую");
  if (s>5) print(" старого пса без хвоста,\n");
  if (s>4) print("Который за шиворот треплет кота,\n");
  if (s>3) print("Который пугает и ловит синицу,\n");
  if (s>2) print("Которая часто ворует пшеницу,\n");
  if (s>1) print("Которая в темном чулане хранится\nВ доме,\n");
  print("Который построил Джек.\n");
}


И логику подсократить
void f(int i, int j, char* a) {
  if (i=j) printf(a);
  if (i+10>j) printf(a);
}
for(s=1;s<10;s++){
  f(s,1,"Вот дом,\n");
  f(s,2,("\nА это пшеница,\n");
  f(s,3,("\nА это весёлая птица-синица,\n");
  f(s,4,("\nВот кот,\n");
  f(s,5,("\nВот пёс без хвоста,\n");
  f(s,6,("\nА это корова безрогая,\nЛягнувшая");
  f(s,7,("\nА это старушка, седая и строгая,\n");
  f(s,8,("\nА это ленивый и толстый пастух,\n");
  f(s,18,("\nВот два петуха,\nКоторые будят того пастуха,\n");
  f(s,17,("Который бранится с коровницей строгою,\n");
  f(s,16,("Которая доит корову безрогую,\nЛягнувшую");
  f(s,15,(" старого пса без хвоста,\n");
  f(s,14,("Который за шиворот треплет кота,\n");
  f(s,13,("Который пугает и ловит синицу,\n");
  f(s,12,("Которая часто ворует пшеницу,\n");
  f(s,11,("Которая в темном чулане хранится\nВ доме,\n");
  print("Который построил Джек.\n");
}


Минифицировать
void f(int i,int j,char*a){if(i=j)printf(a);if(i+10>j)printf(a);} for(s=1;s<10;s++){f(s,1,"Вот дом,n");f(s,2,("nА это пшеница,n");f(s,3,("nА это весёлая птица-синица,n");f(s,4,("nВот кот,n");f(s,5,("nВот пёс без хвоста,n");f(s,6,("nА это корова безрогая,nЛягнувшая");f(s,7,("nА это старушка, седая и строгая,n");f(s,8,("nА это ленивый и толстый пастух,n");f(s,18,("nВот два петуха,nКоторые будят того пастуха,n");f(s,17,("Который бранится с коровницей строгою,n");f(s,16,("Которая доит корову безрогую,nЛягнувшую");f(s,15,(" старого пса без хвоста,n");f(s,14,("Который за шиворот треплет кота,n");f(s,13,("Который пугает и ловит синицу,n");f(s,12,("Которая часто ворует пшеницу,n");f(s,11,("Которая в темном чулане хранитсяnВ доме,n");print("Который построил Джек.n");}


Или вынести строки в массив (не помню как массивы правильно обьявляются в Си)
char* a[] = {"Вот дом,","\nА это пшеница,\n","\nА это весёлая птица-синица,\n","\nВот кот,\n","\nВот пёс без хвоста,\n","\nА это корова безрогая,\nЛягнувшая","\nА это старушка, седая и строгая,\n","\nА это ленивый и толстый пастух,\n","\nВот два петуха,\nКоторые будят того пастуха,\n","Который бранится с коровницей строгою,\n","Которая доит корову безрогую,\nЛягнувшую"," старого пса без хвоста,\n","Который за шиворот треплет кота,\n","Который пугает и ловит синицу,\n","Которая часто ворует пшеницу,\n","Которая в темном чулане хранится\nВ доме,\n","Который построил Джек.\n"}
void f(int i, int j, char* a) {
  if (i=j) printf(a);
  if (i+10>j) printf(a);
}
for(s=1;s<10;s++){
 for(b=1;b<8;b++){
  f(s,b,a[b]);
  f(s,19-b,a[17-b]);}
  print(a[17]);
}


#include <stdio.h>
const char* a[] = {"Вот дом,\n","\nА это пшеница,\n","\nА это весёлая птица-синица,\n","\nВот кот,\n","\nВот пёс без хвоста,\n","\nА это корова безрогая,\nЛягнувшая","\nА это старушка, седая и строгая,\n","\nА это ленивый и толстый пастух,\n","","","\nВот два петуха,\nКоторые будят того пастуха,\n","Который бранится с коровницей строгою,\n","Которая доит корову безрогую,\nЛягнувшую"," старого пса без хвоста,\n","Который за шиворот треплет кота,\n","Который пугает и ловит синицу,\n","Которая часто ворует пшеницу,\n","Которая в темном чулане хранится\nВ доме,\n","Который построил Джек.\n"};
int main() {
for(int s=1;s<9;s++) {
 printf(a[s-1]);
 for(int b=8;b>=0;b--) {
  if (s>b) printf(a[18-b]);
}}}

Онлайн компилятор Си
в первом for надо s<10, и в итоге суперский результат в 725 символов — уже близко к примеру с gzip!
в первом for надо s<10,
По ссылке правильный вариант, а сюда скопировал с ошибкой :)

Сам код в этом случае
190 сиволов
#include <stdio.h>const char* a[]={"","","","","","","","","","","","","","","","","",""};
int main(){for(int s=1;s<10;s++){printf(a[s-1]);for(int b=8;b>=0;b--){if(s>b)printf(a[18-b]);}}}
Так что за счет него сильно объем уже не ужать. Как вариант можно вынести повторения в отдельные переменные. Например, я пробовал вынести «Котор» или «Который» — можно сократить еще символов 10-15. Но это не существенно. Заметного изменения можно добиться только путем сжатия текста.
НЛО прилетело и опубликовало эту надпись здесь
это какие-то неправильные пчелы %)
НЛО прилетело и опубликовало эту надпись здесь

Можно пожать полный текст в gzip и при вызове распаковывать. В питоне 3 уложился в 579 символов:


import zlib
import base64
print(zlib.decompress(base64.a85decode('Gb"/%92<Ai%,LXl4ofQA-;c3)JtRu9>TuluFIKSY($ln0m)b$k@08h]Psptlp#l-6c_S55>%6KCCYiFGN*k)SB.iqk,B!!.P$$lAh/c$_b\\ujX]Kt`pab.SW9((V"Ya8S>NiI%F.</+e*:FJk2C(pe\\Ddpo,?\\]E--\'\\a,(%l"@J=>$3BN)UXoa+X?3>B\\YQ#TA/FeP-\'&#--U%i:f8UbZr<j#=BA#X.R5qg.B#nUjqJ\\Etb4bj!Obh]5!`+ullW,GcQFuE69b8C>o%g,tK\'mHTSL$=Q9dH$33E]>7STER$UQ;KFsMFWT=8daSY*\'(7XE(4shA]I""F!iiZV+*tW,X>B[$$L_3!KO(l68-Xk@dWVG(/7h$NatT?a"plK3Q_,MLTCi-^pPJ6"]08OR;Ef\\"[Xb0R]K:=l/ajog[H,&#lLnJFc^lPO2&:JrI6H3HM*h@qO`u0F9<..,W4S-"brQc-#VG*Mqa]R45PISL&')).decode())

Думаю, что в си можно сделать аналогично, хотя и будет чуть длиннее.

Здорово, работает! жаль пропуски между многостишиями пропустили, но это не суть уже.
А макросы подойдут? Если да, то можно сделать вот так:
#define p printf
#define c case
#define b break;

и заменить все вхождения case, printf и break;. Это сэкономит 155 символов и в сумме вроде получается меньше 1000
да если это додумать то этот вариант занимает 844 символа и почетное третье место после gzip'а и строк в массиве:
#include <stdio.h>
#define c(L,S) case L:printf(S);
#define b break;
int main(int s) {
  switch (s) {
  c(1,"Вот дом,\n")b
  c(2,"\nА это пшеница,\n")b
  c(3,"\nА это весёлая птица-синица,\n")b
  c(4,"\nВот кот,\n")b
  c(5,"\nВот пёс без хвоста,\n")b
  c(6,"\nА это корова безрогая,\nЛягнувшая")b
  c(7,"\nА это старушка, седая и строгая,\n")b
  c(8,"\nА это ленивый и толстый пастух,\n")
  }
  switch (s) {
  c(9,"\nВот два петуха,\nКоторые будят того пастуха,\n")
  c(8,"Который бранится с коровницей строгою,\n")
  c(7,"Которая доит корову безрогую,\nЛягнувшую")
  c(6," старого пса без хвоста,\n")
  c(5,"Который за шиворот треплет кота,\n")
  c(4,"Который пугает и ловит синицу,\n")
  c(3,"Которая часто ворует пшеницу,\n")
  c(2,"Которая в темном чулане хранится\nВ доме,\n")
  c(1,"Который построил Джек.\n")
  }
  if (s++<9) main(s);
}

А меня, как говорят в соцсетях: «улыбнуло» :) Пусть на пару минут — ну так и в серьезных журналах бывает веселая картинка без особых претензий. Спасибо.

Автор правильно указал хаб: «Ненормальное программирование», а вот хаб «Программирование» лучше убрать, чтобы не было завышенных ожиданий у читателей, м.б. добавить «Кодобред». ИМХО тогда никаких претензий быть не должно, тем более, что заметка породила содержательные комменты с вариантами решений: нпр.
НЛО прилетело и опубликовало эту надпись здесь
Проблема не в том, что плохой код, а в том, что плохая статья. Не тот формат. Для публикации кусков кода без пояснений существуют другие ресурсы. Посмотрите аналогичные статьи в хабе «Ненормальное программирование», сравните, что есть в них и чего нет у вас.
#!/bin/bash
A=(
  "Вот дом,\n"
  "\nА это пшеница,\n"
  "\nА это весёлая птица-синица,\n"
  "\nВот кот,\n"
  "\nВот пёс без хвоста,\n"
  "\nА это корова безрогая,\nЛягнувшая"
  "\nА это старушка, седая и строгая,\n"
  "\nА это ленивый и толстый пастух,\n"
)
B=(
  "\nВот два петуха,\nКоторые будят того пастуха,\n"
  "Который бранится с коровницей строгою,\n"
  "Которая доит корову безрогую,\nЛягнувшую"
  " старого пса без хвоста,\n"
  "Который за шиворот треплет кота,\n"
  "Который пугает и ловит синицу,\n"
  "Которая часто ворует пшеницу,\n"
  "Которая в темном чулане хранится\nВ доме,\n"
  "Который построил Джек.\n"
)
for ((i=0; i<=9; i++)); do
  printf "$(printf "%s" "${A[$i]}" "${B[@]: -$(($i+1))}")"
done
Супер, это мне больше всех вариантов понравилось, включая исходный.

В почти всех решениях можно заменить "\nА это " на s+"...", что даст выгоду в 6*5=30 символов (-декларация s). Тоже самое с "Котор"

#include <stdio.h>
#define A ,"\nА это "
#define K ,"\nКотор"
char* a[]={"\nВот два петуха,"A"ленивый и толстый пастух,"A"старушка, седая и строгая,"A"корова безрогая,\nЛягнувшая","\nВот пёс без хвоста,","\nВот кот,"A"весёлая птица-синица,"A"пшеница,","Вот дом,"K"ые будят того пастуха,"K"ый бранится с коровницей строгою,"K"ая доит корову безрогую,\nЛягнувшую"," старого пса без хвоста,"K"ый за шиворот треплет кота,"K"ый пугает и ловит синицу,"K"ая часто ворует пшеницу,"K"ая в темном чулане хранится\nВ доме,"K"ый построил Джек.\n"};
main(){int x,y;for(x=8;x>=0;x--){printf(a[x]);for(y=x;y<9;y++){printf(a[y+9]);};};}

$ wc -m jack.c
621 jack.c

Поставил минус. Думаю, поставил правильно.


Свитч-кейс автомат — это может быть интересно. Рекурсивный main — это может быть интересно. Кстати, по стандарту языка нельзя рекурсивный main.


Но статья требует какого-то рассмотрения чтоли… А иначе общий уровень хабра будет неуклонно падать и получим со временем ithappens...

Но статья требует какого-то рассмотрения чтоли…

Интересный вопрос. А конкретнее можно: какое тут нужно рассмотрение? — Пересказ вики-статьи о рекурсии явно не нужен. Объяснение для чайника как это работает? — Пусть запустит в отладке и посмотрит по шагам, если в уме сообразить не может.

По первому впечатлению и мне показалось, что заметка неприлично краткая. Но подумал: как бы я это написал? — И понял, что однозначного ответа пока не имею. М.б. Вы поможете? (Вопрос не праздный: надеюсь понятно, что это мне нужно для публикаций на другие темы).
Заранее спасибо.
Лично для меня habr куда-то скатился, и стал чудовищно скучен — «Хабр уже не торт», именно из-за того, что наличие в статье чего-то раздражающего немедленно тянет ее в бан. К сожалению, некий вызов на подумать, тоже крайне раздражает, вот что грустно… Неразмусолил код, который выложил, — читатель должен сам думать — в бан. Высказался резко — в бан, например одну прошлую мою статью мою забанили за фразу «это не программист, а дурак какой-то». Это совет как сделать, чтобы не забанили. Для меня, как для автора, это слишком серьёзные ограничения, так что моих статей здесь, видимо, больше не будет ((
На текущий момент из 1700 читателей только ок. 3% оставили комменты и оценки. Комменты есть интересные, а 3% оценок не могут отразить общего мнения. Как и во многих других статьях. ИМХО если бы не возникали ограничения, то на рейтинг никто бы не смотрел, а писали бы ради обратной связи.
и стал чудовищно скучен

А разве так не должно быть? Всё-таки сюда не развлекаться ходят.
На работу люди тоже не развлекаться ходят, однако ситуация, когда работа чудовищно скучная представляется мне просто трагической. Так бывает, да, но это ни разу не обязательно.

Сабж на хабре был бы заминусован в любые времена. Не тот формат.

Факты говорят об обратном, например вот habr.com/ru/post/37245

Может вы правы, а может там просто пример выдающийся и это исключение подтвержающее правило.

исключение подтвержающее правило.

Так не бывает. Фраза про правила и исключения — имеет совсем другой смысл: наличие исключения косвенно указывает на существование правила. Т.е. если мы узнаём, что в одной далёкой стране некому гражданину разрешили носить шляпу в присутствии короля, мы заключаем, что там существует норма, согласно которой обычно этого делать нельзя.
Вот именно сейчас я дарую вам минус в карму. Многие возмущаются, когда минусы прилетают анонимно и по непонятной причине, потому я представлюсь и объясню, почему. Странные статьи случаются у каждого. И у меня в черновиках такая есть. Нахватал минусов, сделал выводы, скорректировал своё поведение, теперь моя кожа нежная и шелковистая, как попка младенца. Но если минусы за статью ведут не к коррекции поведения, а к позиции «все гомосексуалисты, я д'Артаньян» — значит, нужно переходить к следующему этапу курощения, ибо это весьма неконструктивная позиция. Токсичная, как сейчас модно говорить.
Грусть в том, что совершено непонятно почему из второй половины описаной вами позиции «Я д'Артаньян» вы с такой готовностью видите первую. Я ее ни разу не имею в виду — на самом деле вся токсичность здесь на вашей стороне ((( то есть непонятно, почему позиция «я пишу так как я считаю нужным», рассматривается как некое пренебрежение к окружающим — его тут нет ни разу, но в конце концов это моя статья, а не ваша.
Так вот же.
habr куда-то скатился, и стал чудовищно скучен. именно из-за того, что наличие в статье чего-то раздражающего немедленно тянет ее в бан

Хабр сейчас — это что-то плохое, потому что не приемлет ваш стиль написания постов. А если бы принял, то сразу стал бы хорошим. То есть вы лучше знаете, как надо. А мнение людей, выраженное в форме минусов — ну, очевидно, оно высказано людьми, которые не понимают, как надо. То есть — антонимами д'Артаньяна.
самое смешное, что именно так, для того чтобы поставить минус не нужно знать как надо, достаточно знать как не надо. Это совершенно не значит, что все кто ставят минус, ничего не понимают, скорее всего наоборот, но минус сам по себе не несет ничего конструктивного. Мой текст не являлся неинтересным (судя по комментариям) и никаго не обижал, поэтому считаю, что то что он заминусовывается это проблема площадки, а не меня.
Мой текст не являлся неинтересным (судя по комментариям) и никаго не обижал

На таких основаниях я мог бы запостить много чего. Например: рецепт борща моей супруги, отрывок из поэмы Блока, эротические воспоминания моей юности… Я этого не делаю, и я молодец. Потому что есть формат. Формат — это то подмножество интересных и необидных текстов, которое должно существовать именно в данном конкретном месте. Допустим, не стоит рассказывать анекдоты на похоронах (это также ответ на ваш комментарий ниже). Ваш интересный текст не входит в это подмножество? Ищите для него другое место.

Если вас не устраивает формат площадки — это проблема не площадки, а вас. Если вы не согласны, то проблемой площадки становитесь вы.
Ну да, я говорю, понятно, хабр скучен (для меня) и неподходящее место для моих текстов, я их, видимо, больше публиковать здесь не буду. В ответ вы говорите — вы хам, не уважаете мнение окружающих и ставите минус в карму. Где логика-то?
Если бы вы сказали именно это, у меня не было бы к вам никаких претензий. Однако сравните вот эту отцензуренную версию со своим изначальным высказыванием.
То есть минус не за суть, а за эмоции, понял.
Что такое «суть»? Для меня суть в том, что вам лень написать полноценную статью, и вы хотите накормить читателя полуфабрикатом. А когда читателю оказывается невкусно, вы упрекаете в этом его, а не себя. «Читатель должен сам думать — в бан».
Нет не лень, просто для меня выложить данный код вместе с объяснением, это было бы всё равно, что выложить интересную головоломку сразу вместе с решением.
А в комментариях был хоть один человек, который не понял, как это работает? Этот код — это коан какой-то, над которым надо думать и достигать просветления? Наоборот, вам накидали тысячу вариантов, как это можно сделать интереснее. Вы, мягко говоря, несколько переоцениваете новацию своего кода. Проблема не в том, что он непонятный, а в том, что на статью его мало.

Как могла бы выглядеть статья:

— Краткое предисловие о том, что программисты любят меряться письками.
— Введение: классические задачи на программную генерацию текста. 99 бутылок пива и так далее.
— Постановка задачи: вывести такой-то текст, использовать как можно меньше символов.
— Наивный подход: тупо выводим текст целиком.
— Оптимизируем, избавляемся от повторения длинных подстрок.
— Вот в этом пункте могла бы содержаться ваша программа, сопровождённая художественным текстом.
— Дальнейшая оптимизация. Из свитч-кейса и рекурсии — в массив и цикл.
— Экономия на спичках: заменяем ещё какие-то общие подпоследовательности, выигрываем пяток байт. Применяем грязные сишные хаки, выигрываем ещё десяток байт.
— Жизнеутверждающий эпилог с упоминанием колмогоровской сложности.

Вот это была бы статья. А у вас огрызок.
А в комментариях был хоть один человек, который не понял, как это работает?

Здесь опять нет логики. Если все понимают этот код без объяснения, то зачем оно? На самом деле в комментариях была как раз просьба объяснить, а не написать SEO-шную статью, вроде как вы предлагаете, но мне кажется если и объяснять то отдельной статьей, но ее, увы, благодаря вам, на хабре не будет.
Мне кажется, хабрааудитория разделилась на две части: те, кто не знает язык и не понимает код, и те, кто знает язык и полагает код тривиальным. Практически без промежуточных вариантов.
Обе части считают, что такие статьи не нужны.
Ну, я и пытался немного зацепить тех, которые не понимают код — ведь в тексте программы читается само стихотворение. Но, видимо, вы правы.
Обе части считают, что такие статьи не нужны.
На три части. Треть проголосовавших ведь плюсонули.
Спасибо!
Да, прошу пардона. Нашёлся комментатор, которому необходимо было пояснение. Я не заметил его при беглом просмотре, потому что он был один.

объяснить, а не написать SEO-шную статью, вроде как вы предлагаете

Так это и есть «объяснить». Во-первых, объяснить, на кой ляд оно нам надо. Во-вторых — объяснить ход мысли, который привёл к такому решению. Ну и там попутно — как оно работает. Объяснить таким образом, чтобы это было понятно и интересно достаточно широкому кругу читателей. То, что у вас, одним непонятно (разумеется, такие есть, просто они в комментах не отметились, статья прошла строго мимо), другим неинтересно (то, что здесь развернулось оживлённое обсуждение — следствие отнюдь не достоинств поста).

отдельной статьей, но ее, увы, благодаря вам, на хабре не будет.

Вот опять вы хотите на кого-нибудь вину свалить. Сначала читатели глупые, теперь Sirion противный, зарубил на корню творческий порыв. Ну детский сад же, батенька.
Да нет, именно детский сад, потому что вы (коллективно) с одной стороны, лишили меня возможности писать еще, с другой стороны зачем-то объясняете после этого, что и как я должен был сделать. А когда я в ответ говорю, ну ладно, я тогда пойду, вдруг начинаете объяснять, что это хамство и я сам виноват (и видимо должен публично покаяться или что-то такое). Или вы серьезно не видите, что на кнопке минус написано «не пиши больше»?
А вас лишили возможности писать ещё? Есть recovery mode, есть ресет кармы, если вы его ещё не использовали. Ну, то есть, я не буду очень сильно плакать, если вы больше не напишете, но технически возможность вполне себе есть. Минус в карму — это не «не пиши больше», а «если хочешь писать, пиши как-то по-другому».
Заявка на обнуление кармы была выполнена 1 июля 2010 в 17:24.
Второго шанса не будет. Ведите себя хорошо.

)))
Напишите что-нибудь кошерное в рекавери моде. Я вам первым же сделаю +2 кармы относительно текущего состояния. Как нас учит повторяющаяся дилемма заключённого, нужно быть мстительным, но милосердным.
Фактически что происходит. Есть какие-то люди, я подхожу и показываю им интересную штуку, некоторые заинтересовались, но в итоге на меня наорали и прогнали — иди отсюда, нам это неинтересно. Совершенно непонятно, с какого перепугу мне к этим людям еще раз подходить.
не видел на ithappens кусков кода. Может бывает, конечно, я их мало смотрел.
Тут не поспоришь и вы правы, что наверное нет общедоступной площадки, где ваш сниппет кода был бы «формат».
С другой стороны, а если ваше творчество нигде нельзя опубликовать, чтобы не нарушить общепринятый стиль — ну может ну его в топку?
Зайдите на работе в свой С или С++ офтоп чат в телеграме/слаке, или что там у вас за система (если у вас нет офтоп чата, сочувствую), и закиньте туда свой код. Пусть коллеги улыбнутся.
А делиться на весь мир, наверное, не стоит того.
(я поставил минус статье, карму не трогал).

Пикабу с тегом программирование?

Ну не поймите неправильно, можно еще на говнокод.ру. Там иногда люди публикуют свои просто забавные моменты кода (не обязательно говнистые).
Я бы даже плюсанул там такой топик)
Другое дело что там коммьюнити само по себе токсичное, например всех плюсовиков там называют «крестоблядями».
На Хабре давным давно много снобов, которые пытаются всех поучить, найти изъян, высмеять, не обращайте внимание. Занимайтесь тем чем нравится и выкладывайте на обзор другим программистам. Хорошие люди за вас порадуются и помогут советом.
Удачи вам в освоении программирования.
Код не мой, и весьма давний, как минимум середины 90х годов:
#include <stdio.h>
main (int t, int _, char *a){return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)): 1,t<_ ? main(t+1,_,a):3,main(-94,-27+t,a)&&t==2\
?_<13?main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?
main(_,t,"@n'+,#'/*s{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n\
{n+,/+#n+,/# ;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!\
/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!\
/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/\
w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}\
#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):
main(-65,_,a+1):
main((*a=='/')+t,_,a+1):
0<t?main(2,2,"%s")
:*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"
),a+1);
}

Выводит текст:
On the frirst day of Christmas my true love gave to me
a partridge in a pear tree.

On the second day of Christmas my true love gave to me
two turtle doves
and a partridge in a pear tree.

On the third day of Christmas my true love gave to me
three french hens, two turtle doves
and a partridge in a pear tree.

On the fourth day of Christmas my true love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the fifth day of Christmas my true love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the sixth day of Christmas my true love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the seventh day of Christmas my true love gave to me
seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eigth day of Christmas my true love gave to me
eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the ninth day of Christmas my true love gave to me
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the tenth day of Christmas my true love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the ealeventh day of Christmas my true love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the twelfth day of Christmas my true love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

Собирал его когда-то BC 3.1
Круто ведь! Я нифига не программист, ну основы конечно знаю, но кодить уровень математики не позволяет. Поэтому глядя на такие примеры восторгаюсь. Более того. Несмотря на то, что я не практиющий знаток чисто основ программирования, постоянно читаю статьи просто, что бы нетпотеряться во всех этих джунглях фреймворков и новых сущностей программирования.

Постой пример. Когда я заканчивал универ(начало 2000х), не считая стаърых языков, в реальном мире и академическом был небольшой стек языкОв: C, C++, Delphi, pascal, html, php, Perl, Java, flash, assembler, ну может ещё чего позабыл. Как я и говорил, основу я понимал, но кодить не получалось. Развечто простые программки, что то выводить и шрифты разные расивать. Однако с середины 2000х и по седей день поВился такой зоопарк фреймворков и до этой поры находящихся в тени языков, что-то понял, что точно никогда не освою.

Однако никогда не переставал читать статьи на хабре именно поткоддингу, что бы хоть немного не отставать от паровоза просто в понимании. Потому-то программисты это люди, которые сидят в соседнем кабинете, и я не могу себе позволить эти темы не листать. И вот хожу с ребятами курить, и мне есть отчем с ним потрещать. Да они понимают, что я не пишу, но с охотской делаться со мной тем над чем работают, и ям понимаю. Просто сам заводить это не смогу, но поставить задачу или понять над чем работает- это присутствует.

Другой пример, я любитель старых шутеров «кваки», начитал кучу статей здесь на хабре, как ребята разбирают код квейка. Просто потому что интересна сама игра. Ребята объясняют, как работает та или иная сущность в коде, и это прикольно.

Так что советую автору статьи не сдаваться, а принять во внимание таких недоучек, как я и продолжать публиковаться, когда появится возможность.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории