Isso é muito mais avançado do que Como aleatoriamente letras em uma palavra e Transposição de Cambridge, devido à regra sobre quais letras podem ser trocadas por quais. Um regex simples não será suficiente aqui.
É sabido que um texto ainda pode ser lido enquanto as entranhas de suas palavras foram embaralhadas, desde que a primeira e a última letras e os contornos gerais permaneçam constantes. Dado um texto imprimível Ascii + Newline, embaralhe cada palavra de acordo com estas regras:
O embaralhamento deve ser (pseudo) aleatório.
Uma palavra é uma sequência de caracteres latinos, de A a Z.
Somente as letras iniciais serão sempre em maiúsculas.
A primeira e a última letras devem permanecer intocadas.
Ao embaralhar, apenas as letras de um dos seguintes grupos podem trocar de lugar:
acemnorsuvwxz
bdfhkl
gpqy
it
j
(permanece no lugar)
Exemplo
Srcmable consome enquanto psrrnveieg seus oeiltnus
É sabido que um txet ainda pode ser lido enquanto as entradas de seus cabos foram alteradas, desde que suas primeiras letras e suas letras mais suas letras maiúsculas e minúsculas não possam. Dado um padrão Acsii + Nwnliee txet, samrclbe ecah word anoccdirg to relus:
Smncrbliag deve ser (pusedo) rondam.
Um wrod é uma sequência dos chreratacs latinos, A thurogh Z.
Somente as primeiras empresas nunca serão atualizadas.
As letras fisrt e lsat devem permanecer atualizadas.
Ao confirmar, apenas as letras de um dos guiões da fwllnoiog podem trocar trocas:
aneusvrowxmcz
bhkfdl
gqpy
it
j
(permanece em plcae)Emxaple
t
é suposto ser mais curto do que,h
embora muitas pessoas não o escrevam.t
do grupo 2? Ou talvez colocart
um grupo 4 comi
?printable
/patnirlbe
não é bem legível. Eu acho que oi
/t
swap é o culpado. Hmm ...paintrlbe
Não, isso também não ajudou. Provavelmente é opr
/pa
swap, então. O esquema mantém, mas acho que li "pr" e "pa" como sendo semanticamente (?) 1 letra.prtnialbe
Ah sim. Isso foi o que aconteceu. Não tenho certeza se posso oferecer uma correção para o algoritmo.Respostas:
Geléia ,
8074 bytes-2 bytes movendo de
czar + vex + mow + sun
paraczar + vexes + unmown
(ose
s e s repetidosn
não são um problema)-1 byte usando em
Tị
vez deȦÐf
-1 byte usando em
Œle€Øa
vez dei@€ØB>⁵
-2 bytes reconfigurando um pouco o layout
Um programa completo com uma lista de caracteres (ou string formatada em Python), que imprime o resultado da disputa.
Experimente online!
Parece que aqui há uma enorme dificuldade para Jelly (ou eu perdi um truque, o que é sabido que aconteceu!) Isso certamente será derrotado por idiomas com melhor manipulação de cordas como
Retina(sem funcionalidade aleatória) ou 05ab1e .Quão?
fonte
czar + vex + mow + sun
Adacemnorsuvwxz
. Também escreverei o código comentado em algum momento.PHP, 278 bytes
Experimente online!
Expandido
funções
array_combine
array_filter
array_keys
ksort
preg_replace_callback
embaralhar
fonte
Pitão , 79 bytes
onde
❤
é U + 0018.Experimente online!
Amostra
É sabido que um texto ainda pode ser vasculhado enquanto as partes íntimas de seus escritos foram gravadas, desde que a primeira e a última letra, além de todas as outras informações sobre a conexão. Dado um texto, submeta cada acrncdiog de texto ao seguinte relus:
Scamrlbing deve ser (puesdo) rnadom.
Uma palavra é uma suqencee dos chraectars latinos, A thuorgh Z.
Somente as letras letivas nunca serão melhoradas.
A primeira e a última letra não foram exibidas.
Ao planejar, apenas as letras com um dos seguintes guias podem usar as seguintes palavras:
amsuvrcnoxewz
bhfkdl
gpqy
it
j
(permanece no lugar)fonte
\pL
vez de[A-Za-z]
?\pL
?\w
seria suficiente?JavaScript 176 bytes
Método:
RegExp itera sobre o centro de cada palavra (
/\B(\w+)\B/g
) usando 1st replace fn.1º substituir fn itera uma matriz de RegExp para cada grupo de letras (
/[bdfkhl/g, /[gqpy]/g, etc..
).Cada iteração cria uma matriz temporária de caracteres do centro de palavras que aparecem no grupo de letras atual.
Cada iteração usa o RegExp do grupo de letras atual para iterar todo o centro de palavras, usando uma segunda substituição fn.
2º substituir fn emenda aleatoriamente a matriz temporária, removendo um caractere aleatório e retornando-o.
Demo:
Execute-o no JSFiddle: https://jsfiddle.net/CookieJon/bnpznb7r/
fonte
\pL(\pL+)\pL
, em vez de\B(\w+)\B
excluir dígitos e sublinhado.b=>[...].map(...)&&b
salva outro byte. Também não tenho certeza de que vocêi
é necessário.t.replace(/[A-Za-z]([a-z]+)(?=[a-z])/g,(w,b)=>...w[0]+b...)
ou algo assim.C,
453, 356369 bytesungolf com comentários
fonte
Python 3.6,
349340 bytesRecuado com guias. A função é nomeada
A
. Ele não usa força bruta, o tempo de execução é determinístico, como o OP pediu.fonte
Mathematica 232 Bytes
A idéia básica é permutar os subconjuntos correspondentes aos 4 grupos de caracteres distintos. Provavelmente espaço para melhorias.
fonte
C,
306282 bytesExperimente online
Ungolfed:
fonte
JavaScript (ES6),
380327311294 bytes(
298282265 bytes, excluindo as regras)Obrigado a @Shaggy pelas dicas úteis!
A função f recebe uma sequência de qualquer tipo (palavra única, várias palavras, várias palavras com sinais - que ela interpreta como quebra de palavras) e
uma matriz deuma sequência de "regras" de qualquer tamanho, separadas por vírgulas.Esse conjunto de regras, no caso de sua pergunta, seria
["aneusvrowxmcz", "bhkfdl", "gqpy", "it"]
"aneusvrowxmcz,bhkfdl,gqpy,it"
Algumas letras não se misturam, mesmo que pudessem, pois você afirmou na sua pergunta que as letras "podem trocar espaços". Se o interpretei errado, posso alterar o código para sempre embaralhar as letras que correspondem às regras.
Eu sei que é uma quantidade enorme de bytes e não será capaz de competir com idiomas de golfe, mas eu queria tentar mesmo assim, espero que gostem :)
Código não uglificado legível por humanos:
fonte
var
s umalet
s. 02) A menos que seja uma função recursiva, não é necessário incluir a declaração de variável (f=
) na sua contagem de bytes. 03) Use currying quando uma função tiver 2 parâmetros (emb=>d=>
vez de(b,d)=>
) e chame sua função comf(b)(d)
. 04) Você tem ai
bandeira, portanto não há necessidade de incluirA-Z
no seu regex. 05) Você pode usarindexOf
ousearch
em uma string, sem dividi-la em uma matriz.Clojure,
326322324 bytesAtualização 1: substituída
(map(fn[[k v]]...)...)
por(for[[k v]...]...)
Atualização 2: regex fixo, usando em
\pL
vez de\w
etc.Estou ansioso para ver algo mais curto. A versão anterior não destruída, com alguns exemplos de execuções:
fonte
\pL+
e\PL+
, em vez de\w+
e\W+
para excluir dígitos e sublinhado.Perl 6 ,
241195 bytesInclui +1 byte para
-p
a opção de linha de comando.Ungolfed:
fonte
(\pL)(\pL+)(\pL)
vez de(\w)(\w+)(\w)
excluir dígitos e sublinhado.\pL
inclui muitos caracteres fora do intervalo permitido de letras latinas AZ. Atualizei meu código para refletir os requisitos com mais precisão.\pL
é escrito<:L>
no Perl 6.C #,
438394380374 bytesEconomize 10 bytes graças a @ MartinEnder ♦.
Irritantemente,
CaptureCollection
não implementaIEnumerable<T>
e é por isso que.Cast<Capture>()
é necessário. Felizmente, eu posso combinar a consulta Linq e oforeach
loop.Tenho certeza de que muita coisa pode ser jogada no golfe, mas demorei o suficiente para fazê-la funcionar ...
Experimente online!
Versão formatada / completa:
fonte