Costruisci un contorto "Ciao mondo!"


31

Il tuo lavoro è abbastanza semplice, scrivi un programma che stampa Hello, world!, che quando attorcigliato crea un programma che stampa Twister!.

Come le corde sono contorte

L'algoritmo di torsione è molto semplice. Ogni colonna viene spostata verso il basso dal suo indice (col 0 si sposta in basso 0, col 1 si sposta 1, ...). Lo spostamento della colonna si sposta verso l'alto. Sembra un po 'così:

a
ba
cba
----
 cba
  cb
   c

Con tutto sotto la linea che si avvolge verso l'alto. Vero esempio:

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

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

(Altri esempi e un twister nella tua lingua preferita sono qui )

punteggio

Il tuo programma deve essere un rettangolo imbottito. Questo è code-golf quindi vince il conteggio di byte più basso!

Regole

  • Il tuo primo programma deve essere stampato Hello, world!. È consentita una sola riga finale.
  • Il tuo primo e secondo programma devono essere nella stessa lingua.
  • Il tuo secondo programma deve essere stampato Twister!. È consentita una sola riga finale.
  • Il tuo programma deve avere almeno 2 righe e 2 colonne.

3
Nella codepage di Jelly , il carattere che corrisponde (e, a tutti gli effetti, si comporta come) al linefeed ha il punto di codice 127 (ASCII DEL). Il carattere con codice punto 10 (avanzamento di riga ASCII) ha il glifo ½e prende la radice quadrata di un numero. Quale dei due dovrebbe essere considerato la newline di questa sfida?
Dennis,

Accidenti, sono stato l'unico a sperare che "Twisted Hello World" usasse "twisted" in senso perverso, quindi invece avremmo prodotto qualcosa come "Goodbye Cruel World" ..
DasBeasto,

@Dennis Immagino che la migliore da usare in questo caso sia la gelatina newline.
J Atkin,

@JAtkin OK, grazie per il chiarimento. Ho aggiornato la mia risposta di conseguenza.
Dennis,

Risposte:


10

Gelatina , 33 31 29 byte

Originale

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

Provalo online.

contorto

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

Provalo online!

Come funziona

In ogni programma, ogni riga definisce un collegamento. L'ultimo è il collegamento principale e viene eseguito all'avvio del programma. Poiché non ci sono riferimenti al primo collegamento, viene semplicemente ignorato.

Per entrambi i programmi, “ɗ⁻%OḶ$“¡¦ḟṠ»restituisce l'elenco ['Hello, world!', 'Twister!'], usando la compressione del dizionario statico di Jelly .

L'unica differenza tra il codice originale e quello contorto è l'ultimo carattere del collegamento principale. seleziona la prima stringa dell'elenco e seleziona l'ultima.


2
Sembra che stia urlando "Holy Sh * t"
fase

42

Python 2, 59 byte

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

twisted:

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

Fondamentalmente, inserisce i Twister!dati negli indici dispari della stringa e quindi passa dalla rimozione dei primi due caratteri (riempimento) alla rimozione di ogni altro carattere.


Questo è molto più intelligente del mio approccio
wnnmaw,

Questo è un po 'ridicolo, 40 voti positivi?
J Atkin,

@JAtkin Ho notato che alcune soluzioni Python tendono ad ottenerne enormi quantità. Non che mi lamenti: ~)
PurkkaKoodari,

Modo più interessante:print " Hello, world!" [2::]
Erik the Outgolfer,

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Funziona, ma lo terrò come è per ora.
PurkkaKoodari,

17

Fissione , 215 162 56 53 50 byte

Ecco un inizio:

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

Provalo online!

Quando attorcigliato:

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

Provalo online!

Spiegazione

Il Hello, world!codice è abbastanza semplice:

  • D genera un singolo atomo, andando verso il basso.
  • I due \(specchi) lo deviano sulla seconda colonna.
  • "Hello, world!" stampa la stringa richiesta.
  • 1è un portale. Teletrasporta l'atomo al successivo 1in ordine di lettura, mantenendo la sua direzione (quella accanto a r).
  • L'atomo si sposta ancora verso il basso, nel ;quale distrugge l'atomo e termina il programma.

