Un número recién descubierto: ¡bleen!

44

"¡El Premio Nobel de Matemáticas fue otorgado a un profesor de California que descubrió un nuevo número! El número está desvanecido, que según él pertenece entre 6 y 7". --George Carlin

En este desafío, imprimirá todos los números enteros, inclusive, dentro del rango de entrada dado. Imprima números ascendentes o descendentes según su orden de entrada. Es decir, para entrada [n1, n2], imprima ascendente si n1 < n2, descendente si n1 > n2.

Como bleenahora es un número entero, puede usarse como entrada. También debe incluirse en la salida, entre 6y 7donde corresponda. También tenga en cuenta que -bleenexiste entre -7 y -6.

Entrada

Dos enteros [n1, n2]en el rango [-10, 10], inclusive, a través de la entrada de su lenguaje de programación de elección.

(¡La entrada también puede contener bleeny -bleen!)

Salida

Imprima todos los números enteros que comienzan n1y terminan en n2, incluido el recién descubierto bleenentre 6 y 7. La salida puede ser un rango de números separados por caracteres en alguna forma que su idioma admite, es decir, separados por comas o espacios. Un espacio final de salida está bien.

Ejemplos

Input:  1 10
Output: 1 2 3 4 5 6 bleen 7 8 9 10 

Input:  -9 -4
Output: -9 -8 -7 -bleen -6 -5 -4

Input:  -8 bleen
Output: -8 -7 -bleen -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 bleen

Input:  9 1
Output: 9 8 7 bleen 6 5 4 3 2 1

Input:  2 -bleen
Output: 2 1 0 -1 -2 -3 -4 -5 -6 -bleen

Input:  -bleen 0
Output: -bleen -6 -5 -4 -3 -2 -1 0

Input:  bleen bleen
Output: bleen

Input:  2 2
Output: 2

Notas adicionales

Puede escribir un programa o función y utilizar cualquier método estándar para recibir entradas y proporcionar salidas.

Puede usar cualquier lenguaje de programación , pero las lagunas estándar no están permitidas.

Este es el , por lo que gana la respuesta válida más corta, medida en bytes .

CzarMatt
fuente
16
¿Es bleenteen entre 16 y 17 también? (y es bleenty-bleen entre bleenty-six y bleenty-seven?)
Joffan
55
@Joffan ... y Bleenty entre 60 y 70?
Adám
55
@Joffan ¿Cuánto es (bleen + 7) / 2?
Adám
10
En matemáticas solo hay la medalla Field, no hay premios Nobel allí ...
Graipher
8
@Graipher Es por eso que no debes confiar en que el comediante de un comediante sea una noticia dura;)
Geobits

Respuestas:

12

Python 3, 132 130 bytes

r=round
bleen=6.1
m=1.08
a,b=eval(input())
d=1-2*(a>b)
print(*[[r(i/m),"-bleen"[i>0:]][i*i==49]for i in range(r(m*a),d+r(m*b),d)])

Toma entrada en el siguiente formato de ejemplo:

-8, bleen
orlp
fuente
¿Esto funciona fuera de [-10,10]?
mbomb007
@ mbomb007 No.
orlp
Solución muy ingeniosa con bleen y eval allí, buena. Otra sugerencia: usar bleen=7/mpara aclarar sin penalización de personaje
WorldSEnder
@orlp ¿hay alguna razón por la que nombró la variable bleen y no solo un carácter de un solo dígito?
Azul
@muddyfish Sí, es necesario evalque se traduzca bleenal valor correcto.
orlp
9

Rubí, 114 100 98 bytes

La entrada es una matriz con [n1, n2]. (Si deben ser dos argumentos separados, +1 byte para cambiar la función arg de ga *g. Bleen debe ser una cadena,. "bleen"Emite una matriz del rango. Sugerido por @Jordan con su (?) Versión inicial que otorga -7 bytes, pero también jugué 7 más después de eso.

Pruébalo en línea.

->g{a=*-10..-7,?-+b='bleen',*-6..6,b,*7..10;x,y=g.map{|v|a.index v}
y<x ?a[y..x].reverse: a[x..y]}

Versión original del programa completo que lee la entrada de ARGV:

b='bleen'
a=[*-10..-7,?-+b,*-6..6,b,*7..10].map &:to_s
x,y=$*.map{|v|a.index v}
puts y<x ?a[y..x].reverse: a[x..y]
Tinta de valor
fuente
Si convierte esto en un lambda, puede deshacerse de .map &:to_s6 bytes y guardarlos, y puede guardar uno más cambiando la inicialización de aa a=*-10..10;a[4,0]=?-+b;a[18,0]=b.
Jordania
Es decir->*g{b='bleen';a=*-10..10;a[4,0]=?-+b;a[18,0]=b;x,y=g.map{|v|a.index v};puts y<x ?a[y..x].reverse: a[x..y]}
Jordania
@ Jordan gracias. Sin embargo, no necesité usar el truco de corte para insertar el sangrado; mi composición de matriz es aún más corta en aproximadamente 1 byte.
Value Ink el
Ah, estaba contando los corchetes; Olvidé que podías omitirlos.
Jordania
¿Debo votar o dejarte exactamente a 4k?
NoOneIsHere
8

Pyth , 35 bytes

K++L\-P_J++`M7"bleen"`M}7TJ@LK}FxLK

Banco de pruebas.

La primera parte, es decir K++L\-P_J++`M7"bleen"`M}7TJ, genera esta matriz:

['-10', '-9', '-8', '-7', '-bleen', '-6', '-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5', '6', 'bleen', '7', '8', '9', '10']

y luego lo almacena en K.

La segunda parte, es decir @LK}FxLK, encuentra la sublista indicada por la entrada.

Monja permeable
fuente
1
Pensé en ese enfoque también. Es interesante si tuviéramos que tomar cualquier rango int ...
Adám
... y especialmente si tuviéramos que incluir bleenteen, y bleenty, etc.
Adám
8

Python 3, 157 145 123 108 115 139 161 158 153 bytes

Guardado 22 gracias a Lynn. 17 salvados gracias a shooqie. 3 guardados gracias a ljeabmreosn. 5 guardados gracias a Geoff Reedy.

a,b=eval(input())
s='-'
c='bleen'
d=a<b
l=list(map(str,range(-10,11)))[::[-1,1][d]]
x=l.insert
y=l.index
x(4,d*s+c)
x(18,(1^d)*s+c)
print(l[y(a):y(b)+1])

Entrada como '-10', '8'. Las propinas son bienvenidas para un principiante.

Se agregó 7 a la cuenta -bleen. Se agregaron 15 para tener en cuenta la entrada inversa como '8','-10'. Se ha añadido una gran 21 para dar cuenta de las señales de entrada invertida para la bleenfrente -bleen.

Justin
fuente
2
l.index('-6')y l.index('7')deberían ser constantes, ¿no?
Lynn
2
l=[str(i)for i in range(-10,11)]->l=list(map(str,range(-10,11)))
shooqie
2
Aunque no estoy seguro de por qué necesitas cuerdas en primer lugar. l=list(range(-10,11))funciona bien
shooqie
2
Las líneas 2, 4, 5 se pueden reemplazar con for i in(4,18):l.insert(i,'bleen').
shooqie
1
@shooqie Al bucle for le falta el signo negativo en el índice 4. por ejemplo, la lista contiene dos elementos en 'bleen'lugar de un'-bleen','bleen'
Justin
3

Rubí, 141 bytes

->*a{
l="bleen"
s=13
a,b=a.map{|n|2*n rescue s*(n<=>?b)}
b,a,r=a,b,1if b<a
o=(a..b).map{|n|n==s ?l:n==-s ??-+l:n/2}.uniq
puts r ?o.reverse: o}

Sin golf

lambda do |*args|
  bleen = "bleen"
  subst = 13 # This will stand in for "bleen"

  a, b = args.map {|arg|
    begin
      # Double the number
      2 * arg
    rescue
      # It wasn't a number, so it's "bleen" or "-bleen"; replace it with 13 or -13
      subst * (arg <=> "b")
    end
  }

  if b < a
    # If the range isn't ascending, reverse it and remember that we did
    b, a, reverse = a, b, 1
  end

  # Step through the range, replacing 13 and -13 with "bleen" and "-bleen" and
  # halving everything else
  result = (a..b).map {|n|
    if n == subst
      bleen
    elsif n == -subst
      "-" + bleen
    else
      n / 2
    end
  }.uniq # Drop duplicates

  # Reverse the result if the range was descending
  puts reverse ? result.reverse : result
end
Jordán
fuente
3

Lote, 239186 bytes

