Dada una lista de (key, value)
pares, determine si representa una función, lo que significa que cada tecla se asigna a un valor consistente. En otras palabras, siempre que dos entradas tengan claves iguales, también deben tener valores iguales. Las entradas repetidas están bien.
Por ejemplo:
# Not a function: 3 maps to both 1 and 6
[(3,1), (2,5), (3,6)]
# Function: It's OK that (3,5) is listed twice, and that both 6 and 4 both map to 4
[(3,5), (3,5), (6,4), (4,4)]
Entrada: una secuencia ordenada de (key, value)
pares usando los dígitos del 1 al 9. Es posible que no requiera un pedido particular. Alternativamente, puede tomar la lista de claves y la lista de valores como entradas separadas.
Salida: un valor coherente para funciones y un valor coherente diferente para no funciones.
Casos de prueba: las primeras 5 entradas son funciones, las últimas 5 no lo son.
[(3, 5), (3, 5), (6, 4), (4, 4)]
[(9, 4), (1, 4), (2, 4)]
[]
[(1, 1)]
[(1, 2), (2, 1)]
[(3, 1), (2, 5), (3, 6)]
[(1, 2), (2, 1), (5, 2), (1, 2), (2, 5)]
[(8, 8), (8, 8), (8, 9), (8, 9)]
[(1, 2), (1, 3), (1, 4)]
[(1, 2), (1, 3), (2, 3), (2, 4)]
Aquí están como dos listas de entradas:
[[(3, 5), (3, 5), (6, 4), (4, 4)], [(9, 4), (1, 4), (2, 4)], [], [(1, 1)], [(1, 2), (2, 1)]]
[[(3, 1), (2, 5), (3, 6)], [(1, 2), (2, 1), (5, 2), (1, 2), (2, 5)], [(8, 8), (8, 8), (8, 9), (8, 9)], [(1, 2), (1, 3), (1, 4)], [(1, 2), (1, 3), (2, 3), (2, 4)]]
Tabla de clasificación:
var QUESTION_ID=118960,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/118960/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
(key,value)
pares se inviertan, como en(value,key)
? Puedo eliminar algunos bytes de mi respuesta si es así.Respuestas:
Python 2 , 34 bytes
Pruébalo en línea!
Crea un Diccionario y un Conjunto a partir de la entrada y compara sus longitudes.
Los diccionarios no pueden tener claves duplicadas, por lo que se eliminan todos los valores ilegales (y repetidos).
fuente
lambda x:not dict(x).items()^x
Haskell, 36 bytes
Pruébalo en línea!
El bucle externo (->
(k,v)
) y el interno (->(m,n)
) sobre los pares y siempre que seak==m
, recojan el valor de verdad dev==n
. Comprueba si todo es verdad.fuente
Brachylog ,
54 bytesPruébalo en línea!
Programa completo Por lo que puedo decir, la razón por la que esto está superando a la mayoría de los otros idiomas de golf es que
≠
está incluido en Brachylog, mientras que la mayoría de los otros idiomas de golf necesitan sintetizarlo.Explicación
Como programa completo, obtenemos
true
si la afirmación tiene éxito ofalse
si falla.fuente
Pyth , 5 bytes
Estoy bastante feliz con este.
Pruébalo en línea!
fuente
Retina , 25 bytes
Pruébalo en línea!
El formato de entrada es
{k,v},{k,v},...
. Imprime0
para funciones y1
para no funciones. Podría guardar dos bytes usando saltos de línea en lugar de las comas en el formato de entrada, pero eso está mal.fuente
Brachylog , 13 bytes
Pruébalo en línea!
Explicación
fuente
Ċhᵐ=
yĊtᵐ≠
trabajar?Ċ
es una variable especial llamada Pareja que siempre está precontratada para ser una lista de dos elementos.ᵐ
es un metapredicado que aplica el predicado inmediatamente anterior (h - head
ot - tail
aquí) a cada elemento de la entrada (aquí,Ċ
).=
y≠
simplifique que su entrada contenga todos los elementos iguales / diferentes.MATL , 8 bytes
Las entradas son: una matriz con la
value
s, seguida de una matriz con lakey
s.La salida es
1
para la función, de lo0
contrario.Pruébalo en línea! . O verificar todos los casos de prueba .
Explicación
1Z?
Construye una matriz dispersa. Inicialmente todas las entradas contienen
0
; y1
se agrega a cada entrada(i, j)
dondej
yi
son la entradakey
,value
pares.g
La matriz se convierte en lógica; es decir, las entradas superior
1
(correspondiente a duplicarkey
,value
pares) se establecen a1
.s
Se calcula la suma de cada columna. Este es el número de diferentes
value
s para cada unokey
.2<A
Una función tendrá todas esas sumas menos que
2
.fuente
R, 33 bytes
Esta es mi versión para R. Esto aprovecha la
ave
función. He permitido la entrada vacía al establecer valores predeterminados en los parámetros clave y de valor.ave
está produciendo una media de los valores para cada una de las claves. Afortunadamente, esto devuelve las medias en el mismo orden que los valores de entrada, por lo que una comparación con la entrada indicará si hay valores diferentes. DevuelveTRUE
si es una función.Pruébalo en línea!
fuente
05AB1E ,
1197 bytesGuardado 2 bytes gracias a kalsowerus .
Pruébalo en línea!
Explicación
fuente
`\)^
con head (¬
): TIO[]
:(,
al final. Agregue eso y luego de alguna manera funciona[]
.JavaScript (ES6),
4538 bytesGuardado 6 bytes gracias a @Neil
Devuelve
false
otrue
para funciones y no funciones, respectivamente.Esto funciona restando constantemente el valor anterior de cada función (
m[k]
) y la nueva (m[k]=v
que también almacena el nuevo valor). Cada vez, hay tres casos:m[k]
devuelveundefined
. Restando cualquier cosa de losundefined
resultadosNaN
, lo cual es falso.m[k]-v
da como resultado0
, lo cual es falso.m[k]-v
da como resultado un número entero distinto de cero, lo cual es verdadero.Por lo tanto, solo tenemos que asegurarnos de que
m[k]-(m[k]=v)
nunca sea verdad.fuente
a=>!a.some(([x,y])=>m[x]-(m[x]=y),m=[])
.m[k]
ser indefinido ... ¡Gracias!Mathematica, 24 bytes
Explicación:
Union
elimina pares duplicados, luego#&@@@
obtiene el primer elemento de cada par (comoFirst/@
pero con menos bytes). Si hay alguna repetición en estos primeros elementos, los pares no hacen una función, con lo que verificamosUnsameQ
.(Esto podría tener la mayor densidad de
@
caracteres en cualquier programa que haya escrito ...)fuente
@
densidad = 1/4R,
3633 bytesPruébalo en línea!
función anónima; devuelve
FALSE
para funciones yTRUE
para no.¡Esto
está siendo superado porfinalmente está vinculado con la respuesta de MickyT! !fuente
Bash + coreutils, 17
La entrada se proporciona a través de STDIN.
key
yvalue
están Tabseparados y cada par está delimitado por nueva línea.sort
elimina los pares duplicados de clave-valor.uniq -d
solo genera duplicados y, por lo tanto, genera la cadena vacía en el caso de una función y, de lo contrario, una cadena no vacía, cuando hay claves duplicadas que se asignan a valores diferentes.Pruébalo en línea .
fuente
05AB1E , 9 bytes
Código:
Explicación:
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
ʒ
inmediato ya veo :)}}
lugar de hacerlo}
.Jalea , 6 bytes
Pruébalo en línea!
Explicación
Aquí hay un método alternativo, también de 6 bytes:
Pruébalo en línea!
En lugar de probar con la eliminación de claves duplicadas, esto ordena (
Ṣ
) y comprueba si la diferencia entre los términos (I
) es verdadera (Ạ
)fuente
R ,
9566 bytesGuardado 29 bytes gracias a Jarko Dubbeldam.
Función anónima. Salidas
FALSE
si una función yTRUE
si no (lo siento). Toma como argumentos una lista de claves y una lista de valores, así.Recorre todas las claves y toma la longitud del conjunto de valores únicos para esa clave. Si
any
de ellos son> 1, regreseTRUE
.Esto está siendo superado por la respuesta de MickyT , y también por la de Giuseppe . Vota uno de esos.
fuente
function(k=0,v=0)any(sapply(k,function(x){length(unique(v[k==x]))-1}))
Debería lograr lo mismo.J-uby ,
48332521 bytes-3 bytes gracias a Jordan!
Explicación
Primer enfoque, 33 bytes
Esta es más larga que la solución Ruby equivalente, pero fue divertido de hacer.
Intento de explicación transformando a Ruby:
Podría ahorrar 2 bytes con una versión más nueva reemplazando
:uniq
por~:|
fuente
V , 30 bytes
Pruébalo en línea!
Salidas
1
para funciones y nada para no funciones.fuente
Mathematica, 35 bytes
Función pura que toma una lista de pares ordenados como entrada y retorno
True
oFalse
. Explota el hecho de queUnion@#
elimina pares ordenados repetidos, pero<|Rule@@@#|>
(una asociación) elimina todos los pares ordenados menos uno con un primer elemento en particular. Por lo tanto, solo podemos comparar losLength
s de las dos salidas para verificar si la lista de entradas es una función.fuente
Jalea , 6 bytes
Pruébalo en línea!
Cómo funciona
fuente
CJam ,
1917 bytesGuardado 2 bytes gracias a Martin Ender
Salidas
0
para funciones y1
para no funciones.Pruébalo en línea!
Explicación
fuente
APL (Dyalog) ,
1612119 bytesPruébalo en línea!
Explicación
Imprime
0
para falso y1
para verdaderofuente
En realidad , 4 bytes
Pruébalo en línea!
Explicación:
fuente
brainfuck , 71 bytes
Pruébalo en línea!
La entrada se toma como una cadena plana: por ejemplo, el primer caso de prueba sería
35356444
. Para obtener la representación que se muestra en la pregunta original, simplemente agregue un total de seis comas al programa en los puntos correctos.La salida es
U
para funciones yV
para no funciones.Explicación
Para cualquier punto de código ASCII n, f (n) se almacena en la celda 2n + 1. Las celdas 2n y 2n + 2 son espacio de trabajo, y 0, 2, 4, 6, ... 2n-2 son un rastro de migas de pan para conducir de regreso a la celda 0. Cuando se demuestra que la entrada no es una función, f ( 0) se establece en 1 (entre varios efectos secundarios).
fuente
Perl 6 , 38 bytes
Intentalo
fuente
Pyth -
98 bytesIntentalo
Funciona eliminando los pares repetidos primero ({Q); luego compara la longitud de la lista con la longitud de un diccionario creado a partir de la lista (si el mismo valor x aparece más de una vez, el constructor del diccionario usa solo el último, lo que hace que el diccionario sea más corto que la lista)
fuente
MATL , 12 bytes
La entrada es matriz de 2 columnas, donde la primera columna es clave y la segunda es valor.
Pruébalo en línea!
Explicación
fuente
PHP, 49 bytes
No imprime nada para funciones y
n
para no funciones.fuente
CJam ,
14119 bytesPruébalo en línea!
Toma la entrada como una matriz de pares clave / valor en la pila, devuelve
1
si la entrada es una función y0
si no lo es.Esta solución se basa en el fragmento
_&
, que elimina la duplicación de una matriz al tomar la intersección establecida con ella misma. Hago esto dos veces, primero en la entrada completa (para deshacerme de cualquier par clave / valor exactamente duplicado) y luego solo en las teclas (para ver si aún quedan claves duplicadas después de la primera desduplicación).Aquí está el código completo con comentarios:
fuente
e#
es la sintaxis de comentarios de línea dedicada en CJam.Rubí,
393029 bytes¡Gracias a @ValueInk por guardar 9 bytes!
Puerto de la respuesta de @ Rod's Python 2 .
fuente
Hash[x]
funciona igual de bien tbh