Il flusso di controllo per il Twister!codice è un po 'più ... contorto ...

  • Ancora una volta, Dgenera l'atomo.
  • \lo devia a destra, in 1.
  • Ora il portale invia l'atomo al successivo 1. L'atomo colpisce il oquale cambia solo la sua massa, ma possiamo ignorarlo. Il codice si avvolge in modo che l'atomo colpisca di 1nuovo lo stesso , saltando giù di due righe. Ancora una volta, possiamo ignorare il l, l'atomo si avvolge e colpisce di 1nuovo. Ora non c'è più nulla 1nel codice, quindi l'atomo salta indietro fino 1alla cima.
  • Dopo aver avvolto i bordi ancora una volta, l'atomo viene nuovamente deviato da \, ora scende di nuovo.
  • "Twister!" stampa il codice richiesto.
  • 1teletrasporta l'atomo ancora una volta, oltre il primo ;, ma ce n'è un altro in ;attesa che termini il programma.

Wow, molto vicino ora! :) Sono sicuro che c'è un modo per essere più brevi ...
FryAmTheEggman,

Perché a voi ragazzi piace la fissione?
J Atkin,

@JAtkin Perché non dovremmo? :)
Martin Ender,

@ MartinBüttner Stavo pensando specificamente perché per questa sfida?
J Atkin,

1
@JAtkin Le lingue 2D sembravano adatte e Fission sembrava particolarmente semplice perché puoi scegliere uno o più punti di ingresso arbitrari nel programma.
Martin Ender,

15

Fissione , 35 byte

Approccio Fissione n. 3 (n. 4 contando quello che ho modificato dal mio primo post).

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

Provalo online!

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

Provalo online!

Spiegazione

Questa è in realtà la soluzione di Fission più semplice di sempre. In entrambi i programmi ci sono due punti di ingresso: Rcrea un atomo a destra e Lun atomo a sinistra. In entrambi i casi, il; distrugge immediatamente.

Ora nel Hello, world!programma, l'atomo stampa prima metà della stringa con "Hello, ", quindi \e /(che sono specchi) deviano l'atomo sulla seconda riga andando a sinistra. "world!"(leggi nella direzione dell'atomo in movimento) stampa il resto della corda. Lè ora una no-op e; distrugge anche questo atomo, terminando il programma.

Il Twister!programma è essenzialmente lo stesso ma ruotato di 180 gradi. Questa volta, l' Latomo sopravvive e inizia a stampare con "Twist". Il \e di /nuovo lo deviano sull'altra linea, ora andando a destra. "er!stampa il resto della stringa, Rè un no-op e ;termina il programma.


Stupefacente! Penso che questo sia il più piccolo possibile, la quantità di riutilizzo è impressionante.
FryAmTheEggman,


4

Japt, 67 61 57 byte

6 byte salvati grazie a @JAtkin, 4 byte grazie a @Ian

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

twisted:

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

Provalo online: originale , contorto

Come funziona

"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

Se funziona come penso, puoi rimuovere lo spazio finale dopo Twister!sostituendo gli spazi con ..
J Atkin,

@JAtkin In realtà non funziona così, ma posso salvare un sacco di byte in quel modo. Grazie!
ETHproductions

"T.w.i.s.t.e.r.!. . . . . "k".(newline)"H.e.l.l.o.,. .w.o.r.l.d.!"k".
J Atkin,

Potrebbe essere molto più facile da leggere con un diverso carattere di riempimento ...
mbomb007,

4
@ mbomb007 Da quando è "facile da leggere" un risultato? : D
yo'

4

Python, 398 414 380 456 byte *

Gestito per l'aggiornamento in modo che sia conforme alle regole, ma esito ancora a definirlo competitivo. Poiché le linee commentate sono necessarie per l'esecuzione, le ho incluse nel conteggio dei byte

Questa soluzione non segue le regole, in quanto stampa messaggi di errore oltre all'output consentito.

Volevo solo vedere se questo poteva essere fatto in Python. E 'possibile, ma è non è abbastanza.

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 si attorciglia diventa

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!'   !

Penso che potresti rimuovere lo spazio in ogni riga, quindi rimuovere del tutto l'ultima riga.
ETHproductions

Non pensavo di farlo poiché era contro le regole della sfida iniziale, ma grazie!
wnnmaw,

Hai dimenticato di aggiornare il codice;)
ETHproductions

Ho pensato che non avrebbe avuto importanza, ma l'ho fatto per buona misura
wnnmaw,

1
Penso che tu abbia frainteso. Il codice deve essere un rettangolo imbottito, ma è possibile rimuovere lo spazio rint 'su ogni riga.
ETHproductions


1

Brainfuck, 467 367 285 byte

torti

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

Provalo online!

contorto

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

Provalo online!


1
È possibile salvare i byte utilizzando l'attuale più breve noto "Ciao, mondo!" programma
Jo King

@JoKing Grazie per il suggerimento! Qualche idea su come trovare un "Twister!" Più piccolo programma pure?
orthoplex

1
Usando bf-crunch posso ottenere un "Twister!" A 56 byte programma
Jo King
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.