Advertisement
Tooster

Untitled

Jul 2nd, 2020
1,588
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.42 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import kotlin.Metadata;
  6. import kotlin._Assertions;
  7. import kotlin.collections.ArraysKt;
  8. import kotlin.collections.CollectionsKt;
  9. import kotlin.collections.IntIterator;
  10. import kotlin.jvm.internal.Intrinsics;
  11. import kotlin.math.MathKt;
  12. import kotlin.ranges.IntProgression;
  13. import kotlin.ranges.RangesKt;
  14. import org.jetbrains.annotations.NotNull;
  15. import utils.BitReversalPermutationKt;
  16. import utils.kotlinmath.BasicFunctionsKt;
  17. import utils.kotlinmath.Complex;
  18. import utils.kotlinmath.ComplexKt;
  19.  
  20. @Metadata(
  21.    mv = {1, 1, 16},
  22.    bv = {1, 0, 3},
  23.    k = 2,
  24.    d1 = {"\u0000,\n\u0000\n\u0002\u0010 \n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0000\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0002\b\u0002\n\u0002\u0010\u0015\n\u0002\b\u0002\u001a$\u0010\u0000\u001a\b\u0012\u0004\u0012\u00020\u00020\u00012\f\u0010\u0003\u001a\b\u0012\u0004\u0012\u00020\u00020\u00012\b\b\u0002\u0010\u0004\u001a\u00020\u0005\u001a\u000e\u0010\u0006\u001a\u00020\u00072\u0006\u0010\b\u001a\u00020\u0007\u001a\u0006\u0010\t\u001a\u00020\n\u001a\u001c\u0010\u000b\u001a\b\u0012\u0004\u0012\u00020\u00020\u00012\u0006\u0010\f\u001a\u00020\r2\u0006\u0010\u000e\u001a\u00020\r¨\u0006\u000f"},
  25.    d2 = {"fft", "", "Lutils/kotlinmath/Complex;", "input", "inverse", "", "logcap", "", "n", "main", "", "polynomialMultiplication", "a", "", "b", "kotlin"}
  26. )
  27. public final class FFTKt {
  28.    public static final int logcap(int n) {
  29.       return Integer.highestOneBit(n + Integer.highestOneBit(n) - 1);
  30.    }
  31.  
  32.    @NotNull
  33.    public static final List fft(@NotNull List input, boolean inverse) {
  34.       Intrinsics.checkParameterIsNotNull(input, "input");
  35.       boolean var2 = Integer.bitCount(input.size()) == 1;
  36.       boolean var3 = false;
  37.       boolean var4 = false;
  38.       boolean var5;
  39.       if (_Assertions.ENABLED && !var2) {
  40.          var5 = false;
  41.          String var27 = "Assertion failed";
  42.          throw (Throwable)(new AssertionError(var27));
  43.       } else {
  44.          int[] permutation = BitReversalPermutationKt.bitReversalPermutation(Integer.numberOfTrailingZeros(input.size()));
  45.          int n = permutation.length;
  46.          var5 = false;
  47.          ArrayList var6 = new ArrayList(n);
  48.          boolean $i$f$map = false;
  49.          boolean var8 = false;
  50.          int var31 = 0;
  51.  
  52.          int var9;
  53.          boolean $i$f$forEach;
  54.          for(var9 = n; var31 < var9; ++var31) {
  55.             boolean var11 = false;
  56.             $i$f$forEach = false;
  57.             Complex var22 = (Complex)input.get(permutation[var31]);
  58.             var6.add(var22);
  59.          }
  60.  
  61.          List var21 = (List)var6;
  62.          Object output = var21;
  63.  
  64.          for(int len = 2; len <= output.size(); len *= 2) {
  65.             int stride = len / 2;
  66.             IntProgression var10000 = RangesKt.step((IntProgression)CollectionsKt.getIndices((Collection)output), len);
  67.             int block = var10000.getFirst();
  68.             var31 = var10000.getLast();
  69.             var9 = var10000.getStep();
  70.             if (var9 >= 0) {
  71.                if (block > var31) {
  72.                   continue;
  73.                }
  74.             } else if (block < var31) {
  75.                continue;
  76.             }
  77.  
  78.             while(true) {
  79.                Complex w = (Complex)BasicFunctionsKt.getExp().invoke(ComplexKt.getI((Number)2).times(3.141592653589793D).div((Number)len).times((Number)inverse ? -1 : 1));
  80.                Object wn = ComplexKt.getR((Number)1);
  81.                Iterable $this$forEach$iv = (Iterable)RangesKt.until(block, block + stride);
  82.                $i$f$forEach = false;
  83.                Iterator var14 = $this$forEach$iv.iterator();
  84.  
  85.                while(var14.hasNext()) {
  86.                   int element$iv = ((IntIterator)var14).nextInt();
  87.                   int var17 = false;
  88.                   Complex a = (Complex)output.get(element$iv);
  89.                   Complex b = ((Complex)output.get(element$iv + stride)).times(wn);
  90.                   wn = wn.times(w);
  91.                   output.set(element$iv, a.plus(b));
  92.                   output.set(element$iv + stride, a.minus(b));
  93.                }
  94.  
  95.                if (block == var31) {
  96.                   break;
  97.                }
  98.  
  99.                block += var9;
  100.             }
  101.          }
  102.  
  103.          List var39;
  104.          if (inverse) {
  105.             Iterable $this$map$iv = (Iterable)output;
  106.             $i$f$map = false;
  107.             Collection destination$iv$iv = (Collection)(new ArrayList(CollectionsKt.collectionSizeOrDefault($this$map$iv, 10)));
  108.             int $i$f$mapTo = false;
  109.             Iterator var35 = $this$map$iv.iterator();
  110.  
  111.             while(var35.hasNext()) {
  112.                Object item$iv$iv = var35.next();
  113.                Complex it = (Complex)item$iv$iv;
  114.                int var38 = false;
  115.                Complex var40 = it.div((Number)n);
  116.                destination$iv$iv.add(var40);
  117.             }
  118.  
  119.             var39 = (List)destination$iv$iv;
  120.          } else {
  121.             var39 = output;
  122.          }
  123.  
  124.          return var39;
  125.       }
  126.    }
  127.  
  128.    // $FF: synthetic method
  129.    public static List fft$default(List var0, boolean var1, int var2, Object var3) {
  130.       if ((var2 & 2) != 0) {
  131.          var1 = false;
  132.       }
  133.  
  134.       return fft(var0, var1);
  135.    }
  136.  
  137.    @NotNull
  138.    public static final List polynomialMultiplication(@NotNull int[] a, @NotNull int[] b) {
  139.       Intrinsics.checkParameterIsNotNull(a, "a");
  140.       Intrinsics.checkParameterIsNotNull(b, "b");
  141.       int size = logcap(a.length + b.length);
  142.       int[] $this$map$iv = ArraysKt.plus(a, new int[size - a.length]);
  143.       int $i$f$map = false;
  144.       Collection destination$iv$iv = (Collection)(new ArrayList($this$map$iv.length));
  145.       int $i$f$mapTo = false;
  146.       int[] var9 = $this$map$iv;
  147.       int var10 = $this$map$iv.length;
  148.  
  149.       int var11;
  150.       int item$iv$iv;
  151.       Complex var20;
  152.       for(var11 = 0; var11 < var10; ++var11) {
  153.          item$iv$iv = var9[var11];
  154.          int var14 = false;
  155.          var20 = ComplexKt.getR((Number)item$iv$iv);
  156.          destination$iv$iv.add(var20);
  157.       }
  158.  
  159.       List afft = fft$default((List)destination$iv$iv, false, 2, (Object)null);
  160.       int[] $this$map$iv = ArraysKt.plus(b, new int[size - b.length]);
  161.       int $i$f$map = false;
  162.       Collection destination$iv$iv = (Collection)(new ArrayList($this$map$iv.length));
  163.       int $i$f$mapTo = false;
  164.       int[] var30 = $this$map$iv;
  165.       var11 = $this$map$iv.length;
  166.  
  167.       int item$iv$iv;
  168.       for(item$iv$iv = 0; item$iv$iv < var11; ++item$iv$iv) {
  169.          item$iv$iv = var30[item$iv$iv];
  170.          int var15 = false;
  171.          var20 = ComplexKt.getR((Number)item$iv$iv);
  172.          destination$iv$iv.add(var20);
  173.       }
  174.  
  175.       List bfft = fft$default((List)destination$iv$iv, false, 2, (Object)null);
  176.       Iterable $this$zip$iv = (Iterable)afft;
  177.       int $i$f$zip = false;
  178.       Iterator first$iv = $this$zip$iv.iterator();
  179.       Iterator second$iv = ((Iterable)bfft).iterator();
  180.       var10 = CollectionsKt.collectionSizeOrDefault($this$zip$iv, 10);
  181.       var11 = CollectionsKt.collectionSizeOrDefault((Iterable)bfft, 10);
  182.       boolean var31 = false;
  183.       item$iv$iv = Math.min(var10, var11);
  184.       ArrayList list$iv = new ArrayList(item$iv$iv);
  185.  
  186.       while(first$iv.hasNext() && second$iv.hasNext()) {
  187.          Object var10001 = first$iv.next();
  188.          Complex bi = (Complex)second$iv.next();
  189.          Complex ai = (Complex)var10001;
  190.          int var18 = false;
  191.          var20 = ai.times(bi);
  192.          list$iv.add(var20);
  193.       }
  194.  
  195.       List cfft = (List)list$iv;
  196.       return fft(cfft, true);
  197.    }
  198.  
  199.    public static final void main() {
  200.       Iterable $this$map$iv = (Iterable)polynomialMultiplication(new int[]{3, 1, 5}, new int[]{2, 1, 9});
  201.       int $i$f$map = false;
  202.       Collection destination$iv$iv = (Collection)(new ArrayList(CollectionsKt.collectionSizeOrDefault($this$map$iv, 10)));
  203.       int $i$f$mapTo = false;
  204.       Iterator var5 = $this$map$iv.iterator();
  205.  
  206.       while(var5.hasNext()) {
  207.          Object item$iv$iv = var5.next();
  208.          Complex it = (Complex)item$iv$iv;
  209.          int var8 = false;
  210.          Integer var10 = MathKt.roundToInt(it.getRe());
  211.          destination$iv$iv.add(var10);
  212.       }
  213.  
  214.       List var11 = (List)destination$iv$iv;
  215.       $i$f$map = false;
  216.       System.out.println(var11);
  217.    }
  218.  
  219.    // $FF: synthetic method
  220.    public static void main(String[] var0) {
  221.       main();
  222.    }
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement