var QUESTION_ID=65106,OVERRIDE_USER=16196;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/65106/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}#answer-list{padding-right: 100px}
<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>
Respuestas:
CJam,
3935 bytesPruébalo en línea
La última versión incluye mejoras sugeridas por @ MartinBüttner, particularmente usando el operador de vector de elementos en lugar de transponer las dos listas.
Explicación:
fuente
ri60md]r"utehour"+6/W%.{1$1>'s*+}S*
(Parece que esto te da una ventaja bastante sólida en este desafío :))r"utehour"+6/W%
es en realidad la misma longitud que"hour minute"S/
, por lo que esa parte termina no ayudando. Creo que lo había visto.
antes con un bloque, pero había olvidado nuevamente que era compatible.Python 3,
506711911611211110494 bytesNo me gusta volver al%
formato de cadena de estilo, pero ahorra 6 bytes.format
.Editar: Olvidé analizar la entrada.
Editar: Olvidé manejar plurales.
Editar: Yay lambdas!Editar: Se agregó ungolfing
Editar: Maldita sea. Lambdas no ayudó.
Editar: como los minutos tienen un máximo de tres dígitos y
int()
no le importan los espacios en la cadena, puedo guardar algunos bytes al usarlosinput()[:3]
.Sin golf:
fuente
JavaScript, 78 bytes
Para el conjunto de pruebas, ingrese la entrada como
"61 min"
en el cuadro de entrada.Explicación
fuente
parseInt(n)
a+n
.150 min
.2 hours 30 minutes
. ¿Puedo preguntar cómo lo probó?"61 min"
o'61 min'
Pyth,
3938 bytesfuente
Vitsy ,
575452 bytesOh, wow, ni siquiera tengo enteros en mi idioma. oo
Pruébalo en línea!
fuente
K5,
5551 bytesEsto es más general de lo estrictamente necesario; todavía podría jugar más golf.
En acción:
Editar:
Este programa pasó por varias iteraciones muy diferentes en el curso del desarrollo, y pensé que podría ser más esclarecedor mostrar algunos de los pasos intermedios.
Aquí fue mi primera puñalada al problema, antes de que se introdujera el requisito de pluralización. Aquí hay una clara repetición:
Me di cuenta de que la forma general de manejar la expulsión de lugares era la forma de "decodificación" de K5. Para colocar los valores en su lugar en la cadena, utilicé la primitiva "aplicar punto", que aplica una lista de argumentos a una función y desempaqueta la lista en parámetros individuales:
No queda mucha redundancia aquí. Cuando se agregó la pluralización, descompuse esa función principal anónima en una transformación que podría aplicar a cada número, así:
Unir
x
,y
y cualquieras
o nada, dependiendo de six
es igual a "1". Finalmente funcionó mejor para revertir el orden de los argumentos de esta función.Edición 2:
Varias pequeñas mejoras aquí. Una mejor manera de seleccionar una "s" o una cadena vacía, una constante más corta para "decodificar" que refleja el rango limitado de entrada y una forma más simple de descartar "min".
fuente
Pyth, 46 bytes
Toma entradas como
x min
y salidasx hours y minutes
Pruébalo aquí
Explicación:
fuente
Perl 6 ,
8073 bytes80 byte original
Uso:
Debido a un cambio en la pregunta que puedo eliminar
x?$m
del final de la función, lo que me permite reducirlo en 3 bytes más.fuente
JavaScript (ES6),
100948981 bytesDemo sin golf (convertida a ES5, ya que no todos los navegadores admiten ES6 todavía)
fuente
t=parseInt(t)
y el paréntesis, y luego poner donde quiera que se utiliza en primer lugart
por lo que:(h=0|(t=parseInt(t))/60)
. De esta manera, puede eliminar el retorno y el{}
C #, 127 bytes
Esto se puede poner en un archivo y ejecutar a través del shell interactivo C # que viene con Mono, usando la configuración predeterminada.
[Este es mi primer intento de golf de código. Espero que mi contribución no viole ninguna regla.]
fuente
C, 89 bytes
fuente
Ruby, 75 bytes
fuente
''
→p
.MATLAB,
111108106bytesEsto también funciona con Octave , y puede probarse aquí . El enlace es a un espacio de trabajo que ya contiene el código en un archivo llamado
runningLength.m
. Entonces, para probarlo, simplemente ingreserunningLength
en el indicador, luego ingrese la cadena de entrada, por ejemplo,'123 mins'
y mostrará la salida.Toma la entrada como una cadena, por ejemplo
'123 mins'
, la convierte en un número (que ignora implícitamente elmins
bit).Se calculan minutos y horas.
Luego muestra la cadena de salida
El bit 's' de la salida se calcula y maneja correctamente: se agrega una 's' cuando el número no es 1.
fuente
Python 2, 96 bytes
fuente
Haskell,
117109bytesVersión menos golfizada:
f
es una función que toma los primeros 3 caracteres de su entrada y los convierte en un entero.p#q
es una función que pluralizaq
sip
no es igual a 1. Para devolver el resultado sin las comillas, solíaputStr
imprimir el resultado en STDOUT.Gracias a nimi por la ayuda!
fuente
Python 2,
7977 bytesLos primeros 3 caracteres de la entrada simplemente se analizan como un entero. Esto solo funciona porque el tercer carácter en una entrada de 2 dígitos es un espacio, que
int
se ignorará durante la conversión.fuente
"hour"+m/120*"s"
mismo y por minutos.m=240
desgracia.LabVIEW, 50 Bytes
Esto se cuenta según mi sugerencia sobre Meta .
¡El código es bastante sencillo, tome el número de la entrada Módulo por 60 y agregue una s por minutos! = 1. El otro lado de la caja simplemente pasa la cadena.
fuente
Scala, 135 bytes
Uso:
fuente
Haskell
107101 bytesSin golf:
s!n
anteponen
as
, la adición de una's'
al final sin /= 1
.f x
realiza el formateo después de usardivMod
.Como podemos suponer una entrada máxima de
240
,take 3
es suficiente para tomar solo el número.(Tuve que esforzarme mucho para superar la puntuación de @Craig Roy ...)
fuente
R, 112 bytes
Editar : se corrigió un error de alcance y luego se solucionó el problema de salida de la cita.
Casos de prueba
Traté de ahorrar espacio tratando de encontrar una manera de sumar o restar "s" según fuera necesario, pero tuve que meterme con el
sep =
argumento en lapaste()
función y realmente no parecía que me iba a ahorrar mucho espacio. ¿Alguna sugerencia?Sin golf
Redondeando con input / 60 o input %% 60 (mod) da las horas y minutos respectivamente. Encadénelos con una
ifelse()
declaración que especifique si las unidades son o no hora (s) o minuto (s).fuente
cat()
función.s
y cambiando sus condiciones.Ruby,
971009988 bytesEditar: Fijación de salida.
Editar: Eliminar llaves de
divmod
.Editar: Yay cadena de interpolación! Gracias a Vasu Adari . Además, mejor no golfista.
Sin golf:
fuente
divmod
método. Además, al usar la interpolación de cadenas puede ahorrar algunos bytes.Ir, 177 bytes
(Incluye solo la función y las declaraciones de importación)
Bonita solución
Probándolo
fuente
Mathematica, 61 bytes
fuente
AutoHotkey ,
174170160 bytesNotas:
fuente
PHP,
7776 byteshorrible, horrible, horrible!
PHP solo emite un par de
Notice
s para"s"[$h<2]
Para ejecutar:
php -r 'CODE' '150 minutes'
y, por supuesto, apague / aleje el informe de errores de stdout.
Editar: -1byte asignar en asignar (crédito: insertusernamehere)
Es tan feo que debo dar un asistente de ejecución para usuarios de Linux:
fuente
$m=($i=$argv[1])%60;echo$h=$i/60|0," hour","s"[$h<2]," $m minute","s"[$m<2];
.$m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];
.Arcyóu (no competitivo), 93 bytes
Este envío utiliza una versión del idioma que se creó después de este desafío.
Yeesh! Este lenguaje necesita una mejor manipulación de cadenas.
Explicación:
fuente
Ruby,
747371 bytes73 bytes
74 bytes:
Uso:
fuente
Kotlin, 132 bytes
Versión sin golf:
Pruébalo con:
Salidas de ejemplo:
fuente
En serio , 77 bytes
En serio es serio no es bueno en la manipulación de cadenas. Pruébelo en línea con una explicación completa (deberá ingresar manualmente la entrada como
"210 mins"
porque los enlaces permanentes no les gustan las comillas).Explicación rápida y sucia:
fuente
Java 8, 148 bytes
Elegí publicar una alternativa a @TheAustralianBirdEatingLouse ya que esto no solo es más corto por un buen precio (~ 10%) sino que también es más correcto en la impresión de hora (s) y minutos (s) en lugar de horas y minutos abreviados. Las implementaciones de métodos en Interfaces son nuevas en Java 8, por lo que esto sería necesario para compilar / ejecutar
fuente