@set/ableen=1431655772,a=%1*3,b=%2*3,c=b-a^>^>31^|1
@for /l %%i in (%a%,%c%,%b%)do @((if %%i==20 echo bleen)&(if %%i==-20 echo -bleen)&set/aj=%%i%%3,k=%%i/3&cmd/cif %%j%%==0 echo %%k%%)

Obras de bucle a partir 3*%1de 3*%3y luego dividiendo por tres y la impresión de los números sin residuo, sin embargo el establecimiento bleende ese número mágico causa de desbordamiento de entero y el valor 20se utiliza en su lugar. Esto se imprime en el punto apropiado del bucle.

Neil
fuente
@ edc65 Cuándo fue la última vez que leí una pregunta correctamente la primera vez ...
Neil
@ edc65 oh, y también lo olvidé -bleen. Bah.
Neil
Intenté pero no hay salida. Ejemplo de uso?
edc65
@ edc65 bleen.bat bleen -bleental vez?
Neil
No hay salida, como dije. ¿Es lenguaje dos / windows bat? Yo uso Windows 10
edc65
3

JavaScript (ES6), 158

Buen desafío, difícil de golf. Probablemente, los métodos de rango utilizados en las respuestas de Python y Ruby podrían obtener mejores resultados incluso en JS.

(a,b)=>(c=x=>x<-6?x-1:x>6?x+1:1/x?x:x<'b'?-7:7,a=c(a),b=c(b),d=b>a?1:-1,a-=d,e=x=>x-7?x-(x>7):'bleen',[...Array(d*(b-a))].map((x=a+=d)=>x<0?'-'+e(-x):e(x)))  

Menos golf

(a,b)=>(
  c=x=>x<-6?x-1:x>6?x+1:1/x?x:x<'b'?-7:7,
  a=c(a),b=c(b),
  d=b>a?1:-1,
  a-=d,
  e=x=>x-7?x-(x>7):'bleen',
  [...Array(d*(b-a))].map((x=a+=d)=>x<0?'-'+e(-x):e(x))
)  

Prueba

f=(a,b)=>(c=x=>x<-6?x-1:x>6?x+1:1/x?x:x<'b'?-7:7,a=c(a),b=c(b),d=b>a?1:-1,a-=d,e=x=>x-7?x-(x>7):'bleen',[...Array(d*(b-a))].map((x=a+=d)=>x<0?'-'+e(-x):e(x)))  

function go(){
  var a=A.value,b=B.value
  // make them numeric if possible
  a=isNaN(a)?a:+a
  b=isNaN(b)?b:+b
  
  O.textContent=f(a,b)
}  
go()
A <select id=A onchange='go()'>
<option>-10<option>-9<option>-8<option>-7<option>-bleen<option>-6<option>-5<option>-4<option>-3<option>-2<option>-1<option>0
<option>1<option>2<option>3<option>4<option>5<option>6<option>bleen<option>7<option>8<option>9<option>10
</select>
B <select id=B onchange='go()'>
<option>-10<option>-9<option>-8<option>-7<option>-bleen<option>-6<option>-5<option>-4<option>-3<option>-2<option>-1<option>0
<option>1<option>2<option>3<option>4<option>5<option>6<option>bleen<option>7<option>8<option>9<option selected>10
</select>
<pre id=O></pre>

edc65
fuente
Creo que te perdiste -6.
betseg
3

Swift 2.2, 342 bytes

func a(x:String,y:String){var k="bleen",a=Int(x) ?? (x==k ?(x==y ? -9:6):-6),b=Int(y) ?? (y==k ?6:-6),t=0,s=[Any](),f=Int(x)==nil ?x:"";if a>b{t=a;a=b;b=t};for i in a...b{if i==7 && a != 7{s.append(k)};s.append(i);if -i==7 && b != -7{s.append("-"+k)}};for v in t==0 ?s:s.reverse(){f+=" \(v)"};if Int(y)==nil&&b>0{f+=" \(y)"};print(x==y ?x:f)}

Pruebe esto utilizando Swift Sandbox de IBM

Sin golf

