Construa um "Olá, mundo!"

31

Seu trabalho é bastante simples, escreva um programa que imprima e Hello, world!, quando torcido, cria um programa que imprime Twister!.

Como as cordas são torcidas

O algoritmo de torção é muito simples. Cada coluna é deslocada para baixo pelo seu índice (col 0 desce 0, col 1 move 1, ...). A mudança de coluna envolve o topo. É mais ou menos assim:

a
ba
cba
----
 cba
  cb
   c

Com tudo sob a linha de embalagem para o topo. Exemplo real:

Original:
\\\\\\\\\\\\
............
............
............

Twisted:
\...\...\...
.\...\...\..
..\...\...\.
...\...\...\

(Mais exemplos e trava-línguas no seu idioma favorito estão aqui )

Pontuação

Seu programa deve ser um retângulo acolchoado. Isso é código-golfe, e a menor contagem de bytes ganha!

Regras

  • Seu primeiro programa deve ser impresso Hello, world!. Apenas uma nova linha à direita é permitida.
  • Seus primeiro e segundo programas devem estar no mesmo idioma.
  • Seu segundo programa deve ser impresso Twister!. Apenas uma nova linha à direita é permitida.
  • Seu programa deve ter pelo menos 2 linhas e 2 colunas.
J Atkin
fonte
3
Na página de código de Jelly , o caractere que corresponde a (e, para todos os efeitos, atua como) o avanço de linha tem o ponto de código 127 (ASCII DEL). O caractere com o ponto de código 10 (avanço de linha ASCII) possui o glifo ½e obtém a raiz quadrada de um número. Qual dos dois deve ser considerado a nova linha para este desafio?
Dennis
Droga, eu era o único que esperava "Twisted Olá Mundo" estava usando "torcida" no sentido perverso de modo estaríamos a saída algo como "Goodbye Cruel World" em vez ..
DasBeasto
@ Dennis Suponho que o melhor para usar neste caso seria a nova linha de geléia.
precisa
@ Atkin OK, obrigado por esclarecer. Atualizei minha resposta de acordo.
Dennis

Respostas:

10

Geléia , 33 31 29 bytes

Original

“ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ
“ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ

Experimente online.

Torcido

“ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ
“ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ

Experimente online!

Como funciona

Em cada programa, cada linha define um link. O último é o link principal e é executado quando o programa é iniciado. Como não há referências ao primeiro link, ele é simplesmente ignorado.

Nos dois programas, “ɗ⁻%OḶ$“¡¦ḟṠ»gera a lista ['Hello, world!', 'Twister!'], usando a compactação estática de dicionário de Jelly .

A única diferença entre o código original e distorcido é o último caractere do link principal. seleciona a primeira sequência da lista e a última.

Dennis
fonte
2
Parece que está gritando "Holy Sh * t"
fase
42

Python 2, 59 bytes

print "  Hello, world!"[ 2::]
#rint "T w i s t e r !"[ ::2]

Torcido:

print "T weils,twerrd!"[ ::2]
#rint "  H l o   o l !"[ 2::]

Basicamente, coloca os Twister!dados nos índices ímpares da string e muda da remoção dos dois primeiros caracteres (preenchimento) para a remoção de todos os outros caracteres.

PurkkaKoodari
fonte
Isto é muito mais esperto do que a minha abordagem
wnnmaw
Isso é meio ridículo, 40 votos positivos?
precisa
@JAtkin Notei que algumas soluções Python tendem a receber grandes quantidades delas. Não que eu esteja reclamando: ~)
PurkkaKoodari
print " Hello, world!" [2::]
Maneira mais fria
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Funciona, mas vou manter como está por enquanto.
PurkkaKoodari
17

Fissão , 215 162 56 53 50 bytes

Aqui está um começo:

D1
\\
""
TH
we
il
sl
to
e,
r 
!w
"o
1r
;l
1d
;!
 "

Experimente online!

Quando torcido:

D"
\1
"\
T"
wH
ie
sl
tl
eo
r,
! 
"w
1o
;r
1l
;d
 !

Experimente online!

Explicação

O Hello, world!código é bastante simples:

  • D gera um único átomo, descendo.
  • Os dois \(espelhos) desviam para a segunda coluna.
  • "Hello, world!" imprime a sequência necessária.
  • 1é um portal. Ele teleporta o átomo para o próximo 1em ordem de leitura, mantendo sua direção (que é a próxima a r).
  • O átomo ainda se move para baixo, no ;qual destrói o átomo e finaliza o programa.

O fluxo de controle para o Twister!código é um pouco mais ... distorcido ...

  • Mais uma vez, Dgera o átomo.
  • \desvia para a direita, para o 1.
  • Agora o portal envia o átomo para o próximo 1. O átomo atinge o oque apenas muda sua massa, mas podemos ignorá-lo. O código é contornado para que o átomo atinja o mesmo 1novamente, pulando duas linhas. Mais uma vez, podemos ignorar o l, o átomo envolve e atinge o 1novamente. Agora não há mais nada 1no código, então o átomo volta para 1o topo.
  • Depois de envolver as bordas mais uma vez, o átomo é desviado novamente \, agora caindo novamente.
  • "Twister!" imprime o código necessário.
  • 1teleporta o átomo mais uma vez, após o primeiro ;, mas há outro ;aguardando o término do programa.
