Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

143
Views
Encuentre el primero que tenga el dígito más distinto por expresión lambda

Actualmente, estoy aprendiendo la función de distinto() usando la misma expresión lambda: el primero se usa para encontrar el dígito distinto de un número entero

 Integer intVar = 12341234; long c1 = intVar.toString().chars().distinct().count(); // (1,2,3,4) System.out.println(c1);//result = 4

Entonces quiero intentar encontrar lo mismo dentro de un rango. Mi pensamiento es:

 1.loop from 1 to 1_000_000 2.filter isSquareNumber && <= 9_999_999 && 1_000_000 3.convert to char 4.distinct 5.store as list(key,value) 6.findfirst key with value=7

Porque el código original funciona pero se ve horrible

 int inte = IntStream.iterate(1, i-> i + 1) .filter(i->isSquareNumber(i) && i<= 9999999 && i>=1000000) .filter(i-> i%10!=i/10%10 && i%10!=i/100%10 && i%10!=i/1000%10 && i%10!=i/10000%10 && i%10!=i/100000%10 && i%10!=i/1000000%10) .filter(i-> i/10%10!=i/100%10 && i/10%10!=i/1000%10 && i/10%10!=i/10000%10 && i/10%10!=i/100000%10 && i/10%10!=i/1000000%10) .filter(i-> i/100%10!=i/1000%10 && i/100%10!=i/10000%10 && i/100%10!=i/100000%10 && i/100%10!=i/1000000%10) .filter(i-> i/1000%10!=i/10000%10 && i/1000%10!=i/100000%10 && i/1000%10!=i/1000000%10) .filter(i-> i/10000%10!=i/10%10 && i/10000%10!=i/100000%10) .filter(i-> i/100000%10!=i/1000000%10) .findFirst() .getAsInt(); System.out.println(inte);//result = 1034289

Versión asistida de WJS

 IntStream .iterate(1, i-> i + 1) .filter(i->isSquareNumber(i) && i<= 9999999 && i>=1000000) .mapToObj(i->new String[] {Integer.toString(i), Arrays .stream(Integer.toString(i).split("")) .filter(a -> a[1].length() >= 7) .findFirst() .ifPresent(a -> System.out .println(a[1] + " --> " + a[1].length()));

Funciona maravillosamente. Y ahora estoy tratando de dar un paso más que crea un método en el que el tipo de devolución es un número entero y devuelve el número entero de dígitos más distinto, pero no un valor booleano.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Prueba esto. Lo limité a los primeros 10 valores.

  • mapToObj crea una matriz de cadenas.
  • el primer elemento es el valor original.
  • el siguiente divide la cadena, elimina los duplicados y vuelve a unirse a una nueva cadena
 IntStream.range(100000, 1000000).limit(10) .mapToObj(i->new String[] {Integer.toString(i), Arrays .stream(Integer.toString(i).split("")) .distinct().collect(Collectors.joining(""))}) .forEach(a->System.out.println(a[0] + " --> " + a[1]));

huellas dactilares

 100000 --> 10 100001 --> 10 100002 --> 102 100003 --> 103 100004 --> 104 100005 --> 105 100006 --> 106 100007 --> 107 100008 --> 108 100009 --> 109

Encuentra el primer número que tiene 7 dígitos distintos.

Después de crear las matrices en el ejemplo anterior, reemplace forEach con un filtro, seguido de findFirst y luego imprima el valor si está presente.

 IntStream.range(1000000, 10000000) .mapToObj(i -> new String[] { Integer.toString(i), Arrays.stream(Integer.toString(i).split("")) .distinct() .collect(Collectors.joining("")) }) .filter(a -> a[1].length() >= 7).findFirst() .ifPresent(a -> System.out .println(a[1] + " --> " + a[1].length()));

Huellas dactilares

 1023456 --> 7
over 4 years ago · Santiago Trujillo Report

0

Para encontrar todos los números que son cuadrados que tienen al menos 7 dígitos distintos:

 int[] all = IntStream.range(1000, (int) Math.sqrt(10_000_000)) .map(i -> i * i) .filter(i -> Integer.toString(i).chars().distinct().count() > 6) .toArray();

Para encontrar solo el primero (o explotar intentando, pero hay 123):

 int first = IntStream.range(1000, (int) Math.sqrt(10_000_000)) .map(i -> i * i) .filter(i -> Integer.toString(i).chars().distinct().count() > 6) .findFirst() .orElseThrow(RuntimeException::new);

En lugar de iterar sobre cada número, estoy iterando sobre la raíz cuadrada y luego elevándola al cuadrado, por lo que es mucho más eficiente.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!