Dizemos que uma string não é discriminatória se cada um dos caracteres da string aparecer o mesmo número de vezes e pelo menos duas vezes.
Exemplos
"aa!1 1 !a !1"
é não discriminatório , porque cada um dos personagens!
,a
e1
aparecem três vezes."abbaabb"
não é discriminatório porqueb
aparece com mais frequência do quea
."abc"
também não é discriminatório porque os caracteres não aparecem pelo menos duas vezes.
Tarefa
Escreva um programa ou função não discriminante que retorne um valor verdadeiro se uma determinada string não for discriminatória e, caso contrário , um valor falso .
Ou seja, o programa executado em seu próprio código-fonte deve retornar um valor verdadeiro.
Cada envio deve poder manipular seqüências de caracteres não vazias que contenham ASCII imprimível , bem como todos os caracteres que aparecem no código-fonte do envio.
Casos de teste
Verdade:
<your program's source code>
"aaaa"
"aa!1 1 !a !1"
"aabbccddeeffgg"
"1Q!V_fSiA6Bri{|}tkDM]VjNJ=^_4(a&=?5oYa,1wh|R4YKU #9c!#Q T&f`:sm$@Xv-ugW<P)l}WP>F'jl3xmd'9Ie$MN;TrCBC/tZIL*G27byEn.g0kKhbR%>G-.5pHcL0)JZ`s:*[x2Sz68%v^Ho8+[e,{OAqn?3E<OFwX(;@yu]+z7/pdqUD"
Falsy:
"a"
"abbaabb"
"abc"
"bQf6ScA5d:4_aJ)D]2*^Mv(E}Kb7o@]krevW?eT0FW;I|J:ix %9!3Fwm;*UZGH`8tV>gy1xX<S/OA7NtB'}c u'V$L,YlYp{#[..j&gTk8jp-6RlGUL#_<^0CCZKPQfD2%s)he-BMRu1n?qdi/!5q=wn$ora+X,POzzHNh=(4{m`39I|s[+E@&y>"
Respostas:
Braquilog , 10 bytes
Experimente online!
Explicação
fonte
Java 8,
198192186174168165160 bytes (contagem de caracteres65)Experimente online.
Código usado para verificar as ocorrências dos caracteres , que foi minha resposta para esse desafio .
-5 bytes graças a @ OlivierGrégoire novamente, livrando-se do comentário e fazendo uma bagunça. ;)
Resposta antiga de 168 bytes (contagem de caracteres 6) :
Experimente online.
Código usado para verificar as ocorrências dos caracteres, excluindo comentários , que foi minha resposta para esse desafio .
-6 bytes graças à remoção do @ OliverGrégoire
<
trocando as verificações por>
.Explicação do programa básico de golfe (98 bytes):
Experimente online.
Algumas coisas que fiz para reduzir a quantidade de caracteres usados:
o
,w
,u
,f
,r
, ee
foram escolhidos de propósito para reutilizar personagens que já tinha (mas não superior a 6).2222
é usado em vez de256
.e>0&u!=e|u<2
para!(e<2|u==e)|u<2
remover 6x&
.f
, e que devolve se ainda 0 é no final (isto significava que poderia remover a 6xby
a partir debyte
agora que usamos somenten
emint
6 vezes, em vez de 8).e<2
eu<2
alterado para2>e
e2>u
para remover 6x<
.O que fiz para reduzir a contagem de caracteres de 6 para 5:
int
parabyte
que a quantidaden
usada seja 4 em vez de 6.x[0]
vez de uma nova variável,f=0
portanto, a quantidade=
usada é 5 em vez de 6.2222
para3333
, a quantidade de2
usada é 2 em vez de 6.f
er
novamente para que não sejam mais 6.O que o @ OlivierGrégoire fez para se livrar do comentário e, portanto, o 5x
/
:,i,fe,fi,w;
.s:w:no0r3sswwyyy:
.|2>2
{}
torno dos loops de for e ifs e adicionado um{}
bloco não utilizado .!
para!!!
.|
para||
.333
para+333-3|2
se livrar dos operadores aritméticos restantes+-|
e do2
.!(x[0]>0)
para!!(0>--x[0])
.fonte
<
para>
.Geléia ,
18161210 bytesExperimente online!
Como funciona
fonte
Braquilog ,
1412 bytesExperimente online!
Explicação
Solução alternativa de 12 bytes que reutiliza em
t
vez deᵐ
:fonte
T-SQL, 320 bytes (32 caracteres x 10 cada)
A entrada é via tabela preexistente
FILL
com campo varcharSTEW
, de acordo com nossos padrões de IO .Nunca fiquei tão satisfeito, mas horrorizado, com um pedaço de código.
Deve ser executado em um servidor ou banco de dados definido para um agrupamento que diferencia maiúsculas de minúsculas. Existem 10 cada um dos 32 caracteres diferentes, incluindo maiúsculas e minúsculas
E
(os comandos SQL não diferenciam maiúsculas de minúsculas, portanto, são necessários alguns), espaços e guias (as guias são mostradas como quebras de linha no código acima, para facilitar a leitura).Encontrei maneiras de incluir 10 cada um dos outros símbolos
+ = ,
no código, mas infelizmente não consegui encontrar uma maneira de fazer isso<
, então tive que adicionar o caractere de comentário-
.Aqui está o código formatado antes de colocar todo o preenchimento extra:
A linha superior é um CTE recursivo que gera uma tabela numérica
b
, à qual juntamos a string de origem para separar por caractere. Esses caracteres são agrupados e contados, e aIIF
instrução retorna 0 ou 1, dependendo se a sequência de entrada não é discriminatória.fonte
C (gcc) ,
333168 bytesAgradecemos a @ Kevin Cruijssen por salvar 9 bytes e a @Laikoni por salvar 45 bytes!
Experimente online!
C, 333 bytes
Mesmo o número de bytes não é discriminatório!
Experimente online!
fonte
128
para222
para que8
possam ser descartados.i
,v
,S
,s
eL
para personagens que já aparecem nas palavras-chavechar
,for
ereturn
: Tente-lo online!05AB1E ,
20181614 bytesExperimente online!
O programa é essencialmente dividido em duas partes, onde o objetivo da primeira parte é realizar a tarefa real e o objetivo da segunda parte é usar as mesmas funções da primeira parte sem alterar o resultado.
Explicação (primeira parte)
Explicação (segunda parte)
fonte
{γ€gDË*P≠qq{γ€gDË*P≠
é outro para 20;).¢
... boa ideia cara, também estou feliz em ver que≠
foi tão útil quanto pensei que fosse haha!Casca , 14 bytes
Experimente online!
Explicação
As duas linhas curtas não são operacionais, pois a função principal nunca as chama.
fonte
m
também ocorre duas vezes: na primeira linha e na segunda linha. A explicação não inclui as duas linhas curtas porque elas não afetam o comportamento do programa.Python 2 ,
7569 bytesA saída é via presença ou ausência de um erro. O erro é um ValueError (um ou mais caracteres ocorrem apenas uma vez) ou um NameError (a contagem de caracteres é desigual).
Experimente online!
fonte
{{e.dil:-tu,r.dil:-tu,}}
Bom Deus, o que é isso?a
e tudo quebrou. Você poderia explicar mais, por favor?or
. Vou adicionar uma explicação quando estiver no computador.Brachylog v2, 8 bytes (no conjunto de caracteres de Brachylog)
Experimente online!
Parece que houve uma guerra de golfe nessa questão em Brachylog, então pensei em participar, economizando alguns bytes na próxima melhor resposta.
Este é um programa completo que recebe a entrada como uma lista de códigos de caracteres. (Isso ocorre em parte porque o Brachylog parece ter alguns bugs muito bizarros relacionados a barras invertidas em strings e em parte porque o
\
comando não funciona em listas de strings.)Explicação
O
koḅ
no final é irrelevante;k
sempre terá um elemento para atuaro
eḅ
não poderá falhar se receber uma lista como entrada.O motivo da partida
oḅ
deve ser claro; particiona a lista de entrada por valor, por exemplo,[1,2,1,2,4,1]
se tornaria[[1,1,1],[2,2],[4]]
. Para que cada caractere apareça o mesmo número de vezes, cada uma dessas listas deve ter o mesmo comprimento, ou seja, a lista resultante é um retângulo. Podemos afirmar essa retangularidade usando\
, que também transpõe as linhas e colunas como efeito colateral.Agora temos um valor atual que consiste em várias cópias do conjunto de caracteres, por exemplo, se a entrada fosse
[4,2,1,2,4,1]
o valor atual[[1,2,4],[1,2,4]]
. Se excluirmos uma cópia, a matriz resultante ainda será retangular, para que possamos voltar a usá-la\
. No entanto, se a razão da matriz era retangular foi que todos os caracteres introduzidos eram distintos, a matriz resultante não terá elementos de esquerda, e\
se não tratar uma matriz "0 × 0" como retangular (sim, ele falha).oḅ\k\
Afirma tão efetivamente que cada caractere que aparece na entrada aparece o mesmo número de vezes e esse número de vezes não é 1.Essa é toda a funcionalidade do nosso programa (como um programa completo, obtemos
true
se nenhuma falha de declaração ocorreu,false
se alguns ocorreram ). Porém, temos que obedecer à restrição de layout de origem, então adicionei um adicionalkoḅ
que não tem objetivo, mas que não pode falhar (ao contrário\
,o
eḅ
é um prazer atuar em listas vazias).fonte
Python 2 ,
8480 bytesExperimente online!
fonte
JavaScript (Node.js) ,
144...10096 bytesExperimente online!
24 caracteres diferentes * 6 vezes cada28 caracteres diferentes * 5 vezes cada27 caracteres diferentes * 5 vezes cada27 caracteres diferentes * 4 vezes cada26 caracteres diferentes * 4 vezes cada25 caracteres diferentes * 4 vezes cada24 caracteres diferentes * 4 vezes cada
Explicação
fonte
PowerShell , 104 bytes
Experimente online!
Foi muito divertido jogar golfe. A limitação era de
$
que precisamos no mínimo de quatro (um para a entrada$args
, um para atribuir o resultado da computação$qe
, um para verificar o último caractere$qe[-1]
e outro para verificar o primeiro caractere$qe[0]
, de modo que esse era o número máximo de caracteres em funcionamento.A partir daí, era uma questão de jogar golfe (e não jogar golfe, como ter um nome de variável de duas letras) para obter o programa divisível por quatro. Observe que temos um pequeno comentário (tudo a seguir a
#
) para explicar alguns elementos ausentes, mas tentei manter o comentário o menor possível.fonte
Haskell,
907572 bytesCada personagem aparece 6 vezes. A sequência de entrada é tomada como uma lista de singleton .
Experimente online!
Para referência, versões antigas:
75 bytes, cada caractere 5 vezes
Experimente online!
90 bytes, cada caractere 3 vezes:
Experimente online!
fonte
Python 2 ,
1081049288 bytes-12 bytes graças a Rod
-4 bytes graças a Kevin Cruijssen
Experimente online!
fonte
s=input();c=s.count;print[all(c(s[[]>[1]])>=c(o)>1. for o in s)];aaafffillpprrtuu=1.>1.;
88 bytes , livrando-se do comentário.aaabb
parece ceder #True
MATL , 12 bytes
A entrada é uma cadeia de caracteres entre aspas simples. Aspas simples na cadeia de caracteres são escapadas pela duplicação.
A saída é uma matriz não vazia, que é verdadeira se não contém zeros e é falsa se contém pelo menos um zero.
Experimente online! Ou verifique todos os casos de teste , incluindo o teste padrão de veracidade / falsidade, por conveniência.
Como funciona
As declarações marcadas com
(*)
não são necessárias nem prejudiciais e foram incluídas apenas para tornar o código fonte não discriminatório.fonte
Perl 5 ,
-p
57 bytesCada personagem aparece 3 vezes. Apenas um single
1
não faz nada12 bytes adicionados a uma solução básica de 45 caracteres para criar
Experimente online!
fonte
R , 90 bytes
Experimente online!
Saídas
TRUE
para uma sequência não discriminante eFALSE
para uma sequência discriminante. Escrevi muitos códigos feios para desafios neste site, mas acho que esse é o mais feio até agora.45 caracteres, usados duas vezes cada (incluindo alguns em um comentário). A melhor resposta R anterior era de 116 bytes , com 29 caracteres usados 4 vezes cada; Estou publicando isso separadamente, pois é substancialmente diferente.
O código é equivalente a
que converte a entrada em um vetor de números inteiros, calcula uma tabela
y
de contingência dos valores e verifica se todas as contagens nessa tabela são iguais à primeira contagem e se a primeira contagem é maior que 1.A dificuldade inicial estava em usar apenas 2 pares de colchetes. Isso é alcançado redefinindo as funções unárias
!
e?
sendoutf8ToInt
eprod
respectivamente. (Não posso usarall
porque preciso doa
). Existem quatro tarefas: duas com=
e duas com<-
. Isso significa que o teste de igualdade entrey
ez
não pode usary==z
nemy-z
;y%in%z
vem para o resgate.A definição dessas funções usa todas as aspas possíveis: duas aspas duplas, duas aspas simples, e precisarei das duas reticulares no próximo parágrafo, então tive que recorrer ao
readLines()
invés descan(,"")
. (As outras opções, comoscan(,letters)
ouscan(,month.abb)
todas, usavam um preciosot
que eu não poupava.)Neste ponto, eu tinha a maioria dos blocos de construção:
utf8ToInt
,prod
,table
,readLines
,%in%
. Três personagens aparecem três vezes esses nomes:ent
. Primeiro, descobri quetable(foo)
é equivalente axtabs(~foo)
salvar o arquivoe
. Eu posso resgatar on
e ot
com o truque de código hex / octal ; a solução mais golfista é usaru\164f8ToI\x6Et
(em backticks) parautf8ToInt
.fonte
NA
não é considerado um valor verdadeiro (em R, se (NA) x else y causar um erro, tambémNA
não é verdade nem falsey )Braquilog , 18 bytes
Experimente online!
Infelizmente, não consigo remover os feeds de linha, pois
ḅ
em um número desencadeia uma falha.fonte
Ruby ,
8778 bytes26 caracteres repetidos 3 vezes cada
Experimente online!
fonte
gets
e;
. Mudou, é mais curto como um lambda de qualquer maneiraR,
132116 bytesTambém não contém comentários ou seqüências supérfluas, embora provavelmente seja a minha única vez no código golf chamando uma função
crudcardounenforceableuploads
.Provavelmente existe um ótimo anagrama em algum lugar para o nome da função!Agradeço a John Dvorak por apontar um bom solucionador de anagramas, que usei para o nome.Tabela de caracteres:
exemplos:
fonte
>
, alternando a comparação comf
. Também pode usar em=
vez de<<-
.strsplit
provavelmente é inevitável, que é a fonte da maioria dos outros personagens.utf8ToInt
em vez destrsplit
, mas não tenho certeza se isso vai ajudar. Talvez também inclua um link para o TIO?.
parecem supérfluos.BASH 144 bytes
Essa linha de código recebe uma string stdin como entrada. "grep -o". coloca cada caractere em uma nova linha. "uniq -c" conta o uso de cada personagem. O script awk cria uma matriz com cada uso como um elemento diferente e gera true quando há apenas 1 índice da matriz e o valor é pelo menos 2. Cada caractere é usado 4 vezes, portanto, essa fonte retorna true
fonte
Stax ,
262418 bytesExperimente online!
Até agora, a solução mais curta que usa apenas ASCIIs imprimíveisbatidos por MATL.Acho que estava abordando o problema da maneira errada. Repetir um bloco de trabalho não é nem golfe nem interessante. Agora, pelo menos, parece melhor ...
Explicação
:u{m*
produz algum lixo que não afeta a saída.fonte
#
e dois:
segundos, você leu minha resposta na segunda linha? Você acabou de pular o primeiro parágrafo da minha "Explicação"?Pip , 22 bytes
Experimente online!
Explicação
Cada personagem ocorre duas vezes.
Versão alternativa de 22 bytes com menos no-ops:
fonte
SmileBASIC,
164152148140 bytes35 caracteres diferentes, repetidos 4 vezes cada.
Nenhum comentário foi usado (mas a expressão depois
neXT
nunca é realmente avaliada)Script para verificar as respostas:
Mostrar snippet de código
fonte
Retina 0.8.2 ,
16890 bytesA saída estará vazia se falsa ou não vazia se for verdadeira.
Experimente online
Programa principal (39 bytes)
Explicação
Todo o programa principal está em um loop silencioso. O primeiro estágio classifica a entrada. O segundo estágio imprimirá a sequência atual se consistir em pares sucessivos de caracteres diferentes. O terceiro estágio remove a última ocorrência de cada caractere (removendo um de cada caractere na sequência).
Sobre o lixo no topo: a ordem é importante. Além de precisar ser sintaticamente válido, um ponto-e-vírgula deve estar após os asteriscos e antes dos backticks, contanto que
*
esteja na string de configuração, para que não seja impresso.fonte
CoffeeScript 1 ,
969390 bytesExperimente online!
Começou com minha resposta ES6, mas voltou a usar
Array.every
.323130 tokens a 3 cadafonte
Pitão, 30 bytes
Espaços principais necessários.
Experimente online!
O programa atual é justo
&q1lJ{hMrSz8<1hJ
. Acabei de anexar a string"&8<MQSlqr{"
para torná-la não discriminatória. Mas para que a sequência não fosse impressa, tive que adicionar um espaço, então adicionei 2 espaços.length_encode
here (r <any> 8
) pega uma sequência e gera o comprimento de cada execução do mesmo caractere, ex."aaabbcc"
torna-se[[3, "a"], [2, "b"], [2, "c"]]
.Portanto, isso pega a entrada, classifica-a para incluir a codificação de comprimento e pega o primeiro elemento de cada lista na lista resultante (por exemplo, o exemplo anterior se tornaria
[3, 2, 2]
). Isso fornece uma contagem de quantas vezes os caracteres ocorrem. Em seguida, é deduplicada (o exemplo anterior se tornaria[3, 2]
) e J é definido para isso.Em seguida, verifica se o comprimento é 1, ou seja, existe apenas 1 número único de vezes que um caractere ocorre, e se é> 1, ou seja, = = 2.
Pode haver um built-in para substituir
rSz8
ouhMrSz8
mas não consigo encontrar um.fonte
C (gcc) , 153 bytes
Experimente online!
Retorna o endereço da string como valor de verdade e zero como falso.
fonte
Perl 6 ,
5857 bytesExperimente online!
Acontece que a versão de três caracteres é um pouco menor que a de dois caracteres.
fonte