fundo
Atualmente, estou na classe AP Comp Sci A: Java e quero iniciar alguns de meus amigos no golfe de código. Tenho um desafio do curso e gostaria de ver em quantos bytes a comunidade pode fazer esse desafio.
Detalhes do desafio:
Dadas duas seqüências de entrada, a principal e a dinâmica, faça o seguinte:
Se a sequência de pivô for exatamente uma vez como uma substring da sequência principal, a parte da sequência principal que vem antes da sequência de pivô deve ser trocada pela parte que vem depois, preservando a ordem nas subtrações sendo trocadas .
Por exemplo:
Se a sequência dinâmica estiver vazia ou a sequência dinâmica não for encontrada na sequência principal, o programa não precisará ter um comportamento definido.
Se houver mais de uma instância da sequência dinâmica, a divisão deverá ocorrer na primeira e somente na primeira instância da dinâmica.
Exemplos: Dada a sequência principal OneTwoThreeTwoOne
e a sequência dinâmica Two
, a saída deve ser ThreeTwoOneTwoOne
.
Dada a cadeia principal 1Two2Two3Two4
e o pivô Two
, a saída deve ser 2Two3Two4Two1
.
Dada a sequência principal OneTwoThree
e a sequência dinâmica "Dois", a saída deve ser ThreeTwoOne
. Dada a sequência principal the rabbit is faster than the turtle
e a sequência dinâmica
is faster than
(observe o espaço único à direita e à direita), a saída deve ser the turtle is faster than the rabbit
.
Dada a cadeia principal 1-2-3-4-5-6
e o pivô -
, a saída deve ser 2-3-4-5-6-1
.
Posfácio:
Esta é a minha primeira pergunta sobre código de golfe, portanto, se você tiver sugestões ou críticas construtivas, sinta-se à vontade para dizer isso.
Além disso, meu código para este projeto (escrito em Java porque o curso se concentra nisso) pode ser encontrado abaixo. Se você tiver alguma dica, eu adoraria vê-las. Atualmente, são 363 bytes, mas aposto que vocês podem criar soluções muito melhores e menores.
import java.util.Scanner;interface Main{static<T>void D(T f){System.out.println(f);}static void main(String[]A){Scanner s=new Scanner(System.in);D("Enter the first String:");String a=s.nextLine();D("Enter the pivot String:");String p=s.nextLine();if(p.isEmpty()|!a.contains(p)){D("Error: Pivot String not found.");return;}String w[]=a.split(p,2);D(w[1]+p+w[0]);}}
Nota: O texto para as entradas e para o caso em que a sequência dinâmica não é encontrada é obrigatório para a atribuição original, mas não para este desafio.
pivot='-'
emain='1-2-3-4-5-6'
? A maioria dos envios gera2-3-4-5-6-1
isso, mas, pelo que entendi, o desafio deve ser2-1-3-4-5-6
.2-3-4-5-6-1
.Respostas:
Mathematica, 42 bytes
Experimente online!
fonte
Gelatina , 6 bytes
Experimente online!
Explicação
fonte
œṣ
é "dividir x em torno de sublistas iguais a y ",ṙ1
gira o array um lugar para a esquerda ej⁴
se junta à segunda entrada.Python 2 , 37
39bytesOnde
a
é a sequência principal eb
a sequência dinâmica.Experimente online!
fonte
split(b)
parasplit(b,1)
para especificar que você deseja dividir apenas na primeira ocorrência.split
aceitava mais argumentos, obrigado!Wolfram Language (Mathematica) , 34 bytes
Experimente online!
Uma função ao curry, sem nome, que deve ser chamada com o pivô primeiro e a cadeia principal em segundo. Por exemplo, se você atribuiu a função a um nome
f
:fonte
Ohm v2 , 4 bytes
Experimente online!
fonte
Perl 5 , 20 + 2 (
-pl
) = 22 bytesExperimente online!
Pega a sequência de pivô na primeira linha e depois a sequência completa na segunda.
fonte
/
s em torno$_
pode ser removido$_=~<>;$_="$'$&$
"" tem 20 bytes e lê argumentos na ordem corretaPython 2 ,
5344 bytesgraças a ThePlasmaRailgun por alguns bytes
Experimente online!
fonte
print k[1]+p+k[0]
. Isso deve ter um comportamento pretendido.k,j=m.split(p,1);print j,p,k
a 38 bytes.Python 2 , 37 bytes
Experimente online!
fonte
C # (compilador Visual C #) , 56 bytes
Experimente online!
fonte
Alice , 18 bytes
Experimente online!
Explicação
Esta é apenas uma estrutura para o código linear do modo Ordinal (processamento de string). Desdobrando o fluxo de controle em zigue-zague, obtemos:
fonte
SOGL V0.12 ,
95 bytesExperimente aqui!
Explicação:
fonte
Retina ,
2423 bytestanques para Martin Ender por -1 byte
Experimente online!
fonte
Python 2 , 48 bytes
Experimente online!
fonte
Pitão , 8 bytes
Experimente aqui!
Explicação
fonte
Carvão vegetal , 13 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
R ,
635857 bytesExperimente online!
M
é a string principal,P
é o pivô.resposta da retina dos ovs indicou que eu poderia reparar minha tentativa anterior de uma abordagem regex
adicionando
?
ao primeiro grupo de captura.fonte
Java 8, 47 bytes
Experimente online
fonte
JavaScript (ES6),
4140 bytesCasos de teste
Mostrar snippet de código
fonte
J , 14 bytes
Como funciona:
O argumento da esquerda é o pivô, o da direita - a string a ser revertida
Experimente online!
fonte
C,
106100 bytesExperimente online!
fonte
SNOBOL4 (CSNOBOL4) , 53 bytes
Experimente online!
Recebe a entrada como Pivot, depois Main, separada por uma nova linha.
Este é basicamente o equivalente SNOBOL da minha resposta R .
fonte
Perl 6 , 31 bytes
Teste-o
fonte
PHP, 62 bytes
requer PHP 7.1; pode falhar se o pivot contiver caracteres especiais regex (
\+*?[^]$(){}=!<>|:-
).nenhuma alteração se o Pivot estiver vazio, saída vazia se o Pivot não estiver na entrada.
Corra com
-n
.versão segura, 77 bytes:
nenhuma alteração se o Pivot estiver vazio, saída vazia se o Pivot não estiver na entrada.
Corra com
-n
.versão não regex, 71 bytes:
emite avisos se o Pivot estiver vazio; nenhuma alteração se o Pivot não estiver na entrada.
Corra com
-nr
.Experimente online .
fonte
Vermelho , 63 bytes
Experimente online!
fonte
Rápido , 131 bytes
Explicação (ungolfed)
fonte
C (gcc) , 76 bytes
Experimente online!
fonte
C ++ 11, 64 bytes
Um lambda, que captura as strings s, p e a, com a como referência (entrada e saída).
Código de teste
fonte
Limpo , 83 bytes
String
Normalmente, um em Limpar é{#Char}
- um array sem caixa (#
)Char
({}
). Esta função leva em[Char]
vez deString
, que é uma segunda versão válida deString
.A assinatura completa da função é
f :: [.t] .t -> [.t] | [.t <= Char]
.Experimente online!
fonte
Japonês ,
87 bytesExperimente aqui
fonte