Definição
Uma palavra em dólar é uma palavra em que quando cada uma de suas letras recebe um valor em centavos, de a = 1 a z = 26, e as letras são somadas, o resultado é 100. Aqui está um exemplo no CodeReview e aqui está uma lista de palavras em dólar que encontrei online.
Entrada
A entrada será alfabética de az, nos tipos de dados de texto do seu idioma (matrizes são permitidas). Você não precisa dar conta de nenhuma outra entrada - não haverá espaços, apóstrofos ou hífens. Você pode usar como minúscula, maiúscula ou uma combinação. Novas linhas à direita são permitidas.
Resultado
Emita um valor verdadeiro se a entrada for uma palavra em dólar e um valor falsey se não for.
Casos de teste
Verdade:
buzzy
boycott
identifies
adiabatically
ttttt
Falsey:
zzz
zzzzzzz
abcdefghiljjjzz
tttt
basic
Isso é código-golfe, então a resposta mais curta em bytes vence! Aplicam-se brechas e regras padrão. O empate vai para o primeiro pôster.
Respostas:
GS2 , 6 bytes
A entrada deve estar em maiúscula.
Experimente online!
Como funciona
fonte
Python,
3938 bytesExperimente online!
-1 byte graças a @JonathanAllan
fonte
05AB1E , 8 bytes
Código:
Usa a codificação CP-1252 . Experimente online!
Explicação:
fonte
Tn
funciona também: PÇ4+OTn%0Q
foi outra ideia que tive, mas é pior.Perl 6 , 21 bytes
Tente
Alternar:
Tente
Observe que
Ⅽ
éROMAN NUMERAL ONE HUNDRED
U + 216D com um unival de… 100 Oque leva 3 bytes para codificar.
Expandido:
fonte
MATL , 8 bytes
Usa entrada em minúsculas.
Experimente online!
Explicação
O código é o mais legível possível:
fonte
JavaScript (ES6), 46 bytes
Retorna
0
ou1
.fonte
reduce
e recursão, ambos saíram 2 bytes mais.reduce()
durante os primeiros minutos do período de carência quando eu o publiquei inicialmente.Haskell , 32 bytes
Experimente online!
A idéia é fazer uma lista de caracteres do caractere
a
especificado para cada caractere da lista e verificar se o comprimento total é 100.Outras tentativas:
Pena que
enumFromTo
é tão longa.fonte
(100==).length.(enumFromTo 'a' =<<)
é um uso tão limpa de livre-ness-pointC,
4543 bytesAgradecemos ao @Neil por salvar dois bytes e tornar a solução sem distinção entre maiúsculas e minúsculas!
Experimente online!
fonte
n=0
globalmente e pulando a primeira cláusula da especificação do loop, não? editar: não importa - acho que isso funcionaria apenas na primeira ligação.&31
pode funcionar para tornar seu código insensitivo.n=!n
funciona? Eu entendo que verifica sen
é zero, porque com base em algum teste, vejo!0
retornos1
;!15
retornos0
; e!-15
retorna0
também. Mas por que? Qual operando está!
em C ao usá-lo como!integer
?!
é apenas o lógiconot
. Em C,0
significafalse
e qualquer outro valor inteiro significatrue
. Então!0 == 1
, e!n == 0
para todosn != 0
.0=false; 1=true
, portanto, minha confusão. Obrigado pela resposta.Haskell , 32 bytes
Isso funciona para entrada em minúsculas. Para maiúsculas
s/96/64/
,. O suporte a maiúsculas e minúsculas adicionaria vários bytes.fonte
Mathematica, 23 bytes
Função pura pegando uma string (ou uma matriz de letras) como entrada, sem distinção entre maiúsculas e minúsculas e retornando
True
ouFalse
. AquiTr
apenas adicionamos os números das letras; tudo o resto é auto-explicativo.fonte
Geléia ,
97? * 8 bytesPrograma completo, emitindo 1 se a entrada for uma palavra em dólar ou 0 se não.
Experimente online!
Quão?
* Poderia ser 7 bytes?
A única razão pela qual este tomou entrada com
ɠ
era manter³
como o literal 100 em vez do 3 rd entrada de linha de comando (1 st entrada de programa).Uma maneira de evitar isso seria, como apontado por Dennis, criar 100 usando a forma literal bruta
ȷ2
que é 10 2 . Isso leva a outro byte de 8 bytesO%32S=ȷ2
, mas agora é uma função monádica sem nome (além de operar como um programa completo com um terceiro argumento).Como no golfe, é possível criar variáveis ou funções auxiliares que restringem o programa em que residem (não é possível reutilizar o nome no escopo sem impedir que a função seja reutilizável), talvez restringindo o programa a receber apenas informações do STDIN. também será aceitável; nesse caso, o byte de 7 bytes
O%32S=³
seria aceitável aqui como uma função sem nome.fonte
O%32S=ȷ2
,. Funciona para entrada em maiúsculas e minúsculas.O%32S⁼³
na verdade não seria uma entrada válida, pois define uma função reutilizável e sem nome, desde que o restante do programa em que ele esteja não use argumentos de linha de comando para entrada?Alice , 23 bytes
Experimente online!
A entrada deve estar em minúscula. Imprime
1
para palavras em dólar e0
outros.Explicação
Hora de mostrar a fita de Alice e algum fluxo de controle avançado. Apesar de ser bastante bom em trabalhar com números inteiros e seqüências de caracteres individualmente, Alice não possui built-ins para: a) determinar o comprimento de uma string; b) converter entre caracteres e seus pontos de código. A razão para isso é que todos os comandos de Alice mapeiam números inteiros para números inteiros ou cadeias para cadeias. Mas os dois exigiriam mapear seqüências de caracteres para números inteiros ou vice-versa, para que não se encaixem nos modos de Alice.
No entanto, além de sua pilha, Alice também possui uma fita e os modos Cardinal e Ordinal interpretam os dados na fita de diferentes maneiras.
Essa fita pode ser usada para as duas operações acima: para obter um comprimento de string, escrevemos na fita no modo Ordinal, procuramos o -1 no modo Cardinal e recuperamos a posição da cabeça da fita. Para converter caracteres em seus pontos de código, simplesmente os lemos da fita no modo Cardinal.
Os outros dois recursos importantes usados nesta solução são a pilha de retorno e um iterador. Alice tem uma pilha de retorno que geralmente é preenchida ao usar o comando jump
j
e da qual você pode inserir um endereço para retornark
. No entanto, também é possível enviar o endereço atual para a pilha de retorno sem precisar ir a lugar nenhumw
. Se combinarmosw
com o comando repeat&
, podemos enviar o endereço atual para a pilha de retorno n vezes. Agora, cada vez que chegamosk
, uma cópia é retirada da pilha de retorno e executamos outra iteraçãow
(iniciando na célula depois dela, porque o IP se move antes de executar outro comando). Quando a pilha de retorno fica vazia,k
não faz nada e o IP simplesmente passa. Portanto,&w...k
aparece um número inteiro n e, em seguida, executa...
n + 1 vezes, o que nos dá uma maneira muito concisa de expressar umfor
loop simples .Para o próprio código ...
fonte
R,
5554 bytes-1 byte graças ao BLT
retorna uma função que faz o cálculo necessário, que retorna
TRUE
eFALSE
como seria de esperar.recebe entrada como minúscula; seria apenas uma mudança de
letters
paraLETTERS
para todas as maiúsculasfonte
function(x)sum(match(el(strsplit(x,"")),letters))==100
salva um byte.Ruby, 25 bytes
Funciona para maiúsculas.
Eu vejo algumas entradas Ruby mais complexas, mas é realmente simples assim.
s.sum
adiciona os códigos ASCII da string de entrada e, a partir disso, subtraímos 64 vezes o comprimento da string.Exemplo de uso
fonte
Java 8, 36 bytes
Experimente online!
Nota: independente do caso.
fonte
05AB1E , 9 bytes
Experimente online!
Explicação
Como 1 é o único valor verdadeiro em 05AB1E, podemos salvar um byte usando subtração em comparação a 100 .
fonte
Perl 5 , 30 bytes
-1 byte graças a @ Neil (em
31&
vez de-96+
).29 bytes de código +
-p
sinalizador.Experimente online!
fonte
31&ord
?-96+
essas coisas .. Muito obrigado por isso! (mas agora eu sinto que eu deveria voltar através dos meus posts antigos e substituir todos os-96+
: x){$@+=31&ord for@_;$@==100}
(não testada)+=
, mas em outros casos você pode gastar a economia entre parênteses.your one language's text datatypes
. As matrizes dificilmente são o tipo de dados de texto do Perl ... (caso contrário, ele teria economizado 1 byte)PowerShell ,
3630 bytesExperimente online!
Entradas como uma matriz, mas eu estou querendo saber se existe uma maneira melhor de lidar com caracteres.
EDIT Perdeu um espaço fácil, mas @AdmBorkBork gentilmente me avise: P também, de fato, havia uma maneira melhor de lidar com os personagens!
fonte
[char]$_-96
e não precisa do espaço entre-eq
e100
, chegando a 33. Você também pode fazer isso em"$_"[0]
vez de[char]$_
fazê-lo até 32. Experimente on-line!"
volta$_
necessária? Parece funcionar sem o elenco. Poderia ser devido à entrada já ser uma matriz de string?"
não é necessário nesta instância específica.Alice ,
2818 bytesGraças a @MartinEnder por jogar 10 bytes
Experimente online!
Este envio usa um método diferente da resposta do @ MartinEnder.
Essa submissão gera
0x00
falsas e verdadeiras0x01
.Então, aqui está uma versão que emite
0
ou1
não: Experimente!Explicação
A explicação abaixo é para a versão "visível". Ambos são muito parecidos, exceto no primeiro programa, o último
o
não converte a0
ou1
em uma string (porque estamos no modo cardinal), mas pega o número e gera o caractere nesse ponto de código.Depois disso, o IP envolve a borda esquerda no
=
. Se o valor superior da pilha for0
, o IP continuará com seu caminho, aumentando a soma total de todos os caracteres, assim que for feito com a entrada (a parte superior da pilha será1
), e o IP girará para a direita (90 graus no sentido horário).Uma coisa é importante notar, o loop na primeira linha irá repetir uma vez após o término da entrada. Isso subtrairá
97
(96
da'`
e-1
da falta de entrada) do total.fonte
Táxi , 1259 bytes
Com quebras de linha, fica assim:
Ele aceita maiúsculas ou minúsculas porque
Auctioneer School
converte tudo em maiúsculas.Chop Suey
divide em caracteres individuais.Charboil Grill
converte caracteres em seu código ASCII.Pegamos um caractere por vez, convertemos para ASCII, subtraímos 65 e o adicionamos ao total em execução.
Quando não houver mais caracteres, compare o total com 100.
Retorna
TRUE
para palavras em dólar eFALSE
para todo o resto.fonte
Código de máquina IA-32, 21 bytes
Hexdump:
Código de montagem:
Conta de 100 a 0. Se chegou a 0, retorna verdadeiro (0xff); caso contrário, false (0x00).
fonte
Dyalog APL,
1715 bytesUsa o conjunto de caracteres Dyalog Classic.
fonte
Python , 38 bytes
Experimente online!
O mesmo comprimento da solução ovs . Em vez de subtrair 96 de cada
ord
valor, isso verifica se oord
total é igual100+96*len(s)
. Isso é expresso em um byte menor que4-96*~len(s)
, igual a4-96*(-len(s)-1)
.fonte
lambda s:sum(s.encode(),96*~len(s))==4
também funcionaria.Ruby ,
3530 bytesExperimente online!
fonte
Retina ,
4723 bytesExperimente online! Nota: O cabeçalho minúscula entrada e divide em palavras; os resultados aparecem em linhas separadas. Editar: salvou muitos bytes graças a @MartinEnder.
fonte
Oitava, 18 bytes
Subtrai
96
da string de entradax
(minúscula), para obter os valores numéricos das letras. Pegasum
e compara100
. Retorna uma lógica1
para casos reais e uma lógica0
para casos falsos.Eu poderia economizar um byte se não fosse correto fornecer falso para "palavras em dólar" e verdadeiro para "palavras que não sejam em dólar".
fonte
Japonês ,
13 1210 bytesExplicação:
Teste online!
12 bytes:
Experimente online!
Outra solução de 12 bytes usando uma técnica diferente
Experimente online!
fonte
m%H
em vez dem-96
(ele vai trabalhar em ambos os casos agora, bônus!), E um no segundo comL¥U¬x@;CaX Ä
m%H
foi um bom achado.x@
foi uma ótima idéia também!Ruby (2.4+), 38 bytes
Recebe entrada em minúsculas. Requer Ruby 2.4's
Array#sum
para que não funcione no TIO.fonte
String#bytes
vez deString#chars
para não precisar ligarc.ord
.sum
na matriz em vez demap
/// ,
564210189185 bytesExperimente online!
Imprime um 1 se for uma "palavra do dólar", caso contrário, imprime um "0"
A entrada é a seguinte: (Role todo o caminho para a direita)
Funciona substituindo cada letra pelo seu valor em unário e, em seguida, substituindo um 100 unário por um 0. Ele substitui o valor da palavra por 1. Se o valor da palavra for 0, será impresso 1 porque no final de o código está substituindo um 0. Se o valor da palavra for qualquer outra coisa, ele imprimirá apenas 0.
O golfe funciona usando ocorrências comuns no código como substitutos.
fonte
Utilitários Bash + GNU, 47
Experimente online .
fonte