Друк, як це


17

Напишіть програму, яка приймає вхід до STDIN і зробить всі малі літери (включаючи букви з наголосом) у 2k-1верхньому великому слові та всі великі літери (також включаючи букви з наголосом) у цьому 2kслові з малих літер ( 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~~~

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

Це код гольфу, хлопців. Діють стандартні правила CG. Виграє найкоротша програма в байтах.


Я майже впевнений, що я висвітлив усі лазівки щодо пробілів та символів, які не букви, але якщо я пропустив будь-яку, будь ласка, скажіть мені.


Дякуємо @Optimizer за створення наступного фрагмента коду. Для використання натисніть «Показати фрагмент коду», прокрутіть донизу та натисніть «► Запустити фрагмент коду».


5
Що з наголошеними символами? Чи повинні ми їх ігнорувати? Чи дозволені функції?
Пуховик

Я не мав на увазі персонажів акценте, коли писав питання, але, мабуть, вони порахували б. Функції дозволені.
Арктур

Які символи пробілу ми маємо враховувати? Чи можна припустити, що символи, що не містять пробілів, будуть друкованими?
Денніс

Усі символи пробілу, і так.
Арктур

Відповіді:


4

Сценарій Vim, 22 21 байт

nm Q vEUWvEuWQ|norm Q

Пояснення:

Перша команда відображає Q:

vEUзмусити верхнє регістр слова
Wперейти до наступного слова
vEuзробити слово рядковим
Wперейти до наступного слова
Qповторити рекурсивне відображення

і |norm Qвиконує відображення

Використання програми

Ось як ви змусили Vim читати з stdin:

$ 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

Спробуйте в Інтернеті або запустіть тестовий набір

Замінники pyth lowerта upperфункцій, які є r...0абоr...1 . Це, ймовірно, вплине на символи Unicode, очікуючи зміни роз'яснення OP.

Я відчуваю, що щось повинно бути пограбельним. Особливо 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\nBIS 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++}. Є корисна сторінка, яка мені дуже допомогла Порада для гольфу в Перлі
Дом Гастінгс


2

JavaScript ES6, 74 71 байт

.toUpperCase()і .toLowerCase()абсолютно забийте кількість байтів (додає 32 байти 0.o). Однак більшість робочих обертів закінчується більшою кількістю байтів

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

1

Гроовий, 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))

Це виводить число після виводу.
Trebuchette

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 на верхню або нижню регістри цього слова в поточному рядку, залежно від кількості (мод 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

CJam, 28 байт

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

В даний час я розглядаю перші 33 пробіли ASCII / Unicode (і лише ті) пробілів. Я чекаю роз'яснень, щоб дізнатися, чи це дійсно чи ні.

Спробуйте його в Інтернеті в інтерпретаторі CJam .



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.