func bleen(x: String, y: String){
    var k = "bleen",
        a = Int(x) ?? (x == k ? (x == y ? -9 : 6) : -6),
        b = Int(y) ?? (y == k ? 6: -6),
        t = 0,
        s = [Any](),
        f = Int(x) == nil ? x : ""

    if a > b{
        t = a
        a = b
        b = t
    }

    for i in a...b{
        if i == 7 && a != 7{s.append(k)}
        s.append(i)
        if -i == 7 && b != -7{s.append("-" + k)}
    }

    if Int(y) == nil && b > 0{s.append(y)}

    for v in t == 0 ? s : s.reverse(){
        f+="\(v) "
    }

    print(x == y ? x : f)
}
Jojodmo
fuente
2

Java, 271 bytes

int p(String w){if(w.contains("b"))return w.length()<6?7:-7;int i=Integer.decode(w);return i<-6?i-1:i>6?i+1:i;}void b(String s,String f){Integer l=p(s),r=p(f);for(r+=l<r?1:-1;l!=r;l-=l.compareTo(r))System.out.print(l==-7?"-bleen ":l==7?"bleen ":l+(l<-7?1:l<7?0:-1)+" ");}

Sin golfos con casos de prueba:

class Bleen {
     static int p(String w) {
         if(w.contains("b"))
             return w.length() < 6 ? 7 : -7;
         int i = Integer.decode(w);
         return i < -6 ? i-1 : i>6 ? i+1 : i;
     }

     static void b(String s, String f) {
         Integer l = p(s), r = p(f);
         for(r += l<r ? 1 : -1; l != r; l -= l.compareTo(r))
             System.out.print(l == -7 ? "-bleen " : l == 7 ? "bleen ": l+(l < -7 ? 1 : l<7 ? 0 : -1)+" ");
     }

     public static void main(String[] args) {
         b("1","10"); System.out.println();
         b("-9","-4"); System.out.println();
         b("-8", "bleen"); System.out.println();
         b("9", "1"); System.out.println();
         b("2", "-bleen"); System.out.println();
         b("-bleen", "0"); System.out.println();
         b("bleen", "bleen"); System.out.println();
         b("2", "2"); System.out.println();
     }
}

Llamada b (inicio, fin). Debido a que los parámetros son cadenas, se necesita mucho espacio para convertirlos en int. Esencialmente, el programa trata 7 y -7 como bleen y -bleen.


fuente
1
Buena respuesta, +1. Respondiste bastante difícil de encontrar algo para jugar al golf, pero lo hice. ;) Su método pse puede cambiar a la siguiente para ahorrar 6 bytes: int p(String w){int x=w.length(),i;if(x>3)return x<6?7:-7;i=Integer.decode(w);return i<-6?i-1:i>6?i+1:i;}. Además, es posible que desee indicar que esto es Java 7 y tal vez agregar una ideona .
Kevin Cruijssen
Además, he podido hacer una variante más corta en Java 7 basada en el enfoque de @LeakyNun de crear primero la lista completa.
Kevin Cruijssen
2

Java 7, 251 bytes

import java.util.*;String b(Object...a){String q="bleen",r="";List l=new ArrayList();int j=-10,i,z,y,t;while(j<11)l.add(j++);l.add(4,"-"+q);l.add(18,q);z=l.indexOf(a[0]);y=l.indexOf(b[1]);if(y<z){t=z;z=y;y=t;}for(i=z;i<=y;)r+=l.get(i++)+" ";return r;}

Enfoque diferente que es más corto que la respuesta Java 7 ya existente .
Además, es lamentable que los parámetros potencialmente no estén en orden, lo que agrega algunos bytes para intercambiarlos.

Sin golf y casos de prueba:

Pruébalo aquí

import java.util.*;
class Main{
  static String b(Object... a){
    String q = "bleen",
           r = "";
    List l = new ArrayList();
    int j = -10, i, z, y, t;
    while(j < 11){
      l.add(j++);
    }
    l.add(4, "-"+q);
    l.add(18, q);
    z = l.indexOf(a[0]);
    y = l.indexOf(a[1]);
    if(y < z){
      t = z;
      z = y;
      y = t;
    }
    for(i = z; i <= y; ){
      r += l.get(i++) + " ";
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(b(1, 10));
    System.out.println(b(-9, -4));
    System.out.println(b(-8, "bleen"));
    System.out.println(b(9, 1));
    System.out.println(b(2, "-bleen"));
    System.out.println(b("-bleen", 0));
    System.out.println(b("bleen", "bleen"));
    System.out.println(b(2, 2));
  }
}

Salida:

1 2 3 4 5 6 bleen 7 8 9 10 
-9 -8 -7 -bleen -6 -5 -4 
-8 -7 -bleen -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 bleen 
1 2 3 4 5 6 bleen 7 8 9 
-bleen -6 -5 -4 -3 -2 -1 0 1 2 
-bleen -6 -5 -4 -3 -2 -1 0 
bleen 
2 
Kevin Cruijssen
fuente
2

Scala, 223 bytes

object B extends App{val b="bleen"
val L=((-10 to -7)++List(s"-$b")++(-6 to 6)++List(b)++(6 to 10)).map(""+_)
val Array(s,e)=args.map(L.indexOf(_))
println((if(s<=e)L.slice(s,e+1)else L.slice(e,s+1).reverse).mkString(" "))}
Tim Robbins
fuente
2

JavaScript (ES6), 178 bytes

