Mehrstufige Auswahl (C # / Python) (alt)

Mehrstufige Auswahl Antwortdatum Serie:Ertragspraxis/Verschachtelter Generator/Implementierung einer ganzzahligen Quadratwurzel / Kubikwurzel
Problem http://nabetani.sakura.ne.jp/hena/ord24eliseq/
https://qiita.com/Nabetani/items/1c83005a854d2c6cbb69
Ruby 2014/8/2(An dem Tag) https://qiita.com/cielavenir/items/9f15e29b73ecf98968a5
C#/Python 2014/8/4 https://qiita.com/cielavenir/items/a1156e6a4f71ddbe5dcb
Lass uns von hier fallen_prev_square/drop_prev_Antworten Sie, bevor Sie kubisch zusammenstellen
Go/C#/Ruby/Python 2014/8/5 https://qiita.com/cielavenir/items/2a685d3080862f2c2c47
PHP/JavaScript 2014/9/9 https://qiita.com/cielavenir/items/28d613ac3823afbf8407
VB 2014/9/10 https://qiita.com/cielavenir/items/cb7266abd30eadd71c04
D 2015/12/21 https://qiita.com/cielavenir/items/47c9e50ee60bef2847ec
Perl 2017/3/10 https://qiita.com/cielavenir/items/6dfbff749d833c0fd423
Lua 2017/3/13 https://qiita.com/cielavenir/items/c60fe7e8da73487ba062
C++20(TS) 2017/3/15 https://qiita.com/cielavenir/items/e1129ca185008f49cbab (MSVC)
https://qiita.com/cielavenir/items/1cfa90d73d11bb7dc3d4 (clang)
F# 2017/3/17 https://qiita.com/cielavenir/items/a698d6a26824ff53de81
Boo/Nemerle 2017/5/13 https://qiita.com/cielavenir/items/e2a783f0fe4b0fe0ed48
Perl6 2017/5/15 https://qiita.com/cielavenir/items/656ea17fa96c865c4498
Kotlin 2017/5/25 https://qiita.com/cielavenir/items/9c46ce8d9d12e51de285
Crystal 2018/5/8 https://qiita.com/cielavenir/items/1815bfa6a860fd1f90db
MoonScript 2018/6/16 https://qiita.com/cielavenir/items/8b03cce0386f4537b5ad
Julia/Rust 2018/12/20 https://qiita.com/cielavenir/items/3ddf72b06d625da0c4a5
Nim 2018/12/26 https://qiita.com/cielavenir/items/5728944867e609fd52a7
Tcl 2018/12/31 https://qiita.com/cielavenir/items/76cbd9c2022b48c9a2c9
Pascal/Cobra 2019/1/16 https://qiita.com/cielavenir/items/81b81baf8dfc1f877903
Icon 2019/1/17 https://qiita.com/cielavenir/items/889622dcc721f5a4da24
Swift 2020/5/31 https://qiita.com/cielavenir/items/3b0b84a218e35d538f7f
Java/Groovy/Scala 2020/5/31 https://qiita.com/cielavenir/items/7f058203a8fd03b65870
(In Bezug auf die Implementierung von icbrt)Ergänzender Titel 2017/5/11 N auch wenn es sich um eine ganzzahlige Division handelt/(x*y)Ist n/x/Gleich y(Beweis dafür)
https://qiita.com/cielavenir/items/21a6711afd6be8c18c55

Beide C # / Python unterstützen unendliche Listen.

C# ##

Während des Erwägungsgrundes sagte ich: "Ich könnte IEnumerable verwenden können", also ist es das Gesetz des Sprichworts.

Da cbrt DllImport ist, hängt es von der Umgebung ab. Wie man einen Iterator erstellt, wurde von Herrn Masui anhand der kürzesten Route berechnet (http://qiita.com/cielavenir/items/ac96da5e3040c2edb78c), ist aber immer noch problematisch.

Übrigens, was Sie mit C # machen können, ist auch nach VB2012 möglich, aber ich habe aufgehört, weil es nicht viel Aufwand gibt. Es kann möglich sein, es unter Verwendung der Quelle der Berechnung der kürzesten oben erwähnten Route zu machen. Und nur.

Der Rest ist Java. Aber ich kenne Stream nicht. </ del> Stream.generate ist kein Collout, daher scheint es nutzlos zu sein. Ich glaube nicht, dass es irgendetwas gibt, das Teka Enumerator entspricht.

hena24.cs


using System;
using System.Linq;
using System.Collections.Generic;
using System.Runtime.InteropServices;

class Hena24{
	[DllImport("c")]
	private extern static double cbrt(double d);

	static private IEnumerable<int> generate(){
		int i=1;
		for(;;){
			yield return i;
			i+=1;
		}
	}
	static private IEnumerable<int> drop_prev_square(IEnumerable<int> _prev){
		IEnumerator<int> prev=_prev.GetEnumerator();
		prev.MoveNext();
		int a=prev.Current;
		prev.MoveNext();
		int b=prev.Current;
		for(;;){
			int x=(int)Math.Sqrt(b);
			if(x*x!=b)yield return a;
			a=b;
			prev.MoveNext();
			b=prev.Current;
		}
	}
	static private IEnumerable<int> drop_next_square(IEnumerable<int> _prev){
		IEnumerator<int> prev=_prev.GetEnumerator();
		prev.MoveNext();
		int a=prev.Current;
		prev.MoveNext();
		int b=prev.Current;
		yield return a;
		for(;;){
			int x=(int)Math.Sqrt(a);
			if(x*x!=a)yield return b;
			a=b;
			prev.MoveNext();
			b=prev.Current;
		}
	}
	static private IEnumerable<int> drop_prev_cubic(IEnumerable<int> _prev){
		IEnumerator<int> prev=_prev.GetEnumerator();
		prev.MoveNext();
		int a=prev.Current;
		prev.MoveNext();
		int b=prev.Current;
		for(;;){
			int x=(int)cbrt(b);
			if(x*x*x!=b)yield return a;
			a=b;
			prev.MoveNext();
			b=prev.Current;
		}
	}
	static private IEnumerable<int> drop_next_cubic(IEnumerable<int> _prev){
		IEnumerator<int> prev=_prev.GetEnumerator();
		prev.MoveNext();
		int a=prev.Current;
		prev.MoveNext();
		int b=prev.Current;
		yield return a;
		for(;;){
			int x=(int)cbrt(a);
			if(x*x*x!=a)yield return b;
			a=b;
			prev.MoveNext();
			b=prev.Current;
		}
	}
	static private IEnumerable<int> drop_num(int n,IEnumerable<int> _prev){
		IEnumerator<int> prev=_prev.GetEnumerator();
		int i=0;
		for(;;){
			i++;
			prev.MoveNext();
			int a=prev.Current;
			if(i%n!=0)yield return a;
		}
	}
	static private IEnumerable<int> drop_cnt(int n,IEnumerable<int> _prev){
		IEnumerator<int> prev=_prev.GetEnumerator();
		int i=0;
		for(;;){
			i++;
			prev.MoveNext();
			int a=prev.Current;
			if(i>n)yield return a;
		}
	}
	static void Main(){
		var f=new Dictionary<char,Func<IEnumerable<int>,IEnumerable<int>>>(){
			{'S',drop_next_square},
			{'s',drop_prev_square},
			{'C',drop_next_cubic},
			{'c',drop_prev_cubic},
			{'h',e => drop_cnt(100,e)},
		};
		for(int i=2;i<10;i++){
			int j=i; //Erstellen Sie einen kurzlebigen Bereich, um Fehler in Lambda-Erfassungen zu vermeiden.
			f[(char)('0'+j)] = e=>drop_num(j,e);
		}
		string line;
		for(;(line=Console.ReadLine())!=null;){
			bool first=true;
			foreach(int n in line.Aggregate(generate(),(s,e)=>f[e](s)).Take(10)){
				if(!first)Console.Write(',');
				first=false;
				Console.Write(n);
			}
			Console.WriteLine();
		}
	}
}

Python

Es ist nur ein Bonus. Grundsätzlich die gleiche Logik wie bei der Ruby-Version. cbrt verwendet scipy. Ich bin froh, dass Python ein externer Iterator wird, ohne etwas zu tun.

hena24_enum.py


#!/usr/bin/env python
#http://qiita.com/Nabetani/items/1c83005a854d2c6cbb69
#http://nabetani.sakura.ne.jp/hena/ord24eliseq/
import sys
import math
import itertools
from functools import partial,reduce
from scipy.special import cbrt # thx @ryosy383

'''
def generate():
	i=1
	while True:
		yield i
		i+=1
'''

def drop_prev_square(prev):
	a=next(prev)
	b=next(prev)
	while True:
		if int(math.sqrt(float(b)))**2!=b: yield a
		a,b=b,next(prev)

def drop_next_square(prev):
	a=next(prev)
	b=next(prev)
	yield a
	while True:
		if int(math.sqrt(float(a)))**2!=a: yield b
		a,b=b,next(prev)

def drop_prev_cubic(prev):
	a=next(prev)
	b=next(prev)
	while True:
		if int(cbrt(float(b)))**3!=b: yield a
		a,b=b,next(prev)

def drop_next_cubic(prev):
	a=next(prev)
	b=next(prev)
	yield a
	while True:
		if int(cbrt(float(a)))**3!=a: yield b
		a,b=b,next(prev)

def drop_num(n,prev):
	i=0
	while True:
		i+=1
		a=next(prev)
		if i%n!=0: yield a

def drop_cnt(n,prev):
	i=0
	while True:
		i+=1
		a=next(prev)
		if i>n: yield a

f={
	'S': drop_next_square,
	's': drop_prev_square,
	'C': drop_next_cubic,
	'c': drop_prev_cubic,
	'h': partial(drop_cnt,100),
}
for e in range(2,10): f[str(e)]=partial(drop_num,e)

if __name__=='__main__':
	try:
		while True:
			print(','.join(map(str,
				list(itertools.islice(
					reduce(lambda s,e:f[e](s),raw_input().rstrip(),itertools.count(1)),
				10))
			)))
	except EOFError:
		pass

Recommended Posts

Mehrstufige Auswahl (C # / Python) (alt)
Mehrstufige Auswahl (Go / C # / Ruby / Python)
Mehrstufige Auswahl
Python C ++ Notizen
Python, openFrameworks (c ++)
C-API in Python 3
ABC147 C --HonestOrUnkind2 [Python]
Erweitern Sie Python in C ++ (Boost.NumPy)
Geschwindigkeitsvergleich von Python, Java, C ++
C / C ++ - Programmierer fordert Python heraus (Class Edition)
ABC-Memorandum [ABC163 C --managementr] (Python)
Python-Installation (Mac Edition) (alt)
Ich habe die C-Erweiterung von Python ausprobiert
Python wurde von C-Programmierern gestartet
Löse ABC163 A ~ C mit Python
Rufen Sie C von Python mit DragonFFI auf
ABC127 A, B, C Erklärung (Python)
ABC166 in Python A ~ C Problem
Rufen Sie popcount von Ruby / Python / C # auf
Einführung in Protobuf-c (C-Sprache ⇔ Python)
Löse ABC168 A ~ C mit Python
ABC-Memorandum [ABC161 C - Integer ersetzen] (Python)
Tipps zum Aufrufen von Python von C.
Führen Sie Python-Code über die C # -GUI aus
So verpacken Sie C in Python
ABC-Memorandum [ABC158 C - Steuererhöhung] (Python)
AtCoder ABC 114 C-755 mit Python3 gelöst
C / C ++ - Programmierer fordert Python heraus (erster Schritt)
Löse ABC162 A ~ C mit Python
Führen Sie Python-Skripte synchron von C # aus
Löse ABC167 A ~ C mit Python
ABC128 A, B, C Kommentar (Python)
Löse ABC158 A ~ C mit Python
ABC126 A, B, C Erklärung (Python)
Löse ABC037 A ~ C mit Python
Schreiben Sie einen C-Sprach-Unit-Test in Python
AtCoder Anfängerwettbewerb 174 C Problem (Python)
Rufen Sie C / C ++ von Python auf dem Mac auf
Rufen Sie die c-Sprache von Python aus auf (python.h)