IMPRIMIR assim


17

Escreva um programa que leve uma entrada para STDIN e coloque todas as letras minúsculas (incluindo letras acentuadas) na 2k-1quinta palavra em maiúsculas e todas as letras maiúsculas (também incluindo letras acentuadas) na 2kquinta palavra em letras minúsculas ( ké um número inteiro positivo). O programa não deve afetar outros caracteres em nenhuma palavra. Por exemplo, se a string for Ook! O0k!, então a saída deve ser OOK! o0k!.

Uma nova palavra é formada quando existe uma quantidade diferente de zero de espaço em branco após um caractere que não é de espaço em branco. Os espaços em branco no início de uma entrada devem ser ignorados. Se uma palavra não contiver caracteres alterados, o programa ainda deve considerá-la como uma palavra e continuar.

Entradas de amostra ( entradas diferentes são separadas por uma nova linha em branco)

Nineteen Eighty-Four (1984)

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

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

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

Saídas de amostra

NINETEEN eighty-four (1984)

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

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

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

Isso é código de golfe, pessoal. Aplicam-se as regras padrão de CG. O programa mais curto em bytes vence.


Tenho certeza de que cobri todas as brechas relacionadas a caracteres em branco e sem letra, mas se eu perdi alguma, me diga.


Graças a @Optimizer por criar o seguinte snippet de código. Para usar, clique em "Mostrar trecho de código", role para a parte inferior e clique em "► Executar trecho de código".


5
E os personagens acentuados? Temos que ignorá-los? As funções são permitidas?
Downgoat 03/10/2015

Eu não tinha caracteres de destaque em mente quando escrevi a pergunta, mas acho que eles contariam. Funções são permitidas.
quer

Quais caracteres de espaço em branco devemos ter em conta? Podemos assumir que caracteres que não sejam espaços em branco serão imprimíveis?
Dennis

Todos os caracteres de espaço em branco e sim.
Arcturus

Respostas:


4

Script Vim, 22 21 bytes

nm Q vEUWvEuWQ|norm Q

Explicação:

O primeiro comando é mapeado Qpara:

vEUtornar a palavra em maiúscula
Wir para a próxima palavra
vEutornar a palavra em maiúscula
Wir para a próxima palavra
Q repetir o mapeamento recursivo

e |norm Q executa o mapeamento

Uso do programa

É assim que você faz com que o Vim leia 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

Isso abrirá o Vim exibindo isso:

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

A pontuação inclui +2 para -rzpassado para o GNU sed.

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

Saída de teste

$ 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 bytes

Código de 25 bytes + linha de comando de 1 byte

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

Obrigado a ThisSuitIsBlackNot por corrigir alguns erros!

Uso:

perl -p entry.pl

3

Pyth, 23

jdmjbmrk=xZ!!kcdbcjb.zd

Experimente online ou execute o conjunto de testes

Alterna entre pyth lowere upperfunções, que são r...0ou r...1. Isso provavelmente afetará os caracteres unicode, aguardando a alteração do esclarecimento do OP.

Sinto que algo deve ser jogável. Particularmente o XOR para mudar a chave na qual upper/ lowerdeve ser usado.


Se eu interpretei a pergunta corretamente, a entrada A\nBdeve ser impressa A\nb.
Dennis

Essa não é uma interpretação correta da questão. A new word is formed when there is a nonzero amount of whitespace after a non-whitespace character.A saída para A\nBé A\NB. Mas parece que sua resposta CJAM acertou.
Arcturus

@ Dennis obrigado, deve ser corrigido agora.
FryAmTheEggman 04/10/2015

2

Perl, 87 bytes

Depois de brincar com as duas expressões regulares e mappor um tempo, não consegui encontrar uma solução elegante, então esse é o resultado:

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

11
Ótima solução. <STDIN> poderia ser substituído por <> para salvar alguns bytes? Além disso, o $ i = 0 poderia ser ignorado?
Steve #

@ Steve Obrigado; e sim, que juntamente com uma correção menor (testada com uma entrada diferente e com um pequeno erro) agora estão incluídas. Obrigado pelas idéias! Estou muito utilizado para detalhado, explícita codificação: P
Codefun64

11
@ Codefun64 Bem-vindo ao PPCG! Você pode pular a maioria dos parênteses para salvar mais bytes, pois eles são opcionais no Perl, por exemplo. lc(<>), poderia ser lc<>e usar um modificador de instrução para o seu whilepermite que você pule os parênteses também, por exemplo. print$i++while$i<10vs. while($i<10){print$i++}. Há uma página útil, que me ajudou muito Dica para Golfe em Perl
Dom Hastings

2

Ruby, 56 bytes

$><<gets.gsub(/\S+/){($.+=1)%2>0?$&.downcase: $&.upcase}

2

JavaScript ES6, 74 71 bytes

.toUpperCase()e .toLowerCase()abate absolutamente a contagem de bytes (adiciona 32 bytes 0.o). A maioria das soluções alternativas acaba com mais bytes

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()}

Não é tão limpo quanto eu esperava que fosse, o que parece ser um tema com minhas respostas do Groovy.

  • +17 para corrigir o comportamento com espaços em branco à esquerda
  • -5 para remover a nova linha à direita e alternar de .isEmpty () para .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

Lua, 96 bytes

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

Isso imprime um número após a saída.
precisa

1

Python 3, 103 95 bytes

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

Você pode substituir o condicional por [b.upper(),b.lower()][a%2]para salvar 4 bytes (supondo que eu contei corretamente no celular).
PurkkaKoodari

1

STATA, 252 bytes

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']
}

Espera entrada como um arquivo csv (uma coluna) chamado ab

Explicação:

Ler dados em (o nome da variável padrão é v1, abreviado para v). Faça uma nova variável b igual à primeira palavra (token separado por espaço) de v para cada linha. Para cada linha, enquanto a próxima palavra não estiver vazia (ocorre apenas se não houver mais caracteres nessa linha), substitua a palavra em v pela versão em maiúsculas ou minúsculas dessa palavra na linha atual, dependendo de quantas (mod 2 ) palavras já foram encontradas. Então pegue a próxima palavra e repita. Imprima a linha inteira quando terminar.


1

Delphi, 290 bytes

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.

Não é realmente uma boa linguagem para jogar golfe ...


Bem-vindo à programação de quebra-cabeças e código de golfe!
Dennis

1

Lua, 88 bytes

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

1

CJam, 28 bytes

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

Atualmente, estou considerando os primeiros 33 caracteres ASCII / Unicode (e somente esses) em branco. Estou aguardando esclarecimentos para saber se isso é válido ou não.

Experimente online no intérprete CJam .



0

C #, 104 100 99 bytes

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

São 79 bytes com

string.Join(" ","".Split(' ').Select((o,i)=>i++%2==0?o.ToUpper():o.ToLower()));
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.