 (s,e)=>{q='bleen';t=[];for(i=-10;i<11;i++)t.push(i);t.splice(4,0,'-'+q);t.splice(18,0,q);s=t.indexOf(s);e=t.indexOf(e);s>e&&t.reverse()&&(e=22-e)&&(s=22-s);return t.slice(s,e+1)}

Intentalo

EDITAR: Solución para el orden inverso. Gracias Patrick, se perdió esta condición

FZysset
fuente
2

Python 3, 126 bytes

La entrada está en la forma -5, 'bleen'

l=list(range(-10,11))
c='bleen'
s=l.insert
t=l.index
s(4,'-'+c)
s(18,c)
i,j=map(t,eval(input()))
d=1-2*(i<j)
print(l[i:j+d:d])
WorldSEnder
fuente
2

R , 110 107 bytes

Gracias a Cyoce por jugar al golf 3 bytes.

a=function(x,y){e=c(-10:-7,"-bleen",-6:6,"bleen",6:10)
b=function(d)which(e==as.character(d))
e[b(x):b(y)]}

Construye toda la lista en orden, selecciona las relevantes. La función en el medio llamada "b" parecía la forma más fácil de lograrlo. Aplicar, etc.

usuario5957401
fuente
¿Se requiere todo ese espacio en blanco?
Cyoce
No, y por lo general no lo hubiera tenido. ¡Gracias! Editar: Ni siquiera conté mucho de eso. Debe haber estado medio dormido.
user5957401
1

Javascript (usando una biblioteca externa) (343 bytes)

(a,b)=>{r="bleen";s="-"+r;c=d=>d==r?7:(d==s?-7:d);i=c(a);j=c(b);m=Math.min(i,j);n=Math.max(i,j);w=i<=j?_.RangeTo(i,j):_.RangeDown(i,Math.abs(j-i)+1);g=i<j?6:7;if(n>-7&&m<-6){w=w.InsertWhere("-bleen",x=>x==-7)}if(m<8&&n>6){w=w.InsertWhere("bleen",x=>x==g)}if(a==r||b==r){w=w.Where(x=>x!=7)}if(a==s||b==s){w=w.Where(x=>x!=-7)}return w.ToArray()}

Enlace a lib: https://github.com/mvegh1/Enumerable

Captura de pantalla:

ingrese la descripción de la imagen aquí

applejacks01
fuente
-1

Python 2, 100 bytes

Las primeras cuatro líneas generan la lista [-10, -9, -8, -7, 'bleen', -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 'bleen', 7, 8, 9, 10]. La siguiente línea obtiene entrada y la almacena en sy e. Las dos últimas líneas usan una .index()notación de corte de lista para obtener el rango correcto.

a=range(-10,11)
b="bleen"
c=a.insert
c(17,b)
c(4,b)
s,e=eval(input())
d=a.index
print a[d(s):d(e)+1]

Funciona de la misma manera que la respuesta de Leaky Nun pero se desarrolló de forma independiente. Robó un método de entrada de orlp.

Sin golf:

array = range(-10, 11)
array.insert(17, "bleen")
array.insert(4, "bleen")
start, end = eval(input())
print array[array.index(start):array.index(end) + 1]
noɥʇʎԀʎzɐɹƆ
fuente
Esto es incorrecto - el número entre -7y -6es -bleen, no bleen. Aunque hemos encontrado un nuevo número, las reglas básicas del álgebra deben permanecer constantes: 0es el único número que es su propio inverso aditivo, en virtud de ser el elemento de identidad aditivo. Además, eval(input())solo está input()en Python 2.
Mego
@Mego oh, vaya ...
noɥʇʎԀʎzɐɹƆ