Martin Ender
fonte
Uau, muito perto agora! :) Eu tenho certeza que há uma maneira de ser mais curto ...
FryAmTheEggman
Por que vocês gostam de fissão?
precisa
@JAtkin Por que não? :)
Martin Ender
@ MartinBüttner Eu estava pensando especificamente por que esse desafio?
precisa
1
As linguagens 2D do @JAtkin pareciam adequadas, e a Fissão parecia particularmente simples porque você pode escolher um ou mais pontos de entrada arbitrários no programa.
Martin Ender
15

Fissão , 35 bytes

Abordagem de fissão nº 3 (nº 4 contando a que editei no meu primeiro post).

R"Hello, " \"tri"
T;L"!dlrow"/"es!w

Experimente online!

R;H"ldor w /"er!"
T"Le!ll,o""\"tsiw

Experimente online!

Explicação

Esta é atualmente a mais simples das soluções de fissão. Nos dois programas, existem dois pontos de entrada: Rcria um átomo à direita e Lum átomo à esquerda. Em ambos os casos, o ;destrói um deles imediatamente.

Agora no Hello, world!programa, o átomo primeiro imprime metade da cadeia com "Hello, ", então \e /(que são espelhos) desviam o átomo para a segunda linha que vai para a esquerda. "world!"(leia na direção do átomo em movimento) imprime o restante da string. Lagora não funciona e ;destrói esse átomo, encerrando o programa.

O Twister!programa é essencialmente o mesmo, mas girado em 180 graus. Desta vez, o Látomo sobrevive e começa a imprimir com "Twist". O \e /novamente desvia-o para a outra linha, agora indo para a direita. "er!imprime o restante da string, Rnão funciona e ;finaliza o programa.

Martin Ender
fonte
Surpreendente! Eu acho que isso é o mais pequeno possível, a quantidade de reutilização é impressionante.
FryAmTheEggman
4

Japt, 67 61 57 bytes

Economizou 6 bytes graças a @JAtkin, 4 bytes graças a @Ian

"Tzwzizsztzezzzzzzrzzzz!"rz;
"Hzezlzlzoz,z zwzorlzdz!"rz;

Torcido:

"Hzezlzlzoz,z zwzorlzdz!"rz;
"Tzwzizsztzezzzzzzrzzzz!"rz;

Teste on-line: Original , Torcido

Como funciona

"Tzwzizsztzezzzzzzrzzzz!"rz;  // Take this string and remove all "z"s.
"Hzezlzlzoz,z zwzorlzdz!"rz;  // Take this string and remove all "z"s.
                              // Implicit: output *last* expression
ETHproductions
fonte
Se isso funcionar como eu acho que funciona, você poderá remover o espaço à direita depois Twister!substituindo os espaços por ..
perfil completo de J Atkin
@JAtkin Na verdade, não funciona assim, mas posso salvar um monte de bytes dessa maneira. Obrigado!
ETHproductions
"T.w.i.s.t.e.r.!. . . . . "k".(newline)"H.e.l.l.o.,. .w.o.r.l.d.!"k".
perfil completo de J Atkin
Poderia ser muito mais fácil de ler com um personagem de enchimento diferente ...
mbomb007
4
@ mbomb007 Desde quando é "fácil de ler" uma conquista? : D
yo '
4

Python, 398 414 380 456 bytes *

Consegui atualizar para estar em conformidade com as regras, mas ainda hesito em considerá-lo competitivo. Como as linhas comentadas são necessárias para sua execução, eu as incluí na contagem de bytes

Esta solução não segue as regras, pois imprimirá mensagens de erro além da saída permitida.

Eu só queria ver se isso poderia ser feito em python. Pode, mas é não muito.

print'Hello, world!'
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     

Quando torcido se torna

print'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Hwister!'
#rint'Teister!'
#rint'Twlster!'
#rint'Twilter!'
#rint'Twisoer!'
#rint'Twist,r!'
#rint'Twiste !'
#rint'Twisterw'
#rint'Twister!o
#rint'Twister!'r
#rint'Twister!' l
#rint'Twister!'  d
#rint'Twister!'   !
wnnmaw
fonte
Eu acho que você pode remover o espaço em cada linha e remover a última linha completamente.
ETHproductions
Eu não pensei em fazer isso, pois era contra as regras do desafio inicial de torcer, mas obrigado!
wnnmaw
Você esqueceu de atualizar o código;)
ETHproductions
Achei que não seria realmente importa, mas eu fiz isso para uma boa medida
wnnmaw
1
Eu acho que você entendeu errado. É necessário que o código seja um retângulo acolchoado, mas você pode remover o espaço de rint 'todas as linhas.
ETHproductions
2

C (gcc) , 87 bytes

Sem torção

main(){puts(1?"Hello, world!":"Twister!");}
mai (){puts(0?"Hello, world!":"Twister!");}

Experimente online!

Torcido

mai (){puts(1?"Hello, world!":"Twister!");}
main(){puts(0?"Hello, world!":"Twister!");}

Experimente online!

gastropner
fonte
1

BrainFuck, 467 367 285 bytes

Sem torção

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

Experimente online!

Torcido

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

Experimente online!

orthoplex
fonte
1
Você pode salvar bytes usando o atual mais curto conhecido "Olá, mundo!" programa
Jo King
@JoKing Obrigado pela sugestão! Alguma idéia de como encontrar um "Twister!" Menor programa também?
orthoplex
1
Usando o bf-crunch , consigo um "Twister!" De 56 bytes. programa
Jo King