Я наткнулся на этот вопрос на SO и подумал, что это будет хорошим испытанием для гольфа. Итак, вот оно:
Вызов:
Напишите программу, которая читает последовательность строк символов, по одной на строку, и выводит список всех позиций, где каждая строка имеет один и тот же символ.
Вход и выход:
Ввод состоит из одной или нескольких строк печатных непробельных символов ASCII, за которыми следует новая строка. Вы можете предположить, что все входные строки имеют одинаковую длину. Новая строка не должна рассматриваться как часть ввода (т.е. вы не должны выводить ее как соответствующий символ).
Пример ввода (бесстыдно украденный из SO вопроса):
abcdefg
avcddeg
acbdeeg
После прочтения ввода ваша программа должна напечатать позиции каждого соответствующего столбца и символы, которые они содержат. (Ваша программа может, но не обязательно, прекратить чтение дополнительных входных данных, если она может определить на ранней стадии, что нет соответствующих столбцов.) Разрешен любой разумный выходной формат; в частности, вы можете использовать индексацию на основе 0 или 1 для позиций.
Пример вывода для указанного выше ввода (с использованием индексации на основе 0):
0: a
3: d
6: g
Подсчет очков:
Это код гольф, поэтому самый короткий ответ выигрывает. В случае ничьей могут быть присуждены дробные чары с прерывателем связи за дополнительные функции:
- −½ символа для правильной обработки строк ввода неравной длины. (Вывод не должен содержать позиций после конца самой короткой строки ввода.)
- - символы для правильной обработки ввода, состоящего из произвольных символов Unicode в кодировке UTF-8.
Для вдохновения, вы можете найти некоторые безрассудные решения в вопросе SO (см. Выше).
Разъяснения:
Простое объединение позиций и символов, как в
0a3d6g
, не считается «разумным выводом». Вы должны предоставить какой-то разделитель (например, пробел) между каждым элементом выходных данных, чтобы его можно было однозначно проанализировать.Ввод будет предоставлен в стандартном потоке ввода (
stdin
) или с использованием любого механизма ввода текстового файла, наиболее естественного для вашего языка. (Если выбранный вами язык не имеет естественного механизма ввода файлов, делайте то, что кажется вам наиболее подходящим.)Ввод заканчивается, когда больше нет данных для чтения (т. Е. Когда возникает условие конца файла). Если вы хотите, вы можете потребовать, чтобы ввод был завершен пустой строкой (которую вы тогда не должны считать частью ввода, очевидно). Если вы это сделаете, пожалуйста, укажите это в своем ответе, чтобы другие могли предоставить правильные данные для тестирования.
Каждая строка ввода, включая последнюю, заканчивается символом новой строки. Ваш ответ не должен сообщать об этой новой строке как соответствующий столбец. (Хорошо, если ваше решение может также обрабатывать ввод, когда последняя строка не заканчивается новой строкой, но это не обязательно.)