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.