Demolisci una stringa!


12

Sfida

Dato un input di stringa, genera la versione demolita di esso.

Il processo

P
r      Pr       r
o       o       o
g       g       g
r       r       r      rogr         r
a  ->   a  ->   a  ->     a  ->     a  ->           ->           ->           ->           ->  
m       m       m         m         m
m       m       m         m         m         mmar         m
i       i       i         i         i         i            i           mi           m
n       n       n         n        gn        gn           gn           gn           gni         mgni
g       g      Pg        Pg      roPg      roPg         roPgmar      roPgmar      roPgmar      roPgmar
  1. Posiziona la corda in verticale.
  2. Selezionare un intero casuale compreso tra 1e (height of the column of characters) - 1ed una direzione casuale (destra o sinistra).
  3. Ruota quel numero di caratteri in quella direzione (se quegli spazi non sono occupati vai al passaggio 4; in caso contrario, torna al passaggio 2).
  4. Lascia che quei personaggi cadano a causa della gravità.
  5. Ripeti fino a quando l'altezza della colonna di caratteri è al massimo 1maggiore dell'altezza delle colonne accanto ad essa (ovvero diventa impossibile demolire ulteriormente ("passaggi 2-4") la colonna).
  6. Se c'è un'altra colonna di personaggi che è più di un 1personaggio più alta di una o più delle sue colonne circostanti (cioè demolibile), demolisci ripetutamente quella colonna fino a quando non è più demolibile. Se ci sono più colonne capaci di demolire, demolisci completamente la colonna più alta (se ci sono più colonne più alte, demolisci completamente quella più a sinistra).
  7. Ripetere l'operazione fino a quando tutte le colonne non saranno più demolibili.

Se ci sono caratteri spaziali nell'input, demoliscili prima, tutti in una volta.

C
o

d      
e  ->     oC  ->         ->  ...
       de         
G        G          G
o        o          o
l        l          l
f        f        defoC

Regole

  • Sono vietate le scappatoie standard.
  • Sono consentiti il ​​trascinamento e le nuove linee principali.
  • Il programma può stampare o restituire una stringa / equivalente.
  • L'output deve essere non deterministico (a meno che l'input non sia demolibile).

Si tratta di , quindi vincono gli invii con il byte più piccolo nelle loro lingue!



@KeyuGan Penso che la sfida sarebbe abbastanza banale se le persone dovessero selezionare un numero fisso di personaggi e alternare sinistra / destra.
JungHwan Min

4
Possiamo ancora dire che 4 è casuale e restituito da un tiro di dadi equo
mio pronome è monicareinstate il

@someone 4renderebbe deterministico l'output, cioè non "casuale". Modificato le regole per renderlo esplicito.
JungHwan Min

@someone ti riferisci a 4 a causa di XKCD ?
Giacomo Garabello,

Risposte:


5

Python 2 , 622 595 573 552 542 534 527 520 515 byte

from random import*
s=input()
r=range
R=choice
Z=len
L=h=Z(s)
a=[[]for _ in'  '*-~h]
S=s[::-1].split()
X=-1,1
for w in S[1:]:
 for i in r(Z(w)):a[h-~i*R(X)]+=w[i]
a[h]+=S[0]
while L:
 H=[map(Z,a[c-1:c+2])+[c]for c in r(1,h-~h)];D=L=[(min(n,m)-C,i)for n,C,m,i in H if~-C>min(n,m)]
 while D:
	_,c=min(L);n,C,m=map(Z,a[c-1:c+2]);D=X[n+2>C:1+(C-1>m)]
	if D:
	 d=R(D);l=R(r(1,C-[0,m,n][d]));w,a[c]=a[c][-l:],a[c][:-l]
	 for i in r(l):a[c-~i*d]+=w[i]
for l in zip(*[l+[' ']*max(H)[1]for l in a if l])[::-1]:print`l`[2::5]

Provalo online!



@EriktheOutgolfer Thanks :)
TFeld,


h+R(X)*-~ipuò essere h-~i*R(X).
Jonathan Frech,

L=[...];D=Lpuò essere D=L=[...].
Jonathan Frech,
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.