ПЕЧАТЬ, как ЭТО


17

Напишите программу, которая принимает входные данные для STDIN и создает все строчные буквы (включая буквы с акцентом) в 2k-1верхнем регистре слова th, а все заглавные буквы (включая буквы с акцентированием) в 2kнижнем регистре слова th ( kявляется положительным целым числом). Программа не должна влиять на любые другие символы в любом слове. Например, если строка есть Ook! O0k!, то вывод должен быть OOK! o0k!.

Новое слово формируется, когда после непробельного символа есть ненулевое количество пробелов. Пробелы в начале ввода должны игнорироваться. Если слово не содержит измененных символов, программа все равно должна рассматривать его как слово и продолжать.

Образцы входных данных (различные входы разделены пустой новой строкой)

Nineteen Eighty-Four (1984)

Programming Puzzles & Code Golf   - 
Hooray for Code Golf Stack Exchange!

     2be or not 2be, that is the ~~~QuEsTiOn~~~

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

Пример выходов

NINETEEN eighty-four (1984)

PROGRAMMING puzzles & code GOLF   - 
HOORAY for CODE golf STACK exchange!

     2BE or NOT 2be, THAT is THE ~~~question~~~

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

Это код гольф, ребята. Применяются стандартные правила компьютерной графики. Самая короткая программа в байтах побеждает.


Я почти уверен, что покрыл все лазейки, касающиеся пробелов и не буквенных символов, но если я их пропустил, пожалуйста, сообщите мне.


Спасибо @Optimizer за создание следующего фрагмента кода. Для использования нажмите «Показать фрагмент кода», прокрутите вниз и нажмите «► Выполнить фрагмент кода».


5
А как насчет акцентированных персонажей? Должны ли мы игнорировать это? Разрешены ли функции?
Downgoat

Когда я писал вопрос, я не имел в виду символов акцента, но я полагаю, что они будут иметь значение. Функции разрешены.
Арктур

Какие пробельные символы мы должны учитывать? Можем ли мы предположить, что непробельные символы будут печататься?
Деннис

Все пробельные символы и да.
Арктур

Ответы:


4

Vim скрипт, 22 21 байт

nm Q vEUWvEuWQ|norm Q

Объяснение:

Первая команда отображается Qна:

vEUсделать слово заглавными,
Wчтобы перейти к следующему слову
vEuсделать слово строчными,
Wперейти к следующему слову.
Qповторить рекурсивное отображение.

и |norm Qвыполняет отображение

Использование программы

Вот как вы получаете Vim для чтения со стандартного ввода:

$ vim - -c 'nm Q vEUWvEuWQ|norm Q'
Vim: Reading from stdin
This is the first line!
This is the second line!
This is the third and last line I type to check if this works!
^D

Это откроет Vim, отображающий это:

THIS is THE first LINE.
this IS the SECOND line.
THIS is THE third AND last LINE i TYPE to CHECK if THIS works!
~
~
~

6

GNU sed, 28

Оценка включает в себя +2 для -rzпереданных в GNU sed.

s/(\S+\s*)(\S*)/\U\1\L\2/g

Тестовый вывод

$ for t in 'Nineteen Eighty-Four (1984)' \
> 'Programming Puzzles & Code Golf   - 
> Hooray for Code Golf Stack Exchange!' \
> '     2be or not 2be, that is the ~~~QuEsTiOn~~~' \
> '++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.'; do
> echo "$t" | sed -zrf PRINTlikeTHIS.sed
> done
NINETEEN eighty-four (1984)
PROGRAMMING puzzles & code GOLF   - 
HOORAY for CODE golf STACK exchange!
     2BE or NOT 2be, THAT is THE ~~~question~~~
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
$ 

5

Perl, 26 байт

25-байтовый код + 1-байтовая командная строка

s/\S+/++$i%2?uc$&:lc$&/eg

Спасибо ThisSuitIsBlackNot за исправление нескольких ошибок!

Использование:

perl -p entry.pl

3

Пиф, 23

jdmjbmrk=xZ!!kcdbcjb.zd

Попробуйте онлайн или запустите набор тестов

Чередует пит lowerи upperфункции, которые r...0или r...1. Это, вероятно, повлияет на символы Юникода, ожидая изменения в пояснениях ОП.

Я чувствую, что что-то должно быть пригодным для игры в гольф. В частности, XOR, чтобы изменить переключатель, который upper/ lowerдолжен использоваться.


Если я правильно истолковал вопрос, ввод A\nBдолжен печататься A\nb.
Деннис

Это не правильная интерпретация вопроса. A new word is formed when there is a nonzero amount of whitespace after a non-whitespace character.Выход для A\nBесть A\NB. Но похоже, что ваш ответ CJAM понял правильно.
Арктур

@ Денис спасибо, надо исправить сейчас.
FryAmTheEggman

2

Perl, 87 байт

После использования регулярных выражений и mapненадолго, я не смог придумать элегантное решение, так вот результат:

