Задача №3605. Только буквы или только цифры
Построить пару reg. exp.-ов, которая за один проход заменит все фрагменты вида \texttt{...} (где ... — непустая последовательность, состоящая или из одних только латинских букв, или из одних только десятичных цифр) на фрагменты вида \begin{bfseries}...\end{bfseries} (где «...» в замене — то, что было найдено при поиске).
«Честными» считаются только решения, использующие для каждой строки ровно одну регулярную замену. То есть, «сначала пройти по строке и позаменять только фрагменты из цифр, а потом пройти по только что полученному результату ещё раз и позаменять только фрагменты из букв» вообще-то является правильным решением, но именно здесь и сейчас считается читерством.
Рекомендуется решать задачу не «с нуля», а менять регулярные выражения (и только их) в следующей Java-программе:
import java.util.*;
import java.io.*;
public class Main {
// Изменять регулярное выражение здесь
static String regexp="a+b+c";
static String replacement="QQQ"; // и здесь
public static void main(String[] args) throws Exception{
Scanner in=new Scanner(System.in);
PrintWriter out=new PrintWriter(System.out);
String str;
while(in.hasNextLine() )
{
str=in.nextLine();
str=str.replaceAll(regexp, replacement);
out.println(str);
out.flush();
}
out.close();
}
}
Любой текст, состоящий из любого количества любых непустых строк. Все строки, включая последнюю, завершаются символом перевода строки. Все символы входного файла (кроме переводов строки) имеют ASCII-коды в диапазоне от 32 до 127.
Если отсылать указанную java-программу, меняя только регулярные выражения, об этом можно не беспокоиться — всё получится само.
Текст, состоящий из того же количества строк, но с выполненной заменой.
Если отсылать указанную java-программу, меняя только регулярные выражения, об этом можно не беспокоиться — всё получится само.
Не забывайте, что в джавовских строках (как и в сишных) бэкслэш имеет специальное значение, а чтобы ввести в джавовскую строку именно сам бэкслэш, его надо написать дважды. Например, если «любая цифра» обозначается в регулярном выражении как «\d», то в джавовской строке должно быть «\\d». Если надо искать вхождения бэкслэша в обрабатываемый текст, его приходится писать четыре раза подряд (один раз удвоить, потому что этого требует синтаксис регулярного выражения, а потом ещё раз, потому что этого требует синтаксис джавовских строк).
Автор задачи знает, что вообще-то \texttt соответствует ttfamily, а не bfseries. Но, к сожалению, ошибка была замечена только когда уже было несколько успешных решений именно с bfseries...
Variables \texttt{i}, \texttt{j} and \texttt{k} are commonly used as integer counters. Here, \texttt{R}, \texttt{R0} and \texttt{R0after} are floating-point. \texttt{a007} is a \texttt{string}. \texttt{777} is an integer constant.
Variables \begin{bfseries}i\end{bfseries}, \begin{bfseries}j\end{bfseries} and \begin{bfseries}k\end{bfseries} are commonly used as integer counters. Here, \begin{bfseries}R\end{bfseries}, \texttt{R0} and \texttt{R0after} are floating-point. \texttt{a007} is a \begin{bfseries}string\end{bfseries}. \begin{bfseries}777\end{bfseries} is an integer constant.