No idioma Nim , as regras para diferenciar identificadores são um pouco mais relaxadas do que na maioria dos outros idiomas. Dois identificadores são equivalentes ou endereçam a mesma variável se seguirem estas regras :
- o primeiro caractere de ambos é o mesmo (diferencia maiúsculas de minúsculas)
- tanto cadeias são os mesmos (caso em minúsculas) após a remoção de todas as ocorrências dos caracteres
-
e_
Desafio
Escreva um programa / função que use duas cadeias que representam os identificadores Nim e produza um valor de verdade ou falsey com base no fato de serem equivalentes ou não pelas regras acima.
Especificações
- Aplicam- se as regras de E / S padrão .
- As brechas padrão são proibidas .
- As seqüências conterão apenas imprimíveis ASCII . Você não precisa verificar se é um identificador válido.
- As seqüências de caracteres podem ser tomadas como duas entradas separadas, lista de seqüências de caracteres etc. (você conhece a broca)
- Cadeias de caracteres vazias não precisam ser manipuladas.
- A saída deve ser consistente para os valores de verdade e falsey.
- Esse desafio não é encontrar a abordagem mais curta em todos os idiomas, mas sim encontrar a abordagem mais curta em cada idioma .
- Seu código será pontuado em bytes , geralmente na codificação UTF-8, a menos que especificado de outra forma.
- Funções internas que executam essa tarefa são permitidas, mas é recomendável incluir uma solução que não dependa de uma incorporada.
- Explicações, mesmo para idiomas "práticos", são incentivadas .
Casos de teste
Input Output
count, Count falsey
lookMaNoSeparator, answer falsey
_test, test falsey
test, tset falsey
aVariableName, a_variable_name truthy
numbers_are_cool123, numbersAreCool123 truthy
symbolsAre_too>_>, symbols_areTOO>> truthy
Implementação de referência ungolfed
Isso está escrito em Nim, em si.
import strutils, re
proc sameIdentifier(a, b: string): bool =
a[0] == b[0] and
a.replace(re"_|–", "").toLower == b.replace(re"_|–", "").toLower
code-golf
string
decision-problem
totalmente humano
fonte
fonte
f("_test", "test")
.f("test", "tset")
, pois acho que uma resposta fornece um resultado inesperado.>
?Respostas:
JavaScript (ES6),
6261 bytesGuardado 1 byte graças a @JohanKarlsson
Recebe entrada na sintaxe de currying
(a)(b)
. Retorna um booleano.Casos de teste
Mostrar snippet de código
fonte
/-|_/g
salva um bytePython 3 , 76 bytes
Experimente online!
-1 byte graças a notjagan
-3 bytes graças a Wheat Wizard
fonte
Na verdade , 15 bytes
Experimente online!
Curiosidade: isso funciona com qualquer número de entradas (sempre retorna verdade para menos de 2 entradas).
Explicação:
fonte
Pitão , 13 bytes
Experimente online!
Explicação
fonte
05AB1E , 12 bytes
Experimente online!
-1 graças a Adnan .
Teoricamente,
εćs„-_-«}Ë
deveria ter funcionado por 10 bytes, mas infelizmente esse comportamento está obsoleto por enquanto.fonte
„-_SK
vez de'-K'_K
.SK
paraм
.м
existia naquela época. : PGelatina , 11 bytes
Experimente online!
-2 bytes graças a Erik, o Outgolfer
-1 byte graças a Jonathan Allan
fonte
["symbolsAre_too>_>", "symbols_areTOO>>"]
e useḢ;ḟ⁾-_Œl$µ€E
para -2. Bata esse Pyth!ḟ⁾-_Œl,Ḣµ€E
por 11 bytes.Ruby ,
8664636151 bytesExperimente online!
Isso
parece muito longoainda parece um pouco longo. Eu apreciaria a ajuda de qualquer guru Ruby por aí, tornando isso pelo menos um pouco mais curto.fonte
.delete("_-")
é mais curto.f[x]
é sempre uma substituição válida paraf.call(x)
quando estão envolvidas lambdas stabby.C ++,
288248 bytes-5 bytes graças a Zacharý
Obrigado, pré-processador. Além disso, esse código aproveita o fato de que em C ++ a regra para converter int para bool é
int_var!=0
fonte
;
após a definição deF
. Em seguida, altere a primeirareturn
instrução parareturn 0;E(a,45)E(b,45)E(a,95)E(b,95)F(a)F(b)
.CJam, 20 bytes
Recebe entrada na forma de ["string1", "string2"].
Experimente on-line (versão de teste)
fonte
Haskell ,
8578767168 bytes2 bytes salvos graças a Ørjan Johansen
Experimente online!
Erros na cadeia vazia.
fonte
all(/=a)"-_"
. Além disso, após a edição mais recente, vocêf
precisa se tornar um operador.notElem
mas não conseguia me lembrar disso pela vida toda.Python 2 , 72 bytes
Experimente online!
Não funcionará com o Python 3 por causa da nova
translate
sintaxe.fonte
Excel, 105 bytes
CODE () retorna o código numérico do primeiro caractere.
A comparação de cadeias no Excel não diferencia maiúsculas de minúsculas.
fonte
Casca , 13 bytes
Experimente online!
Cria para cada sequência um par que consiste no primeiro caractere da sequência e a sequência inteira em minúsculas e com todas as ocorrências de - / _ removidas. Em seguida, verifica se os dois pares são iguais.
Uma particularidade é que
-
em Husk é definida a diferença (isto é, remove somente a primeira ocorrência encontrada): para remover todas as ocorrências, o ponto fixo de-"-_
é encontrado comω-"-_
.fonte
Japonês ,
1425 bytesVerifica a igualdade de cadeias sem distinção entre maiúsculas e minúsculas removendo todos os caracteres na palavra 2 da palavra 1 e removendo os-_
caracteres; isso resulta em uma string vazia (""
) se as palavras forem iguais.Obrigado Ørjan Johansen por apontar o problema com isso.
Verifica a igualdade do primeiro caractere e se as entradas em maiúsculas são iguais após a remoção
_-
.Experimente online!
Explicação
Entrada implícita:
U
eV
são cadeias de entradaVerifique se a primeira letra de
U
(implícita) é igual a (¥
) o primeiro caractere deV
.E (
©
) verifique seU
, em maiúsculas (u
) e com_-
removido (k
), igual (¥
) é o mesmo paraV
. Retornar implicitamente o resultado booleano.fonte
test
vs.tset
?Python 2 ,
7973 bytes-6 bytes graças a @notjagan: verifique se o comprimento do conjunto de todos os nomes reduzidos é 1 ou não.
Experimente online!
fonte
Perl 5 , 67 bytes
Experimente online!
Leva os identificadores como entrada em linhas separadas.
Explicação:
fonte
Retina , 28 bytes
Experimente online!
fonte
Carvão , 29 bytes
Experimente online!
Isso imprime um
-
para verdade e nada para falsey.Link para a versão detalhada . Primeiro, ele compara o primeiro caractere das duas strings de entrada (
⁼§θ⁰§η⁰
) e, em seguida, o restante das duas strings após remover os sublinhados e os hífens (⪫⪪⪫⪪θ_ω-ω
) e converter para minúsculas (↧
).fonte
C #,
10189 bytesEconomizou 12 bytes graças a @ kusi581.
fonte
string.Concat(...)
que você pode salvar 2 bytes;)Java (OpenJDK 8) , 95 bytes
Experimente online! Bem direto.
fonte
Pyke , 13 bytes
Experimente online!
fonte
C (gcc) ,
126114 bytesExperimente online!
Com espaço em branco e comentários:
fonte
while
teste pode ser abreviado para*s%50==45
. (2) No entanto, o lowercasing está errado, por exemplo, ele falha nat~
vst^
.>
foi adicionado, hmm.-
não é permitido, mas o algoritmo ainda o inclui ... #-
não está na descrição gramatical do identificador - mas outras partes desse documento sugerem que é permitido.Dyalog APL,
473228272622 bytes-4 bytes graças a Kritixi Lithos
Recebe entrada como uma lista das seqüências de caracteres.
Experimente online!
Quão?
fonte
⊃⍺=⍵
em vez de, em vez de⍺[1]=⍵[1]
⊃⍵
em vez de⍵[1]
deve funcionar⊃⍺=⊃⍵
vez de⍺[1]=⍵[1]
Lisp comum, 98 bytes
Experimente online!
Versão ungolfed (super direta!):
fonte
R , 76 bytes
Função anônima que recebe entrada como uma lista de duas seqüências de caracteres. Aproveita o fato de que as operações de string de R, embora bastante longas em # de caracteres, são vetorizadas. Além disso, agrupar uma atribuição entre parênteses vinculará a variável, portanto
(g=substr(l,1,1))
mantendo uma variável a ser reutilizada posteriormente na linha e da mesma forma parah
.R retorna a última expressão avaliada como saída da função.
Ungolfed:
Experimente online! (todos os casos de teste)
fonte
Braquilog , 17 bytes
Experimente online!
Saídas através do predicado de sucesso / falha.
fonte
Erlang 113 bytes
um par de funções anônimas que comparam as duas listas. destinado a ser colado na concha erlang.
mais legível:
fonte
Clipe , 25 bytes
Explicação :
x
,y
Ez
pode ser referenciado em um programa Clipe tomar implicitamente até três entradas. Como este programa apenas faz referência ax
ey
, são necessárias duas entradas atribuídas ax
ey
.Toma duas strings da entrada padrão, saídas
1
e0
para true e false, respectivamente.fonte