@a=split(" ",lc(<>));while($i<=$#a/2){@a[$i*2]=uc(@a[$i*2]);$i++;}print(join(" ", @a));

1
Хорошее решение. Можно ли заменить <STDIN> на <>, чтобы сохранить несколько байтов? Кроме того, можно ли пропустить $ i = 0?
Стив

Спасибо @steve; и да, что наряду с незначительным исправлением (проверено с другим входом, и у него была небольшая ошибка), теперь включены. Спасибо за идеи! Я очень привык к подробному, явному кодированию: P
Codefun64

1
@ Codefun64 Добро пожаловать в PPCG! Вы можете пропустить большинство скобок, чтобы сохранить больше байтов, так как они необязательны в Perl, например. lc(<>), может быть lc<>и использование модификатора оператора для вашего whileпозволяет также пропустить скобки, например. print$i++while$i<10против while($i<10){print$i++}. Есть полезная страница, которая очень мне помогла. Советы по игре в гольф в Perl
Dom Hastings,


2

JavaScript ES6, 74 71 байт

.toUpperCase()и .toLowerCase()убить счетчик байтов (добавляет 32 байта 0.o). Большинство обходных путей заканчивается большим количеством байтов

s=>s.replace(/(\S+\s*)(\S*)/g,(_,a,b)=>a.toUpperCase()+b.toLowerCase())

1

Groovy, 108 125 120

System.in.eachLine{def b;it.split(" ").any{if(!it.empty)b=!b;print "${b?it.toUpperCase():it.toLowerCase()} "};println()}

Не так чисто, как я надеялся, и это будет темой моих ответов на Groovy.

  • +17, чтобы исправить поведение с ведущими пробелами
  • -5 для удаления завершающего символа новой строки и переключения с .isEmpty () на .empty

 

$ cat tests.txt 
Nineteen Eighty-Four (1984)

Programming Puzzles & Code Golf   - 
Hooray for Code Golf Stack Exchange!

     2be or not 2be, that is the ~~~QuEsTiOn~~~

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
$ groovy PRINTlikeTHIS.groovy < tests.txt 
NINETEEN eighty-four (1984) 

PROGRAMMING puzzles & code GOLF   - 
HOORAY for CODE golf STACK exchange! 

     2BE or NOT 2be, THAT is THE ~~~question~~~ 

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. 

1

Луа, 96 байт

i=0 print(io.read'*l':gsub('%S+',function(x)i=i+1 return i%2==1 and x:upper() or x:lower()end))

Это распечатывает число после вывода.
Требушетт

1

Python 3, 103 95 байт

print(' '.join(b.lower()if a%2 else b.upper()for a,b in enumerate(input().strip().split(' '))))

Вы можете заменить условное [b.upper(),b.lower()][a%2]на 4 байта (если я правильно посчитал на мобильном телефоне).
PurkkaKoodari

1

STATA, 252 байта

insheet using a.b
g b=word(v,1)
gl c=0
forv x=1/`=_N'{
loc d=1
while b[`x']!=""{
if !$c replace v=subinword(v,b,upper(b),1) if `x'==_n
if $c replace v=subinword(v,b,lower(b),1) if `x'==_n
loc ++d
replace b=word(v,`d') if `x'==_n
gl c=1-$c
}
di v[`x']
}

Ожидается ввод в виде CSV-файла (один столбец) с именем ab

Объяснение:

Чтение данных в (имя переменной по умолчанию v1, сокращается до v). Создайте новую переменную b, равную первому слову (токен, разделенный пробелом) переменной v для каждой строки. Для каждой строки, пока следующее слово не пустое (встречается только в том случае, если в этой строке больше нет символов), замените слово в v на версию этого слова в текущей строке в верхнем или нижнем регистре, в зависимости от того, сколько (mod 2 ) слова уже найдены. Затем получите следующее слово и повторите. Распечатайте всю строку, когда закончите с этим.


1

Delphi, 290 байт

program P;uses SysUtils;var s:string;i:word;w:byte;f:boolean;begin repeat readln(s);w:=0;f:=false; for I:=1 to length(s) do begin if s[i]>' ' then begin if w=0 then f:=not f;w:=1;if f then s[i]:=uppercase(s[i])[1] else s[i]:=lowercase(s[i])[1] end else w:=0 end;writeln(s)until false;end.

Не очень хороший язык для игры в гольф ...


Добро пожаловать в Программирование Пазлов и Код Гольф!
Деннис

1

Луа, 88 байт

a=io.read():gsub("%g+",function(s)m=not m return m and s:upper()or s:lower()end)print(a)

1

CJam, 28 байт

q{C' >Sc'!<*X^:XCelCeu?:S}fC

В настоящее время я рассматриваю первые 33 пробела ASCII / Unicode (и только те). Я жду разъяснений, чтобы узнать, действительно ли это или нет.

Попробуйте онлайн в интерпретаторе CJam .


1

Pyth, 17 22 байта

FGcwd=+YrG=Z%+1Z2;jdY

Попробуй здесь


Ведущий космический кейс проваливается, но все равно приятно.
tjbtech

Это также не обрабатывает ввод более чем на одной строке и печатает завершающий пробел.
FryAmTheEggman

Я сделаю рефакторинг, когда смогу, спасибо: D
хлопай

0

C #, 104 100 99 байт

static void Main(){string.Join(" ","".Split(' ').Select((o,i)=>i++%2==0?o.ToUpper():o.ToLower()));}

Это 79 байт с

string.Join(" ","".Split(' ').Select((o,i)=>i++%2==0?o.ToUpper():o.ToLower()));
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.